diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-01 21:50:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-01 21:50:32 +0100 |
| commit | 11dbdf3ebcac7e254f1c818178f64aa79406f47c (patch) | |
| tree | 4ea78fef28b7d6b14eaa88d5da42dba00949ad9c /src/test/java | |
| parent | a2752db879a24f88d4aae96969a2d048d77927cd (diff) | |
Add switch instruction to stack IR
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java | 40 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java | 11 |
2 files changed, 51 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 b0143a9b..e2294588 100644 --- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java @@ -328,6 +328,46 @@ public class InstructionSerializerTests { } @Test + public void canSerializeSwitch() { + var instruction = Instructions.switch_(List.of( + Instructions.switchCase( + Types.struct(NamespaceName.of("Example", "Project"), "A"), + List.of( + Instructions.return_() + ) + ), + Instructions.switchCase( + Types.struct(NamespaceName.of("Example", "Project"), "B"), + List.of( + Instructions.discard() + ) + ) + )); + + var string = serialize(instruction); + + assertThat(string, equalTo(""" + ( + switch + ( + ( + "Example/Project.A" + ( + (return) + ) + ) + ( + "Example/Project.B" + ( + (discard) + ) + ) + ) + )""" + )); + } + + @Test public void canSerializeTupleCreate() { var instruction = Instructions.tupleCreate(2); 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 3ac0ac62..4971575c 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java @@ -134,6 +134,17 @@ public class Instructions { return new StringAddInstruction(Sources.NULL); } + public static Instruction switch_(List<SwitchInstruction.Case> cases) { + return new SwitchInstruction(cases, Sources.NULL); + } + + public static SwitchInstruction.Case switchCase( + StructType type, + List<Instruction> body + ) { + return new SwitchInstruction.Case(type, body, Sources.NULL); + } + public static Instruction tupleCreate(int elementCount) { return new TupleCreateInstruction(elementCount, Sources.NULL); } |
