|
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