Project

General

Profile

Bug #2600

block.callの中でsuperできない

Added by kou (Kouhei Sutou) over 9 years ago. Updated about 8 years ago.

Status:
Closed
Priority:
Normal
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

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

History

#1

Updated by tommy (Masahiro Tomita) over 9 years ago

=begin
とみたです。

On Tue, 12 Jan 2010 23:00:47 +0900
Kouhei Sutou kou@cozmixng.org 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 ですね。

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

=end

#2

Updated by kou (Kouhei Sutou) over 9 years ago

=begin
須藤です。

In 20100113012059.cebe4481.tommy@tmtm.org
"[ruby-dev:40062] Re: [Bug:1.8] block.callの中でsuperできない" on Wed, 13 Jan 2010 01:21:05 +0900,
とみたまさひろ tommy@tmtm.org 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

#3

Updated by naruse (Yui NARUSE) over 9 years ago

  • ruby -v set to 1.8

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

#4

Updated by kou (Kouhei Sutou) over 9 years ago

=begin
須藤です。

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

ruby -v 1.8にセット

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

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

=end

#5

Updated by kou (Kouhei Sutou) over 9 years ago

=begin
須藤です。

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

についてです。

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

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

=end

#6

Updated by shyouhei (Shyouhei Urabe) over 9 years ago

=begin
卜部です。

Kouhei Sutou さんは書きました:

須藤です。

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

についてです。

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

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

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

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

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

=end

#7

Updated by naruse (Yui NARUSE) over 9 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

#8

Updated by kou (Kouhei Sutou) over 9 years ago

=begin
須藤です。

In
"[ruby-dev:40245] Bug #2600 block.callの中でsuperできない" on Sat, 30 Jan 2010 01:39:15 +0900,
Yui NARUSE redmine@ruby-lang.org 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

#9

Updated by nobu (Nobuyoshi Nakada) over 9 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

#10

Updated by shyouhei (Shyouhei Urabe) over 9 years ago

=begin
卜部です。

Kouhei Sutou さんは書きました:

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

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

=end

#11

Updated by kou (Kouhei Sutou) over 9 years ago

=begin
須藤です。

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

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

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

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

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

=end

Also available in: Atom PDF