aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-24 18:47:09 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-24 18:47:09 +0100
commit978d93cccaa4d69bcd1810b46a30606d514e870f (patch)
tree586da0b3b9063770feca8c6c1e95c9266fc050b4 /src/main/java
parent56a992c96740b647b7f6feb40ce0204aec0ff2c4 (diff)
WASM binary format: support global imports
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java13
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmGlobalType.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmMutability.java6
4 files changed, 25 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java
index 714f1936..b21ea2a0 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java
@@ -109,6 +109,10 @@ public class WasmBinaryFormat {
writer.writeByte(0x02);
writeMemoryType(memory.type(), writer);
}
+ case WasmImportDescriptor.Global global -> {
+ writer.writeByte(0x03);
+ writeGlobalType(global.type(), writer);
+ }
}
}
@@ -159,6 +163,15 @@ public class WasmBinaryFormat {
writeLimits(type.limits(), writer);
}
+ private static void writeGlobalType(WasmGlobalType type, BinaryWriter writer) {
+ writeValueType(type.valueType(), writer);
+ var mutabilityEncoding = switch (type.mutability()) {
+ case MUTABLE -> 0x01;
+ case IMMUTABLE -> 0x00;
+ };
+ writer.writeByte(mutabilityEncoding);
+ }
+
private static void writeReferenceType(WasmReferenceType type, BinaryWriter writer) {
var encoding = switch (type) {
case FUNC_REF -> 0x70;
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java
index e0bdc456..c9e6ba5f 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.backends.wasm.structure.ast.imports;
import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmFuncType;
+import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmGlobalType;
import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmMemoryType;
import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmTableType;
@@ -8,4 +9,5 @@ public sealed interface WasmImportDescriptor {
record Func(String identifier, WasmFuncType type) implements WasmImportDescriptor {}
record Table(WasmTableType type) implements WasmImportDescriptor {}
record Memory(WasmMemoryType type) implements WasmImportDescriptor {}
+ record Global(WasmGlobalType type) implements WasmImportDescriptor {}
}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmGlobalType.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmGlobalType.java
new file mode 100644
index 00000000..5d328f36
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmGlobalType.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.backends.wasm.structure.ast.types;
+
+public record WasmGlobalType(WasmValueType valueType, WasmMutability mutability) {
+}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmMutability.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmMutability.java
new file mode 100644
index 00000000..afc9962f
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmMutability.java
@@ -0,0 +1,6 @@
+package org.shedlang.compiler.backends.wasm.structure.ast.types;
+
+public enum WasmMutability {
+ MUTABLE,
+ IMMUTABLE,
+}