From 51c202c469f884d1c67987282ed952cc303f43d7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 19 Jul 2023 22:10:39 +0100 Subject: Add Patio code gen for call --- .../compiler/patio/PatioCodeGenCallTests.java | 35 ++++++++++++++++++++++ .../compiler/patio/PatioCodeGenDiscardTests.java | 3 +- .../compiler/patio/PatioCodeGenLocalLoadTests.java | 3 +- .../patio/PatioCodeGenLocalStoreTests.java | 3 +- .../compiler/patio/PatioCodeGenPushBoolTests.java | 6 ++-- .../compiler/patio/PatioCodeGenPushIntTests.java | 3 +- .../compiler/patio/PatioCodeGenPushUnitTests.java | 3 +- .../compiler/patio/PatioCodeGenReturnTests.java | 3 +- .../org/shedlang/compiler/patio/PatioTesting.java | 9 +++--- 9 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java new file mode 100644 index 00000000..3c39eb11 --- /dev/null +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenCallTests.java @@ -0,0 +1,35 @@ +package org.shedlang.compiler.patio; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.shedlang.compiler.stackir.instructions.Instructions; +import org.shedlang.compiler.testing.snapshots.SnapshotResolver; +import org.shedlang.compiler.testing.snapshots.Snapshotter; + +import java.io.IOException; +import java.util.List; + +import static org.shedlang.compiler.patio.PatioTesting.serialize; + +@ExtendWith({SnapshotResolver.class}) +public class PatioCodeGenCallTests { + @Test + public void canCallFunctionWithNoArgs(Snapshotter snapshotter) throws IOException { + var instruction = Instructions.call(0, List.of()); + var context = PatioCodeGenContext.EMPTY; + + var result = PatioCodeGen.generateInstruction(instruction, context); + + snapshotter.assertSnapshot(serialize(result)); + } + + @Test + public void canCallFunctionWithArgs(Snapshotter snapshotter) throws IOException { + var instruction = Instructions.call(2, List.of("b", "a")); + var context = PatioCodeGenContext.EMPTY; + + var result = PatioCodeGen.generateInstruction(instruction, context); + + snapshotter.assertSnapshot(serialize(result)); + } +} diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java index 7edc2556..edee4d8d 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDiscardTests.java @@ -15,8 +15,9 @@ public class PatioCodeGenDiscardTests { @Test public void discardInstructionGeneratesDiscardInstruction(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.discard(); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java index e379722f..eaf69d61 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java @@ -15,8 +15,9 @@ public class PatioCodeGenLocalLoadTests { @Test public void localLoadGeneratesLocalLoad(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.localLoad("x"); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java index 9f9461c5..94ed40bc 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalStoreTests.java @@ -15,8 +15,9 @@ public class PatioCodeGenLocalStoreTests { @Test public void localStoreGeneratesLocalStore(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.localStore("x"); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushBoolTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushBoolTests.java index 75c471f3..3b304c4d 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushBoolTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushBoolTests.java @@ -15,8 +15,9 @@ public class PatioCodeGenPushBoolTests { @Test public void pushBoolFalseInstructionGeneratesPushIntZeroInstruction(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.pushBool(false); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } @@ -24,8 +25,9 @@ public class PatioCodeGenPushBoolTests { @Test public void pushBoolTrueInstructionGeneratesPushIntOneInstruction(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.pushBool(true); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushIntTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushIntTests.java index 5b1d7064..03a18aaa 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushIntTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushIntTests.java @@ -15,8 +15,9 @@ public class PatioCodeGenPushIntTests { @Test public void pushIntInstructionGeneratesPushIntInstruction(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.pushInt(42); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushUnitTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushUnitTests.java index 333bbee1..11629e37 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushUnitTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenPushUnitTests.java @@ -15,8 +15,9 @@ public class PatioCodeGenPushUnitTests { @Test public void pushUnitInstructionGeneratesPushIntInstruction(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.pushUnit(); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java index 59c5f436..0723459f 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenReturnTests.java @@ -15,8 +15,9 @@ public class PatioCodeGenReturnTests { @Test public void returnInstructionGeneratesReturnInstruction(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.return_(); + var context = PatioCodeGenContext.EMPTY; - var result = PatioCodeGen.generateInstruction(stackIr); + var result = PatioCodeGen.generateInstruction(stackIr, context); snapshotter.assertSnapshot(serialize(result)); } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java index 562b32f9..0a4387c4 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java @@ -2,14 +2,15 @@ package org.shedlang.compiler.patio; import org.shedlang.compiler.patio.instructions.PatioInstruction; -import java.util.List; - class PatioTesting { private PatioTesting() {} - static String serialize(List instructions) { + static String serialize(PatioCodeGenContext context) { var builder = new StringBuilder(); - PatioInstructionSerializer.serializeInstructions(instructions, builder); + PatioInstructionSerializer.serializeInstructions( + context.functionContext().instructions(), + builder + ); return builder.toString(); } -- cgit v1.2.3