diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-12-05 00:38:41 +0200 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-12-05 00:38:41 +0200 |
commit | 62b96147e6126961c5d1d6bb28b7ac7034fa9322 (patch) | |
tree | 35b8c63969876e7b6d21ff2660f55883bc3dd78c /py/runtime_utils.c | |
parent | 3ff7040c8ab268777e940a9bed4aa7c24f50ba31 (diff) | |
download | micropython-62b96147e6126961c5d1d6bb28b7ac7034fa9322.tar.gz micropython-62b96147e6126961c5d1d6bb28b7ac7034fa9322.zip |
py: mp_call_function_*_protected(): Pass-thru return value if possible.
Return the result of called function. If exception happened, return
MP_OBJ_NULL. Allows to use mp_call_function_*_protected() with callbacks
returning values, etc.
Diffstat (limited to 'py/runtime_utils.c')
-rw-r--r-- | py/runtime_utils.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/py/runtime_utils.c b/py/runtime_utils.c index a5c5403baf..b92c6bd767 100644 --- a/py/runtime_utils.c +++ b/py/runtime_utils.c @@ -27,22 +27,26 @@ #include "py/runtime.h" -void mp_call_function_1_protected(mp_obj_t fun, mp_obj_t arg) { +mp_obj_t mp_call_function_1_protected(mp_obj_t fun, mp_obj_t arg) { nlr_buf_t nlr; if (nlr_push(&nlr) == 0) { - mp_call_function_1(fun, arg); + mp_obj_t ret = mp_call_function_1(fun, arg); nlr_pop(); + return ret; } else { mp_obj_print_exception(&mp_plat_print, MP_OBJ_FROM_PTR(nlr.ret_val)); + return MP_OBJ_NULL; } } -void mp_call_function_2_protected(mp_obj_t fun, mp_obj_t arg1, mp_obj_t arg2) { +mp_obj_t mp_call_function_2_protected(mp_obj_t fun, mp_obj_t arg1, mp_obj_t arg2) { nlr_buf_t nlr; if (nlr_push(&nlr) == 0) { - mp_call_function_2(fun, arg1, arg2); + mp_obj_t ret = mp_call_function_2(fun, arg1, arg2); nlr_pop(); + return ret; } else { mp_obj_print_exception(&mp_plat_print, MP_OBJ_FROM_PTR(nlr.ret_val)); + return MP_OBJ_NULL; } } |