Skip to content

#original_name overwrite on second alias_mathod #5800

@lloeki

Description

@lloeki

Environment

$ jruby -v
jruby 9.2.7.0 (2.5.3) 2019-04-09 8a269e3 Java HotSpot(TM) 64-Bit Server VM 25.201-b09 on 1.8.0_201-b09 +jit [darwin-x86_64]
$ uname -a
Darwin Hamilton.local 19.0.0 Darwin Kernel Version 19.0.0: Thu Jul 11 18:37:36 PDT 2019; root:xnu-6153.0.59.141.4~1/RELEASE_X86_64 x86_64

Expected Behavior

Ruby 2.6.3: original_name is unchanged after second alias_method.

$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19]
$ pry
[1] pry(main)> class Foo; def foo; end; alias_method :bar, :foo; alias_method :baz, :bar; end
=> Foo
[2] pry(main)> Foo.instance_method(:foo).original_name
=> :foo
[3] pry(main)> Foo.instance_method(:bar).original_name
=> :foo
[4] pry(main)> Foo.instance_method(:baz).original_name
=> :foo
[5] pry(main)> Foo.new.method(:foo).original_name
=> :foo
[6] pry(main)> Foo.new.method(:bar).original_name
=> :foo
[7] pry(main)> Foo.new.method(:baz).original_name
=> :foo

Actual Behavior

JRuby 9.1.17.0: NoMethodError for one, and overwrites original_name on second alias_method for the other.

$ ruby -v
jruby 9.1.17.0 (2.3.3) 2018-04-20 d8b1ff9 Java HotSpot(TM) 64-Bit Server VM 25.201-b09 on 1.8.0_201-b09 +jit [darwin-x86_64]
$ pry
[1] pry(main)> class Foo; def foo; end; alias_method :bar, :foo; alias_method :baz, :bar; end
=> Foo
[2] pry(main)> Foo.instance_method(:foo).original_name
NoMethodError: undefined method `original_name' for #<UnboundMethod: Foo#foo>
from (pry):2:in `<eval>'
[3] pry(main)> Foo.new.method(:foo).original_name
=> :foo
[4] pry(main)> Foo.new.method(:bar).original_name
=> :foo
[5] pry(main)> Foo.new.method(:baz).original_name
=> :bar

JRuby 9.2.7.0: overwrites original_name on second alias_method.

$ ruby -v
jruby 9.2.7.0 (2.5.3) 2019-04-09 8a269e3 Java HotSpot(TM) 64-Bit Server VM 25.201-b09 on 1.8.0_201-b09 +jit [darwin-x86_64]
$ pry
[1] pry(main)> class Foo; def foo; end; alias_method :bar, :foo; alias_method :baz, :bar; end
=> Foo
[2] pry(main)> Foo.instance_method(:foo).original_name
=> :foo
[3] pry(main)> Foo.instance_method(:bar).original_name
=> :foo
[4] pry(main)> Foo.instance_method(:baz).original_name
=> :bar
[5] pry(main)> Foo.new.method(:foo).original_name
=> :foo
[6] pry(main)> Foo.new.method(:bar).original_name
=> :foo
[7] pry(main)> Foo.new.method(:baz).original_name
=> :bar

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions