aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-20 15:13:40 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-20 15:13:40 +0100
commit179e49ae34f9d5869249b2675de04863d6b402ad (patch)
tree6943f7ba55c4b6c6f1e9d7ee3fccdd77001821d2 /src/main/java
parent82a2d5f3b45bfd071b3d4cf104c6e3e7a1526b27 (diff)
Add params to closure function
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java11
1 files changed, 11 insertions, 0 deletions
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();