kimura wataru
kimur****@i*****
Tue Oct 4 23:11:46 JST 2005
木村です。 以下の問題を修正してコミットしたので報告します。 sf.netのバグトラッキングにいつのまにかタレコミされていたものです。 http://sourceforge.net/tracker/?func=detail&atid=438476&aid=1283390&group_id=44114 (現象) ruby上でCocoaのサブクラスのサブクラスを定義し、そのインスタンスメソッド を呼ぶとクラッシュします。 例) ---- class A < OSX::NSObject end class B < A end b = B.alloc.init # => CRASH! ---- (原因) OverrideMixin.mのsuper_imp()で取得したスーパークラス(例ではA)の メソッドrespondsToSelector:のIMPが、Bのメソッドど同一のアドレスに なるために、無限ループします。 (対応) super_impの実装を変更し、RubyCocoaでオーバーライドしたメソッドは 無視して、クラス階層をたどるようにしました。 -[B respondsToSelector:]をsuper_imp()で取得すると、今までは -[A respondsToSelector:]が返ってきていたのが、-[NSObject respondsToSelector:]を返すようになります。 -- kimura wataru