super_method()
public
Returns a Method of superclass, which would be
called when super is used.
static VALUE
method_super_method(VALUE method)
{
struct METHOD *data;
VALUE defined_class, super_class;
rb_method_entry_t *me;
TypedData_Get_Struct(method, struct METHOD, &method_data_type, data);
defined_class = data->defined_class;
if (BUILTIN_TYPE(defined_class) == T_MODULE) defined_class = data->rclass;
super_class = RCLASS_SUPER(defined_class);
if (!super_class) return Qnil;
me = rb_method_entry_without_refinements(super_class, data->id, &defined_class);
if (!me) return Qnil;
return mnew_internal(me, defined_class,
super_class, data->recv, data->id,
rb_obj_class(method), FALSE, FALSE);
}