diff options
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 66 |
1 files changed, 12 insertions, 54 deletions
@@ -5832,14 +5832,20 @@ rb_f_send(argc, argv, recv) return vid; } -static VALUE -vafuncall(recv, mid, n, ar) +VALUE +#ifdef HAVE_STDARG_PROTOTYPES +rb_funcall(VALUE recv, ID mid, int n, ...) +#else +rb_funcall(recv, mid, n, va_alist) VALUE recv; ID mid; int n; - va_list *ar; + va_dcl +#endif { VALUE *argv; + va_list ar; + va_init_list(ar, n); if (n > 0) { long i; @@ -5847,9 +5853,9 @@ vafuncall(recv, mid, n, ar) argv = ALLOCA_N(VALUE, n); for (i=0;i<n;i++) { - argv[i] = va_arg(*ar, VALUE); + argv[i] = va_arg(ar, VALUE); } - va_end(*ar); + va_end(ar); } else { argv = 0; @@ -5859,55 +5865,6 @@ vafuncall(recv, mid, n, ar) } VALUE -#ifdef HAVE_STDARG_PROTOTYPES -rb_funcall(VALUE recv, ID mid, int n, ...) -#else -rb_funcall(recv, mid, n, va_alist) - VALUE recv; - ID mid; - int n; - va_dcl -#endif -{ - va_list ar; - va_init_list(ar, n); - - return vafuncall(recv, mid, n, &ar); -} - -VALUE -#ifdef HAVE_STDARG_PROTOTYPES -rb_funcall_rescue(VALUE recv, ID mid, int n, ...) -#else -rb_funcall_rescue(recv, mid, n, va_alist) - VALUE recv; - ID mid; - int n; - va_dcl -#endif -{ - VALUE result = Qnil; /* OK */ - int status; - va_list ar; - - va_init_list(ar, n); - - PUSH_TAG(PROT_NONE); - if ((status = EXEC_TAG()) == 0) { - result = vafuncall(recv, mid, n, &ar); - } - POP_TAG(); - switch (status) { - case 0: - return result; - case TAG_RAISE: - return Qundef; - default: - JUMP_TAG(status); - } -} - -VALUE rb_funcall2(recv, mid, argc, argv) VALUE recv; ID mid; @@ -7610,6 +7567,7 @@ Init_eval() __send__ = rb_intern("__send__"); rb_global_variable((VALUE*)&top_scope); + rb_global_variable((VALUE*)&ruby_eval_tree); rb_global_variable((VALUE*)&ruby_dyna_vars); rb_define_virtual_variable("$@", errat_getter, errat_setter); |