ruby-trunk-changes r37132 - r37143

今日は String のメソッドで GC の mark 漏れがおきる不具合の修正などがありました。

ko1:r37132 2012-10-11 02:52:24 +0900

RubyVM::InstructionSequence#disasm で r37121 で追加(インラインキャッシュから分離)されたメソッドキャッシュ用の callinfo の出力を追加しています。

svn:r37133 2012-10-11 02:52:29 +0900

version.h の日付更新。

ko1:r37134 2012-10-11 02:55:57 +0900

YARV のスタック構造の変更(おそらく r37043 のあたりの base pointer の削除の関係だと思われます)に追随して SEGV した時など VMスタックトレースを出力する時の処理を修正しています。またメソッド名として定義された元のメソッド名(alias した時など)ではなくて呼び出した時の名前で表示するようにしているみたいです。

ko1:r37135 2012-10-11 03:38:01 +0900

super を呼んだ時の継承元のメソッドにも呼び元のメソッドに渡されたブロックが渡ることを確認するテストを bootstraptest (make test で実行されるほう)に追加しています。 かっこなしの super で渡るのは知ってましたが引数を明示的に渡す super() でもブロックは伝播するんですね。

naruse:r37136 2012-10-11 07:43:51 +0900

r37132 で追加した call_info の disasm ダンプの処理でインデックスが正しく計算されるようにキャストを修正しています。

naruse:r37137 2012-10-11 09:50:29 +0900

iseq.c の未初期化の変数を Qundef で初期化しておくようにしています。実際は未初期化のまま参照されることはないけどコンパイラが判定できなくて警告が出力されるのを抑制しているのでしょう。

nobu:r37140 2012-10-11 15:50:26 +0900

test/ruby/test_string.rb が ruby-mode.el で 誤判定されてハイライトがおかしくなるらしくてその対策としてクオートの種類をかえたり、無意味なエスケープ(バックスラッシュ)を追加したりしています。

nobu:r37141 2012-10-11 15:50:29 +0900

test/ruby/test_string.rb で同じテストを String を継承したクラスに対しても実施するためテストクラスを継承して、同じメソッドが2度使われるのですが、正規表現リテラルは評価される度に同じオブジェクトを返すので、それぞれ別になるよう Regexp.new で正規表現を生成するように変更しています。
また警告を抑制するために一部のテストで一時的に $VERBOSE を nil に設定しています。

nobu:r37142 2012-10-11 15:50:31 +0900

String#codepoints のテストを追加しています。

nobu:r37143 2012-10-11 23:09:49 +0900

String#each_line や String#codepoints, matal String#split などで使う string.c の関数でコンパイラの最適化によりVALUE型の値がマシンスタック/レジスタからなくなって GC の mark 漏れが起きる不具合修正。 RB_GC_GUARD() をいくつか追加しています。 [ruby-core:47881] [Bug #7135]