aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 21:11:14 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 21:11:14 +0100
commit8c0463d87b84966aef30d1a3a104a4c4fa916cd7 (patch)
treee0fbdd92801458ba0451933484673dba05ba3799 /src/main/java
parent8f03a9fb5d65c44762edd478d964935da5f2c85a (diff)
Extract castClosurePointerToValue
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java29
1 files changed, 20 insertions, 9 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 9db59c56..26674a40 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java
@@ -156,18 +156,10 @@ public class LlvmCompilerClosures {
}
- var closureValueResult = context.generateVariableLocal(
- LlvmCompilerLocalVariableSpace.CLOSURE_VALUE
- );
+ var closureValueResult = castClosurePointerToValue(closurePointer, context);
var closureValue = closureValueResult.value();
context = closureValueResult.context();
- context = context.addInstruction(new LlvmPtrToInt(
- closureValue,
- closurePointer,
- LlvmCompilerTypes.VALUE_TYPE
- ));
-
context = context.push(closureValue);
return context;
@@ -210,6 +202,25 @@ public class LlvmCompilerClosures {
)).push(callTarget);
}
+ private static LlvmCompilerResult<LlvmVariableLocal> castClosurePointerToValue(
+ LlvmOperand closurePointer,
+ LlvmCompilerContext context
+ ) {
+ var closureValueResult = context.generateVariableLocal(
+ LlvmCompilerLocalVariableSpace.CLOSURE_VALUE
+ );
+ var closureValue = closureValueResult.value();
+ context = closureValueResult.context();
+
+ context = context.addInstruction(new LlvmPtrToInt(
+ closureValue,
+ closurePointer,
+ LlvmCompilerTypes.VALUE_TYPE
+ ));
+
+ return context.toResult(closureValue);
+ }
+
private static LlvmCompilerResult<LlvmVariableLocal> castValueToClosurePointer(
LlvmOperand value,
LlvmCompilerContext context