@@ -118,8 +118,8 @@ public void initialize(Python3Core core) {
118
118
addBuiltinConstant ("ITIMER_REAL" , ITIMER_REAL );
119
119
addBuiltinConstant ("ITIMER_VIRTUAL" , ITIMER_VIRTUAL );
120
120
addBuiltinConstant ("ITIMER_PROF" , ITIMER_PROF );
121
- for (int i = 0 ; i < Signals .signalNames .length ; i ++) {
122
- String name = Signals .signalNames [i ];
121
+ for (int i = 0 ; i < Signals .SIGNAL_NAMES .length ; i ++) {
122
+ String name = Signals .SIGNAL_NAMES [i ];
123
123
if (name != null ) {
124
124
addBuiltinConstant ("SIG" + name , i );
125
125
}
@@ -174,6 +174,30 @@ public int frameIndex() {
174
174
}
175
175
}
176
176
177
+ @ Builtin (name = "valid_signals" )
178
+ @ GenerateNodeFactory
179
+ abstract static class ValidSignalsNode extends PythonBuiltinNode {
180
+ @ Specialization
181
+ static Object validSignals (
182
+ @ Cached PythonObjectFactory factory ) {
183
+ int signalCount = 0 ;
184
+ for (int i = 0 ; i < Signals .SIGNAL_NAMES .length ; i ++) {
185
+ if (Signals .SIGNAL_NAMES [i ] != null ) {
186
+ signalCount ++;
187
+ }
188
+ }
189
+ int [] validSignals = new int [signalCount ];
190
+ int j = 0 ;
191
+ for (int i = 0 ; i < Signals .SIGNAL_NAMES .length ; i ++) {
192
+ if (Signals .SIGNAL_NAMES [i ] != null ) {
193
+ validSignals [j ++] = i ;
194
+ }
195
+ }
196
+
197
+ return factory .createTuple (validSignals );
198
+ }
199
+ }
200
+
177
201
@ Builtin (name = "alarm" , minNumOfPositionalArgs = 2 , numOfPositionalOnlyArgs = 2 , declaresExplicitSelf = true , parameterNames = {"$mod" , "seconds" })
178
202
@ ArgumentClinic (name = "seconds" , conversion = ArgumentClinic .ClinicConversion .Int )
179
203
@ GenerateNodeFactory
@@ -477,7 +501,7 @@ final class Signals {
477
501
static final int SIG_DFL = 0 ;
478
502
static final int SIG_IGN = 1 ;
479
503
private static final int SIGMAX = 31 ;
480
- static final String [] signalNames = new String [SIGMAX + 1 ];
504
+ static final String [] SIGNAL_NAMES = new String [SIGMAX + 1 ];
481
505
482
506
static {
483
507
for (String signal : new String []{"ABRT" , "ALRM" , "BUS" , "FPE" , "HUP" , "ILL" , "INFO" , "INT" , "KILL" , "LOST" ,
@@ -488,7 +512,7 @@ final class Signals {
488
512
if (number > SIGMAX ) {
489
513
continue ;
490
514
}
491
- signalNames [number ] = signal ;
515
+ SIGNAL_NAMES [number ] = signal ;
492
516
} catch (IllegalArgumentException e ) {
493
517
}
494
518
}
@@ -548,7 +572,7 @@ public void handle(sun.misc.Signal arg0) {
548
572
}
549
573
550
574
static String signalNumberToName (int signum ) {
551
- return signum > SIGMAX ? "INVALID SIGNAL" : signalNames [signum ];
575
+ return signum > SIGMAX ? "INVALID SIGNAL" : SIGNAL_NAMES [signum ];
552
576
}
553
577
554
578
@ TruffleBoundary
0 commit comments