diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-09-28 14:15:43 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-09-28 14:15:43 +0100 |
| commit | 8bcc629a7c6d7d30b403c0a13ee032e7e75298e8 (patch) | |
| tree | ce7129121c0f494a6f73b95a605287236e9d93c1 /src/test/java | |
| parent | 49aee72f35f1ffdfc90a89162a500193746ef467 (diff) | |
Add define-struct instruction
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java | 20 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java | 15 |
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); } |
