summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-error/src
diff options
context:
space:
mode:
authortake_cheeze <[email protected]>2015-06-22 10:49:37 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-07-15 14:47:15 +0900
commitf6b5a829729479d4ae557effc15656605ca71781 (patch)
tree9127017d099a8e35fcbb30582c60f3f38fd57f20 /mrbgems/mruby-error/src
parentcdd72d9c3783749c979edf62522cf9636681538d (diff)
downloadmruby-f6b5a829729479d4ae557effc15656605ca71781.tar.gz
mruby-f6b5a829729479d4ae557effc15656605ca71781.zip
Use class array instead of variadic.
Diffstat (limited to 'mrbgems/mruby-error/src')
-rw-r--r--mrbgems/mruby-error/src/exception.c14
1 files changed, 6 insertions, 8 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); }