diff options
| -rw-r--r-- | include/mruby/error.h | 15 | ||||
| -rw-r--r-- | mrbgems/mruby-error/src/exception.c | 6 | ||||
| -rw-r--r-- | src/vm.c | 2 |
3 files changed, 11 insertions, 12 deletions
diff --git a/include/mruby/error.h b/include/mruby/error.h index a715eb0b6..20ca38586 100644 --- a/include/mruby/error.h +++ b/include/mruby/error.h @@ -104,6 +104,13 @@ mrb_break_tag_set(struct RBreak *brk, uint32_t tag) /** * Protect * + */ +typedef mrb_value mrb_protect_error_func(mrb_state *mrb, void *userdata); +MRB_API mrb_value mrb_protect_error(mrb_state *mrb, mrb_protect_error_func *body, void *userdata, mrb_bool *error); + +/** + * Protect (takes mrb_value for body argument) + * * Implemented in the mruby-error mrbgem */ MRB_API mrb_value mrb_protect(mrb_state *mrb, mrb_func_t body, mrb_value data, mrb_bool *state); @@ -133,14 +140,6 @@ MRB_API mrb_value mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_val mrb_func_t rescue, mrb_value r_data, mrb_int len, struct RClass **classes); -typedef mrb_value mrb_protect_raw_func(mrb_state *mrb, void *userdata); - -/** - * This API function behaves like `mrb_protect()`. - * The advantage is that it avoids objectifying the user data. - */ -MRB_API mrb_value mrb_protect_raw(mrb_state *mrb, mrb_protect_raw_func *body, void *userdata, mrb_bool *error); - MRB_END_DECL #endif /* MRUBY_ERROR_H */ diff --git a/mrbgems/mruby-error/src/exception.c b/mrbgems/mruby-error/src/exception.c index cbc4835d8..ca26b8819 100644 --- a/mrbgems/mruby-error/src/exception.c +++ b/mrbgems/mruby-error/src/exception.c @@ -17,7 +17,7 @@ MRB_API mrb_value mrb_protect(mrb_state *mrb, mrb_func_t body, mrb_value data, mrb_bool *state) { struct protect_data protect_data = { body, data }; - return mrb_protect_raw(mrb, protect_body, &protect_data, state); + return mrb_protect_error(mrb, protect_body, &protect_data, state); } MRB_API mrb_value @@ -26,7 +26,7 @@ mrb_ensure(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t ensure, int ai = mrb_gc_arena_save(mrb); struct protect_data protect_data = { body, b_data }; mrb_bool error; - mrb_value result = mrb_protect_raw(mrb, protect_body, &protect_data, &error); + mrb_value result = mrb_protect_error(mrb, protect_body, &protect_data, &error); ensure(mrb, e_data); mrb_gc_arena_restore(mrb, ai); mrb_gc_protect(mrb, result); @@ -50,7 +50,7 @@ mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_fun int ai = mrb_gc_arena_save(mrb); struct protect_data protect_data = { body, b_data }; mrb_bool error; - mrb_value result = mrb_protect_raw(mrb, protect_body, &protect_data, &error); + mrb_value result = mrb_protect_error(mrb, protect_body, &protect_data, &error); if (error) { mrb_bool error_matched = FALSE; for (mrb_int i = 0; i < len; ++i) { @@ -307,7 +307,7 @@ cipop(mrb_state *mrb) } MRB_API mrb_value -mrb_protect_raw(mrb_state *mrb, mrb_protect_raw_func *body, void *userdata, mrb_bool *error) +mrb_protect_error(mrb_state *mrb, mrb_protect_error_func *body, void *userdata, mrb_bool *error) { struct mrb_jmpbuf *prev_jmp = mrb->jmp; struct mrb_jmpbuf c_jmp; |
