diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-17 21:17:35 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-17 21:17:35 +0100 |
| commit | 3c40d3f2134b7cdcc543c76c6d8206a8615fd32b (patch) | |
| tree | 52f7618a81ea21d4e44e4a4e077ade4e078e6aee /src/main/java | |
| parent | 770c3ff7989e0e62b4e9bd85bc2db208abd4700a (diff) | |
Extract storeClosureFreeVariablePointer
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java | 37 |
1 files changed, 26 insertions, 11 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 8ecedc66..071b60ff 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmCompilerClosures.java @@ -130,24 +130,16 @@ public class LlvmCompilerClosures { var freeVariableIndex = 0; for (var freeVariable : freeVariables) { - var closureEnvironmentPointerResult = getClosureEnvironmentFieldPointer( + context = storeClosureFreeVariablePointer( closurePointer, freeVariableIndex, + freeVariable, closureTypes, context ); - var closureEnvironmentPointer = closureEnvironmentPointerResult.value(); - context = closureEnvironmentPointerResult.context(); - - context = context.addInstruction(new LlvmStore( - LlvmCompilerTypes.VALUE_TYPE, - context.local(freeVariable), - closureEnvironmentPointer - )); freeVariableIndex++; } - var closureValueResult = castClosurePointerToValue(closurePointer, context); var closureValue = closureValueResult.value(); context = closureValueResult.context(); @@ -293,7 +285,30 @@ public class LlvmCompilerClosures { return context.toResult(environmentPointer); } - private static LlvmCompilerResult<LlvmVariableLocal> getClosureEnvironmentFieldPointer( + private static LlvmCompilerContext storeClosureFreeVariablePointer( + LlvmOperand closurePointer, + int freeVariableIndex, + String freeVariable, + Types closureTypes, + LlvmCompilerContext context + ) { + var closureEnvironmentPointerResult = getClosureFreeVariablePointer( + closurePointer, + freeVariableIndex, + closureTypes, + context + ); + var closureEnvironmentPointer = closureEnvironmentPointerResult.value(); + context = closureEnvironmentPointerResult.context(); + + return context.addInstruction(new LlvmStore( + LlvmCompilerTypes.VALUE_TYPE, + context.local(freeVariable), + closureEnvironmentPointer + )); + } + + private static LlvmCompilerResult<LlvmVariableLocal> getClosureFreeVariablePointer( LlvmOperand closurePointer, int freeVariableIndex, Types closureTypes, |
