aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-11 18:27:09 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-11 18:27:09 +0000
commitc260aad8915adb3958ab5fc35d51c20a5d025c2e (patch)
tree1a953c2165df26c34e29d07b8d03c88d0900e410 /src/test/java
parent8ddcc9410a370664c800525bfedc5a01a61e1489 (diff)
Add try instruction
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java47
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java13
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);
}