From 70882baa0eb2cecf83089ffcdf540976186c5e67 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 20 Jul 2023 15:20:11 +0100 Subject: Convert closure value to closure pointer before call --- .../java/org/shedlang/compiler/patio/PatioCodeGen.java | 2 +- .../shedlang/compiler/patio/PatioCodeGenClosures.java | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java index ffa8a74e..db00aea8 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java @@ -72,7 +72,7 @@ public class PatioCodeGen { var receiverResult = context.allocateLocal( PatioCodeGenLocalSpace.RECEIVER, - PatioCodeGenClosures.CLOSURE_POINTER_TYPE + PatioCodeGenTypes.VALUE_TYPE ); var receiver = receiverResult.value(); context = receiverResult.context(); diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java index 9f9487b2..29136b20 100644 --- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java +++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java @@ -157,6 +157,19 @@ class PatioCodeGenClosures { Source source, PatioCodeGenContext context ) { + var closurePointerResult = context.allocateLocal( + PatioCodeGenLocalSpace.CLOSURE_POINTER, + CLOSURE_POINTER_TYPE + ); + var closurePointer = closurePointerResult.value(); + context = closurePointerResult.context(); + + context = context.addInstruction(new PatioIntToDataPtr( + closurePointer, + closure, + source + )); + var functionPointerResult = context.allocateLocal( PatioCodeGenLocalSpace.CALL_FUNCTION_POINTER, PatioTypes.FUNCTION_POINTER @@ -166,7 +179,7 @@ class PatioCodeGenClosures { context = context.addInstruction(new PatioMemoryLoad( functionPointer, - closure, + closurePointer, closureDataLayoutForCall(), FUNCTION_POINTER_OFFSET, source @@ -174,7 +187,7 @@ class PatioCodeGenClosures { var args = new ArrayList(); - args.add(closure); + args.add(closurePointer); args.addAll(positionalArgs); -- cgit v1.2.3