diff --git a/Cargo.toml b/Cargo.toml index 9fea0c387d..321b81358b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,13 +13,13 @@ edition = "2018" smallvec = "0.6" dynasm = "0.3" dynasmrt = "0.3" -wasmparser = "0.29" +wasmparser = "0.32" memoffset = "0.2" itertools = "0.8" capstone = "0.5.0" failure = "0.1.3" failure_derive = "0.1.3" -cranelift-codegen = "0.30" +cranelift-codegen = "0.32" multi_mut = "0.1" either = "1.5" wabt = "0.7" diff --git a/src/microwasm.rs b/src/microwasm.rs index 7d077c8b52..676547f98d 100644 --- a/src/microwasm.rs +++ b/src/microwasm.rs @@ -290,6 +290,13 @@ impl SignlessType { } } +fn create_returns_from_wasm_type(ty: wasmparser::TypeOrFuncType) -> Vec { + match ty { + wasmparser::TypeOrFuncType::Type(ty) => Vec::from_iter(Type::from_wasm(ty)), + wasmparser::TypeOrFuncType::FuncType(_) => panic!("unsupported func type"), + } +} + #[derive(Debug, Clone)] pub struct BrTable { pub targets: Vec>, @@ -1415,9 +1422,9 @@ where self.stack.clone() } - fn block_params_with_wasm_type(&self, ty: wasmparser::Type) -> Vec { + fn block_params_with_wasm_type(&self, ty: wasmparser::TypeOrFuncType) -> Vec { let mut out = self.block_params(); - out.extend(Type::from_wasm(ty)); + out.extend(create_returns_from_wasm_type(ty)); out } } @@ -1546,7 +1553,7 @@ where self.control_frames.push(ControlFrame { id, arguments: self.stack.len() as u32, - returns: Vec::from_iter(Type::from_wasm(ty)), + returns: create_returns_from_wasm_type(ty), kind: ControlFrameKind::Block { needs_end_label: false, }, @@ -1561,7 +1568,7 @@ where self.control_frames.push(ControlFrame { id, arguments: self.stack.len() as u32, - returns: Vec::from_iter(Type::from_wasm(ty)), + returns: create_returns_from_wasm_type(ty), kind: ControlFrameKind::Loop, }); let label = (id, NameTag::Header); @@ -1579,7 +1586,7 @@ where self.control_frames.push(ControlFrame { id, arguments: self.stack.len() as u32, - returns: Vec::from_iter(Type::from_wasm(ty)), + returns: create_returns_from_wasm_type(ty), kind: ControlFrameKind::If { has_else: false }, }); let (then, else_, end) = (