aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--compile.c10
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 <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
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);