diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | compile.c | 10 |
2 files changed, 8 insertions, 7 deletions
@@ -1,3 +1,8 @@ +Wed Jun 6 10:50:01 2007 Koichi Sasada <ko1@atdot.net> + + * compile.c (iseq_compile_each): fix around yield arguments + (with NODE_ARGSCAT). + Wed Jun 6 02:50:53 2007 Koichi Sasada <ko1@atdot.net> * cont.c (rb_fiber_start): clear th->tag and check error to fix @@ -3762,11 +3762,8 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) if (node->nd_head) { if (nd_type(node->nd_head) == NODE_ARRAY) { NODE *p; - for (argc = 0, p = node->nd_head; p; - p = p->nd_next, argc++) { - /* count argc */ - } + argc = node->nd_head->nd_alen; compile_array(iseq, args, node->nd_head, Qfalse); POP_ELEMENT(args); debugs("argc: %d\n", argc); @@ -3777,10 +3774,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) flag |= VM_CALL_ARGS_SPLAT_BIT; } - compile_array(iseq, args, node->nd_head->nd_head, - Qfalse); + argc = node->nd_head->nd_head->nd_alen + 1; + compile_array(iseq, args, node->nd_head->nd_head, Qfalse); POP_ELEMENT(args); - argc = LIST_SIZE(args) + 1; COMPILE(args, "args(cat: splat)", node->nd_head->nd_body); |