|
41 | 41 | package com.oracle.graal.python.builtins.modules.cext;
|
42 | 42 |
|
43 | 43 | import static com.oracle.graal.python.builtins.PythonBuiltinClassType.NotImplementedError;
|
| 44 | +import static com.oracle.graal.python.builtins.PythonBuiltinClassType.RecursionError; |
44 | 45 | import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError;
|
45 | 46 | import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Direct;
|
46 | 47 | import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Ignored;
|
|
109 | 110 | import com.oracle.graal.python.builtins.objects.cext.common.CExtToJavaNode;
|
110 | 111 | import com.oracle.graal.python.builtins.objects.cext.common.CExtToNativeNode;
|
111 | 112 | import com.oracle.graal.python.builtins.objects.code.PCode;
|
| 113 | +import com.oracle.graal.python.builtins.objects.exception.PBaseException; |
112 | 114 | import com.oracle.graal.python.builtins.objects.frame.PFrame;
|
113 | 115 | import com.oracle.graal.python.builtins.objects.frame.PFrame.Reference;
|
114 | 116 | import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
|
|
144 | 146 | import com.oracle.graal.python.runtime.PythonContext;
|
145 | 147 | import com.oracle.graal.python.runtime.PythonContext.GetThreadStateNode;
|
146 | 148 | import com.oracle.graal.python.runtime.PythonOptions;
|
| 149 | +import com.oracle.graal.python.runtime.exception.ExceptionUtils; |
147 | 150 | import com.oracle.graal.python.runtime.exception.PException;
|
148 | 151 | import com.oracle.graal.python.runtime.exception.PythonErrorType;
|
149 | 152 | import com.oracle.graal.python.runtime.object.PythonObjectFactory;
|
@@ -249,6 +252,13 @@ public static PException checkThrowableBeforeNative(Throwable t, String where1,
|
249 | 252 | // ThreadDeath subclasses are used internally by Truffle
|
250 | 253 | throw td;
|
251 | 254 | }
|
| 255 | + if (t instanceof StackOverflowError soe) { |
| 256 | + PythonContext context = PythonContext.get(null); |
| 257 | + context.reacquireGilAfterStackOverflow(); |
| 258 | + PBaseException newException = context.factory().createBaseException(RecursionError, ErrorMessages.MAXIMUM_RECURSION_DEPTH_EXCEEDED, EMPTY_OBJECT_ARRAY); |
| 259 | + PException pe = ExceptionUtils.wrapJavaException(soe, null, newException); |
| 260 | + throw pe; |
| 261 | + } |
252 | 262 | // everything else: log and convert to PException (SystemError)
|
253 | 263 | CompilerDirectives.transferToInterpreter();
|
254 | 264 | PNodeWithContext.printStack();
|
|
0 commit comments