summaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-27 06:54:58 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-11-27 06:54:58 +0000
commit0cdd3bced5e42557ed4ee3c7f3cd35f7f56cbcf0 (patch)
treef0d5e98b974ce640da822f0627d152eb4025a2c3 /compile.c
parent1bed0ccca83a56dac3a30ecf25a0dd0b3fe66118 (diff)
* compile.c (iseq_compile_each): "when *[],1" dumps core.
a patch from Yusuke ENDOH <mame AT tsg.ne.jp>. [ruby-dev:32350] * bootstraptest/test_syntax.rb: add a test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14033 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/compile.c b/compile.c
index 9192792501..d100bad484 100644
--- a/compile.c
+++ b/compile.c
@@ -2673,11 +2673,14 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
if (nd_type(vals) == NODE_ARRAY) {
special_literals = when_vals(iseq, cond_seq, vals, l1, special_literals);
}
- else if (nd_type(vals) == NODE_SPLAT || nd_type(vals) == NODE_ARGSCAT) {
+ else if (nd_type(vals) == NODE_SPLAT ||
+ nd_type(vals) == NODE_ARGSCAT ||
+ nd_type(vals) == NODE_ARGSPUSH) {
NODE *val = vals->nd_head;
special_literals = 0;
- if (nd_type(vals) == NODE_ARGSCAT) {
+ if (nd_type(vals) == NODE_ARGSCAT ||
+ nd_type(vals) == NODE_ARGSPUSH) {
when_vals(iseq, cond_seq, vals->nd_head, l1, 0);
val = vals->nd_body;
}
@@ -2687,12 +2690,12 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
ADD_INSNL(cond_seq, nd_line(val), branchif, l1);
}
else {
- rb_bug("NODE_CASAE: unknown node (%s)",
+ rb_bug("NODE_CASE: unknown node (%s)",
ruby_node_name(nd_type(vals)));
}
}
else {
- rb_bug("NODE_CASAE: must be NODE_ARRAY, but 0");
+ rb_bug("NODE_CASE: must be NODE_ARRAY, but 0");
}
node = node->nd_next;
@@ -2755,10 +2758,13 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
vals = vals->nd_next;
}
}
- else if (nd_type(vals) == NODE_SPLAT || nd_type(vals) == NODE_ARGSCAT) {
+ else if (nd_type(vals) == NODE_SPLAT ||
+ nd_type(vals) == NODE_ARGSCAT ||
+ nd_type(vals) == NODE_ARGSPUSH) {
+
NODE *val = vals->nd_head;
- if (nd_type(vals) == NODE_ARGSCAT) {
+ if (nd_type(vals) == NODE_ARGSCAT || nd_type(vals) == NODE_ARGSPUSH) {
NODE *vs = vals->nd_head;
val = vals->nd_body;