@@ -253,6 +253,10 @@ public void enter(VirtualFrame frame) {
253
253
}
254
254
255
255
public void exit (VirtualFrame frame , PRootNode node ) {
256
+ exit (frame , node , node );
257
+ }
258
+
259
+ public void exit (VirtualFrame frame , PRootNode node , Node location ) {
256
260
/*
257
261
* equivalent to PyPy's ExecutionContext.leave. Note that <tt>got_exception</tt> in
258
262
* their code is handled automatically by the Truffle lazy exceptions, so here we only
@@ -261,12 +265,12 @@ public void exit(VirtualFrame frame, PRootNode node) {
261
265
PFrame .Reference info = PArguments .getCurrentFrameInfo (frame );
262
266
CompilerAsserts .partialEvaluationConstant (node );
263
267
if (node .getFrameEscapedProfile ().profile (info .isEscaped ())) {
264
- exitEscaped (frame , node , info );
268
+ exitEscaped (frame , node , location , info );
265
269
}
266
270
}
267
271
268
272
@ InliningCutoff
269
- private void exitEscaped (VirtualFrame frame , PRootNode node , Reference info ) {
273
+ private void exitEscaped (VirtualFrame frame , PRootNode node , Node location , Reference info ) {
270
274
if (!everEscaped ) {
271
275
CompilerDirectives .transferToInterpreterAndInvalidate ();
272
276
everEscaped = true ;
@@ -294,7 +298,7 @@ private void exitEscaped(VirtualFrame frame, PRootNode node, Reference info) {
294
298
}
295
299
296
300
// force the frame so that it can be accessed later
297
- ensureMaterializeNode ().execute (frame , node , false , true );
301
+ ensureMaterializeNode ().execute (frame , location , false , true );
298
302
// if this frame escaped we must ensure that also f_back does
299
303
callerInfo .markAsEscaped ();
300
304
info .setBackref (callerInfo );
0 commit comments