diff options
| author | take_cheeze <[email protected]> | 2015-06-22 10:49:37 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-07-15 14:47:15 +0900 |
| commit | f6b5a829729479d4ae557effc15656605ca71781 (patch) | |
| tree | 9127017d099a8e35fcbb30582c60f3f38fd57f20 /mrbgems/mruby-error | |
| parent | cdd72d9c3783749c979edf62522cf9636681538d (diff) | |
| download | mruby-f6b5a829729479d4ae557effc15656605ca71781.tar.gz mruby-f6b5a829729479d4ae557effc15656605ca71781.zip | |
Use class array instead of variadic.
Diffstat (limited to 'mrbgems/mruby-error')
| -rw-r--r-- | mrbgems/mruby-error/src/exception.c | 14 | ||||
| -rw-r--r-- | mrbgems/mruby-error/test/exception.c | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/mrbgems/mruby-error/src/exception.c b/mrbgems/mruby-error/src/exception.c index abd03bc29..7199e0801 100644 --- a/mrbgems/mruby-error/src/exception.c +++ b/mrbgems/mruby-error/src/exception.c @@ -1,4 +1,3 @@ -#include <stdarg.h> #include "mruby.h" #include "mruby/throw.h" #include "mruby/error.h" @@ -52,18 +51,19 @@ MRB_API mrb_value mrb_rescue(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data) { - return mrb_rescue_exceptions(mrb, body, b_data, rescue, r_data, mrb->eStandardError_class, NULL); + return mrb_rescue_exceptions(mrb, body, b_data, rescue, r_data, 1, &mrb->eStandardError_class); } MRB_API mrb_value -mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data, ...) +mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data, + mrb_int len, struct RClass **classes) { struct mrb_jmpbuf *prev_jmp = mrb->jmp; struct mrb_jmpbuf c_jmp; mrb_value result; - va_list excs; struct RClass *cls; mrb_bool error_matched = FALSE; + mrb_int i; MRB_TRY(&c_jmp) { mrb->jmp = &c_jmp; @@ -72,14 +72,12 @@ mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_fun } MRB_CATCH(&c_jmp) { mrb->jmp = prev_jmp; - va_start(excs, r_data); - while((cls = va_arg(excs, struct RClass*))) { - if (mrb_obj_is_kind_of(mrb, mrb_obj_value(mrb->exc), cls)) { + for (i = 0; i < len; ++i) { + if (mrb_obj_is_kind_of(mrb, mrb_obj_value(mrb->exc), classes[i])) { error_matched = TRUE; break; } } - va_end(excs); if (!error_matched) { MRB_THROW(mrb->jmp); } diff --git a/mrbgems/mruby-error/test/exception.c b/mrbgems/mruby-error/test/exception.c index 7c15fb457..2a943aaae 100644 --- a/mrbgems/mruby-error/test/exception.c +++ b/mrbgems/mruby-error/test/exception.c @@ -40,8 +40,10 @@ static mrb_value run_rescue_exceptions(mrb_state *mrb, mrb_value self) { mrb_value b, r; + struct RClass *cls[1]; mrb_get_args(mrb, "oo", &b, &r); - return mrb_rescue_exceptions(mrb, protect_cb, b, protect_cb, r, E_TYPE_ERROR, NULL); + cls[0] = E_TYPE_ERROR; + return mrb_rescue_exceptions(mrb, protect_cb, b, protect_cb, r, 1, cls); } void |
