diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-17 21:11:14 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-17 21:11:14 +0100 |
| commit | 8c0463d87b84966aef30d1a3a104a4c4fa916cd7 (patch) | |
| tree | e0fbdd92801458ba0451933484673dba05ba3799 /src/main/java | |
| parent | 8f03a9fb5d65c44762edd478d964935da5f2c85a (diff) | |
Extract castClosurePointerToValue
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java | 29 |
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 |
