aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-30 19:12:25 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-30 19:12:25 +0100
commit52ea9be878308da4113abcd14b70ba4b39503ef6 (patch)
tree080ec7fa00167728aa4d37d944a0f175a600373d /src/main/java
parentd198788e4d4da184bf6a931ce2cceb19288659d5 (diff)
Add namespace-import instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGen.java11
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java4
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java6
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/NamespaceImportInstruction.java10
5 files changed, 32 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGen.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGen.java
index 179e6cf6..cd302929 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGen.java
@@ -160,6 +160,17 @@ public class LlvmCodeGen {
);
}
+ case NamespaceImportInstruction namespaceImport -> {
+ var importValueResult = LlvmCodeGenNamespaces.importValue(
+ namespaceImport.namespaceName(),
+ context
+ );
+ var importValue = importValueResult.value();
+ context = importValueResult.context();
+
+ yield context.push(importValue);
+ }
+
case PushBoolInstruction pushBool ->
context.push(new LlvmOperandInt(pushBool.value() ? 1 : 0));
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 64835427..71043f81 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java
@@ -191,6 +191,10 @@ public class WasmCodeGen {
context
);
}
+
+ case NamespaceImportInstruction namespaceImport ->
+ WasmCodeGenNamespaces.importValue(namespaceImport.namespaceName(), context);
+
case PushBoolInstruction pushBool ->
context.addInstruction(new WasmI32Const(pushBool.value() ? 1 : 0));
diff --git a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
index 12592b42..35789b18 100644
--- a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
+++ b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
@@ -93,6 +93,12 @@ public class InstructionSerializer {
treeString(namespaceFieldStore.namespaceName().toString()),
treeString(namespaceFieldStore.fieldName())
);
+
+ case NamespaceImportInstruction namespaceImport ->
+ treeList(
+ treeIdentifier("namespace-import"),
+ treeString(namespaceImport.namespaceName().toString())
+ );
case PushBoolInstruction pushBoolInstruction ->
treeList(
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
index 50607e02..1fb0bede 100644
--- a/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/Instruction.java
@@ -3,7 +3,7 @@ package org.shedlang.compiler.stackir.instructions;
import org.shedlang.compiler.sources.Source;
public sealed interface Instruction
- permits CallInstruction, DefineFunctionInstruction, DiscardInstruction, LocalLoadInstruction, LocalStoreInstruction, NamespaceFieldStoreInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction {
+ permits CallInstruction, DefineFunctionInstruction, DiscardInstruction, LocalLoadInstruction, LocalStoreInstruction, NamespaceFieldStoreInstruction, NamespaceImportInstruction, PushBoolInstruction, PushIntInstruction, PushStringInstruction, PushUnitInstruction, ReturnInstruction {
Source source();
}
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/NamespaceImportInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/NamespaceImportInstruction.java
new file mode 100644
index 00000000..3e7abd7f
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/NamespaceImportInstruction.java
@@ -0,0 +1,10 @@
+package org.shedlang.compiler.stackir.instructions;
+
+import org.shedlang.compiler.sources.Source;
+import org.shedlang.compiler.types.NamespaceName;
+
+public record NamespaceImportInstruction(
+ NamespaceName namespaceName,
+ Source source
+) implements Instruction {
+}