Bug #2600
closedblock.callの中でsuperできない
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
Updated by tommy (Masahiro Tomita) almost 15 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
Updated by kou (Kouhei Sutou) almost 15 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
という例外が発生するようになりました。
重複してたんですね。すみません。。。
"nobu will fix this soon."とあるんでバグ認定ということですよ
ね。テストケースはコミットしてもよいですか?
=end
Updated by naruse (Yui NARUSE) almost 15 years ago
- ruby -v set to 1.8
=begin
若干議論があり、待ったがかかっているようです
=end
Updated by kou (Kouhei Sutou) almost 15 years ago
=begin
須藤です。
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もですか?
=end
Updated by kou (Kouhei Sutou) almost 15 years ago
=begin
須藤です。
block.callの中でsuperができない問題
についてです。
若干議論があり、待ったがかかっているようです
ということだそうですが、どのような議論があって、今はどういう
状態なのか知っている人はいませんか?あるいは、誰に聞けばいい
か知っている人はいませんか?
=end
Updated by shyouhei (Shyouhei Urabe) almost 15 years ago
=begin
卜部です。
Kouhei Sutou さんは書きました:
須藤です。
block.callの中でsuperができない問題
についてです。
若干議論があり、待ったがかかっているようです
ということだそうですが、どのような議論があって、今はどういう
状態なのか知っている人はいませんか?あるいは、誰に聞けばいい
か知っている人はいませんか?
ネガティブな反応しかできなくて申し訳ない、私もその「議論」について把握しておら
ず、したがってどのようにもアクションがとれない感じです。
成瀬さんが把握してるんだろうか¶
意図しない非互換ですので修正出来次第でバックポートは行う予定でいます。ご不便を
おかけして申し訳ないです。
=end
Updated by naruse (Yui NARUSE) almost 15 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
Updated by kou (Kouhei Sutou) almost 15 years ago
=begin
須藤です。
In 4b630f32cbb0e_8c3b9b5b9e603a3@redmine.ruby-lang.org
"[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にセット中田さん担当であるが、現在細かい部分で長考中というステータスです。¶
これは、「何に対して長考している」かも教えてもらえない、ある
いは教えるのが大変ということでしょうか?
例えば、「挙動は望ましくないので直す、けど、直し方を長考して
いる」だと、1.8.7からはrevertすることもできるかもしれませんし、
「挙動は望ましいけど、○○を長考している」であれば、アプリケー
ション側で現在の挙動にあわせることができるかもしれません。
もし可能であれば、決まっているところまででいいので教えてもら
えませんか?あるいは、ここは決まっていないというところでも助
かります。
=end
Updated by nobu (Nobuyoshi Nakada) almost 15 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
Updated by shyouhei (Shyouhei Urabe) almost 15 years ago
=begin
卜部です。
Kouhei Sutou さんは書きました:
もし可能であれば、決まっているところまででいいので教えてもら
えませんか?あるいは、ここは決まっていないというところでも助
かります。
今日、なかださんに会ったので確認してきました。「それはちょっと前に直した」らし
いです。今確認する感じだと、 svn diff -r26534:26536 あたりが該当の変更のように
見ます。あってますか?
=end
Updated by kou (Kouhei Sutou) almost 15 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