Bug #2600

block.callの中でsuperできない

Added by Kouhei Sutou about 2 years ago. Updated 10 months ago.

[ruby-dev:40059]
Status:Closed Start date:
Priority:Normal Due date:
Assignee:Nobuyoshi Nakada % 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

Revision 26535
Added by nobu about 2 years ago

* 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 Yui NARUSE about 2 years ago

  • ruby -v set to 1.8
若干議論があり、待ったがかかっているようです

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にもバックポートしてもらえるとうれしいです。

Also available in: Atom PDF