Issue #11107 has been updated by Tomoyuki Chikanaga. Backport changed from 2.0.0: REQUIRED, 2.1: DONE, 2.2: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE, 2.2: DONE Backported into `ruby_2_2` branch at r50487. ---------------------------------------- Bug #11107: Syntax error is raised by "p ->() do a(1) do end end", but not by "p ->() do a 1 do end end" https://bugs.ruby-lang.org/issues/11107#change-52428 * Author: _ wanabe * Status: Closed * Priority: Normal * Assignee: * ruby -v: ruby 2.3.0dev (2015-04-26 trunk 50395) [x86_64-darwin14] * Backport: 2.0.0: REQUIRED, 2.1: DONE, 2.2: DONE ---------------------------------------- As below, lambda literal with do..end block can raise syntax error. ``` $ ./ruby -ve 'p ->() do a(1) do end end' ruby 2.3.0dev (2015-04-26 trunk 50395) [x86_64-darwin14] -e:1: syntax error, unexpected keyword_do_block, expecting keyword_end p ->() do a(1) do end end ^ ``` The error is not raised when I use {...} block or omit parentheses from method call in lambda. NG cases: ```ruby p ->() do a(1) do end end p ->() do a() do end end p 1, ->() do a(1) do end end ``` OK cases: ```ruby p ->() do a 1 do end end p ->() do a do end end p ->() { a(1) do end } p ->() do a(1) {} end p ->() { a(1) { } } ``` Confirmed versions (same results): * ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin14.3.0] * ruby 2.0.0p598 (2014-11-13) [i386-mingw32] * ruby 2.1.5p273 (2014-11-13 revision 48405) [i386-mingw32] * ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] * ruby 2.3.0dev (2015-04-26 trunk 50395) [x86_64-darwin14] -- https://bugs.ruby-lang.org/