зеркало из https://github.com/github/ruby.git
parse.y: chained assignments
* parse.y (command_asgn, arg): fix syntax errors with chained assignment with op assign. [Bug #12669] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5245e31426
Коммит
90d9255ec2
|
@ -1,3 +1,8 @@
|
||||||
|
Sat Aug 13 11:10:08 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (command_asgn, arg): fix syntax errors with chained
|
||||||
|
assignment with op assign. [Bug #12669]
|
||||||
|
|
||||||
Sat Aug 13 10:52:19 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat Aug 13 10:52:19 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* parse.y (stmt, arg): rescue modifier in command op assignment
|
* parse.y (stmt, arg): rescue modifier in command op assignment
|
||||||
|
|
44
parse.y
44
parse.y
|
@ -1284,6 +1284,28 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
|
||||||
$$ = dispatch2(massign, $1, $3);
|
$$ = dispatch2(massign, $1, $3);
|
||||||
%*/
|
%*/
|
||||||
}
|
}
|
||||||
|
| lhs '=' mrhs
|
||||||
|
{
|
||||||
|
value_expr($3);
|
||||||
|
$$ = node_assign($1, $3);
|
||||||
|
}
|
||||||
|
| mlhs '=' mrhs_arg
|
||||||
|
{
|
||||||
|
/*%%%*/
|
||||||
|
$1->nd_value = $3;
|
||||||
|
$$ = $1;
|
||||||
|
/*%
|
||||||
|
$$ = dispatch2(massign, $1, $3);
|
||||||
|
%*/
|
||||||
|
}
|
||||||
|
| expr
|
||||||
|
;
|
||||||
|
|
||||||
|
command_asgn : lhs '=' command_rhs
|
||||||
|
{
|
||||||
|
value_expr($3);
|
||||||
|
$$ = node_assign($1, $3);
|
||||||
|
}
|
||||||
| var_lhs tOP_ASGN command_rhs
|
| var_lhs tOP_ASGN command_rhs
|
||||||
{
|
{
|
||||||
value_expr($3);
|
value_expr($3);
|
||||||
|
@ -1335,28 +1357,6 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem
|
||||||
$1 = var_field($1);
|
$1 = var_field($1);
|
||||||
$$ = backref_assign_error($1, node_assign($1, $3));
|
$$ = backref_assign_error($1, node_assign($1, $3));
|
||||||
}
|
}
|
||||||
| lhs '=' mrhs
|
|
||||||
{
|
|
||||||
value_expr($3);
|
|
||||||
$$ = node_assign($1, $3);
|
|
||||||
}
|
|
||||||
| mlhs '=' mrhs_arg
|
|
||||||
{
|
|
||||||
/*%%%*/
|
|
||||||
$1->nd_value = $3;
|
|
||||||
$$ = $1;
|
|
||||||
/*%
|
|
||||||
$$ = dispatch2(massign, $1, $3);
|
|
||||||
%*/
|
|
||||||
}
|
|
||||||
| expr
|
|
||||||
;
|
|
||||||
|
|
||||||
command_asgn : lhs '=' command_rhs
|
|
||||||
{
|
|
||||||
value_expr($3);
|
|
||||||
$$ = node_assign($1, $3);
|
|
||||||
}
|
|
||||||
;
|
;
|
||||||
|
|
||||||
command_rhs : command_call %prec tOP_ASGN
|
command_rhs : command_call %prec tOP_ASGN
|
||||||
|
|
|
@ -771,4 +771,14 @@ class TestAssignmentGen < Test::Unit::TestCase
|
||||||
h[*k], = ["ok", "ng"]
|
h[*k], = ["ok", "ng"]
|
||||||
assert_equal("ok", h[:key], bug11970)
|
assert_equal("ok", h[:key], bug11970)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_chainged_assign_command
|
||||||
|
all_assertions do |a|
|
||||||
|
asgn = %w'= +='
|
||||||
|
asgn.product(asgn) do |a1, a2|
|
||||||
|
stmt = "a #{a1} b #{a2} raise 'x'"
|
||||||
|
a.for(stmt) {assert_valid_syntax(stmt)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Загрузка…
Ссылка в новой задаче