diff options
-rw-r--r-- | test/ruby/test_backtrace.rb | 19 | ||||
-rw-r--r-- | variable.c | 6 | ||||
-rw-r--r-- | vm_backtrace.c | 11 |
3 files changed, 32 insertions, 4 deletions
@@ -428,4 +428,23 @@ class TestBacktrace < Test::Unit::TestCase enum.next end; end end @@ -111,6 +111,12 @@ classname(VALUE klass, bool *permanent) return classpath; } /* * call-seq: * mod.name -> string @@ -191,22 +191,25 @@ location_lineno_m(VALUE self) return INT2FIX(location_lineno(location_ptr(self))); } static VALUE gen_method_name(VALUE owner, VALUE name) { if (RB_TYPE_P(owner, T_CLASS) || RB_TYPE_P(owner, T_MODULE)) { if (RBASIC(owner)->flags & FL_SINGLETON) { VALUE v = RCLASS_ATTACHED_OBJECT(owner); if (RB_TYPE_P(v, T_CLASS) || RB_TYPE_P(v, T_MODULE)) { - v = rb_class_path(v); - if (!NIL_P(v)) { return rb_sprintf("%"PRIsVALUE".%"PRIsVALUE, v, name); } } } else { - owner = rb_class_path(owner); - if (!NIL_P(owner)) { return rb_sprintf("%"PRIsVALUE"#%"PRIsVALUE, owner, name); } } |