aboutsummaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 15:10:13 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 15:10:13 +0100
commit82a2d5f3b45bfd071b3d4cf104c6e3e7a1526b27 (patch)
tree4712c087f2a04f486d82ba295f2c06d490426121 /src/test/java
parent7f05f10981e0483f8a4817a7509b2dd5f27923e9 (diff)
Load free variables in closure
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java10
-rw-r--r--src/test/java/org/shedlang/compiler/patio/PatioTesting.java11
-rw-r--r--src/test/java/org/shedlang/compiler/patio/instructions/Patio.java6
3 files changed, 26 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 857089fa..48e5a38e 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioSerializerTests.java
@@ -18,6 +18,11 @@ public class PatioSerializerTests {
var element = PatioFunctionDefinition.builder()
.withName("f")
.withIsPrivate(true)
+ .addParam(Patio.local("param1", PatioTypes.INT))
+ .addParam(Patio.local("param2", PatioTypes.DATA_POINTER))
+ .addLocal(Patio.local("local1", PatioTypes.FUNCTION_POINTER))
+ .addLocal(Patio.local("local2", PatioTypes.INT))
+ .addBodyInstruction(Patio.intGet("local2", 2))
.build();
var string = PatioTesting.serializeCompilationUnitElement(element);
@@ -27,6 +32,11 @@ public class PatioSerializerTests {
function
"f"
is-private=true
+ params=(("param1" int) ("param2" data-ptr))
+ locals=(("local1" function-ptr) ("local2" int))
+ body=(
+ (int-get "local2" 2)
+ )
)"""
));
}
diff --git a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
index 8dd331e7..eb7c2d8d 100644
--- a/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
+++ b/src/test/java/org/shedlang/compiler/patio/PatioTesting.java
@@ -19,12 +19,21 @@ class PatioTesting {
}
builder.append("\n");
- builder.append("Locals:\n\n");
+ builder.append("Locals:\n");
for (var local : context.functionContext().localsByName().values()) {
builder.append(" * ");
PatioSerializer.serializeLocal(local, builder);
builder.append("\n");
}
+ builder.append("\n");
+
+ builder.append("Args:\n");
+ for (var arg : context.functionContext().args()) {
+ builder.append(" * ");
+ builder.append(arg.name());
+ builder.append("\n");
+ }
+ builder.append("\n");
builder.append("Instructions:\n\n");
PatioSerializer.serializeInstructions(
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 c3ba0270..5ad05faf 100644
--- a/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
+++ b/src/test/java/org/shedlang/compiler/patio/instructions/Patio.java
@@ -1,8 +1,10 @@
package org.shedlang.compiler.patio.instructions;
+import org.shedlang.compiler.patio.ast.PatioLocal;
import org.shedlang.compiler.patio.ast.PatioLocalRef;
import org.shedlang.compiler.patio.ast.instructions.*;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
+import org.shedlang.compiler.patio.ast.types.PatioType;
import org.shedlang.compiler.sources.Sources;
import java.util.List;
@@ -45,6 +47,10 @@ public class Patio {
return new PatioIntGet(new PatioLocalRef(target), value, Sources.NULL);
}
+ public static PatioLocal local(String name, PatioType type) {
+ return new PatioLocal(name, type);
+ }
+
public static PatioInstruction localCopy(String target, String value) {
return new PatioLocalCopy(
new PatioLocalRef(target),