aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-21 12:25:13 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-21 12:25:13 +0100
commit6f4e1ae90880d94d23219a0a97774b2df4e04b56 (patch)
treed82ccc92887df8a91c7df36f9d61e113ed13402f /src/test/java
parentbe3f205c4ac85609028528d598adcc218890017b (diff)
Add direct call instruction
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java31
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java20
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,