ruby-trunk-changes r53518 - r53527

今日はクラスの定数テーブルの変更の影響でクラス名がおかしくなることがある不具合の修正や ISeq の mark 漏れの再修正などがありました。

normal: r53518 2016-01-13 04:26:07 +0900

r53376 の rb_classext_t の定数テーブルの rb_id_table 化により順序が保存されなくなったことによりなぜかクラスの Module#name で取得できる名前の決定に影響が出てしまったようで、クラス名をクラスの内部的インスタンス変数にセットする処理を rb_mod_const_set() から rb_const_set() に移動しています。名前のキャッシュをはやめにするようにしているようです。 [ruby-core:72807] [Bug #11977]

naruse: r53519 2016-01-13 11:04:18 +0900

.travis.yml で sudo: false を追加して、コンテナでテストを動かすようにしています。 また Linux での apt-get でのパッケージの更新などの前処理をコメントアウトしています。

nobu: r53520 2016-01-13 11:24:07 +0900

Thread#name のテストで生成した Thread が sleep で状態が stop になるまで待つようにしています。 inspect で文字列化した時に状態も入るので、それが変化して assertion にひっかかるのを防ぐようにしています。

naruse: r53521 2016-01-13 12:03:45 +0900

.travis.yml で make test-all の TESTOPTS で渡すオプションに --job-status=normal を追加して、テストの実行状態を \r で端末の同じ行を書き換える出力を抑制しています。ログが長くなってしまうため Travis CI でエラーになってたみたいです。

naruse: r53522 2016-01-13 12:22:36 +0900

さらに .travis.yml で make test や make test-all に --color=never オプションを渡して色付けも抑制するようにしています。 また make update-rubyspec に MSPECOPT=-fm を渡しています。update-rubyspec? test-rubyspec の時じゃないんでしょうか。

naruse: r53523 2016-01-13 13:02:31 +0900

と思ったら r53522 の MSPECOPT=-fm はやっぱり test-rubspec の時に渡すように修正されていました。また make test の時のオプションは TESTOPTS 変数経由で渡すように修正されています。

nobu: r53524 2016-01-13 16:56:51 +0900

r53514 の iseqw_mark() の修正の再修正。 やはり iseqw_mark() で iseq->body->parent_iseq を mark するのはやめて rb_iseq_mark で直接 parent_iseq を mark するようにしています。もっと lambda でネストした環境で eval で作られた iseq が GC で回収される可能性が残っていたようです。 [ruby-core:72620] [Bug #11928]

nobu: r53525 2016-01-13 17:05:07 +0900

NoMethodError の例外メッセージのフォーマット文字列を char * から fstring の String オブジェクトを使うようにしています。最終的に rb_name_err_mesg_new() で String オブジェクトを受け取るようになっているので make_no_method_exception() の引数の段階で VALUE 型に変更し、 C の文字列リテラルを書いている箇所でそのまま fstring を作るようにしています。

hsbt: r53526 2016-01-13 17:15:39 +0900

Travis CI で OS X のテストを実行しなくなったので、.travis.yml から OS X の時の指定などを削っています。

hsbt: r53527 2016-01-13 17:22:18 +0900

.travis.yml から r53519 のあたりでコメントアウトした Linux 用の処理も削っています。また不要な $TRAVIS_OS_NAME での分岐も削っています。