|
40 | 40 | */
|
41 | 41 | package com.oracle.graal.python.builtins.modules;
|
42 | 42 |
|
| 43 | +import static java.lang.StrictMath.toIntExact; |
| 44 | + |
43 | 45 | import java.util.Hashtable;
|
44 | 46 | import java.util.List;
|
45 | 47 |
|
46 | 48 | import com.oracle.graal.python.builtins.Builtin;
|
47 | 49 | import com.oracle.graal.python.builtins.CoreFunctions;
|
| 50 | +import com.oracle.graal.python.builtins.PythonBuiltinClassType; |
48 | 51 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
49 | 52 | import com.oracle.graal.python.builtins.objects.PNone;
|
50 | 53 | import com.oracle.graal.python.builtins.objects.function.PBuiltinFunction;
|
|
65 | 68 | import com.oracle.truffle.api.dsl.Specialization;
|
66 | 69 | import com.oracle.truffle.api.dsl.TypeSystemReference;
|
67 | 70 |
|
68 |
| -import static java.lang.StrictMath.toIntExact; |
69 |
| - |
70 | 71 | @CoreFunctions(defineModule = "_signal")
|
71 | 72 | public class SignalModuleBuiltins extends PythonBuiltins {
|
72 | 73 | private static Hashtable<Integer, Object> signalHandlers = new Hashtable<>();
|
@@ -209,7 +210,11 @@ Object signal(int signum, PFunction handler) {
|
209 | 210 | @Specialization
|
210 | 211 | @TruffleBoundary
|
211 | 212 | Object signal(long signum, PFunction handler) {
|
212 |
| - return installSignalHandler(toIntExact(signum), handler, handler.getCallTarget(), createArgs.execute(new Object[]{signum, PNone.NONE})); |
| 213 | + try { |
| 214 | + return installSignalHandler(toIntExact(signum), handler, handler.getCallTarget(), createArgs.execute(new Object[]{signum, PNone.NONE})); |
| 215 | + } catch (ArithmeticException ae) { |
| 216 | + throw raise(PythonBuiltinClassType.OverflowError, "Python int too large to convert to C int"); |
| 217 | + } |
213 | 218 | }
|
214 | 219 | }
|
215 | 220 | }
|
|
0 commit comments