Project

General

Profile

Actions

Bug #2600

closed

block.callの中でsuperできない

Added by kou (Kouhei Sutou) over 14 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
ruby -v:
1.8
[ruby-dev:40059]

Description

=begin
須藤です。

r25975の変更

  • eval.c (proc_invoke): unbound block created by define_method
    cannot call super. [ruby-core:26984]

から、以下のようにすると

NoMethodError: super called outside of method

という例外が発生するようになりました。

class Parent
def run
:parent_run
end
end

class Child < Parent
def run
callback do
super
end
end

 def callback(&block)
   block.call
 end

end

Child.new.run # -> 例外

Child#callbackの中のblock.callをyieldにすると例外は起きなく
なります。

SubjectにBugをつけてしまったのですが、そもそもこれはBugではな
く意図した変更なのでしょうか?

とりあえず、テストケースは添付しておきます。

余談ですが、この間リリースされたRuby 1.8.7にもこの変更が入っ
ていたため、Rabbitが動かなくなり、この違いに気づきました。

Index: test/ruby/test_super.rb

--- test/ruby/test_super.rb (revision 26302)
+++ test/ruby/test_super.rb (working copy)
@@ -149,4 +149,26 @@
c = C.new
assert_equal([c, "#{C.to_s}::m"], c.m, bug2419)
end
+

  • class Parent
  • def run
  •  :parent_run
    
  • end
  • end
  • class Child < Parent
  • def run
  •  callback do
    
  •    super
    
  •  end
    
  • end
  • def callback(&block)
  •  block.call
    
  • end
  • end
  • def test_super_in_block_call
  • assert_equal(:parent_run, Child.new.run)
  • end
    end
    =end

Related issues 1 (0 open1 closed)

Is duplicate of Ruby 1.8 - Bug #2537: 継承クラスにて、ブロック内にてsuperを呼ぶと、super called outside of method (NoMethodError)が発生するClosednobu (Nobuyoshi Nakada)12/28/2009Actions
Actions #1

Updated by tommy (Masahiro Tomita) over 14 years ago

=begin
とみたです。

On Tue, 12 Jan 2010 23:00:47 +0900
Kouhei Sutou wrote:

r25975の変更

  • eval.c (proc_invoke): unbound block created by define_method
    cannot call super. [ruby-core:26984]

から、以下のようにすると

NoMethodError: super called outside of method

という例外が発生するようになりました。

http://redmine.ruby-lang.org/issues/show/2537 ですね。

--
とみたまさひろ
3469 42CC 4D32 F53C AD98 65A5 8C37 FF09 69C1 6040

=end

Actions #2

Updated by kou (Kouhei Sutou) over 14 years ago

=begin
須藤です。

In
"[ruby-dev:40062] Re: [Bug:1.8] block.callの中でsuperできない" on Wed, 13 Jan 2010 01:21:05 +0900,
とみたまさひろ wrote:

r25975の変更

  • eval.c (proc_invoke): unbound block created by define_method
    cannot call super. [ruby-core:26984]

から、以下のようにすると

NoMethodError: super called outside of method

という例外が発生するようになりました。

http://redmine.ruby-lang.org/issues/show/2537 ですね。

重複してたんですね。すみません。。。

"nobu will fix this soon."とあるんでバグ認定ということですよ
ね。テストケースはコミットしてもよいですか?

=end

Actions #3

Updated by naruse (Yui NARUSE) over 14 years ago

  • ruby -v set to 1.8

=begin
若干議論があり、待ったがかかっているようです
=end

Actions #4

Updated by kou (Kouhei Sutou) over 14 years ago

=begin
須藤です。

In
"[ruby-dev:40069] [Bug #2600] block.callの中でsuperできない" on Wed, 13 Jan 2010 21:34:21 +0900,
Yui NARUSE wrote:

ruby -v 1.8にセット

若干議論があり、待ったがかかっているようです

ruby_1_8だけですか?ruby_1_8_7もですか?

=end

Actions #5

Updated by kou (Kouhei Sutou) about 14 years ago

=begin
須藤です。

block.callの中でsuperができない問題

についてです。

若干議論があり、待ったがかかっているようです

ということだそうですが、どのような議論があって、今はどういう
状態なのか知っている人はいませんか?あるいは、誰に聞けばいい
か知っている人はいませんか?

=end

Actions #6

Updated by shyouhei (Shyouhei Urabe) about 14 years ago

=begin
卜部です。

Kouhei Sutou さんは書きました:

須藤です。

block.callの中でsuperができない問題

についてです。

若干議論があり、待ったがかかっているようです

ということだそうですが、どのような議論があって、今はどういう
状態なのか知っている人はいませんか?あるいは、誰に聞けばいい
か知っている人はいませんか?

ネガティブな反応しかできなくて申し訳ない、私もその「議論」について把握しておら
ず、したがってどのようにもアクションがとれない感じです。

成瀬さんが把握してるんだろうか

意図しない非互換ですので修正出来次第でバックポートは行う予定でいます。ご不便を
おかけして申し訳ないです。

=end

Actions #7

Updated by naruse (Yui NARUSE) about 14 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to nobu (Nobuyoshi Nakada)
  • Priority changed from 3 to Normal
  • Target version set to Ruby 1.8.8

=begin
中田さん担当であるが、現在細かい部分で長考中というステータスです。
=end

Actions #8

Updated by kou (Kouhei Sutou) about 14 years ago

=begin
須藤です。

In
"[ruby-dev:40245] Bug #2600 block.callの中でsuperできない" on Sat, 30 Jan 2010 01:39:15 +0900,
Yui NARUSE wrote:

チケット #2600 が更新されました。 (by Yui NARUSE)

カテゴリ coreにセット
ステータス OpenからAssignedに変更
担当者 Nobuyoshi Nakadaにセット
優先度 LowからNormalに変更
Target version Ruby 1.8.8にセット

中田さん担当であるが、現在細かい部分で長考中というステータスです。

http://redmine.ruby-lang.org/issues/show/2600

これは、「何に対して長考している」かも教えてもらえない、ある
いは教えるのが大変ということでしょうか?

例えば、「挙動は望ましくないので直す、けど、直し方を長考して
いる」だと、1.8.7からはrevertすることもできるかもしれませんし、
「挙動は望ましいけど、○○を長考している」であれば、アプリケー
ション側で現在の挙動にあわせることができるかもしれません。

もし可能であれば、決まっているところまででいいので教えてもら
えませんか?あるいは、ここは決まっていないというところでも助
かります。

=end

Actions #9

Updated by nobu (Nobuyoshi Nakada) about 14 years ago

  • Status changed from Assigned to Closed

=begin
This issue was solved with changeset r26535.
Nobuhide, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Actions #10

Updated by shyouhei (Shyouhei Urabe) about 14 years ago

=begin
卜部です。

Kouhei Sutou さんは書きました:

もし可能であれば、決まっているところまででいいので教えてもら
えませんか?あるいは、ここは決まっていないというところでも助
かります。

今日、なかださんに会ったので確認してきました。「それはちょっと前に直した」らし
いです。今確認する感じだと、 svn diff -r26534:26536 あたりが該当の変更のように
見ます。あってますか?

=end

Actions #11

Updated by kou (Kouhei Sutou) about 14 years ago

=begin
須藤です。

In
"[ruby-dev:40301] Re: Bug #2600 block.callの中でsuperできない" on Wed, 3 Feb 2010 14:37:15 +0900,
Urabe Shyouhei wrote:

もし可能であれば、決まっているところまででいいので教えてもら
えませんか?あるいは、ここは決まっていないというところでも助
かります。

今日、なかださんに会ったので確認してきました。「それはちょっと前に直した」らし
いです。今確認する感じだと、 svn diff -r26534:26536 あたりが該当の変更のように
見ます。あってますか?

ありがとうございます。
このdiffのテストがパスするのであれば大丈夫だと思います。

1.8.7にもバックポートしてもらえるとうれしいです。

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0