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.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2020-09-29 10:21:10 +09:00
parent 5069fb15e4
commit 3d6adccfbe
2 changed files with 26 additions and 0 deletions
+3
View File
@@ -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: