diff options
author | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-05 13:15:27 +0000 |
---|---|---|
committer | ktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-05 13:15:27 +0000 |
commit | 9cbd6ee09770be3d73a17ab1195a094c59c9f9ee (patch) | |
tree | 57a7c963e85078a2ff5e00ce206d86acee046857 /vm_trace.c | |
parent | 8004ad33bcdb7b5bec3f7f077d386563fbcda76a (diff) | |
download | bundler-9cbd6ee09770be3d73a17ab1195a094c59c9f9ee.tar.gz |
* vm_trace.c (tracepoint_attr_callee_id, rb_tracearg_callee_id):
add TracePoint#callee_id. [ruby-core:77241] [Feature #12747]
* cont.c, eval.c, gc.c, include/ruby/intern.h, insns.def, thread.c,
vm.c, vm_backtrace.c, vm_core.h, vm_eval.c, vm_insnhelper.c, vm_trace.c: ditto.
* test/ruby/test_settracefunc.rb: tests for above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_trace.c')
-rw-r--r-- | vm_trace.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/vm_trace.c b/vm_trace.c index fe14c64918..aca6367b08 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -616,7 +616,7 @@ call_trace_func(rb_event_flag_t event, VALUE proc, VALUE self, ID id, VALUE klas rb_thread_t *th = GET_THREAD(); if (!klass) { - rb_thread_method_id_and_class(th, &id, &klass); + rb_thread_method_id_and_class(th, &id, 0, &klass); } if (klass) { @@ -781,7 +781,7 @@ fill_id_and_klass(rb_trace_arg_t *trace_arg) { if (!trace_arg->klass_solved) { if (!trace_arg->klass) { - rb_vm_control_frame_id_and_class(trace_arg->cfp, &trace_arg->id, &trace_arg->klass); + rb_vm_control_frame_id_and_class(trace_arg->cfp, &trace_arg->id, &trace_arg->called_id, &trace_arg->klass); } if (trace_arg->klass) { @@ -805,6 +805,13 @@ rb_tracearg_method_id(rb_trace_arg_t *trace_arg) } VALUE +rb_tracearg_callee_id(rb_trace_arg_t *trace_arg) +{ + fill_id_and_klass(trace_arg); + return trace_arg->called_id ? ID2SYM(trace_arg->called_id) : Qnil; +} + +VALUE rb_tracearg_defined_class(rb_trace_arg_t *trace_arg) { fill_id_and_klass(trace_arg); @@ -906,7 +913,7 @@ tracepoint_attr_path(VALUE tpval) } /* - * Return the name of the method being called + * Return the name at the definition of the method being called */ static VALUE tracepoint_attr_method_id(VALUE tpval) @@ -915,6 +922,15 @@ tracepoint_attr_method_id(VALUE tpval) } /* + * Return the called name of the method being called + */ +static VALUE +tracepoint_attr_callee_id(VALUE tpval) +{ + return rb_tracearg_callee_id(get_trace_arg()); +} + +/* * Return class or module of the method being called. * * class C; def foo; end; end @@ -1480,6 +1496,7 @@ Init_vm_trace(void) rb_define_method(rb_cTracePoint, "lineno", tracepoint_attr_lineno, 0); rb_define_method(rb_cTracePoint, "path", tracepoint_attr_path, 0); rb_define_method(rb_cTracePoint, "method_id", tracepoint_attr_method_id, 0); + rb_define_method(rb_cTracePoint, "callee_id", tracepoint_attr_callee_id, 0); rb_define_method(rb_cTracePoint, "defined_class", tracepoint_attr_defined_class, 0); rb_define_method(rb_cTracePoint, "binding", tracepoint_attr_binding, 0); rb_define_method(rb_cTracePoint, "self", tracepoint_attr_self, 0); |