Project

General

Profile

« Previous | Next » 

Revision 96990203

Added by ko1 (Koichi Sasada) over 5 years ago

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 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, 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