Bug #2600
block.callの中でsuperできない
| Status: | Closed | Start date: | ||
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | % Done: | 0% |
||
| Category: | core | |||
| Target version: | Ruby 1.8.8 | |||
| ruby -v: | 1.8 |
Description
須藤です。
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
Related issues
| duplicates Ruby 1.8 - Bug #2537: 継承クラスにて、ブロック内にてsuperを呼ぶと、super called outside of method (... | Closed | 12/28/2009 |
Associated revisions
* eval.c (proc_invoke): reverted r25975. [ruby-dev:39931]
[ruby-dev:40059]
History
Updated by Masahiro Tomita about 2 years ago
とみたです。 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
Updated by Kouhei Sutou about 2 years ago
須藤です。 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."とあるんでバグ認定ということですよ ね。テストケースはコミットしてもよいですか?
Updated by Kouhei Sutou about 2 years ago
須藤です。 In <4b4dbdcd40415_8c3c28c5b0442e6@redmine.ruby-lang.org> "[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もですか?
Updated by Kouhei Sutou about 2 years ago
須藤です。 block.callの中でsuperができない問題 * http://redmine.ruby-lang.org/issues/show/2537 * http://redmine.ruby-lang.org/issues/show/2600 についてです。 >> 若干議論があり、待ったがかかっているようです ということだそうですが、どのような議論があって、今はどういう 状態なのか知っている人はいませんか?あるいは、誰に聞けばいい か知っている人はいませんか?
Updated by Shyouhei Urabe about 2 years ago
卜部です。 Kouhei Sutou さんは書きました: > 須藤です。 > > block.callの中でsuperができない問題 > > * http://redmine.ruby-lang.org/issues/show/2537 > * http://redmine.ruby-lang.org/issues/show/2600 > > についてです。 > >>> 若干議論があり、待ったがかかっているようです > > ということだそうですが、どのような議論があって、今はどういう > 状態なのか知っている人はいませんか?あるいは、誰に聞けばいい > か知っている人はいませんか? ネガティブな反応しかできなくて申し訳ない、私もその「議論」について把握しておら ず、したがってどのようにもアクションがとれない感じです。 # 成瀬さんが把握してるんだろうか 意図しない非互換ですので修正出来次第でバックポートは行う予定でいます。ご不便を おかけして申し訳ないです。
Updated by Yui NARUSE about 2 years ago
- Category set to core
- Status changed from Open to Assigned
- Assignee set to Nobuyoshi Nakada
- Priority changed from Low to Normal
- Target version set to Ruby 1.8.8
中田さん担当であるが、現在細かい部分で長考中というステータスです。
Updated by Kouhei Sutou about 2 years ago
須藤です。 In <4b630f32cbb0e_8c3b9b5b9e603a3@redmine.ruby-lang.org> "[ruby-dev:40245] [Bug #2600](Assigned) 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することもできるかもしれませんし、 「挙動は望ましいけど、○○を長考している」であれば、アプリケー ション側で現在の挙動にあわせることができるかもしれません。 もし可能であれば、決まっているところまででいいので教えてもら えませんか?あるいは、ここは決まっていないというところでも助 かります。
Updated by Nobuyoshi Nakada about 2 years ago
- Status changed from Assigned to Closed
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.
Updated by Shyouhei Urabe about 2 years ago
卜部です。 Kouhei Sutou さんは書きました: > もし可能であれば、決まっているところまででいいので教えてもら > えませんか?あるいは、ここは決まっていないというところでも助 > かります。 今日、なかださんに会ったので確認してきました。「それはちょっと前に直した」らし いです。今確認する感じだと、 svn diff -r26534:26536 あたりが該当の変更のように 見ます。あってますか?
Updated by Kouhei Sutou about 2 years ago
須藤です。 In <4B690B8A.3020104@ruby-lang.org> "[ruby-dev:40301] Re: [Bug #2600](Assigned) 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にもバックポートしてもらえるとうれしいです。