From d0a9c780ea36a0ff0b70529c1c6ab86c61a5eb0f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 19 Jul 2023 22:32:31 +0100 Subject: Refer to locals in call-pointer Patio instruction --- .../patio/PatioInstructionSerializerTests.java | 6 ++++-- .../shedlang/compiler/patio/instructions/Patio.java | 19 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/patio/PatioInstructionSerializerTests.java b/src/test/java/org/shedlang/compiler/patio/PatioInstructionSerializerTests.java index 6efc86f7..2ce7d87c 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioInstructionSerializerTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioInstructionSerializerTests.java @@ -3,6 +3,8 @@ package org.shedlang.compiler.patio; import org.junit.jupiter.api.Test; import org.shedlang.compiler.patio.instructions.Patio; +import java.util.List; + import static org.shedlang.compiler.patio.PatioTesting.serialize; import static org.zwobble.precisely.AssertThat.assertThat; import static org.zwobble.precisely.Matchers.equalTo; @@ -19,11 +21,11 @@ public class PatioInstructionSerializerTests { @Test public void canSerializeCallPointer() { - var instruction = Patio.callPointer(2); + var instruction = Patio.callPointer("f", List.of("a", "b", "c")); var string = serialize(instruction); - assertThat(string, equalTo("(call-pointer arg-count=2)")); + assertThat(string, equalTo("(call-pointer \"f\" (\"a\" \"b\" \"c\"))")); } @Test 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 31b0b012..2115fd06 100644 --- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java +++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java @@ -2,6 +2,8 @@ package org.shedlang.compiler.patio.instructions; import org.shedlang.compiler.sources.Sources; +import java.util.List; + public class Patio { private Patio() {} @@ -9,8 +11,17 @@ public class Patio { return new PatioAlloc(bytes, Sources.NULL); } - public static PatioInstruction callPointer(int argCount) { - return new PatioCallPointer(argCount, Sources.NULL); + public static PatioInstruction callPointer( + String functionPointer, + List args + ) { + return new PatioCallPointer( + new PatioLocal(functionPointer), + args.stream() + .map(arg -> new PatioLocal(arg)) + .toList(), + Sources.NULL + ); } public static PatioInstruction discard() { @@ -18,11 +29,11 @@ public class Patio { } public static PatioInstruction localLoad(String name) { - return new PatioLocalLoad(name, Sources.NULL); + return new PatioLocalLoad(new PatioLocal(name), Sources.NULL); } public static PatioInstruction localStore(String name) { - return new PatioLocalStore(name, Sources.NULL); + return new PatioLocalStore(new PatioLocal(name), Sources.NULL); } public static PatioInstruction memoryLoad(int offset) { -- cgit v1.2.3