[ruby-core:82135] [Ruby trunk Bug#11873] Syntax error and parse problem when calling a method without parentheses

From: nagachika00@...
Date: 2017-07-23 08:16:09 UTC
List: ruby-core #82135
Issue #11873 has been updated by nagachika (Tomoyuki Chikanaga).

Backport changed from 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: DONE

ruby_2_4 r59406 merged revision(s) 58638,58640.

----------------------------------------
Bug #11873: Syntax error and parse problem when calling a method without parentheses
https://bugs.ruby-lang.org/issues/11873#change-65893

* Author: tompng (tomoya ishida)
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin14]
* Backport: 2.2: DONTNEED, 2.3: DONTNEED, 2.4: DONE
----------------------------------------
In the following case, syntax error rises when calling a method without parentheses.

~~~ruby
a b{c d}, :e do end #=> syntax error(should be syntax ok)
a b(c d), :e do end #=> syntax error(should be syntax ok)
a b{c(d)}, :e do end #=> syntax ok(expected)
a b(c(d)), :e do end #=> syntax ok(expected)
~~~


If you change the literal `:e` to a method name, then the do-block is passed to the wrong method

~~~ruby
p p{p p;p(p)}, tap do puts 'Hello' end
#=> LocalJumpError(expected. do-end is passed to the first p)
p p{p(p);p p}, tap do puts 'Hello' end
#=> shows Hello(why? do-end is passed to tap)
~~~


versions are

~~~
1.8.7-p375
1.9.3-p547
2.1.1p76
2.2.0p0
2.3.0p0
~~~



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next