From e0b3b87e19f9a3c99022110a24ced14eb0c7329c Mon Sep 17 00:00:00 2001 From: Daniel Chao Date: Thu, 17 Sep 2026 21:57:35 -0700 Subject: [PATCH] Fix native image build (#1865) PE code can't call `Object.equals` --- .../core/ast/expression/member/ReadSuperEntryNode.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperEntryNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperEntryNode.java index fec8ef981..a5682e349 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperEntryNode.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/member/ReadSuperEntryNode.java @@ -15,6 +15,7 @@ */ package org.pkl.core.ast.expression.member; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Executed; import com.oracle.truffle.api.dsl.ImportStatic; @@ -53,7 +54,7 @@ public abstract class ReadSuperEntryNode extends ExpressionNode { "getObjectReceiver(frame) == receiver", "getOwner(frame) == initialOwner", // fine to use `Object.equals` here because an object key is deep-forced upon lookup anyway - "key.equals(cachedKey)" + "equals(key, cachedKey)" }) protected Object evalCached( VirtualFrame frame, @@ -75,6 +76,11 @@ public abstract class ReadSuperEntryNode extends ExpressionNode { return doEval(key, receiver, ownerAndMember); } + @TruffleBoundary + protected final boolean equals(Object obj1, Object obj2) { + return obj1.equals(obj2); + } + protected final Object doEval( Object key, VmObjectLike receiver,