From: "nobu (Nobuyoshi Nakada)" Date: 2014-01-07T13:00:33+09:00 Subject: [ruby-core:59615] [ruby-trunk - Bug #9376][Closed] Passing do/end block inside decorated method fails, while passing {} block works. Issue #9376 has been updated by nobu (Nobuyoshi Nakada). Description updated Status changed from Open to Closed Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN to 1.9.3: DONTNEED, 2.0.0: REQUIRED, 2.1: REQUIRED ---------------------------------------- Bug #9376: Passing do/end block inside decorated method fails, while passing {} block works. https://bugs.ruby-lang.org/issues/9376#change-44145 Author: jemc (Joe McIlvain) Status: Closed Priority: Normal Assignee: Category: Target version: ruby -v: 2.1.0-p0 Backport: 1.9.3: DONTNEED, 2.0.0: REQUIRED, 2.1: REQUIRED =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/