Skip to content

Commit d895bc2

Browse files
committed
Pass 'null' frame to call node in 'atexit' handler.
1 parent 9239d9b commit d895bc2

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/AtexitModuleBuiltins.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,23 @@
4242

4343
import java.util.List;
4444

45+
import com.oracle.graal.python.PythonLanguage;
4546
import com.oracle.graal.python.builtins.Builtin;
4647
import com.oracle.graal.python.builtins.CoreFunctions;
4748
import com.oracle.graal.python.builtins.PythonBuiltins;
4849
import com.oracle.graal.python.builtins.objects.PNone;
4950
import com.oracle.graal.python.builtins.objects.function.PKeyword;
51+
import com.oracle.graal.python.nodes.PNodeWithGlobalState;
52+
import com.oracle.graal.python.nodes.PNodeWithGlobalState.DefaultContextManager;
5053
import com.oracle.graal.python.nodes.call.CallNode;
5154
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5255
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
5356
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
57+
import com.oracle.graal.python.runtime.PythonContext;
58+
import com.oracle.graal.python.runtime.exception.PException;
5459
import com.oracle.truffle.api.Truffle;
5560
import com.oracle.truffle.api.TruffleLanguage;
61+
import com.oracle.truffle.api.TruffleLanguage.ContextReference;
5662
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
5763
import com.oracle.truffle.api.dsl.NodeFactory;
5864
import com.oracle.truffle.api.dsl.Specialization;
@@ -70,7 +76,10 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
7076
@GenerateNodeFactory
7177
abstract static class RegisterNode extends PythonVarargsBuiltinNode {
7278
private static class AtExitCallTarget extends RootNode {
73-
@Child CallNode callNode = CallNode.create();
79+
@Child private CallNode callNode = CallNode.create();
80+
81+
private final ContextReference<PythonContext> contextRef = lookupContextReference(PythonLanguage.class);
82+
7483
private Object callable;
7584
private Object[] arguments;
7685
private PKeyword[] keywords;
@@ -83,8 +92,12 @@ protected AtExitCallTarget(TruffleLanguage<?> language, Object callable, Object[
8392
}
8493

8594
@Override
95+
@SuppressWarnings("try")
8696
public Object execute(VirtualFrame frame) {
87-
return callNode.execute(frame, callable, arguments, keywords);
97+
// we deliberately pass 'null' frame here
98+
try (DefaultContextManager cm = PNodeWithGlobalState.transferToContext(contextRef, PException.NO_EXCEPTION)) {
99+
return callNode.execute(null, callable, arguments, keywords);
100+
}
88101
}
89102
}
90103

0 commit comments

Comments
 (0)