diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-17 21:23:10 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-17 21:23:10 +0100 |
| commit | 5c81b1b587ce4b65da85c2d5aa11d90ba59bc36e (patch) | |
| tree | 76b36329a0060056cc6df790fc9d4e5450856c3c /src/main/java | |
| parent | d47fd4b64d148fa25682209ccaec1f25a9156620 (diff) | |
Extract storeClosureFunctionPointer()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java | 32 |
1 files changed, 23 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 21e50495..9ee909bb 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java @@ -109,19 +109,12 @@ public class LlvmCompilerClosures { ) )); - var closureFunctionPointerPointerResult = getClosureFunctionPointerPointer( + context = storeClosureFunctionPointer( closurePointer, closureTypes, + new LlvmVariableGlobal(topLevelEntityName), context ); - var closureFunctionPointerPointer = closureFunctionPointerPointerResult.value(); - context = closureFunctionPointerPointerResult.context(); - - context = context.addInstruction(new LlvmStore( - closureTypes.closureFunctionPointer(), - new LlvmVariableGlobal(topLevelEntityName), - closureFunctionPointerPointer - )); var freeVariableIndex = 0; for (var freeVariable : freeVariables) { @@ -219,6 +212,27 @@ public class LlvmCompilerClosures { return context.toResult(closurePointer); } + private static LlvmCompilerContext storeClosureFunctionPointer( + LlvmOperand closurePointer, + Types closureTypes, + LlvmOperand function, + LlvmCompilerContext context + ) { + var closureFunctionPointerPointerResult = getClosureFunctionPointerPointer( + closurePointer, + closureTypes, + context + ); + var closureFunctionPointerPointer = closureFunctionPointerPointerResult.value(); + context = closureFunctionPointerPointerResult.context(); + + return context.addInstruction(new LlvmStore( + closureTypes.closureFunctionPointer(), + function, + closureFunctionPointerPointer + )); + } + private static LlvmCompilerResult<LlvmVariableLocal> loadClosureFunctionPointer( LlvmOperand closurePointer, LlvmCompilerContext context |
