diff options
| author | Henry <mail@henrygressmann.de> | 2026-04-04 21:08:27 +0200 |
|---|---|---|
| committer | Henry <mail@henrygressmann.de> | 2026-04-04 21:08:27 +0200 |
| commit | 1cf50a22104ed075a08781321486e1cbf19fb7c6 (patch) | |
| tree | 315a2525fa01b30ebed16f7cd6802222ef9ccdeb /crates/parser | |
| parent | e2001ebe6ce6f1c5f3843feac772adf999dae873 (diff) | |
fix: intruction enum size regression
Signed-off-by: Henry <mail@henrygressmann.de>
Diffstat (limited to 'crates/parser')
| -rw-r--r-- | crates/parser/src/lib.rs | 8 | ||||
| -rw-r--r-- | crates/parser/src/visit.rs | 9 |
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)); |
