From: nobu@... Date: 2014-09-19T22:56:11+00:00 Subject: [ruby-core:65133] [ruby-trunk - Bug #10263] [Closed] `super` does not work from binding eval context Issue #10263 has been updated by Nobuyoshi Nakada. Status changed from Open to Closed % Done changed from 0 to 100 Applied in changeset r47645. ---------- vm_eval.c: fix super from eval with scope * vm_eval.c (eval_string_with_cref): fix super from eval with scope. set klass in the current control frame to the class of the receiver in the context to be evaluated, this class/module must match the actual receiver to call super. [ruby-core:65122] [Bug #10263] ---------------------------------------- Bug #10263: `super` does not work from binding eval context https://bugs.ruby-lang.org/issues/10263#change-48984 * Author: Charlie Somerville * Status: Closed * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.2.0dev (2014-09-19 trunk 47643) [x86_64-darwin13] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- `super` is broken when called from inside a binding eval context. Test case: ``` class A def foo puts "A#foo" end end class B < A def foo binding.eval("super") end end B.new.foo ``` Expected output: ``` A#foo ``` Actual output: ``` x.rb:11:in `foo': self has wrong type to call super in this context: B (expected Binding) (TypeError) from x.rb:11:in `eval' from x.rb:11:in `foo' from x.rb:15:in `
' ``` This appears to be a regression in 2.0.0, as the code sample above worked as expected on 1.9.3. -- https://bugs.ruby-lang.org/