Issue #12058 has been updated by Jesse Sielaff.

ruby -v changed from 2.3.0p0 to ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

----------------------------------------
Bug #12058: Unexpected value of __callee__ when including a module
https://bugs.ruby-lang.org/issues/12058#change-56929

* Author: Jesse Sielaff
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
I noticed a surprising behavior when invoking `__callee__` in an aliased method.

When invoked via a method created by `alias_method`, `__callee__` ignores the name of the old method (here `xxx`) and returns the name of the new method, as below:

~~~
class Foo
  def xxx() __callee__ end
  alias_method :foo, :xxx
end

Foo.new.foo # => :foo
~~~

This behavior holds even when `xxx` is inherited from a superclass:

~~~
class Sup
  def xxx() __callee__ end
end

class Bar < Sup
  alias_method :bar, :xxx
end

Bar.new.bar # => :bar
~~~

Given both of the above, I would expect that the same behavior would hold when `xxx` is included via a module. However, that is not the case:

~~~
module Mod
  def xxx() __callee__ end
end

class Baz
  include Mod
  alias_method :baz, :xxx
end

Baz.new.baz # => :xxx
~~~

I expect the return value to be `:baz`, not `:xxx`.

Is this a bug, or is there an important difference between superclass inheritance and module inclusion that I've failed to grasp here?

Origin: http://stackoverflow.com/questions/35281623/unexpected-value-of-callee-when-including-a-module-is-this-a-ruby-bug



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>