aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-08-27 20:51:49 +0100
committerMichael Williamson <mike@zwobble.org>2023-08-27 20:51:49 +0100
commitc3784202feea6d9e16044007dbb992dab3628553 (patch)
treeec5b8346b6c00472a122ee21fb0c43ead7eef136 /src/test/java
parent623c8a2542cf071b59aebe4811d7d61c762db774 (diff)
Add loop instructions to Stack IR
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java39
-rw-r--r--src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java12
2 files changed, 51 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 aff45481..407621fb 100644
--- a/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/stackir/InstructionSerializerTests.java
@@ -159,6 +159,45 @@ public class InstructionSerializerTests {
}
@Test
+ public void canSerializeLoop() {
+ var instruction = Instructions.loop(
+ List.of(
+ Instructions.localLoad("x"),
+ Instructions.discard()
+ )
+ );
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("""
+ (
+ loop
+ (
+ (local-load "x")
+ (discard)
+ )
+ )"""));
+ }
+
+ @Test
+ public void canSerializeLoopBreak() {
+ var instruction = Instructions.loopBreak();
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("(break)"));
+ }
+
+ @Test
+ public void canSerializeLoopContinue() {
+ var instruction = Instructions.loopContinue();
+
+ var string = serialize(instruction);
+
+ assertThat(string, equalTo("(continue)"));
+ }
+
+ @Test
public void canSerializeNamespaceFieldStore() {
var instruction = Instructions.namespaceFieldStore(
new NamespaceName(List.of("Example", "Lib")),
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 18526f4a..4bc3dc50 100644
--- a/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
+++ b/src/test/java/org/shedlang/compiler/stackir/instructions/Instructions.java
@@ -53,6 +53,18 @@ public class Instructions {
return new LocalStoreInstruction(name, Sources.NULL);
}
+ public static Instruction loop(List<Instruction> body) {
+ return new LoopInstruction(body, Sources.NULL);
+ }
+
+ public static Instruction loopBreak() {
+ return new LoopBreakInstruction(Sources.NULL);
+ }
+
+ public static Instruction loopContinue() {
+ return new LoopContinueInstruction(Sources.NULL);
+ }
+
public static Instruction namespaceFieldStore(NamespaceName namespaceName, String fieldName) {
return new NamespaceFieldStoreInstruction(namespaceName, fieldName, Sources.NULL);
}