From 5c81b1b587ce4b65da85c2d5aa11d90ba59bc36e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 17 Jun 2023 21:23:10 +0100 Subject: Extract storeClosureFunctionPointer() --- .../backends/llvm/LlvmCompilerClosures.java | 32 ++++++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'src/main/java') 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 loadClosureFunctionPointer( LlvmOperand closurePointer, LlvmCompilerContext context -- cgit v1.2.3