From: kazuki@... Date: 2016-09-10T06:36:44+00:00 Subject: [ruby-core:77241] [Ruby trunk Feature#12747] Add TracePoint#callee_id Issue #12747 has been reported by Kazuki Tsujimoto. ---------------------------------------- Feature #12747: Add TracePoint#callee_id https://bugs.ruby-lang.org/issues/12747 * Author: Kazuki Tsujimoto * Status: Open * Priority: Normal * Assignee: ---------------------------------------- # Abstract I propose to add TracePoint#callee_id which returns the called name of the method. ~~~ruby def m end alias am m TracePoint.new(:call) do |tp| p [tp.method_id, tp.callee_id] #=> [:m, :am] end.enable do am end ~~~ # Background We can get callee id by `tp.binding.eval('__callee__'))`, but it is slow(10x~) and can't get callee id of CFUNC. ~~~ class Object alias aitself itself end TracePoint.new(:c_call) do |tp| p [tp.method_id, tp.binding.eval('__callee__')] #=> [:itself, nil] end.enable do aitself end ~~~~ # Implementation I attached 2 patches. * 0001-TracePoint-method_id-should-return-method_id-not-cal.patch * Now, TracePoint#method_id returns not only method id(`__method__`) but callee id. This patch makes TracePoint#method_id return method id always, so it introduces some incompatibility. * 0002-Add-TracePoint-callee_id.patch * Add TracePoint#callee_id. # Usecase power_assert gem wants this method to get column number of each method calls. ---Files-------------------------------- 0001-TracePoint-method_id-should-return-method_id-not-cal.patch (9.76 KB) 0002-Add-TracePoint-callee_id.patch (19.4 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: