diff --git a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java index 706c2ef..eb9948c 100644 --- a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java @@ -467,6 +467,9 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod localsStream.writeVaruint32( locals.size() ); for( AnyType valueType : locals ) { localsStream.writeVaruint32( 1 ); // TODO optimize, write the count of same types. + if( valueType.getCode() >= 0 ) { + localsStream.writeValueType( ValueType.ref_type ); + } localsStream.writeValueType( valueType ); } WasmOutputStream functionsStream = function.functionsStream = new WasmOutputStream(); diff --git a/src/de/inetsoftware/jwebassembly/binary/StructTypeEntry.java b/src/de/inetsoftware/jwebassembly/binary/StructTypeEntry.java index a2ef514..bccbda3 100644 --- a/src/de/inetsoftware/jwebassembly/binary/StructTypeEntry.java +++ b/src/de/inetsoftware/jwebassembly/binary/StructTypeEntry.java @@ -60,7 +60,7 @@ class StructTypeEntry extends TypeEntry { for( NamedStorageType field : this.fields ) { stream.writeVarint( 1 ); // 0 - immutable; 1 - mutable if( field.type.getCode() > 0 ) { - stream.writeVaruint32( 0x6E ); + stream.writeValueType( ValueType.ref_type ); } stream.writeValueType( field.type ); } diff --git a/src/de/inetsoftware/jwebassembly/wasm/ValueType.java b/src/de/inetsoftware/jwebassembly/wasm/ValueType.java index 91b4126..4571762 100644 --- a/src/de/inetsoftware/jwebassembly/wasm/ValueType.java +++ b/src/de/inetsoftware/jwebassembly/wasm/ValueType.java @@ -27,6 +27,7 @@ public enum ValueType implements AnyType { i16(-0x06), //TODO dummy value for https://github.com/WebAssembly/gc anyfunc(-0x10), anyref(-0x11), + ref_type(-0x12 ), // 0x6E https://github.com/lars-t-hansen/moz-gc-experiments/blob/master/version2.md except_ref(-0x18), // https://github.com/WebAssembly/exception-handling/blob/master/proposals/Exceptions.md func(-0x20), struct(-0x30),