aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-14 21:27:24 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-14 21:27:24 +0100
commit76fc235449f03fd76ab9a5bd96d9e8f2aec025c3 (patch)
tree34370080396a17fdf6f0e6f92b4e1e431fb20217 /src/test/java
parente1c58cd188df9ba3c5db1ea43e9ec922cc38e2b7 (diff)
Add if instruction
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java29
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java7
2 files changed, 36 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 3ce690b2..72056a3e 100644
--- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
@@ -76,6 +76,35 @@ public class InstructionSerializerTests {
}
@Test
+ public void canSerializeIf() {
+ var instruction = Instructions.if_(
+ List.of(
+ Instructions.pushUnit()
+ ),
+ List.of(
+ Instructions.localLoad("x"),
+ Instructions.discard(),
+ Instructions.pushBool(true)
+ )
+ );
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("""
+ (
+ if
+ (
+ (push-unit)
+ )
+ (
+ (local-load "x")
+ (discard)
+ (push-bool true)
+ )
+ )"""));
+ }
+
+ @Test
public void canSerializeIntAdd() {
var instruction = Instructions.intAdd();
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 df8b193b..131207b8 100644
--- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
+++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
@@ -22,6 +22,13 @@ public class Instructions {
return new FieldLoadInstruction(namespaceName, fieldName, Sources.NULL);
}
+ public static Instruction if_(
+ List<Instruction> trueBody,
+ List<Instruction> falseBody
+ ) {
+ return new IfInstruction(trueBody, falseBody, Sources.NULL);
+ }
+
public static Instruction intAdd() {
return new IntAddInstruction(Sources.NULL);
}