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

parse.y: preserve cmdarg stack

* parse.y (do_body): preserve cmdarg stack around do/end block.
  [ruby-core:78837] [Bug #13073]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57198 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-12-26 13:31:03 +00:00
parent a5c391026c
commit b4aa884f06
2 changed files with 10 additions and 1 deletions

View file

@ -3762,7 +3762,7 @@ brace_body : {$<vars>$ = dyna_push();}
;
do_body : {$<vars>$ = dyna_push();}
{$<val>$ = cmdarg_stack >> 1; CMDARG_SET(0);}
{$<val>$ = cmdarg_stack; CMDARG_SET(0);}
opt_block_param compstmt
{
$$ = new_do_body($3, $4);

View file

@ -917,6 +917,15 @@ eom
end
end
def test_do_block_in_hash_brace
bug13073 = '[ruby-core:78837] [Bug #13073]'
assert_valid_syntax 'p :foo, {a: proc do end, b: proc do end}', bug13073
assert_valid_syntax 'p :foo, {:a => proc do end, b: proc do end}', bug13073
assert_valid_syntax 'p :foo, {"a": proc do end, b: proc do end}', bug13073
assert_valid_syntax 'p :foo, {** proc do end, b: proc do end}', bug13073
assert_valid_syntax 'p :foo, {proc do end => proc do end, b: proc do end}', bug13073
end
def test_do_after_local_variable
obj = Object.new
def obj.m; yield; end