Bug #11188 ยป method-inspect-chain-alias-11188.patch
test/ruby/test_alias.rb | ||
---|---|---|
end
|
||
end
|
||
class Alias4 < Alias0
|
||
alias foo1 foo
|
||
alias foo2 foo1
|
||
alias foo3 foo2
|
||
end
|
||
def test_alias
|
||
x = Alias2.new
|
||
assert_equal "foo", x.bar
|
||
... | ... | |
assert_raise(NoMethodError) { x.quux }
|
||
end
|
||
def test_alias_inspect
|
||
o = Alias4.new
|
||
assert_equal("TestAlias::Alias4(TestAlias::Alias0)#foo", o.method(:foo).inspect.split[1])
|
||
assert_equal("TestAlias::Alias4(TestAlias::Alias0)#foo1(foo)", o.method(:foo1).inspect.split[1])
|
||
assert_equal("TestAlias::Alias4(TestAlias::Alias0)#foo2(foo)", o.method(:foo2).inspect.split[1])
|
||
assert_equal("TestAlias::Alias4(TestAlias::Alias0)#foo3(foo)", o.method(:foo3).inspect.split[1])
|
||
end
|
||
class C
|
||
def m
|
||
$SAFE
|
vm_method.c | ||
---|---|---|
alias_me = method_entry_set(target_klass, alias_name, orig_me, visi, orig_me->owner);
|
||
RB_OBJ_WRITE(alias_me, &alias_me->owner, target_klass);
|
||
RB_OBJ_WRITE(alias_me, &alias_me->defined_class, defined_class);
|
||
if (orig_me->owner == defined_class &&
|
||
orig_me->owner != orig_me->defined_class &&
|
||
alias_me->owner == alias_me->defined_class) {
|
||
defined_class = orig_me->defined_class;
|
||
}
|
||
RB_OBJ_WRITE(alias_me, &alias_me->defined_class, defined_class);
|
||
}
|
||
}
|
||