summaryrefslogtreecommitdiff
path: root/crates/parser/src
diff options
context:
space:
mode:
authorHenry <mail@henrygressmann.de>2026-04-04 21:08:27 +0200
committerHenry <mail@henrygressmann.de>2026-04-04 21:08:27 +0200
commit1cf50a22104ed075a08781321486e1cbf19fb7c6 (patch)
tree315a2525fa01b30ebed16f7cd6802222ef9ccdeb /crates/parser/src
parente2001ebe6ce6f1c5f3843feac772adf999dae873 (diff)
fix: intruction enum size regression
Signed-off-by: Henry <mail@henrygressmann.de>
Diffstat (limited to 'crates/parser/src')
-rw-r--r--crates/parser/src/lib.rs8
-rw-r--r--crates/parser/src/visit.rs9
2 files changed, 10 insertions, 7 deletions
diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs
index eabeeab..364209c 100644
--- a/crates/parser/src/lib.rs
+++ b/crates/parser/src/lib.rs
@@ -41,7 +41,7 @@ pub use tinywasm_types::TinyWasmModule;
/// Parser optimization and lowering options.
#[non_exhaustive]
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, Default)]
pub struct ParserOptions {
// /// Enable control-flow graph cleanup rewrites.
// pub cfg_cleanup: bool,
@@ -51,12 +51,6 @@ pub struct ParserOptions {
// pub tailcall_rewrite: bool,
}
-impl Default for ParserOptions {
- fn default() -> Self {
- Self {}
- }
-}
-
/// A WebAssembly parser
#[derive(Debug, Default)]
pub struct Parser {
diff --git a/crates/parser/src/visit.rs b/crates/parser/src/visit.rs
index 6e87a04..7da2d99 100644
--- a/crates/parser/src/visit.rs
+++ b/crates/parser/src/visit.rs
@@ -431,6 +431,10 @@ impl<'a, R: WasmModuleResources> wasmparser::VisitOperator<'a> for FunctionBuild
let addr = self.instructions[len - 2];
let value = self.instructions[len - 1];
if let (Instruction::LocalGet32(addr_local), Instruction::LocalGet32(value_local)) = (addr, value) {
+ let (Ok(addr_local), Ok(value_local)) = (u8::try_from(addr_local), u8::try_from(value_local)) else {
+ self.instructions.push(Instruction::I32Store(memarg));
+ return;
+ };
self.instructions.pop();
self.instructions.pop();
self.instructions.push(Instruction::I32StoreLocalLocal(memarg, addr_local, value_local));
@@ -626,6 +630,11 @@ impl<'a, R: WasmModuleResources> wasmparser::VisitOperator<'a> for FunctionBuild
if let (Instruction::LocalGet32(addr_local), Instruction::I32Load(memarg)) = (addr, load) {
match self.validator.get_operand_type(0) {
Some(Some(wasmparser::ValType::I32)) | Some(Some(wasmparser::ValType::F32)) => {
+ let (Ok(addr_local), Ok(resolved_idx)) = (u8::try_from(addr_local), u8::try_from(resolved_idx))
+ else {
+ self.instructions.push(Instruction::LocalTee32(resolved_idx));
+ return;
+ };
self.instructions.pop();
self.instructions.pop();
self.instructions.push(Instruction::I32LoadLocalTee(memarg, addr_local, resolved_idx));