|
83 | 83 | import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiUnaryBuiltinNode;
|
84 | 84 | import com.oracle.graal.python.builtins.modules.cext.PythonCextFileBuiltins.PyFile_WriteObject;
|
85 | 85 | import com.oracle.graal.python.builtins.objects.PNone;
|
86 |
| -import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.ClearCurrentExceptionNode; |
87 | 86 | import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PyErrFetchNode;
|
88 | 87 | import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PyErrOccurredNode;
|
89 |
| -import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.TransformExceptionToNativeNode; |
90 |
| -import com.oracle.graal.python.builtins.objects.cext.capi.PThreadState; |
| 88 | +import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.NativeToPythonNode; |
91 | 89 | import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions.PythonToNativeNewRefNode;
|
| 90 | +import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.ClearCurrentExceptionNode; |
| 91 | +import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.TransformExceptionToNativeNode; |
92 | 92 | import com.oracle.graal.python.builtins.objects.cext.common.NativePointer;
|
93 | 93 | import com.oracle.graal.python.builtins.objects.cext.structs.CStructAccess;
|
94 | 94 | import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageGetItem;
|
|
126 | 126 | import com.oracle.graal.python.runtime.exception.PythonErrorType;
|
127 | 127 | import com.oracle.graal.python.runtime.object.PythonObjectFactory;
|
128 | 128 | import com.oracle.truffle.api.CompilerAsserts;
|
| 129 | +import com.oracle.truffle.api.CompilerDirectives; |
129 | 130 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
130 | 131 | import com.oracle.truffle.api.dsl.Bind;
|
131 | 132 | import com.oracle.truffle.api.dsl.Cached;
|
@@ -239,11 +240,17 @@ private static void doNoException(Object pType, Object pValue, Object pTraceback
|
239 | 240 | @CApiBuiltin(ret = PyObjectBorrowed, args = {PyThreadState}, call = Ignored)
|
240 | 241 | abstract static class _PyTruffleErr_Occurred extends CApiUnaryBuiltinNode {
|
241 | 242 | @Specialization
|
242 |
| - Object run(PThreadState state, |
| 243 | + Object run(Object threadStatePtr, |
243 | 244 | @Bind("this") Node inliningTarget,
|
| 245 | + @Cached NativeToPythonNode nativePtrToPythonNode, |
244 | 246 | @Cached PyErrOccurredNode pyErrOccurredNode) {
|
245 |
| - Object excType = pyErrOccurredNode.execute(inliningTarget, state.getThreadState()); |
246 |
| - return excType != null ? excType : getNativeNull(); |
| 247 | + Object resolved = nativePtrToPythonNode.execute(threadStatePtr); |
| 248 | + if (resolved instanceof PythonThreadState pythonThreadState) { |
| 249 | + Object excType = pyErrOccurredNode.execute(inliningTarget, pythonThreadState); |
| 250 | + return excType != null ? excType : getNativeNull(); |
| 251 | + } |
| 252 | + CompilerDirectives.transferToInterpreterAndInvalidate(); |
| 253 | + throw CompilerDirectives.shouldNotReachHere(String.format("invalid PyThreadState pointer %s (resolved to: %s)", threadStatePtr, resolved)); |
247 | 254 | }
|
248 | 255 | }
|
249 | 256 |
|
|
0 commit comments