From 03a34c054113843846a4eaf4fbd24f9dd99c826e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 27 Aug 2023 21:47:31 +0100 Subject: Add Patio loop instructions --- .../compiler/patio/PatioSerializerTests.java | 37 ++++++++++++++++++++++ .../compiler/patio/instructions/Patio.java | 12 +++++++ 2 files changed, 49 insertions(+) (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 8f1c4762..0a214a26 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java @@ -363,6 +363,43 @@ public class PatioSerializerTests { assertThat(string, equalTo("(local-store (local \"target\") (local \"x\"))")); } + @Test + public void canSerializeLoop() { + var instruction = Patio.loop( + List.of( + Patio.localStore(Patio.localRef("x"), Patio.int_(1)) + ) + ); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo(""" + ( + loop + ( + (local-store (local "x") (int 1)) + ) + )""")); + } + + @Test + public void canSerializeLoopBreak() { + var instruction = Patio.loopBreak(); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(break)")); + } + + @Test + public void canSerializeLoopContinue() { + var instruction = Patio.loopContinue(); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo("(continue)")); + } + @Test public void canSerializeMemoryLoad() { var instruction = Patio.memoryLoad( 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 90249c1d..3978bf39 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -179,6 +179,18 @@ public class Patio { return new PatioLocalRef(name); } + public static PatioInstruction loop(List body) { + return new PatioLoop(body, Sources.NULL); + } + + public static PatioInstruction loopBreak() { + return new PatioLoopBreak(Sources.NULL); + } + + public static PatioInstruction loopContinue() { + return new PatioLoopContinue(Sources.NULL); + } + public static PatioInstruction memoryLoad( PatioLocalRef target, PatioOperand pointer, -- cgit v1.2.3