From 9a524fad38693240a0ac9c8dbfcb956516475861 Mon Sep 17 00:00:00 2001 From: ko1 Date: Wed, 6 Jun 2007 01:51:45 +0000 Subject: [PATCH] * compile.c (iseq_compile_each): fix around yield arguments (with NODE_ARGSCAT). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12445 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ compile.c | 10 +++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 274b6f818c..017e527f0c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Jun 6 10:50:01 2007 Koichi Sasada + + * compile.c (iseq_compile_each): fix around yield arguments + (with NODE_ARGSCAT). + Wed Jun 6 02:50:53 2007 Koichi Sasada * cont.c (rb_fiber_start): clear th->tag and check error to fix diff --git a/compile.c b/compile.c index e35360a9e1..3195a2cd7c 100644 --- a/compile.c +++ b/compile.c @@ -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);