ruby-trunk-changes r36613 - r36619

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() というオブジェクトをマークする関数を使い回すようにリファクタリングしています。

nari:r36619 2012-08-04 23:12:12 +0900

gc.c のリファクタリング。関数マクロを使っていたところを inline 関数に置き換えたり宣言位置を移動したり。