ruby-changes:26075
From: ko1 <ko1@a...>
Date: Sun, 2 Dec 2012 02:47:50 +0900 (JST)
Subject: [ruby-changes:26075] ko1:r38132 (trunk): * vm_trace.c: add TracePoint#inspect.
ko1 2012-12-02 02:47:37 +0900 (Sun, 02 Dec 2012) New Revision: 38132 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38132 Log: * vm_trace.c: add TracePoint#inspect. * test/ruby/test_settracefunc.rb: add a test for this change. Modified files: trunk/ChangeLog trunk/test/ruby/test_settracefunc.rb trunk/vm_trace.c Index: ChangeLog =================================================================== --- ChangeLog (revision 38131) +++ ChangeLog (revision 38132) @@ -1,3 +1,9 @@ +Sun Dec 2 02:46:04 2012 Koichi Sasada <ko1@a...> + + * vm_trace.c: add TracePoint#inspect. + + * test/ruby/test_settracefunc.rb: add a test for this change. + Sat Dec 1 21:18:19 2012 Koichi Sasada <ko1@a...> * test/ruby/test_backtrace.rb: add a test for Index: vm_trace.c =================================================================== --- vm_trace.c (revision 38131) +++ vm_trace.c (revision 38132) @@ -1169,6 +1169,60 @@ return trace; } +/* + * call-seq: + * trace.inspect -> string + * + * Return a string containing a human-readable TracePoint + * status. + */ + +static VALUE +tracepoint_inspect(VALUE self) +{ + rb_tp_t *tp = tpptr(self); + + if (tp->trace_arg) { + switch (tp->trace_arg->event) { + case RUBY_EVENT_LINE: + case RUBY_EVENT_SPECIFIED_LINE: + { + VALUE sym = rb_tracearg_method_id(tp->trace_arg); + if (NIL_P(sym)) + goto default_inspect; + return rb_sprintf("#<TracePoint:%"PRIsVALUE"@%"PRIsVALUE":%d in `%"PRIsVALUE"'>", + rb_tracearg_event(tp->trace_arg), + rb_tracearg_path(tp->trace_arg), + FIX2INT(rb_tracearg_lineno(tp->trace_arg)), + sym); + } + case RUBY_EVENT_CALL: + case RUBY_EVENT_C_CALL: + case RUBY_EVENT_RETURN: + case RUBY_EVENT_C_RETURN: + return rb_sprintf("#<TracePoint:%"PRIsVALUE" `%"PRIsVALUE"'@%"PRIsVALUE":%d>", + rb_tracearg_event(tp->trace_arg), + rb_tracearg_method_id(tp->trace_arg), + rb_tracearg_path(tp->trace_arg), + FIX2INT(rb_tracearg_lineno(tp->trace_arg))); + case RUBY_EVENT_THREAD_BEGIN: + case RUBY_EVENT_THREAD_END: + return rb_sprintf("#<TracePoint:%"PRIsVALUE" %"PRIsVALUE">", + rb_tracearg_event(tp->trace_arg), + rb_tracearg_self(tp->trace_arg)); + default: + default_inspect: + return rb_sprintf("#<TracePoint:%"PRIsVALUE"@%"PRIsVALUE":%d>", + rb_tracearg_event(tp->trace_arg), + rb_tracearg_path(tp->trace_arg), + FIX2INT(rb_tracearg_lineno(tp->trace_arg))); + } + } + else { + return rb_sprintf("#<TracePoint:%s>", tp->tracing ? "enabled" : "disabled"); + } +} + /* This function is called from inits.c */ void Init_vm_trace(void) @@ -1226,6 +1280,8 @@ rb_define_method(rb_cTracePoint, "disable", tracepoint_disable_m, 0); rb_define_method(rb_cTracePoint, "enabled?", rb_tracepoint_enabled_p, 0); + rb_define_method(rb_cTracePoint, "inspect", tracepoint_inspect, 0); + rb_define_method(rb_cTracePoint, "event", tracepoint_attr_event, 0); rb_define_method(rb_cTracePoint, "lineno", tracepoint_attr_lineno, 0); rb_define_method(rb_cTracePoint, "path", tracepoint_attr_path, 0); Index: test/ruby/test_settracefunc.rb =================================================================== --- test/ruby/test_settracefunc.rb (revision 38131) +++ test/ruby/test_settracefunc.rb (revision 38132) @@ -746,4 +746,29 @@ assert_equal([created_thread, :thread_end, 0, nil, nil, nil, Thread], events[1]) assert_equal(2, events.size) end + + def test_tracepoint_inspect + events = [] + trace = TracePoint.new{|tp| events << [tp.event, tp.inspect]} + assert_equal("#<TracePoint:disabled>", trace.inspect) + trace.enable{ + assert_equal("#<TracePoint:enabled>", trace.inspect) + Thread.new{}.join + } + assert_equal("#<TracePoint:disabled>", trace.inspect) + events.each{|(ev, str)| + case ev + when :line + assert_match(/ in /, str) + when :call, :c_call + assert_match(/call \`/, str) # #<TracePoint:c_call `inherited'@../trunk/test.rb:11> + when :return, :c_return + assert_match(/return \`/, str) # #<TracePoint:return `m'@../trunk/test.rb:3> + when /thread/ + assert_match(/\#<Thread:/, str) # #<TracePoint:thread_end of #<Thread:0x87076c0>> + else + assert_match(/\#<TracePoint:/, str) + end + } + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/