aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 22:09:43 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 22:09:43 +0100
commitddf005024d396dd4194447bdc0cbe6ef03d43df0 (patch)
tree55c93e92c97ae4174b4348b3ba60468a0bc6a8d3 /src/main/java/org
parent5966b8fbed429454f9de6756fc0cb54cb9d0aafa (diff)
Add loaded free variables as locals
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
index 22c55ce2..1f977db2 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
@@ -76,7 +76,7 @@ public class LlvmCompilerClosures {
);
var functionContext = context.enterFunction();
- var functionClosurePointerResult = context.generateVariableLocal(
+ var functionClosurePointerResult = functionContext.generateVariableLocal(
LlvmCompilerLocalVariableSpace.CLOSURE_POINTER
);
var functionClosurePointer = functionClosurePointerResult.value();
@@ -355,11 +355,13 @@ public class LlvmCompilerClosures {
var closureFreeVariable = closureFreeVariableResult.value();
context = closureFreeVariableResult.context();
- return context.addInstruction(new LlvmLoad(
+ context = context.addInstruction(new LlvmLoad(
closureFreeVariable,
LlvmCompilerTypes.VALUE_TYPE,
closureFreeVariablePointer
));
+
+ return context.addLocal(freeVariable.name(), closureFreeVariable);
}
private static LlvmCompilerResult<LlvmVariableLocal> getClosureFreeVariablePointer(