Project

General

Profile

Feature #12747

Add TracePoint#callee_id

Added by ktsj (Kazuki Tsujimoto) almost 4 years ago. Updated over 3 years ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:77241]

Description

Abstract

I propose to add TracePoint#callee_id which returns the called name of the method.

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

Also available in: Atom PDF