diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-20 15:10:13 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-20 15:10:13 +0100 |
| commit | 82a2d5f3b45bfd071b3d4cf104c6e3e7a1526b27 (patch) | |
| tree | 4712c087f2a04f486d82ba295f2c06d490426121 /src/test/java | |
| parent | 7f05f10981e0483f8a4817a7509b2dd5f27923e9 (diff) | |
Load free variables in closure
Diffstat (limited to 'src/test/java')
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), |
