diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-21 12:25:13 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-21 12:25:13 +0100 |
| commit | 6f4e1ae90880d94d23219a0a97774b2df4e04b56 (patch) | |
| tree | d82ccc92887df8a91c7df36f9d61e113ed13402f /src/test/java | |
| parent | be3f205c4ac85609028528d598adcc218890017b (diff) | |
Add direct call instruction
Diffstat (limited to 'src/test/java')
| -rw-r--r-- | src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java | 31 | ||||
| -rw-r--r-- | src/test/java/org/shedlang/compiler/patio/instructions/Patio.java | 20 |
2 files changed, 50 insertions, 1 deletions
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java index d387bf8b..9ca59e7d 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java @@ -7,6 +7,7 @@ import org.shedlang.compiler.patio.ast.types.PatioTypes; import org.shedlang.compiler.patio.instructions.Patio; import java.util.List; +import java.util.Optional; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; @@ -98,6 +99,36 @@ public class PatioSerializerTests { } @Test + public void canSerializeCallWithoutTarget() { + var instruction = Patio.call( + Optional.empty(), + "f", + List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c")) + ); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo(""" + (call _ "f" ((local "a") (local "b") (local "c")))""" + )); + } + + @Test + public void canSerializeCallWithTarget() { + var instruction = Patio.call( + Optional.of(Patio.localRef("target")), + "f", + List.of(Patio.localRef("a"), Patio.localRef("b"), Patio.localRef("c")) + ); + + var string = PatioTesting.serializeInstruction(instruction); + + assertThat(string, equalTo(""" + (call (local "target") "f" ((local "a") (local "b") (local "c")))""" + )); + } + + @Test public void canSerializeCallPointer() { var instruction = Patio.callPointer( "target", 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 9df05a5c..dd505326 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -1,6 +1,9 @@ package org.shedlang.compiler.patio.instructions; -import org.shedlang.compiler.patio.ast.*; +import org.shedlang.compiler.patio.ast.PatioCompilationUnit; +import org.shedlang.compiler.patio.ast.PatioCompilationUnitElement; +import org.shedlang.compiler.patio.ast.PatioDataElement; +import org.shedlang.compiler.patio.ast.PatioLocal; import org.shedlang.compiler.patio.ast.instructions.*; import org.shedlang.compiler.patio.ast.operands.*; import org.shedlang.compiler.patio.ast.types.PatioDataLayout; @@ -8,6 +11,7 @@ import org.shedlang.compiler.patio.ast.types.PatioType; import org.shedlang.compiler.sources.Sources; import java.util.List; +import java.util.Optional; public class Patio { private Patio() {} @@ -19,6 +23,20 @@ public class Patio { public static PatioOperand bool(boolean value) { return new PatioBool(value); } + + public static PatioInstruction call( + Optional<PatioLocalRef> target, + String name, + List<PatioOperand> args + ) { + return new PatioCall( + target, + name, + args, + Sources.NULL + ); + } + public static PatioInstruction callPointer( String target, String functionPointer, |
