aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-24 18:41:38 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-24 18:41:38 +0100
commit56a992c96740b647b7f6feb40ce0204aec0ff2c4 (patch)
tree51fa456eb81a193eeb3bffaca019413a7ecad9ea /src/main/java
parent4f8c81e479b5e83bc301f04f01a12466f9e1edf2 (diff)
WASM binary format: support memory imports
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java8
-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/WasmMemoryType.java4
3 files changed, 14 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 430e1ab4..714f1936 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
@@ -105,6 +105,10 @@ public class WasmBinaryFormat {
writer.writeByte(0x01);
writeTableType(table.type(), writer);
}
+ case WasmImportDescriptor.Memory memory -> {
+ writer.writeByte(0x02);
+ writeMemoryType(memory.type(), writer);
+ }
}
}
@@ -151,6 +155,10 @@ public class WasmBinaryFormat {
writeValueTypeVector(type.results(), writer);
}
+ private static void writeMemoryType(WasmMemoryType type, BinaryWriter writer) {
+ writeLimits(type.limits(), writer);
+ }
+
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 db0ec936..e0bdc456 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,9 +1,11 @@
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.WasmMemoryType;
import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmTableType;
public sealed interface WasmImportDescriptor {
record Func(String identifier, WasmFuncType type) implements WasmImportDescriptor {}
record Table(WasmTableType type) implements WasmImportDescriptor {}
+ record Memory(WasmMemoryType type) implements WasmImportDescriptor {}
}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmMemoryType.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmMemoryType.java
new file mode 100644
index 00000000..0517fd3c
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/types/WasmMemoryType.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.backends.wasm.structure.ast.types;
+
+public record WasmMemoryType(WasmLimits limits) {
+}