Project

General

Profile

Actions

Bug #10263

closed

`super` does not work from binding eval context

Added by charliesome (Charlie Somerville) about 7 years ago. Updated about 7 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0dev (2014-09-19 trunk 47643) [x86_64-darwin13]
[ruby-core:65122]

Description

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 `<main>'

This appears to be a regression in 2.0.0, as the code sample above worked as expected on 1.9.3.

Updated by nobu (Nobuyoshi Nakada) about 7 years ago

  • 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]

Updated by nagachika (Tomoyuki Chikanaga) about 7 years ago

  • Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN to 2.0.0: REQUIRED, 2.1: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) about 7 years ago

  • Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE

Backported into ruby_2_1 at r47980.

Updated by usa (Usaku NAKAMURA) about 7 years ago

  • Backport changed from 2.0.0: REQUIRED, 2.1: DONE to 2.0.0: DONE, 2.1: DONE

Backported into ruby_2_0_0 at r47987.

Actions

Also available in: Atom PDF