shugo:r36613 2012-08-04 01:32:52 +0900
r36612 の修正を revert して、さらにテストを修正/追加しています。昨夜は SEGV してたので何か根本的に壊れたと思ったのですが、わたしのビルドがおかしかっただけみたいでした。 コミットログによると alias されたメソッドから super する時の挙動が考慮されていなかったようです。
svn:r36614 2012-08-04 01:32:59 +0900
version.h の日付更新。
nobu:r36615 2012-08-04 01:54:19 +0900
r36613 で追加したテストメソッドの名前が重複していたので改名しています。
nobu:r36616 2012-08-04 01:56:08 +0900
vm_search_normal_superclass() というレシーバとクラスを渡して super で辿るべき親クラス(Module の IClass)を探すときに Module の IClass が挿入されている場所を探す処理(これが receiver のクラスから遡って探すだけだったので同じモジュールが重複して ancestors に入っていると無限ループの元になっていた)はもう不要になったので recv 引数ごと削除しています。
shugo:r36617 2012-08-04 10:04:05 +0900
Module のメソッドが alias されている場合の super の挙動についてのテストを追加しています。 なるほど、こういうケースは alias 元のメソッドの super が呼ばれるんですね。そりゃまあそうか……。 [ruby-dev:46028]
class Base def m1 p :m1 end def m2 p :m2 end end module M def m1 p :M_m1 super end alias m2 m1 end class C < Base include M end C.new.m2 # => :M_m1 :m1
nari:r36618 2012-08-04 20:40:59 +0900
gc.c で gc_mark_ptr() というオブジェクトをマークする関数を使い回すようにリファクタリングしています。