From 31c80e792e1f9d805462c9f1f62c6227691a1394 Mon Sep 17 00:00:00 2001 From: Daniel Chao Date: Thu, 20 Feb 2025 08:09:22 -0800 Subject: [PATCH] Ensure `findOrAddAuxiliarySlot` is not called during compilation (#969) Fixes an issue that is preventing the native executable from building --- .../main/java/org/pkl/core/ast/type/TypeNode.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java b/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java index cb0bb6f9..ca574df8 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java @@ -2538,9 +2538,17 @@ public abstract class TypeNode extends PklNode { @ExplodeLoop protected Object executeLazily(VirtualFrame frame, Object value) { - var customThisSlot = - frame.getFrameDescriptor().findOrAddAuxiliarySlot(CustomThisScope.FRAME_SLOT_ID); - + int customThisSlot; + var numberOfAuxiliarySlots = frame.getFrameDescriptor().getNumberOfAuxiliarySlots(); + if (numberOfAuxiliarySlots == 0) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + customThisSlot = + frame.getFrameDescriptor().findOrAddAuxiliarySlot(CustomThisScope.FRAME_SLOT_ID); + } else { + // assertion: we only use auxiliary slots for custom `this`. + assert numberOfAuxiliarySlots == 1; + customThisSlot = 0; + } var ret = childNode.executeLazily(frame, value); var localContext = language.localContext.get();