summaryrefslogtreecommitdiffstatshomepage
path: root/lib/utils/pyexec.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-10-17 13:14:59 +1100
committerDamien George <damien.p.george@gmail.com>2016-10-17 13:14:59 +1100
commitad3724e0bc87305f9280f65226066a199042d736 (patch)
tree16de7f66f999c0fda8dc093be4b9c9f989f35488 /lib/utils/pyexec.c
parent7d0d7215d2575a2d36d34c9a13b58cade0610a28 (diff)
downloadmicropython-ad3724e0bc87305f9280f65226066a199042d736.tar.gz
micropython-ad3724e0bc87305f9280f65226066a199042d736.zip
lib/utils/pyexec: Allow behaviour of SystemExit to be configurable.
Setting the pyexec_system_exit variable to PYEXEC_FORCED_EXT allows SystemExit exceptions to terminate the pyexec functions.
Diffstat (limited to 'lib/utils/pyexec.c')
-rw-r--r--lib/utils/pyexec.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/utils/pyexec.c b/lib/utils/pyexec.c
index 5824e14035..d7c2570240 100644
--- a/lib/utils/pyexec.c
+++ b/lib/utils/pyexec.c
@@ -45,6 +45,7 @@
#include "genhdr/mpversion.h"
pyexec_mode_kind_t pyexec_mode_kind = PYEXEC_MODE_FRIENDLY_REPL;
+int pyexec_system_exit = 0;
STATIC bool repl_display_debugging_info = 0;
#define EXEC_FLAG_PRINT_EOF (1)
@@ -61,6 +62,9 @@ STATIC int parse_compile_execute(void *source, mp_parse_input_kind_t input_kind,
int ret = 0;
uint32_t start = 0;
+ // by default a SystemExit exception returns 0
+ pyexec_system_exit = 0;
+
nlr_buf_t nlr;
if (nlr_push(&nlr) == 0) {
mp_obj_t module_fun;
@@ -99,7 +103,7 @@ STATIC int parse_compile_execute(void *source, mp_parse_input_kind_t input_kind,
// check for SystemExit
if (mp_obj_is_subclass_fast(mp_obj_get_type((mp_obj_t)nlr.ret_val), &mp_type_SystemExit)) {
// at the moment, the value of SystemExit is unused
- ret = 0;
+ ret = pyexec_system_exit;
} else {
mp_obj_print_exception(&mp_plat_print, (mp_obj_t)nlr.ret_val);
ret = 0;