diff options
author | Yusuke Endoh <[email protected]> | 2024-02-15 20:04:23 +0900 |
---|---|---|
committer | Yusuke Endoh <[email protected]> | 2024-02-15 20:43:11 +0900 |
commit | a7718c914a216457ca9d3806085e673eabda8b31 (patch) | |
tree | 99f122f32afba7f5c8407c6ac3eecd2bebc1c364 /vm_backtrace.c | |
parent | 0da12fa34e904603d2aa84e25924a3fde8a44f39 (diff) |
Do not show an anonymous class as a receiver
Diffstat (limited to 'vm_backtrace.c')
-rw-r--r-- | vm_backtrace.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/vm_backtrace.c b/vm_backtrace.c index b1b9f54eb8..fa00c06f63 100644 --- a/vm_backtrace.c +++ b/vm_backtrace.c @@ -191,22 +191,25 @@ location_lineno_m(VALUE self) return INT2FIX(location_lineno(location_ptr(self))); } +VALUE rb_mod_name0(VALUE klass, bool *permanent); + static VALUE gen_method_name(VALUE owner, VALUE name) { + bool permanent; 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)) { + v = rb_mod_name0(v, &permanent); + if (permanent && !NIL_P(v)) { return rb_sprintf("%"PRIsVALUE".%"PRIsVALUE, v, name); } } } else { - owner = rb_class_path(owner); - if (!NIL_P(owner)) { + owner = rb_mod_name0(owner, &permanent); + if (permanent && !NIL_P(owner)) { return rb_sprintf("%"PRIsVALUE"#%"PRIsVALUE, owner, name); } } |