@@ -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 _;
4647use 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