diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-11 18:27:09 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-11 18:27:09 +0000 |
| commit | c260aad8915adb3958ab5fc35d51c20a5d025c2e (patch) | |
| tree | 1a953c2165df26c34e29d07b8d03c88d0900e410 /src/test/java | |
| parent | 8ddcc9410a370664c800525bfedc5a01a61e1489 (diff) | |
Add try instruction
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java | 47 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java | 13 |
2 files changed, 60 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 bcf7e27f..7c974d94 100644 --- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java @@ -377,6 +377,53 @@ public class InstructionSerializerTests { )""" )); } + @Test + public void canSerializeTry() { + var effect = Effects.userDefined(NamespaceName.of("Example", "Project"), "State"); + var instruction = Instructions.try_( + effect, List.of( + DefineFunctionInstruction.builder() + .withName("read") + .build(), + DefineFunctionInstruction.builder() + .withName("write") + .build() + ), List.of( + Instructions.pushUnit() + ) + ); + + var string = serialize(instruction); + + assertThat(string, equalTo(""" + ( + try + "Example/Project.State" + ( + (push-unit) + ) + ( + ( + define-function + name="read" + positional-params=() + named-params=() + free-variables=() + body=( + ) + ) + ( + define-function + name="write" + positional-params=() + named-params=() + free-variables=() + body=( + ) + ) + ) + )""")); + } @Test public void canSerializeTupleCreate() { 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 643d9446..8133750d 100644 --- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java +++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java @@ -150,6 +150,19 @@ public class Instructions { return new SwitchInstruction.Case(type, body, Sources.NULL); } + public static Instruction try_( + UserDefinedEffect handledEffect, + List<DefineFunctionInstruction> handlerMethods, + List<Instruction> body + ) { + return new TryInstruction( + handledEffect, + handlerMethods, + body, + Sources.NULL + ); + } + public static Instruction tupleCreate(int elementCount) { return new TupleCreateInstruction(elementCount, Sources.NULL); } |
