summaryrefslogtreecommitdiffstatshomepage
path: root/py/runtime_utils.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-12-05 00:38:41 +0200
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-12-05 00:38:41 +0200
commit62b96147e6126961c5d1d6bb28b7ac7034fa9322 (patch)
tree35b8c63969876e7b6d21ff2660f55883bc3dd78c /py/runtime_utils.c
parent3ff7040c8ab268777e940a9bed4aa7c24f50ba31 (diff)
downloadmicropython-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.c12
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;
}
}