From 3412aaafe67670b51a25b78bb4805c350820c5a5 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 23 Jul 2023 22:28:11 +0100 Subject: Support mutual-recursion example in Patio --- .../backends/llvm/LlvmPatioExampleTests.java | 3 +-- .../backends/wasm/WasmPatioExampleTests.java | 3 +-- .../patio/PatioCodeGenDefineFunctionTests.java | 30 +++++++++++++++++++--- .../compiler/patio/PatioCodeGenLocalLoadTests.java | 2 +- 4 files changed, 29 insertions(+), 9 deletions(-) (limited to 'src/test/java') diff --git a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmPatioExampleTests.java b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmPatioExampleTests.java index 94ca5779..b43a7846 100644 --- a/src/test/java/org/shedlang/compiler/backends/llvm/LlvmPatioExampleTests.java +++ b/src/test/java/org/shedlang/compiler/backends/llvm/LlvmPatioExampleTests.java @@ -3,7 +3,6 @@ package org.shedlang.compiler.backends.llvm; import org.shedlang.compiler.backends.Backend; import org.shedlang.compiler.backends.ExampleTests; -import java.util.List; import java.util.Optional; public class LlvmPatioExampleTests extends ExampleTests { @@ -24,6 +23,6 @@ public class LlvmPatioExampleTests extends ExampleTests { @Override protected boolean isDisabled(String testName) { - return !List.of("hello-world", "if", "string-add", "true", "val", "val-as-namespace-statement").contains(testName); + return false; } } diff --git a/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioExampleTests.java b/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioExampleTests.java index 74361506..611546e0 100644 --- a/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioExampleTests.java +++ b/src/test/java/org/shedlang/compiler/backends/wasm/WasmPatioExampleTests.java @@ -3,7 +3,6 @@ package org.shedlang.compiler.backends.wasm; import org.shedlang.compiler.backends.Backend; import org.shedlang.compiler.backends.ExampleTests; -import java.util.List; import java.util.Optional; public class WasmPatioExampleTests extends ExampleTests { @@ -24,6 +23,6 @@ public class WasmPatioExampleTests extends ExampleTests { @Override protected boolean isDisabled(String testName) { - return !List.of("hello-world", "if", "string-add", "true", "val", "val-as-namespace-statement").contains(testName); + return false; } } diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineFunctionTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineFunctionTests.java index 4f09ff3b..97a78a1f 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineFunctionTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenDefineFunctionTests.java @@ -50,14 +50,36 @@ public class PatioCodeGenDefineFunctionTests { Sources.NULL ); var context = PatioCodeGenContext.EMPTY - .addStackIrLocal("a").context() - .addStackIrLocal("b").context(); + .addStackIrArg("a") + .addStackIrArg("b"); var result = PatioCodeGen.generateInstruction(instruction, context); snapshotter.assertSnapshot(serialize(result)); } + @Test + public void canCaptureFreeVariablesThatAreSetAfterDefinition(Snapshotter snapshotter) throws IOException { + var instruction = new DefineFunctionInstruction( + "f", + List.of(), + List.of(), + FreeVariables.builder().plus("a", Sources.NULL).plus("b", Sources.NULL).build(), + List.of( + Instructions.localLoad("a"), + Instructions.return_() + ), + Sources.NULL + ); + var context = PatioCodeGenContext.EMPTY; + + context = PatioCodeGen.generateInstruction(instruction, context); + context = context.addStackIrArg("a"); + context = context.addStackIrArg("b"); + + snapshotter.assertSnapshot(serialize(context)); + } + @Test public void positionalAndNamedParamsAreDefined(Snapshotter snapshotter) throws IOException { var instruction = new DefineFunctionInstruction( @@ -76,8 +98,8 @@ public class PatioCodeGenDefineFunctionTests { Sources.NULL ); var context = PatioCodeGenContext.EMPTY - .addStackIrLocal("a").context() - .addStackIrLocal("b").context(); + .addStackIrArg("a") + .addStackIrArg("b"); var result = PatioCodeGen.generateInstruction(instruction, context); diff --git a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java index 643c6d72..67412723 100644 --- a/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java +++ b/src/test/java/org/shedlang/compiler/patio/PatioCodeGenLocalLoadTests.java @@ -16,7 +16,7 @@ public class PatioCodeGenLocalLoadTests { public void localLoadPushesLocalOntoStack(Snapshotter snapshotter) throws IOException { var stackIr = Instructions.localLoad("x"); var context = PatioCodeGenContext.EMPTY - .addStackIrLocal("x").context(); + .addStackIrArg("x"); var result = PatioCodeGen.generateInstruction(stackIr, context); -- cgit v1.2.3