diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-30 19:12:25 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-30 19:12:25 +0100 |
| commit | 52ea9be878308da4113abcd14b70ba4b39503ef6 (patch) | |
| tree | 080ec7fa00167728aa4d37d944a0f175a600373d /src/main/java | |
| parent | d198788e4d4da184bf6a931ce2cceb19288659d5 (diff) | |
Add namespace-import instruction
Diffstat (limited to 'src/main/java')
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 { +} |
