Skip to content

Commit d26dc2c

Browse files
committed
feat(Lib): signal.SIG*,ITIMER_*
1 parent b91fab9 commit d26dc2c

File tree

4 files changed

+79
-3
lines changed

4 files changed

+79
-3
lines changed

src/pylib/Lib/n_signal.nim

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11

22
import std/sets
33
import ./signal_impl/[
4-
pynsig, signals, signal_util, valid_signals_impl
4+
pynsig, signals, signal_util, valid_signals_impl, enums
55
]
66

77
let NSIG* = int Py_NSIG
8-
export signals, signal_util
8+
export signals, signal_util, enums
9+
export SIG_DFL, SIG_IGN
910

1011
when defined(unix):
1112
import ./signal_impl/unixs

src/pylib/Lib/signal_impl/enums.nim

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
2+
import std/tables
3+
import ./pylifecycle except SigInfo
4+
import ./pynsig
5+
import ../enum_impl/intEnum
6+
7+
# ITIMER* (not enum)
8+
template Exp(sym) =
9+
when declared(sym):
10+
let sym* = int sym
11+
12+
Exp ITIMER_REAL
13+
Exp ITIMER_VIRTUAL
14+
Exp ITIMER_PROF
15+
16+
# SIG*
17+
DeclIntEnumMeth Signals
18+
export Signals
19+
20+
using self: Signals
21+
22+
template add_sig(sym) =
23+
when declared(sym):
24+
when sym != DEF_SIG:
25+
let sym* = Signals.add_member(astToStr(sym), sym)
26+
27+
when true: # just convenient for code folding
28+
add_sig SIGHUP
29+
add_sig SIGINT
30+
add_sig SIGBREAK
31+
add_sig SIGQUIT
32+
add_sig SIGILL
33+
add_sig SIGTRAP
34+
add_sig SIGIOT
35+
add_sig SIGABRT
36+
add_sig SIGEMT
37+
add_sig SIGFPE
38+
add_sig SIGKILL
39+
add_sig SIGBUS
40+
add_sig SIGSEGV
41+
add_sig SIGSYS
42+
add_sig SIGPIPE
43+
add_sig SIGALRM
44+
add_sig SIGTERM
45+
add_sig SIGUSR1
46+
add_sig SIGUSR2
47+
add_sig SIGCLD
48+
add_sig SIGCHLD
49+
add_sig SIGPWR
50+
add_sig SIGIO
51+
add_sig SIGURG
52+
add_sig SIGWINCH
53+
add_sig SIGPOLL
54+
add_sig SIGSTOP
55+
add_sig SIGTSTP
56+
add_sig SIGCONT
57+
add_sig SIGTTIN
58+
add_sig SIGTTOU
59+
add_sig SIGVTALRM
60+
add_sig SIGPROF
61+
add_sig SIGXCPU
62+
add_sig SIGXFSZ
63+
add_sig SIGRTMIN
64+
add_sig SIGRTMAX
65+
add_sig SIGINFO
66+
add_sig SIGSTKFLT
67+
68+
69+
70+

src/pylib/Python/pylifecycle/signal/c_syms.nim

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ when defined(windows):
77
else:
88
import std/posix except EINTR, ERANGE
99
export posix except EINTR, ERANGE
10+
let
11+
ITIMER_REAL*{.importc, header: "<sys/time.h>".}: cint
12+
ITIMER_VIRTUAL*{.importc, header: "<sys/time.h>".}: cint
13+
ITIMER_PROF*{.importc, header: "<sys/time.h>".}: cint
14+
1015
import ./handler_types
1116

1217
const HAVE_SIGACTION* = declared(sigaction)

src/pylib/pyconfig/signal.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ AC_LINK_IFELSE HAVE_STRSIGNAL, false:
2929
proc strsignal(signalnum: cint): cstring {.importc, header: "<string.h>".}
3030
discard strsignal(0)
3131

32-
const DEF_SIG* = low int ## we know int.low is smaller than low(cint)
32+
const DEF_SIG* = -1 ## CPython checks `SIG*` in [0, NSIG)
3333
when not defined(windows):
3434
template SIG(sym) =
3535
const sym* = from_c_int(sym, "<signal.h>", DEF_SIG)

0 commit comments

Comments
 (0)