aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-23 21:15:18 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-23 21:15:36 +0100
commit576aa4821a810353e4a8eb3dbc92a4cbe1be723e (patch)
treef72f5dd403e37a7f17d3ef51e946cc93673b7c42 /src/test/java
parent6a3d3bdf076847f0606ccb3bc96f3fb87b87c549 (diff)
Update Patio if to support results
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java41
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java17
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