diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-08 12:31:44 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-08 12:31:44 +0100 |
| commit | af30cfaef7e34136b3f2e01f5cc30b3590587add (patch) | |
| tree | a19ad7bd6a5b1bf8039a683c84e1ea5a0c51f2e2 /src/main/java | |
| parent | 1bac5891bdd6db84340c0de650d2c02d3d251207 (diff) | |
Generate WASM for string add
Diffstat (limited to 'src/main/java')
4 files changed, 27 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java index dbf667c2..a9ee98ac 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java @@ -243,7 +243,7 @@ public class WasmCodeGen { context.addInstruction(new WasmReturn()); case StringAddInstruction stringAdd -> - throw new UnsupportedOperationException("TODO"); + WasmCodeGenStrings.add(context); }; } } diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenAlloc.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenAlloc.java index 9d74e60c..96363570 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenAlloc.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenAlloc.java @@ -20,7 +20,7 @@ public class WasmCodeGenAlloc { return context .addImport(new WasmImport( "env", - "shed__runtime__alloc", + allocName, new WasmImportDescriptor.Func( allocName, new WasmFuncType(List.of(WasmValueType.I32), List.of(WasmValueType.I32)) diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenStrings.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenStrings.java index a7266091..d596c53c 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenStrings.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenStrings.java @@ -1,11 +1,17 @@ package org.shedlang.compiler.backends.wasm; +import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmCall; import org.shedlang.compiler.backends.wasm.structure.ast.linking.WasmMemoryAddress; import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmAlignment; +import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmFuncName; +import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmImport; +import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmImportDescriptor; +import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmFuncType; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.StandardCharsets; +import java.util.List; public class WasmCodeGenStrings { private WasmCodeGenStrings() { @@ -27,4 +33,22 @@ public class WasmCodeGenStrings { WasmAlignment.ALIGN_32_BIT ); } + + public static WasmCodeGenContext add(WasmCodeGenContext context) { + var runtimeAddName = "shed__runtime__string_add"; + + return context + .addImport(new WasmImport( + "env", + runtimeAddName, + new WasmImportDescriptor.Func( + runtimeAddName, + new WasmFuncType( + List.of(WasmCodeGenTypes.STRING_TYPE, WasmCodeGenTypes.STRING_TYPE), + List.of(WasmCodeGenTypes.STRING_TYPE) + ) + ) + )) + .addInstruction(new WasmCall(new WasmFuncName(runtimeAddName))); + } } diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTypes.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTypes.java index 5822f1b6..27010de9 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTypes.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGenTypes.java @@ -7,4 +7,5 @@ public class WasmCodeGenTypes { } public static final WasmValueType VALUE_TYPE = WasmValueType.I32; + public static final WasmValueType STRING_TYPE = VALUE_TYPE; } |
