16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'ext/appmap/appmap.c', line 16
static VALUE
singleton_method_owner_name(VALUE klass, VALUE method)
{
VALUE owner = rb_funcall(method, rb_intern("owner"), 0);
VALUE attached = rb_ivar_get(owner, rb_intern("__attached__"));
if (!CLASS_OR_MODULE_P(attached)) {
attached = rb_funcall(attached, rb_intern("class"), 0);
}
// Did __attached__.class return an object that's a Module or a
// Class?
if (CLASS_OR_MODULE_P(attached)) {
// Yup, get it's name
return rb_mod_name(attached);
}
// Nope (which seems weird, but whatever). Fall back to calling
// #to_s on the method's owner and hope for the best.
return rb_funcall(owner, rb_intern("to_s"), 0);
}
|