Skip to content

Commit

Permalink
* parse.y (block_call): rules for block_call after block_call.
Browse files Browse the repository at this point in the history
  based on a patch by pasberth ruby#102
  [ruby-dev:45308][Bug ruby#6115]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nobu committed Mar 5, 2012
1 parent 45f3651 commit c46bdad
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
24 changes: 24 additions & 0 deletions parse.y
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 14 additions & 0 deletions test/ruby/test_syntax.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,20 @@ def test_newline_in_block_parameters
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)
Expand Down

0 comments on commit c46bdad

Please sign in to comment.