From: naruse@... Date: 2014-02-18T23:27:22+00:00 Subject: [ruby-core:60844] [ruby-trunk - Bug #9376] Passing do/end block inside decorated method fails, while passing {} block works. Issue #9376 has been updated by Yui NARUSE. Backport changed from 1.9.3: DONTNEED, 2.0.0: REQUIRED, 2.1: REQUIRED to 1.9.3: DONTNEED, 2.0.0: DONTNEED, 2.1: DONTNEED ---------------------------------------- Bug #9376: Passing do/end block inside decorated method fails, while passing {} block works. https://bugs.ruby-lang.org/issues/9376#change-45259 * Author: Joe McIlvain * Status: Closed * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: 2.1.0-p0 * Backport: 1.9.3: DONTNEED, 2.0.0: DONTNEED, 2.1: DONTNEED ---------------------------------------- =begin Since method (({def})) returns the symbol in 2.1, it opens the door for a decorator pattern in which the method def is the argument to a method. This currently works, unless the method happens to call another method and pass it a (({do/end})) block. However, using (({{}})) instead causes no syntax error. Here is the code to reproduce: def foo(meth); end x = Object.new foo def bar(arg) x.tap { } #=> (no problem here) x.tap do end #=> syntax error, unexpected keyword_do_block, expecting keyword_end (SyntaxError) end =end -- http://bugs.ruby-lang.org/