From 576aa4821a810353e4a8eb3dbc92a4cbe1be723e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 23 Jul 2023 21:15:18 +0100 Subject: Update Patio if to support results --- .../compiler/patio/PatioSerializerTests.java | 41 ++++++++++++++++++---- .../compiler/patio/instructions/Patio.java | 17 ++++++--- 2 files changed, 48 insertions(+), 10 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java index 0574d035..64ad3150 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java @@ -207,12 +207,30 @@ public class PatioSerializerTests { @Test public void canSerializeIf() { var instruction = Patio.if_( - "condition", List.of( - Patio.localStore("x", Patio.int_(1)) + Patio.localRef("x"), + Patio.localRef("y") ), - List.of( - Patio.localStore("y", Patio.int_(2)) + Patio.localRef("condition"), + Patio.block( + List.of( + Patio.localStore("x1", Patio.int_(1)), + Patio.localStore("y1", Patio.int_(2)) + ), + List.of( + Patio.localRef("x1"), + Patio.localRef("y1") + ) + ), + Patio.block( + List.of( + Patio.localStore("x2", Patio.int_(11)), + Patio.localStore("y2", Patio.int_(12)) + ), + List.of( + Patio.localRef("x2"), + Patio.localRef("y2") + ) ) ); @@ -221,12 +239,23 @@ public class PatioSerializerTests { assertThat(string, equalTo(""" ( if + ((local "x") (local "y")) (local "condition") ( - (local-store (local "x") (int 1)) + block + ( + (local-store (local "x1") (int 1)) + (local-store (local "y1") (int 2)) + ) + results=((local "x1") (local "y1")) ) ( - (local-store (local "y") (int 2)) + block + ( + (local-store (local "x2") (int 11)) + (local-store (local "y2") (int 12)) + ) + results=((local "x2") (local "y2")) ) )""")); } diff --git a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java index 438022ec..3a3123ef 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -18,6 +18,13 @@ public class Patio { return new PatioAlloc(new PatioLocalRef(target), layout, Sources.NULL); } + public static PatioBlock block( + List body, + List results + ) { + return new PatioBlock(body, results, Sources.NULL); + } + public static PatioOperand bool(boolean value) { return new PatioBool(value); } @@ -91,12 +98,14 @@ public class Patio { } public static PatioInstruction if_( - String condition, - List trueBody, - List falseBody + List targets, + PatioLocalRef condition, + PatioBlock trueBody, + PatioBlock falseBody ) { return new PatioIf( - new PatioLocalRef(condition), + targets, + condition, trueBody, falseBody, Sources.NULL -- cgit v1.2.3