1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Document binding behavior for C call/return events for TracePoint/set_trace_func

C methods do not have bindings, so binding returns the binding of
the nearest C method.

Fixes [Bug #9009]
This commit is contained in:
Jeremy Evans 2021-04-26 15:21:52 -07:00
parent 203eeeefdd
commit d585799d73
2 changed files with 13 additions and 3 deletions

View file

@ -309,15 +309,21 @@ class TracePoint
Primitive.tracepoint_attr_defined_class
end
# Return the generated binding object from event
# Return the generated binding object from event.
#
# Note that for +c_call+ and +c_return+ events, the binding returned is the
# binding of the nearest Ruby method calling the C method, since C methods
# themselves do not have bindings.
def binding
Primitive.tracepoint_attr_binding
end
# Return the trace object during event
#
# Same as TracePoint#binding:
# trace.binding.eval('self')
# Same as the following, except it returns the correct object (the method
# receiver) for +c_call+ and +c_return+ events:
#
# trace.binding.eval('self')
def self
Primitive.tracepoint_attr_self
end

View file

@ -519,6 +519,10 @@ static void call_trace_func(rb_event_flag_t, VALUE data, VALUE self, ID id, VALU
* line prog.rb:3 test Test
* line prog.rb:4 test Test
* return prog.rb:4 test Test
*
* Note that for +c-call+ and +c-return+ events, the binding returned is the
* binding of the nearest Ruby method calling the C method, since C methods
* themselves do not have bindings.
*/
static VALUE