aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 23:16:32 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 23:16:32 +0100
commit8a0ba886b0818a289d2990732ebf7769a013e7f0 (patch)
tree30a47cadb5f99c18e71145ef06f07b23870311f0 /src/test/java
parent339a9ae71595b0d6e0cdcc86495061e65859033c (diff)
Replace module-export instruction with namespace-field-store
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java10
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/StackCompilerNamespaceTests.java7
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/InstructionMatchers.java8
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java5
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) {