From 179e49ae34f9d5869249b2675de04863d6b402ad Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 20 Jul 2023 15:13:40 +0100 Subject: Add params to closure function --- .../org/shedlang/compiler/patio/PatioCodeGenClosures.java | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java index 97dcdd64..9f9487b2 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; +import java.util.stream.Stream; import static org.shedlang.compiler.util.Iterables.sortedBy; @@ -72,6 +73,16 @@ class PatioCodeGenClosures { bodyContext = bodyContext.addArg(closurePointer); + var stackIrParams = Stream.concat(positionalParams.stream(), namedParams.stream()).toList(); + + for (var stackIrParam : stackIrParams) { + var paramResult = bodyContext.addStackIrLocal(stackIrParam.name()); + var param = paramResult.value(); + bodyContext = paramResult.context(); + + bodyContext = bodyContext.addArg(param); + } + for (var freeVariable : freeVariables) { var freeVariableLocalResult = bodyContext.addStackIrLocal(freeVariable.name()); var freeVariableLocal = freeVariableLocalResult.value(); -- cgit v1.2.3