Skip to content
This repository was archived by the owner on Oct 3, 2025. It is now read-only.

Commit abec4b6

Browse files
fix: fix 2.0 regressions introduced by 6443957
Signed-off-by: Henry Gressmann <mail@henrygressmann.de>
1 parent 6443957 commit abec4b6

File tree

5 files changed

+52
-58
lines changed

5 files changed

+52
-58
lines changed

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/parser/src/conversion.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ pub(crate) fn convert_reftype(reftype: &wasmparser::RefType) -> ValType {
237237
match reftype {
238238
_ if reftype.is_func_ref() => ValType::RefFunc,
239239
_ if reftype.is_extern_ref() => ValType::RefExtern,
240-
_ => unimplemented!("Unsupported reference type: {:?}", reftype),
240+
_ => unimplemented!("Unsupported reference type: {:?}, {:?}", reftype, reftype.heap_type()),
241241
}
242242
}
243243

crates/parser/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ impl Parser {
5757
reference_types: true,
5858
sign_extension: true,
5959
saturating_float_to_int: true,
60+
function_references: true,
6061

61-
function_references: false,
6262
component_model: false,
6363
component_model_nested_names: false,
6464
component_model_values: false,

crates/parser/src/visit.rs

Lines changed: 43 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{conversion::convert_blocktype, Result};
22

3-
use crate::conversion::{convert_heaptype, convert_valtype};
3+
use crate::conversion::convert_heaptype;
44
use alloc::string::ToString;
55
use alloc::{boxed::Box, vec::Vec};
66
use tinywasm_types::{Instruction, MemoryArg};
@@ -319,29 +319,27 @@ impl<'a, R: WasmModuleResources> wasmparser::VisitOperator<'a> for FunctionBuild
319319

320320
fn visit_global_set(&mut self, global_index: u32) -> Self::Output {
321321
match self.validator.get_operand_type(0) {
322-
Some(Some(t)) => self.instructions.push(match convert_valtype(&t) {
323-
tinywasm_types::ValType::I32 => Instruction::GlobalSet32(global_index),
324-
tinywasm_types::ValType::F32 => Instruction::GlobalSet32(global_index),
325-
tinywasm_types::ValType::I64 => Instruction::GlobalSet64(global_index),
326-
tinywasm_types::ValType::F64 => Instruction::GlobalSet64(global_index),
327-
tinywasm_types::ValType::V128 => Instruction::GlobalSet128(global_index),
328-
tinywasm_types::ValType::RefExtern => Instruction::GlobalSetRef(global_index),
329-
tinywasm_types::ValType::RefFunc => Instruction::GlobalSetRef(global_index),
322+
Some(Some(t)) => self.instructions.push(match t {
323+
wasmparser::ValType::I32 => Instruction::GlobalSet32(global_index),
324+
wasmparser::ValType::F32 => Instruction::GlobalSet32(global_index),
325+
wasmparser::ValType::I64 => Instruction::GlobalSet64(global_index),
326+
wasmparser::ValType::F64 => Instruction::GlobalSet64(global_index),
327+
wasmparser::ValType::V128 => Instruction::GlobalSet128(global_index),
328+
wasmparser::ValType::Ref(_) => Instruction::GlobalSetRef(global_index),
330329
}),
331330
_ => self.visit_unreachable(),
332331
}
333332
}
334333

335334
fn visit_drop(&mut self) -> Self::Output {
336335
match self.validator.get_operand_type(0) {
337-
Some(Some(t)) => self.instructions.push(match convert_valtype(&t) {
338-
tinywasm_types::ValType::I32 => Instruction::Drop32,
339-
tinywasm_types::ValType::F32 => Instruction::Drop32,
340-
tinywasm_types::ValType::I64 => Instruction::Drop64,
341-
tinywasm_types::ValType::F64 => Instruction::Drop64,
342-
tinywasm_types::ValType::V128 => Instruction::Drop128,
343-
tinywasm_types::ValType::RefExtern => Instruction::DropRef,
344-
tinywasm_types::ValType::RefFunc => Instruction::DropRef,
336+
Some(Some(t)) => self.instructions.push(match t {
337+
wasmparser::ValType::I32 => Instruction::Drop32,
338+
wasmparser::ValType::F32 => Instruction::Drop32,
339+
wasmparser::ValType::I64 => Instruction::Drop64,
340+
wasmparser::ValType::F64 => Instruction::Drop64,
341+
wasmparser::ValType::V128 => Instruction::Drop128,
342+
wasmparser::ValType::Ref(_) => Instruction::DropRef,
345343
}),
346344
_ => self.visit_unreachable(),
347345
}
@@ -361,14 +359,13 @@ impl<'a, R: WasmModuleResources> wasmparser::VisitOperator<'a> for FunctionBuild
361359
fn visit_local_get(&mut self, idx: u32) -> Self::Output {
362360
let resolved_idx = self.local_addr_map[idx as usize];
363361
match self.validator.get_local_type(idx) {
364-
Some(t) => self.instructions.push(match convert_valtype(&t) {
365-
tinywasm_types::ValType::I32 => Instruction::LocalGet32(resolved_idx),
366-
tinywasm_types::ValType::F32 => Instruction::LocalGet32(resolved_idx),
367-
tinywasm_types::ValType::I64 => Instruction::LocalGet64(resolved_idx),
368-
tinywasm_types::ValType::F64 => Instruction::LocalGet64(resolved_idx),
369-
tinywasm_types::ValType::V128 => Instruction::LocalGet128(resolved_idx),
370-
tinywasm_types::ValType::RefExtern => Instruction::LocalGetRef(resolved_idx),
371-
tinywasm_types::ValType::RefFunc => Instruction::LocalGetRef(resolved_idx),
362+
Some(t) => self.instructions.push(match t {
363+
wasmparser::ValType::I32 => Instruction::LocalGet32(resolved_idx),
364+
wasmparser::ValType::F32 => Instruction::LocalGet32(resolved_idx),
365+
wasmparser::ValType::I64 => Instruction::LocalGet64(resolved_idx),
366+
wasmparser::ValType::F64 => Instruction::LocalGet64(resolved_idx),
367+
wasmparser::ValType::V128 => Instruction::LocalGet128(resolved_idx),
368+
wasmparser::ValType::Ref(_) => Instruction::LocalGetRef(resolved_idx),
372369
}),
373370
_ => self.visit_unreachable(),
374371
}
@@ -377,14 +374,13 @@ impl<'a, R: WasmModuleResources> wasmparser::VisitOperator<'a> for FunctionBuild
377374
fn visit_local_set(&mut self, idx: u32) -> Self::Output {
378375
let resolved_idx = self.local_addr_map[idx as usize];
379376
match self.validator.get_operand_type(0) {
380-
Some(Some(t)) => self.instructions.push(match convert_valtype(&t) {
381-
tinywasm_types::ValType::I32 => Instruction::LocalSet32(resolved_idx),
382-
tinywasm_types::ValType::F32 => Instruction::LocalSet32(resolved_idx),
383-
tinywasm_types::ValType::I64 => Instruction::LocalSet64(resolved_idx),
384-
tinywasm_types::ValType::F64 => Instruction::LocalSet64(resolved_idx),
385-
tinywasm_types::ValType::V128 => Instruction::LocalSet128(resolved_idx),
386-
tinywasm_types::ValType::RefExtern => Instruction::LocalSetRef(resolved_idx),
387-
tinywasm_types::ValType::RefFunc => Instruction::LocalSetRef(resolved_idx),
377+
Some(Some(t)) => self.instructions.push(match t {
378+
wasmparser::ValType::I32 => Instruction::LocalSet32(resolved_idx),
379+
wasmparser::ValType::F32 => Instruction::LocalSet32(resolved_idx),
380+
wasmparser::ValType::I64 => Instruction::LocalSet64(resolved_idx),
381+
wasmparser::ValType::F64 => Instruction::LocalSet64(resolved_idx),
382+
wasmparser::ValType::V128 => Instruction::LocalSet128(resolved_idx),
383+
wasmparser::ValType::Ref(_) => Instruction::LocalSetRef(resolved_idx),
388384
}),
389385
_ => self.visit_unreachable(),
390386
}
@@ -393,14 +389,13 @@ impl<'a, R: WasmModuleResources> wasmparser::VisitOperator<'a> for FunctionBuild
393389
fn visit_local_tee(&mut self, idx: u32) -> Self::Output {
394390
let resolved_idx = self.local_addr_map[idx as usize];
395391
match self.validator.get_operand_type(0) {
396-
Some(Some(t)) => self.instructions.push(match convert_valtype(&t) {
397-
tinywasm_types::ValType::I32 => Instruction::LocalTee32(resolved_idx),
398-
tinywasm_types::ValType::F32 => Instruction::LocalTee32(resolved_idx),
399-
tinywasm_types::ValType::I64 => Instruction::LocalTee64(resolved_idx),
400-
tinywasm_types::ValType::F64 => Instruction::LocalTee64(resolved_idx),
401-
tinywasm_types::ValType::V128 => Instruction::LocalTee128(resolved_idx),
402-
tinywasm_types::ValType::RefExtern => Instruction::LocalTeeRef(resolved_idx),
403-
tinywasm_types::ValType::RefFunc => Instruction::LocalTeeRef(resolved_idx),
392+
Some(Some(t)) => self.instructions.push(match t {
393+
wasmparser::ValType::I32 => Instruction::LocalTee32(resolved_idx),
394+
wasmparser::ValType::F32 => Instruction::LocalTee32(resolved_idx),
395+
wasmparser::ValType::I64 => Instruction::LocalTee64(resolved_idx),
396+
wasmparser::ValType::F64 => Instruction::LocalTee64(resolved_idx),
397+
wasmparser::ValType::V128 => Instruction::LocalTee128(resolved_idx),
398+
wasmparser::ValType::Ref(_) => Instruction::LocalTeeRef(resolved_idx),
404399
}),
405400
_ => self.visit_unreachable(),
406401
}
@@ -537,14 +532,13 @@ impl<'a, R: WasmModuleResources> wasmparser::VisitOperator<'a> for FunctionBuild
537532
}
538533

539534
fn visit_typed_select(&mut self, ty: wasmparser::ValType) -> Self::Output {
540-
self.instructions.push(match convert_valtype(&ty) {
541-
tinywasm_types::ValType::I32 => Instruction::Select32,
542-
tinywasm_types::ValType::F32 => Instruction::Select32,
543-
tinywasm_types::ValType::I64 => Instruction::Select64,
544-
tinywasm_types::ValType::F64 => Instruction::Select64,
545-
tinywasm_types::ValType::V128 => Instruction::Select128,
546-
tinywasm_types::ValType::RefExtern => Instruction::SelectRef,
547-
tinywasm_types::ValType::RefFunc => Instruction::SelectRef,
535+
self.instructions.push(match ty {
536+
wasmparser::ValType::I32 => Instruction::Select32,
537+
wasmparser::ValType::F32 => Instruction::Select32,
538+
wasmparser::ValType::I64 => Instruction::Select64,
539+
wasmparser::ValType::F64 => Instruction::Select64,
540+
wasmparser::ValType::V128 => Instruction::Select128,
541+
wasmparser::ValType::Ref(_) => Instruction::SelectRef,
548542
})
549543
}
550544

0 commit comments

Comments
 (0)