summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-09-29 10:21:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 18:20:29 +0900
commit3d6adccfbec44fb13a75ef7055f10fb87242d1fc (patch)
tree046e3941a84587f2407d32317afeaff2e9f2aa20 /include
parent5069fb15e41998dffef8e0ba566b3a82be369ba3 (diff)
downloadmruby-3d6adccfbec44fb13a75ef7055f10fb87242d1fc.tar.gz
mruby-3d6adccfbec44fb13a75ef7055f10fb87242d1fc.zip
Add a new function `mrb_exc_protect()`.
`mrb_exc_protect()` takes two C functions, `body` to be executed first, and `resc` to be executed when an error happens during `body` execution. Since `mrb_exc_protect()` should be compiled with the proper compiler, we will not see the problem like #5088 that was caused by `setjmp()` and `throw` mixture.
Diffstat (limited to 'include')
-rw-r--r--include/mruby.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 52bcd58bf..4bbffb189 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -1293,6 +1293,9 @@ MRB_API void mrb_print_backtrace(mrb_state *mrb);
MRB_API void mrb_print_error(mrb_state *mrb);
/* function for `raisef` formatting */
MRB_API mrb_value mrb_vformat(mrb_state *mrb, const char *format, va_list ap);
+/* function to protect errors during execution */
+MRB_API mrb_value mrb_exc_protect(mrb_state *mrb, mrb_value (*body)(mrb_state*, void*), void *a, mrb_value (*resc)(mrb_state*, void*, mrb_value), void *b);
+
/* macros to get typical exception objects
note: