Issue #2402 has been updated by Nobuyoshi Nakada.

Description updated

----------------------------------------
Bug #2402: super in instance_eval
https://bugs.ruby-lang.org/issues/2402#change-54647

* Author: Shugo Maeda
* Status: Closed
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* ruby -v: ruby 1.9.2dev (2009-11-24 trunk 25909) [i686-linux]
* Backport: 
----------------------------------------
`instance_eval`のブロック内で`super`を呼ぶと、`instance_eval`で変更された
`self`に対して`super`の呼び出しを行ってしまうようです。

~~~ruby
defiant:build$ cat t.rb
class Foo
  def foo
    p self
  end
end

class Bar < Foo
  def foo
    x = Object.new
    x.instance_eval do
      super
    end
  end
end

Bar.new.foo
~~~
~~~
defiant:build$ ./ruby-trunk.1124 -v t.rb
ruby 1.9.2dev (2009-11-24 trunk 25909) [i686-linux]
#<Object:0x8590f6c>
~~~

`Foo#foo`が呼ばれるのに`self`が`Object`という、ちょっとおかしなことになっています。
ちょっと自信がありませんが、一応パッチを添付します。


---Files--------------------------------
super_in_instance_eval_fix.diff (2.03 KB)


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