A block after the do-block without parenthesis #102

Closed
wants to merge 3 commits into
from

3 participants

@pasberth
pasberth commented Mar 5, 2012

$ ruby -v
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]

I think seemingly this source code is no problem:

$ cat unexpected.rb

langs = ["Ruby"]
langs.each_with_object [] do |lang, the_langs|
  the_langs << "The #{lang}"
end.each do |the_lang|
  puts the_lang
end

But syntax error:

$ ruby unexpected.rb
unexpected.rb:4: syntax error, unexpected keyword_do
end.each do |the_lang|
^
unexpected.rb:5: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('

I want to this code behaves like:

$ cat expected.rb

langs = ["Ruby"]
(langs.each_with_object [] do |lang, the_langs|
  the_langs << "The #{lang}"
end).each do |the_lang|
  puts the_lang
end

$ ruby expected.rb
The Ruby

I changed the block_call in the parse.y to a primary-expression.

$ ./ruby -I./lib -I. unexpected.rb
The Ruby

英語に自信がないので日本語でも失礼します。

上の unexpected.rb はぼくには一見なんの問題もなさそうなコードに見えます。
しかしそれは構文エラーです。
ぼくはこのブロックを一次式として扱うべきだと思いました。

@nobu
Member
nobu commented Mar 5, 2012

It makes too many conflicts: 5 shift/reduce, 240 reduce/reduce, and not acceptable straightforwardly.
コンフリクトが多すぎるので、そのままでは受け入れられません。

@nobu nobu closed this Mar 5, 2012
@pasberth
pasberth commented Mar 5, 2012

Pardon me. I'm thoughtless.
I did think twice about this, and I thought to syntax about a block after the do-block without parenthesis need not be primary-expression.

thanks!

@szuecs szuecs pushed a commit to szuecs/ruby that referenced this pull request Dec 11, 2013
@nobu nobu * parse.y (block_call): rules for block_call after block_call.
  based on a patch by pasberth ruby#102
  [ruby-dev:45308][Bug #6115]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
c46bdad
@tenderlove tenderlove pushed a commit to tenderlove/ruby that referenced this pull request Jan 24, 2014
@nobu nobu * parse.y (block_call): rules for block_call after block_call.
  based on a patch by pasberth ruby#102
  [ruby-dev:45308][Bug #6115]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
873f7f6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment