diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-23 21:15:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-23 21:15:36 +0100 |
| commit | 576aa4821a810353e4a8eb3dbc92a4cbe1be723e (patch) | |
| tree | f72f5dd403e37a7f17d3ef51e946cc93673b7c42 /src/test/java | |
| parent | 6a3d3bdf076847f0606ccb3bc96f3fb87b87c549 (diff) | |
Update Patio if to support results
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java | 41 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/patio/instructions/Patio.java | 17 |
2 files changed, 48 insertions, 10 deletions
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<PatioInstruction> body, + List<PatioOperand> 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<PatioInstruction> trueBody, - List<PatioInstruction> falseBody + List<PatioLocalRef> targets, + PatioLocalRef condition, + PatioBlock trueBody, + PatioBlock falseBody ) { return new PatioIf( - new PatioLocalRef(condition), + targets, + condition, trueBody, falseBody, Sources.NULL |
