Issue #6981 has been reported by ko1 (Koichi Sasada).

----------------------------------------
Bug #6981: set_trace_func passes strange bindng on method call defined by define_method
https://bugs.ruby-lang.org/issues/6981

Author: ko1 (Koichi Sasada)
Status: Open
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-08-08 trunk 36657) [i386-mswin32_100]


set_trace_func passes strange binding on method call ("call") if invoked method was defined by define_method.  Correctly speaking, the caller's binding was passed.

# example
class C
  define_method(:foo){
    p:foo
  }

  def bar
    p:bar
  end
end

set_trace_func(lambda{|ev, *args|
  if ev == 'call'
    p eval('self', args[3])
  end
})
C.new.foo
#=> main
C.new.bar
#=> #<C:0x2bbc360>

On Ruby 1.8, there is no problem.



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