aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-28 14:15:43 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-28 14:15:43 +0100
commit8bcc629a7c6d7d30b403c0a13ee032e7e75298e8 (patch)
treece7129121c0f494a6f73b95a605287236e9d93c1 /src/test/java
parent49aee72f35f1ffdfc90a89162a500193746ef467 (diff)
Add define-struct instruction
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java20
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java15
2 files changed, 35 insertions, 0 deletions
diff --git a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
index 9f3fc75f..b0143a9b 100644
--- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
@@ -56,6 +56,26 @@ public class InstructionSerializerTests {
}
@Test
+ public void canSerializeDefineStruct() {
+ var instruction = Instructions.defineStruct(
+ Types.struct(NamespaceName.of("Example", "Project"), "User"),
+ List.of(
+ Instructions.defineStructField("name"),
+ Instructions.defineStructField("id")
+ )
+ );
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("""
+ (
+ define-struct
+ type="Example/Project.User"
+ fields=("name" "id")
+ )"""));
+ }
+
+ @Test
public void canSerializeDiscard() {
var instruction = Instructions.discard();
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 f30c75c6..3ac0ac62 100644
--- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
+++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
@@ -15,6 +15,21 @@ public class Instructions {
return new CallInstruction(positionalArgCount, namedArgNames, Sources.NULL);
}
+ public static Instruction defineStruct(
+ StructType type,
+ List<DefineStructInstruction.Field> fields
+ ) {
+ return new DefineStructInstruction(
+ type,
+ fields,
+ Sources.NULL
+ );
+ }
+
+ public static DefineStructInstruction.Field defineStructField(String name) {
+ return new DefineStructInstruction.Field(name, Sources.NULL);
+ }
+
public static Instruction discard() {
return new DiscardInstruction(Sources.NULL);
}