Issue #9376 has been reported by jemc (Joe McIlvain).

----------------------------------------
Bug #9376: Passing do/end block inside decorated method fails, while passing {} block works.
https://bugs.ruby-lang.org/issues/9376

Author: jemc (Joe McIlvain)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: 2.1.0-p0
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN


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
```



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