parse.y: massign in cond
* parse.y (assign_in_cond): allow multiple assignment in conditional expression. [Feature #10617] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1ea1d2e4a7
commit
134d1ce892
@ -1,3 +1,8 @@
|
|||||||
|
Wed Apr 13 14:36:24 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (assign_in_cond): allow multiple assignment in
|
||||||
|
conditional expression. [Feature #10617]
|
||||||
|
|
||||||
Wed Apr 13 14:11:59 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Wed Apr 13 14:11:59 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* bignum.c (rb_big_size): add wrapper function of BIGSIZE and
|
* bignum.c (rb_big_size): add wrapper function of BIGSIZE and
|
||||||
|
3
NEWS
3
NEWS
@ -14,6 +14,9 @@ with all sufficient information, see the ChangeLog file or Redmine
|
|||||||
|
|
||||||
=== Language changes
|
=== Language changes
|
||||||
|
|
||||||
|
* Multiple assignment in conditional expression is now allowed.
|
||||||
|
[Feature #10617]
|
||||||
|
|
||||||
=== Core classes updates (outstanding ones only)
|
=== Core classes updates (outstanding ones only)
|
||||||
|
|
||||||
* Array
|
* Array
|
||||||
|
3
parse.y
3
parse.y
@ -9785,9 +9785,6 @@ assign_in_cond(struct parser_params *parser, NODE *node)
|
|||||||
{
|
{
|
||||||
switch (nd_type(node)) {
|
switch (nd_type(node)) {
|
||||||
case NODE_MASGN:
|
case NODE_MASGN:
|
||||||
yyerror("multiple assignment in conditional");
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case NODE_LASGN:
|
case NODE_LASGN:
|
||||||
case NODE_DASGN:
|
case NODE_DASGN:
|
||||||
case NODE_DASGN_CURR:
|
case NODE_DASGN_CURR:
|
||||||
|
@ -552,6 +552,11 @@ class TestAssignment < Test::Unit::TestCase
|
|||||||
a, b = Base::A, Base::B
|
a, b = Base::A, Base::B
|
||||||
assert_equal [3,4], [a,b]
|
assert_equal [3,4], [a,b]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_massign_in_cond
|
||||||
|
result = eval("if (a, b = MyObj.new); [a, b]; end", nil, __FILE__, __LINE__)
|
||||||
|
assert_equal [[1,2],[3,4]], result
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
require_relative 'sentence'
|
require_relative 'sentence'
|
||||||
|
@ -781,7 +781,7 @@ x = __ENCODING__
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_assign_in_conditional
|
def test_assign_in_conditional
|
||||||
assert_raise(SyntaxError) do
|
assert_nothing_raised do
|
||||||
eval <<-END, nil, __FILE__, __LINE__+1
|
eval <<-END, nil, __FILE__, __LINE__+1
|
||||||
(x, y = 1, 2) ? 1 : 2
|
(x, y = 1, 2) ? 1 : 2
|
||||||
END
|
END
|
||||||
|
Loading…
x
Reference in New Issue
Block a user