Skip to content

Commit 4c58230

Browse files
committed
feat(Lib): sys.exit
1 parent eb84cbd commit 4c58230

3 files changed

Lines changed: 15 additions & 1 deletion

File tree

Python/getargs/dispatch.nim

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ proc clinicGenImplWithPrefix*(prefix: string, def: NimNode): NimNode =
7575
assert def[0][0].strVal == "*"
7676
clinicGenAux(false, genedPureNameStr, def, exported)
7777

78+
79+
macro clinicGenWithPrefix*(prefix: static[string], def) =
80+
clinicGenImplWithPrefix(prefix, def)
81+
7882
macro clinicGen*(name; exported: static[bool], def) =
7983
## pragma for proc def.
8084
##

Python/pythonrun/pyerr.nim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ proc handle_system_exit(exc) =
2323
Py_Exit(exitcode)
2424

2525
proc PyErr_PrintEx*(exc; set_sys_last_vars: bool=false){.pyCFuncPragma.} =
26+
handle_system_exit(exc)
2627
template ss(id, val) =
2728
discard PySys_SetAttrNonNil(pyId id, val)
2829
let

Python/sysmodule.nim

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import ../Objects/[
99
noneobject,
1010
typeobject,
1111
]
12+
import ../Objects/exceptions/extra_utils
1213
import ../Objects/numobjects/intobject_decl
1314
import ../Objects/bltcommon; export bltcommon
1415
import ../Utils/trans_imp
15-
import ./getargs/va_and_kw
16+
import ./getargs/[va_and_kw, dispatch]
1617
impExp sysmodule,
1718
decl, init, audit, hooks, attrs, int_max_str_digits
1819

@@ -35,3 +36,11 @@ implSysModuleMethod set_int_max_str_digits(*a, **kw):
3536
retIfExc PyArg_ParseTupleAndKeywordsAs("set_int_max_str_digits", a, kw, [], maxdigits: int)
3637
retIfExc PySys_SetIntMaxStrDigits(maxdigits)
3738
pyNone
39+
40+
proc exit*(status: PyObject = pyNone): PyObject{.clinicGenWithPrefix"sys".} =
41+
## sys.exit([status])
42+
let res = PyErr_CreateException(pySystemExitObjectType, status)
43+
res.thrown = true
44+
return res
45+
46+
implSysModuleMethod exit(*args): sys_exit(args, nil)

0 commit comments

Comments
 (0)