aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-14 22:02:10 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-14 22:02:10 +0100
commit2e9b821350221fc2defa89e9c4ecefc1c273855b (patch)
treef8a9241bd2822721365199d916509ceeb9a308ec /src/main/java
parent3ac85303c51e4130bc2b8000cd46e12646c7e7d9 (diff)
Handle params when defining functions in LLVM backend
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenClosures.java17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenClosures.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenClosures.java
index a68d200f..b32d69b7 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenClosures.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCodeGenClosures.java
@@ -89,16 +89,22 @@ public class LlvmCodeGenClosures {
bodyContext = functionClosurePointerResult.context();
var shedParams = Stream.concat(positionalParams.stream(), namedParams.stream()).toList();
+ var llvmParams = new ArrayList<LlvmParam>();
+ llvmParams.add(new LlvmParam(
+ closureTypes.closurePointer(),
+ functionClosurePointer.name()
+ ));
for (var shedParam : shedParams) {
var paramResult = bodyContext.generateVariableLocal(
LlvmCodeGenLocalVariableSpace.PARAM,
shedParam.name()
);
- var llvmParam = paramResult.value();
+ var llvmParamVariable = paramResult.value();
bodyContext = paramResult.context();
- bodyContext = bodyContext.addShedLocal(shedParam.name(), llvmParam);
+ bodyContext = bodyContext.addShedLocal(shedParam.name(), llvmParamVariable);
+ llvmParams.add(new LlvmParam(LlvmCodeGenTypes.VALUE_TYPE, llvmParamVariable.name()));
}
for (var freeVariable : freeVariables) {
@@ -115,12 +121,7 @@ public class LlvmCodeGenClosures {
var function = bodyContext.toFunction(
topLevelEntityName,
LlvmCodeGenTypes.VALUE_TYPE,
- List.of(
- new LlvmParam(
- closureTypes.closurePointer(),
- functionClosurePointer.name()
- )
- )
+ llvmParams
);
return bodyContext.toResult(function);
});