aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-28 13:59:18 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-28 13:59:18 +0100
commit09da904f2de0b16f883add671469989bafc726e9 (patch)
treed0ee8826637464901d27d4a5121ee517c78c2bb5 /src/test/java
parente73983a9a1862a99f2efe3f1c6ed81f978d57403 (diff)
Add struct receiver for field loads
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java15
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java9
2 files changed, 23 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
index f71d9885..9f3fc75f 100644
--- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
@@ -7,6 +7,7 @@ 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 org.shedlang.compiler.types.Types;
import java.util.List;
@@ -73,7 +74,7 @@ public class InstructionSerializerTests {
}
@Test
- public void canSerializeFieldLoad() {
+ public void canSerializeNamespaceFieldLoad() {
var instruction = Instructions.fieldLoad(
new NamespaceName(List.of("Example", "Lib")),
"x"
@@ -85,6 +86,18 @@ public class InstructionSerializerTests {
}
@Test
+ public void canSerializeStructFieldLoad() {
+ var instruction = Instructions.fieldLoad(
+ Types.struct(NamespaceName.of("Example", "Project"), "User"),
+ "name"
+ );
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("(field-load (struct \"Example/Project.User\") \"name\")"));
+ }
+
+ @Test
public void canSerializeIf() {
var instruction = Instructions.if_(
1,
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 d07709a9..f30c75c6 100644
--- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
+++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
@@ -2,6 +2,7 @@ package org.shedlang.compiler.stackir.instructions;
import org.shedlang.compiler.sources.Sources;
import org.shedlang.compiler.types.NamespaceName;
+import org.shedlang.compiler.types.StructType;
import java.math.BigInteger;
import java.util.List;
@@ -30,6 +31,14 @@ public class Instructions {
);
}
+ public static Instruction fieldLoad(StructType type, String fieldName) {
+ return new FieldLoadInstruction(
+ new FieldLoadInstruction.Receiver.Struct(type),
+ fieldName,
+ Sources.NULL
+ );
+ }
+
public static Instruction if_(
int resultCount,
List<Instruction> trueBody,