Backport #621

When to call Class#inherited

Added by Shyouhei Urabe over 3 years ago. Updated 10 months ago.

[ruby-dev:36685]
Status:Closed Start date:10/08/2008
Priority:Normal Due date:
Assignee:Akinori MUSHA % Done:

100%

Category:core
Target version:Ruby 1.8.8

Description

1.8のバグか1.9のバグかよくわからんのですが、以下のようにClass#inheritedを実行するタイミングが変わっています。

% ruby -ve'
class C
  def C.inherited(d)
    raise "inherited"
  end
end

begin
  Class.new C do
    raise "new"
  end
rescue
  p $!
end
'
ruby 1.9.0 (2008-10-08 revision 17576) [x86_64-linux]
#<RuntimeError: inherited>

% ruby -ve'
class C
  def C.inherited(d)
    raise "inherited"
  end
end

begin
  Class.new C do
    raise "new"
  end
rescue
  p $!
end
'
ruby 1.8.7 (2008-10-08 revision 17572) [x86_64-linux]
#<RuntimeError: new>

Associated revisions

Revision 25470
Added by knu over 2 years ago

* object.c (rb_class_initialize): The inherited hook should be run immediately after a new subclass is created, which is before evaluating a given block. [Backport #621]

History

Updated by Kouhei Sutou over 3 years ago

[ruby-dev:34639]でまつもとさんが意図的に変えたような発言をしています。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/34639

> trunkの方が「よい挙動」であることは確かでしょうね(そう思って
> 変えた覚えがある)。1.8も揃えたいのはやまやまですが、互換性の
> 問題もあるので適用するかどうかはknuさんにお任せします。
>
> でも、放置せざるをえないかな。

Updated by Koichi Sasada about 3 years ago

これ,担当が私になってるんですが,どうしたもんでしょうか.

Updated by Koichi Sasada about 3 years ago

どうしたもんでしょうか.

Kouhei Sutou wrote::
> チケット #621 が更新されました。 (by Kouhei Sutou)
> 
> 
> [ruby-dev:34639]でまつもとさんが意図的に変えたような発言をしています。
> http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/34639
> 
>> trunkの方が「よい挙動」であることは確かでしょうね(そう思って
>> 変えた覚えがある)。1.8も揃えたいのはやまやまですが、互換性の
>> 問題もあるので適用するかどうかはknuさんにお任せします。
>>
>> でも、放置せざるをえないかな。
> 
> ----------------------------------------
> http://redmine.ruby-lang.org/issues/show/621
> 
> ----------------------------------------
> http://redmine.ruby-lang.org
> 


-- 
// SASADA Koichi at atdot dot net

Updated by Yui NARUSE over 2 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee changed from Koichi Sasada to Akinori MUSHA
  • Target version set to Ruby 1.8.8
  • この変更は 1.9 では仕様変更である
  • 1.8 での変更は knu さんが判断する

Updated by Akinori MUSHA over 2 years ago

互換性の問題はありますが、これはバグと捉えたい気がします。
生成直後に実行されないのでは、フックとしての機能が毀損されますよね。

ruby_1_8ではrb_class_initializeを「直す」ことにします。

Updated by Akinori MUSHA over 2 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100
This issue was solved with changeset r25470.
Shyouhei, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

Also available in: Atom PDF