Skip to content

Commit 758ccf6

Browse files
committed
feat(Lib/signal): Handlers, Sigmasks, CTRL_*
1 parent d26dc2c commit 758ccf6

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

src/pylib/Lib/signal_impl/enums.nim

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,18 @@ Exp ITIMER_PROF
1717
DeclIntEnumMeth Signals
1818
export Signals
1919

20-
using self: Signals
20+
template add_enum[E](sym, val) =
21+
let sym* = E.add_member(astToStr(sym), val)
2122
2223
template add_sig(sym) =
2324
when declared(sym):
2425
when sym != DEF_SIG:
25-
let sym* = Signals.add_member(astToStr(sym), sym)
26+
add_enum[Signals](sym, sym)
2627
2728
when true: # just convenient for code folding
29+
add_sig CTRL_C_EVENT
30+
add_sig CTRL_BREAK_EVENT
31+
2832
add_sig SIGHUP
2933
add_sig SIGINT
3034
add_sig SIGBREAK
@@ -66,5 +70,27 @@ when true: # just convenient for code folding
6670
add_sig SIGSTKFLT
6771
6872
73+
# SIG_*
74+
DeclIntEnumMeth Handlers
75+
export Handlers
76+
77+
template add_handler(sym) =
78+
when declared(sym):
79+
add_enum[Handlers](sym, cast[int](sym))
80+
81+
add_handler SIG_DFL
82+
add_handler SIG_IGN
6983
7084
85+
# Sigmasks
86+
DeclIntEnumMeth Sigmasks
87+
export Sigmasks
88+
89+
template add_sigmask(sym) =
90+
when declared(sym):
91+
add_enum[Sigmasks](sym, sym)
92+
93+
when not defined(windows):
94+
add_sigmask SIG_BLOCK
95+
add_sigmask SIG_UNBLOCK
96+
add_sigmask SIG_SETMASK

src/pylib/Lib/signal_impl/signals.nim

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@
22
import ./[pynsig, errutil, state, chk_util, pylifecycle, c_py_handler_cvt]
33
import ./pyatomic
44

5-
export SIG_IGN, SIG_DFL
6-
7-
5+
import ./enums
6+
template toPySigHandler(handler: Handlers): PySigHandler =
7+
toPySigHandler case handler:
8+
of enums.SIG_DFL:
9+
pylifecycle.SIG_DFL
10+
of enums.SIG_IGN:
11+
pylifecycle.SIG_IGN
812

913
proc trip_signal(sig_num: cint){.inline.} =
1014
Py_atomic_store(Handlers[sig_num].tripped, true)

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ when defined(windows):
44
export winlean
55
let SIGBREAK*{.importc, header: "<signal.h>".}: cint
66
proc sigismember*(a1: var Sigset, a2: cint): cint {.importc, header: "<signal.h>".}
7+
let
8+
CTRL_C_EVENT*{.importc, header: "<Windows.h>".}: cint
9+
CTRL_BREAK_EVENT*{.importc, header: "<Windows.h>".}: cint
10+
type Sighandler = proc (a1: cint) {.cdecl.}
11+
let
12+
SIG_DFL*{.importc, header: "<signal.h>".}: Sighandler
13+
SIG_IGN*{.importc, header: "<signal.h>".}: Sighandler
714
else:
815
import std/posix except EINTR, ERANGE
916
export posix except EINTR, ERANGE

0 commit comments

Comments
 (0)