Skip to content

Commit b8f29f0

Browse files
committed
Fix: do proper callee enter in MayRaiseNode
1 parent 7d331c6 commit b8f29f0

File tree

1 file changed

+19
-5
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi

1 file changed

+19
-5
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
9393
import com.oracle.graal.python.builtins.objects.complex.PComplex;
9494
import com.oracle.graal.python.builtins.objects.floats.PFloat;
95+
import com.oracle.graal.python.builtins.objects.function.PArguments;
9596
import com.oracle.graal.python.builtins.objects.function.PKeyword;
9697
import com.oracle.graal.python.builtins.objects.function.Signature;
9798
import com.oracle.graal.python.builtins.objects.getsetdescriptor.DescriptorDeleteMarker;
@@ -113,6 +114,7 @@
113114
import com.oracle.graal.python.nodes.SpecialMethodNames;
114115
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
115116
import com.oracle.graal.python.nodes.call.CallNode;
117+
import com.oracle.graal.python.nodes.call.CallTargetInvokeNode;
116118
import com.oracle.graal.python.nodes.call.special.CallBinaryMethodNode;
117119
import com.oracle.graal.python.nodes.call.special.CallTernaryMethodNode;
118120
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
@@ -124,6 +126,7 @@
124126
import com.oracle.graal.python.nodes.truffle.PythonTypes;
125127
import com.oracle.graal.python.nodes.util.CannotCastException;
126128
import com.oracle.graal.python.nodes.util.CastToJavaLongLossyNode;
129+
import com.oracle.graal.python.runtime.ExecutionContext.CalleeContext;
127130
import com.oracle.graal.python.runtime.PythonContext;
128131
import com.oracle.graal.python.runtime.PythonCore;
129132
import com.oracle.graal.python.runtime.PythonOptions;
@@ -138,7 +141,6 @@
138141
import com.oracle.truffle.api.CompilerDirectives;
139142
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
140143
import com.oracle.truffle.api.RootCallTarget;
141-
import com.oracle.truffle.api.Truffle;
142144
import com.oracle.truffle.api.TruffleLanguage.ContextReference;
143145
import com.oracle.truffle.api.TruffleLogger;
144146
import com.oracle.truffle.api.dsl.Cached;
@@ -159,7 +161,6 @@
159161
import com.oracle.truffle.api.interop.UnsupportedMessageException;
160162
import com.oracle.truffle.api.interop.UnsupportedTypeException;
161163
import com.oracle.truffle.api.library.CachedLibrary;
162-
import com.oracle.truffle.api.nodes.DirectCallNode;
163164
import com.oracle.truffle.api.nodes.ExplodeLoop;
164165
import com.oracle.truffle.api.nodes.InvalidAssumptionException;
165166
import com.oracle.truffle.api.nodes.Node;
@@ -2476,27 +2477,40 @@ public static PCallCapiFunction getUncached() {
24762477
// -----------------------------------------------------------------------------------------------------------------
24772478
@Builtin(takesVarArgs = true)
24782479
public static class MayRaiseNode extends PRootNode {
2479-
@Child private DirectCallNode callNode;
2480+
@Child private CallTargetInvokeNode callTargetInvokeNode;
24802481
@Child private TransformExceptionToNativeNode transformExceptionToNativeNode;
2482+
@Child private CalleeContext calleeContext;
24812483

24822484
private final Signature signature;
24832485
private final Object errorResult;
24842486

24852487
public MayRaiseNode(PythonLanguage lang, Signature sign, RootCallTarget ct, Object errorResult) {
24862488
super(lang);
24872489
this.signature = sign;
2488-
this.callNode = Truffle.getRuntime().createDirectCallNode(ct);
2490+
this.callTargetInvokeNode = CallTargetInvokeNode.create(ct, false, false);
2491+
this.calleeContext = CalleeContext.create();
24892492
this.errorResult = errorResult;
24902493
}
24912494

24922495
@Override
24932496
public final Object execute(VirtualFrame frame) {
2497+
Object[] arguments = frame.getArguments();
2498+
int userArgumentLength = PArguments.getUserArgumentLength(arguments);
2499+
Object[] newArguments = PArguments.create(userArgumentLength);
2500+
// just copy user arguments, varargs and kwargs
2501+
System.arraycopy(arguments, PArguments.USER_ARGUMENTS_OFFSET, newArguments, PArguments.USER_ARGUMENTS_OFFSET, userArgumentLength);
2502+
PArguments.setVariableArguments(newArguments, PArguments.getVariableArguments(arguments));
2503+
PArguments.setKeywordArguments(newArguments, PArguments.getKeywordArguments(arguments));
2504+
2505+
calleeContext.enter(frame);
24942506
try {
2495-
return callNode.call(frame.getArguments());
2507+
return callTargetInvokeNode.execute(frame, null, PArguments.getGlobals(arguments), PArguments.getClosure(arguments), newArguments);
24962508
} catch (PException e) {
24972509
// transformExceptionToNativeNode acts as a branch profile
24982510
ensureTransformExceptionToNativeNode().execute(frame, e);
24992511
return errorResult;
2512+
} finally {
2513+
calleeContext.exit(frame, this);
25002514
}
25012515
}
25022516

0 commit comments

Comments
 (0)