mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* parse.y (block_call): rules for block_call after block_call.
based on a patch by pasberth https://github.com/ruby/ruby/pull/102 [ruby-dev:45308][Bug #6115] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
45f3651d1c
commit
c46bdadb84
3 changed files with 44 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
Tue Mar 6 01:34:19 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* parse.y (block_call): rules for block_call after block_call.
|
||||
based on a patch by pasberth https://github.com/ruby/ruby/pull/102
|
||||
[ruby-dev:45308][Bug #6115]
|
||||
|
||||
Tue Mar 6 01:24:13 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* parse.y (block_command, block_call): simplified rules.
|
||||
|
|
24
parse.y
24
parse.y
|
@ -3856,6 +3856,30 @@ block_call : command do_block
|
|||
$$ = method_optarg($$, $4);
|
||||
%*/
|
||||
}
|
||||
| block_call dot_or_colon operation2 opt_paren_args brace_block
|
||||
{
|
||||
/*%%%*/
|
||||
block_dup_check($4, $5);
|
||||
$5->nd_iter = NEW_CALL($1, $3, $4);
|
||||
$$ = $5;
|
||||
fixpos($$, $1);
|
||||
/*%
|
||||
$$ = dispatch4(command_call, $1, $2, $3, $4);
|
||||
$$ = method_add_block($$, $5);
|
||||
%*/
|
||||
}
|
||||
| block_call dot_or_colon operation2 command_args do_block
|
||||
{
|
||||
/*%%%*/
|
||||
block_dup_check($4, $5);
|
||||
$5->nd_iter = NEW_CALL($1, $3, $4);
|
||||
$$ = $5;
|
||||
fixpos($$, $1);
|
||||
/*%
|
||||
$$ = dispatch4(command_call, $1, $2, $3, $4);
|
||||
$$ = method_add_block($$, $5);
|
||||
%*/
|
||||
}
|
||||
;
|
||||
|
||||
method_call : operation
|
||||
|
|
|
@ -63,6 +63,20 @@ class TestSyntax < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
tap do |_,
|
||||
bug6115 = '[ruby-dev:45308]',
|
||||
blockcall = '["elem"].each_with_object [] do end',
|
||||
methods = [['map', 'no'], ['inject([])', 'with']],
|
||||
blocks = [['do end', 'do'], ['{}', 'brace']],
|
||||
*|
|
||||
[%w'. dot', %w':: colon'].product(methods, blocks) do |(c, n1), (m, n2), (b, n3)|
|
||||
m = m.tr_s('()', ' ').strip if n2 == 'do'
|
||||
name = "test_#{n3}_block_after_blockcall_#{n1}_#{n2}_arg"
|
||||
code = "#{blockcall}#{c}#{m} #{b}"
|
||||
define_method(name) {assert_valid_syntax(code, bug6115)}
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def make_tmpsrc(f, src)
|
||||
|
|
Loading…
Add table
Reference in a new issue