vm_trace.c (rb_tracepoint_enable_for_target): support targetting
TracePoint. [Feature #15289]
Tragetting TracePoint is only enabled on specified method, proc
and so on, example: tp.enable(target: code).
code should be consisted of InstructionSeuqnece (iseq)
(RubyVM::InstructionSeuqnece.of(code) should not return nil)
If code is a tree of iseq, TracePoint is enabled on all of
iseqs in a tree.
Enabled tragetting TracePoints can not enabled again with
and without target.
vm_core.h (rb_iseq_t): introduce rb_iseq_t::local_hooks
to store local hooks. rb_iseq_t::aux::trace_events is renamed to global_trace_events to contrast with local_hooks.
vm_core.h (rb_hook_list_t): add rb_hook_list_t::running
to represent how many Threads/Fibers are used this list.
If this field is 0, nobody using this hooks and we can
delete it.
This is why we can remove code from cont.c.
vm_core.h (rb_vm_t): because of above change, we can eliminate rb_vm_t::trace_running field.
Also renamed from rb_vm_t::event_hooks to global_hooks.
vm_core.h, vm.c (ruby_vm_event_enabled_global_flags): renamed
from `ruby_vm_event_enabled_flags.
vm_core.h, vm.c (ruby_vm_event_local_num): added to count
enabled targetting TracePoints.
vm_core.h (rb_vm_global_hooks): added for convinience.
method.h (rb_method_bmethod_t): added to maintain Proc
and rb_hook_list_t for bmethod (defined by define_method).
prelude.rb (TracePoint#enable): extracet a keyword parameter
(because it is easy than writing in C).
It calls TracePoint#__enable internal method written in C.
vm_insnhelper.c (vm_trace): check also iseq->local_hooks.
Support targetting TracePoint [Feature #15289]
vm_trace.c (rb_tracepoint_enable_for_target): support targetting
TracePoint. [Feature #15289]
Tragetting TracePoint is only enabled on specified method, proc
and so on, example:
tp.enable(target: code)
.code
should be consisted of InstructionSeuqnece (iseq)(RubyVM::InstructionSeuqnece.of(code) should not return nil)
If code is a tree of iseq, TracePoint is enabled on all of
iseqs in a tree.
Enabled tragetting TracePoints can not enabled again with
and without target.
vm_core.h (rb_iseq_t): introduce
rb_iseq_t::local_hooks
to store local hooks.
rb_iseq_t::aux::trace_events
is renamed toglobal_trace_events
to contrast withlocal_hooks
.vm_core.h (rb_hook_list_t): add
rb_hook_list_t::running
to represent how many Threads/Fibers are used this list.
If this field is 0, nobody using this hooks and we can
delete it.
This is why we can remove code from cont.c.
vm_core.h (rb_vm_t): because of above change, we can eliminate
rb_vm_t::trace_running
field.Also renamed from
rb_vm_t::event_hooks
toglobal_hooks
.vm_core.h, vm.c (ruby_vm_event_enabled_global_flags): renamed
from `ruby_vm_event_enabled_flags.
vm_core.h, vm.c (ruby_vm_event_local_num): added to count
enabled targetting TracePoints.
vm_core.h, vm_trace.c (rb_exec_event_hooks): accepts
hook list.
vm_core.h (rb_vm_global_hooks): added for convinience.
method.h (rb_method_bmethod_t): added to maintain Proc
and
rb_hook_list_t
for bmethod (defined by define_method).prelude.rb (TracePoint#enable): extracet a keyword parameter
(because it is easy than writing in C).
It calls
TracePoint#__enable
internal method written in C.vm_insnhelper.c (vm_trace): check also iseq->local_hooks.
vm.c (invoke_bmethod): check def->body.bmethod.hooks.
vm.c (hook_before_rewind): check iseq->local_hooks
and def->body.bmethod.hooks before rewind by exception.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e