diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/Cast.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/Cast.java index 14bc876f9c..df836b8030 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/Cast.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/Cast.java @@ -31,19 +31,22 @@ public class Cast implements WasmValue { @Override public void writeTo(final TextWriter writer, final ExportContext context) throws IOException { writer.opening(); - writer.write("ref.cast_static $"); + writer.write("ref.cast"); + writer.space(); + writer.opening(); + writer.write("ref null $"); writer.write(structType.getName()); + writer.closing(); writer.space(); source.writeTo(writer, context); writer.closing(); - } @Override public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext context) throws IOException { source.writeTo(binaryWriter, context); binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x45); + binaryWriter.writeByte((byte) 0x17); binaryWriter.writeSignedLeb128(structType.index()); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/ConstExpressions.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/ConstExpressions.java index dfabcf4fc5..a527d49f0e 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/ConstExpressions.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/ConstExpressions.java @@ -487,7 +487,7 @@ public static GetStruct get(final StructType structType, final WasmValue source, public static class array { public static WasmValue newInstance(final WasmType type, final List arguments) { - return new NewWasmArrayStaticInit(type, arguments); + return new NewWasmArrayFixed(type, arguments); } public static WasmValue newInstanceDefault(final WasmType type, final WasmValue length) { diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetStruct.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetStruct.java index 315e269df8..041c94fe76 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetStruct.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetStruct.java @@ -34,7 +34,7 @@ public void writeTo(final TextWriter writer, final ExportContext context) throws public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext context) throws IOException { source.writeTo(binaryWriter, context); binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x03); + binaryWriter.writeByte((byte) 0x02); binaryWriter.writeUnsignedLeb128(structType.index()); binaryWriter.writeUnsignedLeb128(structType.indexOfField(fieldName)); } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArray.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArray.java index fd9e879fdb..1904fe3834 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArray.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArray.java @@ -33,7 +33,7 @@ public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext array.writeTo(binaryWriter, context); index.writeTo(binaryWriter, context); binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x13); + binaryWriter.writeByte((byte) 0x0b); binaryWriter.writeUnsignedLeb128(type.index()); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArrayLength.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArrayLength.java index e4dc37b240..4ca48c739b 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArrayLength.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/GetWasmArrayLength.java @@ -27,6 +27,6 @@ public void writeTo(final TextWriter writer, final ExportContext context) throws public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext context) throws IOException { array.writeTo(binaryWriter, context); binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x19); + binaryWriter.writeByte((byte) 0x0f); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewStruct.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewStruct.java index 79664fd2d9..a695db8787 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewStruct.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewStruct.java @@ -33,7 +33,7 @@ public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext arg.writeTo(binaryWriter, context); } binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x07); + binaryWriter.writeByte((byte) 0x00); binaryWriter.writeUnsignedLeb128(type.index()); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayDefault.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayDefault.java index bfbefe8906..3db7ea0b8e 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayDefault.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayDefault.java @@ -43,7 +43,7 @@ public void writeTo(final TextWriter writer, final ExportContext context) throws public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext context) throws IOException { length.writeTo(binaryWriter, context); binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x1c); + binaryWriter.writeByte((byte) 0x07); binaryWriter.writeUnsignedLeb128(type.index()); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayStaticInit.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayFixed.java similarity index 81% rename from core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayStaticInit.java rename to core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayFixed.java index 7bec334211..e9041c8e00 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayStaticInit.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/NewWasmArrayFixed.java @@ -3,13 +3,13 @@ import java.io.IOException; import java.util.List; -public class NewWasmArrayStaticInit implements WasmValue { +public class NewWasmArrayFixed implements WasmValue { private final WasmType type; private final List arguments; - NewWasmArrayStaticInit(final WasmType type, final List arguments) { + NewWasmArrayFixed(final WasmType type, final List arguments) { this.type = type; this.arguments = arguments; } @@ -17,7 +17,7 @@ public class NewWasmArrayStaticInit implements WasmValue { @Override public void writeTo(final TextWriter writer, final ExportContext context) throws IOException { writer.opening(); - writer.write("array.init_static "); + writer.write("array.new_fixed "); type.writeRefTo(writer); for (final WasmValue arg : arguments) { writer.space(); @@ -32,7 +32,7 @@ public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext arg.writeTo(binaryWriter, context); } binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x1a); + binaryWriter.writeByte((byte) 0x08); binaryWriter.writeUnsignedLeb128(type.index()); binaryWriter.writeUnsignedLeb128(arguments.size()); } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefEq.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefEq.java index b13fb53cb6..ac5e1333eb 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefEq.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefEq.java @@ -19,6 +19,6 @@ public class RefEq extends BinaryExpression { RefEq(final WasmValue left, final WasmValue right) { - super(left, right, "ref.eq", (byte) 0xd5); + super(left, right, "ref.eq", (byte) 0xd3); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefType.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefType.java index 3cb1d48840..744f96f9e0 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefType.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/RefType.java @@ -69,9 +69,9 @@ public void writeRefTo(final TextWriter writer) { @Override public void writeTo(final BinaryWriter.Writer writer) throws IOException { if (nullable) { - writer.writeByte((byte) 0x6c); + writer.writeByte((byte) 0x63); } else { - writer.writeByte((byte) 0x6b); + writer.writeByte((byte) 0x64); } writer.writeSignedLeb128(type.index()); } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetStruct.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetStruct.java index 6341455fb9..71f4c91890 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetStruct.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetStruct.java @@ -54,7 +54,7 @@ public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext target.writeTo(binaryWriter, context); value.writeTo(binaryWriter, context); binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x06); + binaryWriter.writeByte((byte) 0x05); binaryWriter.writeUnsignedLeb128(structType.index()); binaryWriter.writeUnsignedLeb128(structType.indexOfField(fieldName)); } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetWasmArray.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetWasmArray.java index 687e6c4db1..3d733741a8 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetWasmArray.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/SetWasmArray.java @@ -55,7 +55,7 @@ public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext index.writeTo(binaryWriter, context); value.writeTo(binaryWriter, context); binaryWriter.writeByte((byte) 0xfb); - binaryWriter.writeByte((byte) 0x16); + binaryWriter.writeByte((byte) 0x0e); binaryWriter.writeUnsignedLeb128(type.index()); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructSubtype.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructSubtype.java index e8e8005791..06a0ba4a2c 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructSubtype.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructSubtype.java @@ -45,14 +45,18 @@ public void writeTo(final TextWriter writer) { writer.space(); writer.opening(); - writer.write("struct_subtype"); + writer.write("sub"); + writer.space(); + writer.write("$"); + writer.write(supertype.name); + writer.space(); + writer.opening(); + writer.write("struct"); for (final Field field : fields) { writer.space(); field.writeTo(writer); } - writer.space(); - writer.write("$"); - writer.write(supertype.name); + writer.closing(); writer.closing(); writer.closing(); diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructType.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructType.java index 98bf3b0b23..4f278cf17c 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructType.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/StructType.java @@ -87,6 +87,9 @@ public void writeTo(final TextWriter writer) { writer.write(name); writer.space(); writer.opening(); + writer.write("sub"); + writer.space(); + writer.opening(); writer.write("struct"); for (final Field field : fields) { writer.space(); @@ -94,6 +97,7 @@ public void writeTo(final TextWriter writer) { } writer.closing(); writer.closing(); + writer.closing(); } @Override @@ -104,6 +108,8 @@ public void writeRefTo(final TextWriter writer) { @Override public void writeTo(final BinaryWriter.Writer writer) throws IOException { + writer.writeByte((byte) 0x50); + writer.writeByte((byte) 0); writer.writeByte(PrimitiveType.struct.getBinaryType()); writer.writeByte((byte) fields.size()); for (final Field f : fields) { diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/Wasm GC proposal_ spec for prototype implementation.pdf b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/Wasm GC proposal_ spec for prototype implementation.pdf new file mode 100644 index 0000000000..98bb05c4fc Binary files /dev/null and b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/Wasm GC proposal_ spec for prototype implementation.pdf differ diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmExternNullRef.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmExternNullRef.java index 83eb6c2b5c..a0e7e15775 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmExternNullRef.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmExternNullRef.java @@ -30,6 +30,6 @@ public void writeTo(final TextWriter writer, final ExportContext context) { @Override public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext context) { binaryWriter.writeByte((byte) 0xd0); - binaryWriter.writeByte((byte) 0x69); + binaryWriter.writeByte((byte) 0x72); } } diff --git a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmNullRef.java b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmNullRef.java index fa58a960a6..2dd2e35750 100644 --- a/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmNullRef.java +++ b/core/src/main/java/de/mirkosertic/bytecoder/core/backend/wasm/ast/WasmNullRef.java @@ -30,6 +30,6 @@ public void writeTo(final TextWriter writer, final ExportContext context) { @Override public void writeTo(final BinaryWriter.Writer binaryWriter, final ExportContext context) { binaryWriter.writeByte((byte) 0xd0); - binaryWriter.writeByte((byte) 0x65); + binaryWriter.writeByte((byte) 0x71); } }