ruby-trunk-changes r49896 - r49905

今日は CREF と SVAR の専用の型(NODE の別名として)の導入などがありました。

ko1: r49896 2015-03-09 06:01:31 +0900

r49894 で cref にアクセスするためのマクロを定義しましたがそのうちのひとつ COPY_CREF_OMOD() の nil チェックのミスを修正。

ko1: r49897 2015-03-09 06:22:43 +0900

r49894 で予告されていた CREF の NODE から専用の型への変更です。 rb_cref_t という型が導入されています。 えーと、既にマクロ化されていたので結構機械的な置換でいけていますね。すばらしい。GC のための WriteBarrier を CREF 操作マクロの中に吸収したりもしています。ただしメモリ管理まで変えてしまったわけではなくて NEW_NODE() で NODE オブジェクトとして確保したものを rb_cref_t 型にキャストして利用しているだけです。従って WriteBarrier などは必要というわけですね。

ko1: r49898 2015-03-09 06:44:00 +0900

special variable の代入処理 lep_svar_set() で WriteBarrier を追加しています。 この部分は昔からなので 2.1 と 2.2 にもバックポートが必要そうですね。

ko1: r49899 2015-03-09 06:53:05 +0900

CREF と同様に NODE オブジェクトを利用していた SVAR (special variable) の情報を struct SVAR という型を導入してメンバ名などがわかりやすくなるようにしています。 いやーこれはいいですね。 NODE の使いまわしはどのメンバが何の意味なのかわからなくて読めないですからね。

nobu: r49900 2015-03-09 08:20:13 +0900

proc.c の rb_mod_define_method() と vm.c の vm_define_method() でメソッドの可視性のフラグを扱う変数の型を int から rb_method_flat_t という専用の型に変更しています。そんなのあるのか…。 64bit 環境で切り詰めが起きて警告が出ることがあったようです。

nobu: r49901 2015-03-09 13:57:51 +0900

IO#close の実装で不要な rb_io_check_closed() の呼び出しがあったのを削除しています。 r49260 の IO#close が既に閉じられてても例外を発生させなくなった時にチェックが重複していたので不要になっていました。

nobu: r49902 2015-03-09 14:47:05 +0900

test/ruby/test_beginendblock.rb で子プロセスを起動して行っていたテストを EnvUtil.assert_in_out_err を利用して書きなおしてシンプルにしています。

nobu: r49903 2015-03-09 14:48:09 +0900

complex.c の safe_mul() で isnan() の引数内で代入文を書いていたのをやめています。 FreeBSD で isnan() がマクロとして定義されているため警告が出ていたのに対策したそうです。

nobu: r49904 2015-03-09 15:51:20 +0900

test/ruby/beginmainend.rb で未使用のローカル変数への代入を削除して警告除去。

nobu: r49905 2015-03-09 16:34:39 +0900

拡張ライブラリ stringio の StringIO#close でも IO#close の挙動に追随して close 済みでも例外を発生させないようにしています。