diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-12 23:16:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-12 23:16:32 +0100 |
| commit | 8a0ba886b0818a289d2990732ebf7769a013e7f0 (patch) | |
| tree | 30a47cadb5f99c18e71145ef06f07b23870311f0 /src/test/java | |
| parent | 339a9ae71595b0d6e0cdcc86495061e65859033c (diff) | |
Replace module-export instruction with namespace-field-store
Diffstat (limited to 'src/test/java')
4 files changed, 20 insertions, 10 deletions
diff --git a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java index c13035b6..ffeedf4c 100644 --- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java @@ -5,6 +5,7 @@ import org.shedlang.compiler.sources.Sources; import org.shedlang.compiler.stackir.instructions.DefineFunctionInstruction; import org.shedlang.compiler.stackir.instructions.Instruction; import org.shedlang.compiler.stackir.instructions.Instructions; +import org.shedlang.compiler.types.NamespaceName; import java.util.List; @@ -80,12 +81,15 @@ public class InstructionSerializerTests { } @Test - public void canSerializeModuleExport() { - var instruction = Instructions.moduleExport("x"); + public void canSerializeNamespaceFieldStore() { + var instruction = Instructions.namespaceFieldStore( + new NamespaceName(List.of("Example", "Lib")), + "x" + ); var string = serialize(instruction); - assertThat(string, equalTo("(module-export \"x\")")); + assertThat(string, equalTo("(namespace-field-store \"Example/Lib\" \"x\")")); } @Test diff --git a/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java b/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java index 88a91157..a3b34c55 100644 --- a/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.shedlang.compiler.ast.typed.Typed; import org.shedlang.compiler.ast.typed.TypedFunctionDefinitionNode; import org.shedlang.compiler.stackir.instructions.DefineFunctionInstruction; +import org.shedlang.compiler.types.NamespaceName; import org.shedlang.compiler.types.Types; import java.util.List; @@ -15,6 +16,8 @@ import static org.zwobble.precisely.Matchers.*; public class StackCompilerNamespaceTests { @Test public void bodyOfNamespaceIsCompiledWithNamesBeingExported() { + var namespaceName = new NamespaceName(List.of("Example")); + var node = Typed.namespace(List.of( TypedFunctionDefinitionNode.builder() .withName("f") @@ -24,7 +27,7 @@ public class StackCompilerNamespaceTests { .build() )); - var instructions = StackCompiler.compileNamespace(node); + var instructions = StackCompiler.compileNamespace(node, namespaceName); assertThat(instructions, isSequence( instanceOf( @@ -33,7 +36,7 @@ public class StackCompilerNamespaceTests { ), isLocalStoreInstruction("f"), isLocalLoadInstruction("f"), - isModuleExportInstruction("f") + isNamespaceFieldStore(namespaceName, "f") )); } } diff --git a/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java b/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java index 0cbad43d..3f36e727 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java @@ -1,5 +1,6 @@ package org.shedlang.compiler.stackir.instructions; +import org.shedlang.compiler.types.NamespaceName; import org.zwobble.precisely.Matcher; import java.math.BigInteger; @@ -46,10 +47,11 @@ public class InstructionMatchers { ); } - public static Matcher<Instruction> isModuleExportInstruction(String name) { + public static Matcher<Instruction> isNamespaceFieldStore(NamespaceName namespaceName, String fieldName) { return instanceOf( - ModuleExportInstruction.class, - has("name", x -> x.name(), equalTo(name)) + NamespaceFieldStore.class, + has("namespaceName", x -> x.namespaceName(), equalTo(namespaceName)), + has("fieldName", x -> x.fieldName(), equalTo(fieldName)) ); } diff --git a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java index cb147883..3d8eb1e1 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java @@ -1,6 +1,7 @@ package org.shedlang.compiler.stackir.instructions; import org.shedlang.compiler.sources.Sources; +import org.shedlang.compiler.types.NamespaceName; import java.math.BigInteger; import java.util.List; @@ -25,8 +26,8 @@ public class Instructions { return new LocalStoreInstruction(name, Sources.NULL); } - public static Instruction moduleExport(String name) { - return new ModuleExportInstruction(name, Sources.NULL); + public static Instruction namespaceFieldStore(NamespaceName namespaceName, String fieldName) { + return new NamespaceFieldStore(namespaceName, fieldName, Sources.NULL); } public static DefineFunctionInstruction.Param param(String name) { |
