From 8c0463d87b84966aef30d1a3a104a4c4fa916cd7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 17 Jun 2023 21:11:14 +0100 Subject: Extract castClosurePointerToValue --- .../backends/llvm/LlvmCompilerClosures.java | 29 +++++++++++++++------- 1 file changed, 20 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 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 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 castValueToClosurePointer( LlvmOperand value, LlvmCompilerContext context -- cgit v1.2.3