summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-11-07 07:45:57 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-11-07 07:45:57 +0000
commitb92a1f82e110c596256e76b3bb625438089e3e5c (patch)
tree726f7ea8b36eb91919f1306cb5c2889de57b5bfb
parent6c0ca6f5e702ef13ccde5cd3c7abce64168279a5 (diff)
downloadruby-b92a1f82e110c596256e76b3bb625438089e3e5c.tar.gz
ruby-b92a1f82e110c596256e76b3bb625438089e3e5c.tar.xz
ruby-b92a1f82e110c596256e76b3bb625438089e3e5c.zip
* eval.c (when_check): need to splat for NODE_ARGSCAT as well.
[ruby-dev:29860] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--eval.c7
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index c17e1a8aa..fbec45f69 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Nov 7 16:41:21 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (when_check): need to splat for NODE_ARGSCAT as well.
+ [ruby-dev:29860]
+
Mon Nov 6 22:23:52 2006 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (Init_String): remove duplicated definition of
diff --git a/eval.c b/eval.c
index 9b8af94f3..cbf0e1960 100644
--- a/eval.c
+++ b/eval.c
@@ -2723,7 +2723,9 @@ when_check(NODE *tag, VALUE val, VALUE self)
}
break;
case NODE_SPLAT:
- elm = splat_value(rb_eval(self, tag->nd_head));
+ tag = tag->nd_head;
+ splat:
+ elm = splat_value(rb_eval(self, tag));
for (i=0; i<RARRAY_LEN(elm); i++) {
if (when_cond(val, RARRAY_PTR(elm)[i])) {
return Qtrue;
@@ -2732,7 +2734,8 @@ when_check(NODE *tag, VALUE val, VALUE self)
break;
case NODE_ARGSCAT:
if (when_check(tag->nd_head, val, self)) return Qtrue;
- return when_check(tag->nd_body, val, self);
+ tag = tag->nd_body;
+ goto splat;
case NODE_ARGSPUSH:
if (when_check(tag->nd_head, val, self)) return Qtrue;
if (when_cond(val, rb_eval(self, tag->nd_body))) return Qtrue;