From c260aad8915adb3958ab5fc35d51c20a5d025c2e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 11 Nov 2023 18:27:09 +0000 Subject: Add try instruction --- .../stackir/InstructionSerializerTests.java | 47 ++++++++++++++++++++++ .../stackir/instructions/Instructions.java | 13 ++++++ 2 files changed, 60 insertions(+) (limited to 'src/test/java') 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 handlerMethods, + List body + ) { + return new TryInstruction( + handledEffect, + handlerMethods, + body, + Sources.NULL + ); + } + public static Instruction tupleCreate(int elementCount) { return new TupleCreateInstruction(elementCount, Sources.NULL); } -- cgit v1.2.3