Skip to content

Commit b6b57a6

Browse files
feat(bindgen): implement gc valtype conversion
1 parent 56b5dd1 commit b6b57a6

File tree

1 file changed

+36
-1
lines changed
  • crates/js-component-bindgen/src

1 file changed

+36
-1
lines changed

crates/js-component-bindgen/src/core.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ use wasm_encoder::{
4343
CodeSection, EntityType, ExportKind, ExportSection, Function, FunctionSection, ImportSection,
4444
Module, TypeSection,
4545
};
46+
use wasmparser::types::TypeIdentifier as _;
4647
use wasmparser::{
4748
Export, ExternalKind, FunctionBody, Import, Parser, Payload, TypeRef, Validator, VisitOperator,
4849
VisitSimdOperator, WasmFeatures,
@@ -475,7 +476,41 @@ fn valtype(ty: wasmparser::ValType) -> wasm_encoder::ValType {
475476
wasmparser::ValType::F32 => wasm_encoder::ValType::F32,
476477
wasmparser::ValType::F64 => wasm_encoder::ValType::F64,
477478
wasmparser::ValType::V128 => wasm_encoder::ValType::V128,
478-
wasmparser::ValType::Ref(_) => unimplemented!(),
479+
wasmparser::ValType::Ref(t) => wasm_encoder::ValType::Ref(wasm_encoder::RefType {
480+
nullable: t.is_nullable(),
481+
heap_type: match t.heap_type() {
482+
wasmparser::HeapType::Abstract { shared, ty } => wasm_encoder::HeapType::Abstract {
483+
shared,
484+
ty: match ty {
485+
wasmparser::AbstractHeapType::Func => wasm_encoder::AbstractHeapType::Func,
486+
wasmparser::AbstractHeapType::Extern => wasm_encoder::AbstractHeapType::Extern,
487+
wasmparser::AbstractHeapType::Any => wasm_encoder::AbstractHeapType::Any,
488+
wasmparser::AbstractHeapType::None => wasm_encoder::AbstractHeapType::None,
489+
wasmparser::AbstractHeapType::NoExtern => wasm_encoder::AbstractHeapType::NoExtern,
490+
wasmparser::AbstractHeapType::NoFunc => wasm_encoder::AbstractHeapType::NoFunc,
491+
wasmparser::AbstractHeapType::Eq => wasm_encoder::AbstractHeapType::Eq,
492+
wasmparser::AbstractHeapType::Struct => wasm_encoder::AbstractHeapType::Struct,
493+
wasmparser::AbstractHeapType::Array => wasm_encoder::AbstractHeapType::Array,
494+
wasmparser::AbstractHeapType::I31 => wasm_encoder::AbstractHeapType::I31,
495+
wasmparser::AbstractHeapType::Exn => wasm_encoder::AbstractHeapType::Exn,
496+
wasmparser::AbstractHeapType::NoExn => wasm_encoder::AbstractHeapType::NoExn,
497+
wasmparser::AbstractHeapType::Cont => wasm_encoder::AbstractHeapType::Cont,
498+
wasmparser::AbstractHeapType::NoCont => wasm_encoder::AbstractHeapType::NoCont,
499+
},
500+
},
501+
wasmparser::HeapType::Concrete(unpacked_idx) => match unpacked_idx {
502+
wasmparser::UnpackedIndex::Module(idx)
503+
| wasmparser::UnpackedIndex::RecGroup(idx) => {
504+
wasm_encoder::HeapType::Concrete(idx)
505+
}
506+
wasmparser::UnpackedIndex::Id(core_type_id) => {
507+
wasm_encoder::HeapType::Concrete(
508+
u32::try_from(core_type_id.index()).unwrap(),
509+
)
510+
}
511+
},
512+
},
513+
}),
479514
}
480515
}
481516

0 commit comments

Comments
 (0)