From 961eaa9ddcf26783c46839dff1fd80048ea9779f Mon Sep 17 00:00:00 2001 From: David Gregory <2992938+DavidGregory084@users.noreply.github.com> Date: Thu, 23 Mar 2023 15:37:15 +0000 Subject: [PATCH 1/2] Implementing changes to track the GC MVP document --- build.gradle.kts | 1 + .../wasm4j/encoding/binary/Opcode.java | 50 +++++++++++++- .../wasm4j/encoding/binary/TypeOpcode.java | 22 +++++-- .../binary/WasmTypeBinaryEncodingVisitor.java | 40 +++++++++++ .../wasm4j/types/AnyType.java | 10 +++ .../wasm4j/types/ArrayType.java | 10 +++ .../opencastsoftware/wasm4j/types/EqType.java | 10 +++ .../wasm4j/types/HeapType.java | 34 ++++++++++ .../wasm4j/types/I31Type.java | 10 +++ .../wasm4j/types/NoExternType.java | 10 +++ .../wasm4j/types/NoFuncType.java | 10 +++ .../wasm4j/types/NoneType.java | 10 +++ .../wasm4j/types/RefType.java | 40 +++++++++-- .../wasm4j/types/StructType.java | 10 +++ .../wasm4j/types/WasmTypeVisitor.java | 18 +++++ .../binary/WasmBinaryEncoderTest.java | 2 +- .../WasmTypeBinaryEncodingVisitorTest.java | 66 ++++++++++++++++++- 17 files changed, 342 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/EqType.java create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java create mode 100644 src/main/java/com/opencastsoftware/wasm4j/types/StructType.java diff --git a/build.gradle.kts b/build.gradle.kts index 0bcb500..7918046 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -68,6 +68,7 @@ testing { suites { val integrationTest by registering(JvmTestSuite::class) { + testType.set(TestSuiteType.INTEGRATION_TEST) dependencies { implementation(project()) implementation(libs.apacheCommonsLang) diff --git a/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/Opcode.java b/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/Opcode.java index cfc8149..430d393 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/Opcode.java +++ b/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/Opcode.java @@ -218,7 +218,7 @@ public enum Opcode { REF_FUNC((byte) 0xD2), REF_AS_NON_NULL((byte) 0xD3), BR_ON_NULL((byte) 0xD4), - // RESERVED((byte) 0xD5), + REF_EQ((byte) 0xD5), BR_ON_NON_NULL((byte) 0xD6), // RESERVED((byte) 0xD7), // RESERVED((byte) 0xD8), @@ -257,6 +257,54 @@ public enum Opcode { // RESERVED((byte) 0xF9), // RESERVED((byte) 0xFA), // RESERVED((byte) 0xFB), + // FB Extensions (GC Spec) + STRUCT_NEW_CANON(new byte[]{(byte) 0xFB, (byte) 0x01}), + STRUCT_NEW_CANON_DEFAULT(new byte[]{(byte) 0xFB, (byte) 0x02}), + STRUCT_GET(new byte[]{(byte) 0xFB, (byte) 0x03}), + STRUCT_GET_S(new byte[]{(byte) 0xFB, (byte) 0x04}), + STRUCT_GET_U(new byte[]{(byte) 0xFB, (byte) 0x05}), + STRUCT_SET(new byte[]{(byte) 0xFB, (byte) 0x06}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x07}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x08}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x09}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x0A}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x0B}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x0C}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x0D}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x0E}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x0F}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x10}), + ARRAY_NEW_CANON(new byte[]{(byte) 0xFB, (byte) 0x11}), + ARRAY_NEW_CANON_DEFAULT(new byte[]{(byte) 0xFB, (byte) 0x12}), + ARRAY_GET(new byte[]{(byte) 0xFB, (byte) 0x13}), + ARRAY_GET_S(new byte[]{(byte) 0xFB, (byte) 0x14}), + ARRAY_GET_U(new byte[]{(byte) 0xFB, (byte) 0x15}), + ARRAY_SET(new byte[]{(byte) 0xFB, (byte) 0x16}), + ARRAY_LEN(new byte[]{(byte) 0xFB, (byte) 0x17}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x18}), + ARRAY_NEW_CANON_FIXED(new byte[]{(byte) 0xFB, (byte) 0x19}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x1A}), + ARRAY_NEW_CANON_DATA(new byte[]{(byte) 0xFB, (byte) 0x1B}), + ARRAY_NEW_CANON_ELEM(new byte[]{(byte) 0xFB, (byte) 0x1C}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x1D}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x1E}), + // RESERVED(new byte[]{(byte) 0xFB, (byte) 0x1F}), + I31_NEW(new byte[]{(byte) 0xFB, (byte) 0x20}), + I31_GET_S(new byte[]{(byte) 0xFB, (byte) 0x21}), + I31_GET_U(new byte[]{(byte) 0xFB, (byte) 0x22}), + // 0xFB23 .. 0xFB3F reserved + REF_TEST(new byte[]{(byte) 0xFB, (byte) 0x40}), + REF_CAST(new byte[]{(byte) 0xFB, (byte) 0x41}), + BR_ON_CAST(new byte[]{(byte) 0xFB, (byte) 0x42}), + BR_ON_CAST_FAIL(new byte[]{(byte) 0xFB, (byte) 0x43}), + // 0xFB44 .. 0xFB47 reserved + REF_TEST_NULL(new byte[]{(byte) 0xFB, (byte) 0x48}), + REF_CAST_NULL(new byte[]{(byte) 0xFB, (byte) 0x49}), + BR_ON_CAST_NULL(new byte[]{(byte) 0xFB, (byte) 0x4A}), + BR_ON_CAST_FAIL_NULL(new byte[]{(byte) 0xFB, (byte) 0x4B}), + // 0xFB4C .. 0xFB6F reserved + EXTERN_INTERNALIZE(new byte[]{(byte) 0xFB, (byte) 0x70}), + EXTERN_EXTERNALIZE(new byte[]{(byte) 0xFB, (byte) 0x71}), // FC Extensions I32_TRUNC_SAT_F32_S(new byte[]{(byte) 0xFC, (byte) 0x00}), I32_TRUNC_SAT_F32_U(new byte[]{(byte) 0xFC, (byte) 0x01}), diff --git a/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/TypeOpcode.java b/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/TypeOpcode.java index 6fe078c..47342ee 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/TypeOpcode.java +++ b/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/TypeOpcode.java @@ -10,15 +10,29 @@ public enum TypeOpcode { F32((byte) 0x7D), F64((byte) 0x7C), V128((byte) 0x7B), - // 0x7A .. 0x71 reserved + I8((byte) 0x7A), + I16((byte) 0x79), + // 0x78 .. 0x77 reserved HEAP_FUNC((byte) 0x70), HEAP_EXTERN((byte) 0x6F), - // 0x6E .. 0x6D reserved + ANY((byte) 0x6E), + EQ((byte) 0x6D), REF_NULLABLE((byte) 0x6C), REF((byte) 0x6B), - // 0x6A .. 0x61 reserved + I31((byte) 0x6A), + NOFUNC((byte) 0x69), + NOEXTERN((byte) 0x68), + STRUCT((byte) 0x67), + ARRAY((byte) 0x66), + NONE((byte) 0x65), + // 0x64 .. 0x5F reserved FUNC((byte) 0x60), - // 0x5F .. 0x41 reserved + STRUCT_FIELDS((byte) 0x5F), + ARRAY_FIELDS((byte) 0x5E), + // 0x5D .. 0x51 reserved + SUB((byte) 0x50), + REC((byte) 0x4F), + SUB_FINAL((byte) 0x4E), // Apparently unused // RESULT((byte) 0x40) ; diff --git a/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitor.java b/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitor.java index 1a0c293..1db3b4f 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitor.java +++ b/src/main/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitor.java @@ -31,6 +31,46 @@ public void visitHeapExtern(HeapExternType heapExtern) throws IOException { output.write(TypeOpcode.HEAP_EXTERN.opcode()); } + @Override + public void visitAnyType(AnyType any) throws IOException { + output.write(TypeOpcode.ANY.opcode()); + } + + @Override + public void visitNoneType(NoneType none) throws IOException { + output.write(TypeOpcode.NONE.opcode()); + } + + @Override + public void visitNoExternType(NoExternType noExtern) throws IOException { + output.write(TypeOpcode.NOEXTERN.opcode()); + } + + @Override + public void visitNoFuncType(NoFuncType noFunc) throws IOException { + output.write(TypeOpcode.NOFUNC.opcode()); + } + + @Override + public void visitEqType(EqType eq) throws IOException { + output.write(TypeOpcode.EQ.opcode()); + } + + @Override + public void visitStructType(StructType struct) throws IOException { + output.write(TypeOpcode.STRUCT.opcode()); + } + + @Override + public void visitArrayType(ArrayType array) throws IOException { + output.write(TypeOpcode.ARRAY.opcode()); + } + + @Override + public void visitI31Type(I31Type i31) throws IOException { + output.write(TypeOpcode.I31.opcode()); + } + @Override public void visitLimits(Limits limits) throws IOException { if (limits.max() == null) { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java b/src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java new file mode 100644 index 0000000..8946106 --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum AnyType implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitAnyType(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java b/src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java new file mode 100644 index 0000000..235b5bc --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum ArrayType implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitArrayType(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/EqType.java b/src/main/java/com/opencastsoftware/wasm4j/types/EqType.java new file mode 100644 index 0000000..1632d49 --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/EqType.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum EqType implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitEqType(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java b/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java index eaa369a..190ee9a 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java @@ -4,6 +4,8 @@ */ package com.opencastsoftware.wasm4j.types; +import java.lang.reflect.Array; + public interface HeapType extends WasmType { static HeapFuncType func() { return HeapFuncType.INSTANCE; @@ -13,6 +15,38 @@ static HeapExternType extern() { return HeapExternType.INSTANCE; } + static AnyType any() { + return AnyType.INSTANCE; + } + + static NoneType none() { + return NoneType.INSTANCE; + } + + static NoExternType noExtern() { + return NoExternType.INSTANCE; + } + + static NoFuncType noFunc() { + return NoFuncType.INSTANCE; + } + + static EqType eq() { + return EqType.INSTANCE; + } + + static StructType struct() { + return StructType.INSTANCE; + } + + static ArrayType array() { + return ArrayType.INSTANCE; + } + + static I31Type i31() { + return I31Type.INSTANCE; + } + static TypeId typeId(int typeIndex) { return new TypeId(typeIndex); } diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java b/src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java new file mode 100644 index 0000000..3a01d9a --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum I31Type implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitI31Type(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java b/src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java new file mode 100644 index 0000000..50a2e47 --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum NoExternType implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitNoExternType(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java b/src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java new file mode 100644 index 0000000..f96ccf1 --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum NoFuncType implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitNoFuncType(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java b/src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java new file mode 100644 index 0000000..d1c6e89 --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum NoneType implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitNoneType(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/RefType.java b/src/main/java/com/opencastsoftware/wasm4j/types/RefType.java index 918c239..974f46f 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/RefType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/RefType.java @@ -29,12 +29,44 @@ public static RefType nonNullable(HeapType heapType) { return new RefType(false, heapType); } - public static RefType heapFunc() { - return new RefType(false, HeapType.func()); + public static RefType funcRef() { + return new RefType(true, HeapType.func()); } - public static RefType heapExtern() { - return new RefType(false, HeapType.extern()); + public static RefType externRef() { + return new RefType(true, HeapType.extern()); + } + + public static RefType anyRef() { + return new RefType(true, HeapType.any()); + } + + public static RefType nullRef() { + return new RefType(true, HeapType.none()); + } + + public static RefType nullExternRef() { + return new RefType(true, HeapType.noExtern()); + } + + public static RefType nullFuncRef() { + return new RefType(true, HeapType.noFunc()); + } + + public static RefType eqRef() { + return new RefType(true, HeapType.eq()); + } + + public static RefType structRef() { + return new RefType(true, HeapType.struct()); + } + + public static RefType arrayRef() { + return new RefType(true, HeapType.array()); + } + + public static RefType i31Ref() { + return new RefType(true, HeapType.i31()); } @Override diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/StructType.java b/src/main/java/com/opencastsoftware/wasm4j/types/StructType.java new file mode 100644 index 0000000..b248dcb --- /dev/null +++ b/src/main/java/com/opencastsoftware/wasm4j/types/StructType.java @@ -0,0 +1,10 @@ +package com.opencastsoftware.wasm4j.types; + +public enum StructType implements HeapType { + INSTANCE; + + @Override + public void accept(WasmTypeVisitor visitor) throws T { + visitor.visitStructType(this); + } +} diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java b/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java index ff8ec7a..caadd64 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java @@ -4,6 +4,8 @@ */ package com.opencastsoftware.wasm4j.types; +import java.lang.reflect.Array; + public interface WasmTypeVisitor { default void visitType(WasmType type) throws T { @@ -21,6 +23,22 @@ default void visitHeapType(HeapType heap) throws T { void visitHeapExtern(HeapExternType heapExtern) throws T; + void visitAnyType(AnyType any) throws T; + + void visitNoneType(NoneType none) throws T; + + void visitNoExternType(NoExternType noExtern) throws T; + + void visitNoFuncType(NoFuncType noFunc) throws T; + + void visitEqType(EqType eq) throws T; + + void visitStructType(StructType struct) throws T; + + void visitArrayType(ArrayType array) throws T; + + void visitI31Type(I31Type i31) throws T; + // Extern types default void visitExternType(ExternType extern) throws T { extern.accept(this); diff --git a/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmBinaryEncoderTest.java b/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmBinaryEncoderTest.java index aea0165..1587b2d 100644 --- a/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmBinaryEncoderTest.java +++ b/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmBinaryEncoderTest.java @@ -86,7 +86,7 @@ void testEncodeImports() throws IOException { encoder.encodeImports(output, List.of( new Import("A", "a", Import.Descriptor.func(16)), - new Import("B", "b", Import.Descriptor.table(ExternType.table(Limits.of(1), RefType.heapExtern()))), + new Import("B", "b", Import.Descriptor.table(ExternType.table(Limits.of(1), RefType.nonNullable(HeapType.extern())))), new Import("C", "c", Import.Descriptor.mem(ExternType.mem(Limits.of(1, 5)))), new Import("D", "d", Import.Descriptor.global(ExternType.global(false, NumType.i32()))) )); diff --git a/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitorTest.java b/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitorTest.java index 8e2c65d..aef7aad 100644 --- a/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitorTest.java +++ b/src/test/java/com/opencastsoftware/wasm4j/encoding/binary/WasmTypeBinaryEncodingVisitorTest.java @@ -38,6 +38,70 @@ void testHeapExternEncoding() throws IOException { assertArrayEquals(new byte[]{TypeOpcode.HEAP_EXTERN.opcode()}, output.toByteArray()); } + @Test + void testAnyEncoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + AnyType.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.ANY.opcode()}, output.toByteArray()); + } + + @Test + void testNoneEncoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + NoneType.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.NONE.opcode()}, output.toByteArray()); + } + + @Test + void testNoExternEncoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + NoExternType.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.NOEXTERN.opcode()}, output.toByteArray()); + } + + @Test + void testNoFuncEncoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + NoFuncType.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.NOFUNC.opcode()}, output.toByteArray()); + } + + @Test + void testEqEncoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + EqType.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.EQ.opcode()}, output.toByteArray()); + } + + @Test + void testStructEncoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + StructType.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.STRUCT.opcode()}, output.toByteArray()); + } + + @Test + void testArrayEncoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + ArrayType.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.ARRAY.opcode()}, output.toByteArray()); + } + + @Test + void testI31Encoding() throws IOException { + var output = new ByteArrayOutputStream(); + var visitor = new WasmTypeBinaryEncodingVisitor(output); + I31Type.INSTANCE.accept(visitor); + assertArrayEquals(new byte[]{TypeOpcode.I31.opcode()}, output.toByteArray()); + } + @Test void testLimitsEncoding() throws IOException { var output = new ByteArrayOutputStream(); @@ -96,7 +160,7 @@ void testTableTypeEncoding() throws IOException { var output = new ByteArrayOutputStream(); var visitor = new WasmTypeBinaryEncodingVisitor(output); - ExternType.table(Limits.of(0), RefType.heapFunc()).accept(visitor); + ExternType.table(Limits.of(0), RefType.nonNullable(HeapType.func())).accept(visitor); ExternType.table(Limits.of(0), RefType.nullable(HeapType.typeId(-1))).accept(visitor); assertArrayEquals(new byte[]{ From cd41d9137cfc2b4fee44e7c6258db26d280be9cd Mon Sep 17 00:00:00 2001 From: David Gregory <2992938+DavidGregory084@users.noreply.github.com> Date: Thu, 23 Mar 2023 15:49:17 +0000 Subject: [PATCH 2/2] Add copyright headers --- src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java | 4 ++++ .../java/com/opencastsoftware/wasm4j/types/ArrayType.java | 4 ++++ src/main/java/com/opencastsoftware/wasm4j/types/EqType.java | 4 ++++ src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java | 1 - src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java | 4 ++++ .../java/com/opencastsoftware/wasm4j/types/NoExternType.java | 4 ++++ .../java/com/opencastsoftware/wasm4j/types/NoFuncType.java | 4 ++++ src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java | 4 ++++ .../java/com/opencastsoftware/wasm4j/types/StructType.java | 4 ++++ .../com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java | 1 - 10 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java b/src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java index 8946106..75edaf7 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/AnyType.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum AnyType implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java b/src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java index 235b5bc..d6d8b67 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/ArrayType.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum ArrayType implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/EqType.java b/src/main/java/com/opencastsoftware/wasm4j/types/EqType.java index 1632d49..bf9ba37 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/EqType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/EqType.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum EqType implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java b/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java index 190ee9a..49a2d9b 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/HeapType.java @@ -4,7 +4,6 @@ */ package com.opencastsoftware.wasm4j.types; -import java.lang.reflect.Array; public interface HeapType extends WasmType { static HeapFuncType func() { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java b/src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java index 3a01d9a..0f8f792 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/I31Type.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum I31Type implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java b/src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java index 50a2e47..e93e267 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/NoExternType.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum NoExternType implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java b/src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java index f96ccf1..8762b0d 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/NoFuncType.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum NoFuncType implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java b/src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java index d1c6e89..62613df 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/NoneType.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum NoneType implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/StructType.java b/src/main/java/com/opencastsoftware/wasm4j/types/StructType.java index b248dcb..9f19e09 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/StructType.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/StructType.java @@ -1,3 +1,7 @@ +/* + * SPDX-FileCopyrightText: Copyright 2023 Opencast Software Europe Ltd + * SPDX-License-Identifier: Apache-2.0 + */ package com.opencastsoftware.wasm4j.types; public enum StructType implements HeapType { diff --git a/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java b/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java index caadd64..4ba9136 100644 --- a/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java +++ b/src/main/java/com/opencastsoftware/wasm4j/types/WasmTypeVisitor.java @@ -4,7 +4,6 @@ */ package com.opencastsoftware.wasm4j.types; -import java.lang.reflect.Array; public interface WasmTypeVisitor {