diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | enumerator.c | 9 | ||||
-rw-r--r-- | insnhelper.ci | 15 |
3 files changed, 14 insertions, 17 deletions
@@ -1,3 +1,10 @@ +Wed Dec 19 15:37:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org> + + * insnhelper.ci (vm_yield_with_cfunc): call cfunc with + (argv[0], data, argc, argv) to pass all arguments. + + * eval.c (loop_i): adapted to new calling convention. + Wed Dec 19 15:13:20 2007 Yukihiro Matsumoto <matz@ruby-lang.org> * string.c (rb_str_justify): should propagate encoding from pad diff --git a/enumerator.c b/enumerator.c index ea4fb9e57c..e348e68aa0 100644 --- a/enumerator.c +++ b/enumerator.c @@ -225,14 +225,9 @@ enumerator_allocate(VALUE klass) } static VALUE -enumerator_each_i(VALUE v, VALUE enum_obj, VALUE argc) +enumerator_each_i(VALUE v, VALUE enum_obj, int argc, VALUE *argv) { - if (argc == 1) { - return rb_yield(v); - } - else { - return rb_yield_values2(argc, RARRAY_PTR(v)); - } + return rb_yield_values2(argc, argv); } static VALUE diff --git a/insnhelper.ci b/insnhelper.ci index 0b29bef4c0..142473f83e 100644 --- a/insnhelper.ci +++ b/insnhelper.ci @@ -650,23 +650,18 @@ vm_yield_with_cfunc(rb_thread_t *th, rb_block_t *block, if (lambda) { arg = rb_ary_new4(argc, argv); } + else if (argc == 0) { + arg = Qnil; + } else { - if (argc == 1) { - arg = *argv; - } - else if (argc > 1) { - arg = rb_ary_new4(argc, argv); - } - else { - arg = rb_ary_new(); - } + arg = argv[0]; } vm_push_frame(th, 0, FRAME_MAGIC_IFUNC, self, (VALUE)block->dfp, 0, th->cfp->sp, block->lfp, 1); - val = (*ifunc->nd_cfnc) (arg, ifunc->nd_tval, (VALUE) argc); + val = (*ifunc->nd_cfnc) (arg, ifunc->nd_tval, argc, argv); th->cfp++; return val; |