diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | parse.y | 10 | ||||
-rw-r--r-- | test/ruby/test_array.rb | 3 |
3 files changed, 13 insertions, 5 deletions
@@ -1,3 +1,8 @@ +Wed Dec 23 20:48:52 2009 Nobuyoshi Nakada <[email protected]> + + * parse.y (args): splat other than direct array literal. + [ruby-dev:39771] + Wed Dec 23 17:23:52 2009 Nobuyoshi Nakada <[email protected]> * eval.c (rb_load): initialize orig_func. [ruby-core:27296] @@ -1455,7 +1455,7 @@ args : arg_value | tSTAR arg_value { /*%%%*/ - $$ = splat_array($2); + if (!($$ = splat_array($2))) $$ = NEW_SPLAT($2); /*% $$ = arg_add_star(arg_new(), $2); %*/ @@ -1569,14 +1569,15 @@ primary : literal { $$ = NEW_COLON3($2); } - | tLBRACK aref_args ']' + | tLBRACK {$<num>$ = ruby_sourceline;} aref_args ']' { - if ($2 == 0) { + if ($3 == 0) { $$ = NEW_ZARRAY(); /* zero length array*/ } else { - $$ = $2; + $$ = $3; } + nd_set_line($$, $<num>2); } | tLBRACE assoc_list '}' { @@ -5312,6 +5313,7 @@ static NODE * splat_array(node) NODE* node; { + if (nd_type(node) == NODE_NEWLINE) node = node->nd_next; if (nd_type(node) == NODE_SPLAT) node = node->nd_head; if (nd_type(node) == NODE_ARRAY) return node; return 0; diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index 02733b941a..adac3e19d7 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -1280,7 +1280,8 @@ class TestArray < Test::Unit::TestCase def test_splat a = [2,3] assert_equal([1,2,3], [1, *a]) + bug2401 = '[ruby-dev:39771]' a = [2,3] - assert_equal([2,3], [*a]) + assert_equal([2,3], [*a], bug2401) end end |