1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* parse.y (args): splat other than direct array literal.

[ruby-dev:39771]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@26160 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2009-12-23 11:48:55 +00:00
parent 282a055612
commit efe97f7f7b
3 changed files with 13 additions and 5 deletions

View file

@ -1,3 +1,8 @@
Wed Dec 23 20:48:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (args): splat other than direct array literal.
[ruby-dev:39771]
Wed Dec 23 17:23:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* eval.c (rb_load): initialize orig_func. [ruby-core:27296]

10
parse.y
View file

@ -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;

View file

@ -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