Project

General

Profile

Bug #11182 » alias_affected_by_original_refinement.diff

shugo (Shugo Maeda), 05/28/2015 07:54 AM

View differences:

vm_insnhelper.c
if (NIL_P(refinement)) {
goto no_refinement_dispatch;
}
me = rb_method_entry(refinement, ci->mid, &defined_class);
me = rb_method_entry(refinement, ci->me->def->original_id,
&defined_class);
if (me) {
if (ci->call == vm_call_super_method) {
rb_control_frame_t *top_cfp = current_method_entry(th, cfp);
vm_method.c
{
rb_method_definition_t *new_def;
if (me->def && me->def->type == VM_METHOD_TYPE_REFINED)
if (me->def && me->def->type == VM_METHOD_TYPE_REFINED &&
me->called_id == me->def->original_id)
return;
new_def = ALLOC(rb_method_definition_t);
......
again:
orig_me = search_method(klass, def, &defined_class);
if (orig_me && orig_me->def->type == VM_METHOD_TYPE_REFINED) {
orig_me = rb_resolve_refined_method(Qnil, orig_me, &defined_class);
}
if (UNDEFINED_METHOD_ENTRY_P(orig_me) ||
UNDEFINED_REFINED_METHOD_P(orig_me->def)) {
(5-5/7)