ruby-trunk-changes r45771 - r45788

今日は Symbol GC 関連の不具合修正が主にありました。

nobu: r45771 2014-05-01 19:53:18 +0900

parse.y の must_be_dynamic_symbol() で渡されたのが static symbol だったら TypeError を発生させて Symbol 名をエラーメッセージに含めるようにしています。デバッグ用っぽいですね。

kazu: r45774 2014-05-01 22:25:40 +0900

IO#statfs で fstatfs(2) を使うか fstatvfs(2) を使うかの判定の条件コンパイルを r45768 で構造体のチェック結果もみるようにしたのを、上のほうの構造体の HAVE_STRUCT_STATFS や HAVE_STRUCT_STATVFS で分岐しているところの中に HAVE_FSTATFS や HAVE_FSTATVFS のチェックをネストさせるように移動しています。

kazu: r45775 2014-05-01 22:25:43 +0900

file.c の IO#statfs の #ifdef や #define などのプリプロセッサの directive をネストに応じてインデントさせるようにしています。

kazu: r45776 2014-05-01 22:25:44 +0900

r45756 と r45758 の ChangeLogtypo 修正。

nobu: r45777 2014-05-01 22:52:36 +0900

r45771 で must_be_dynamic_symbol() に渡されたのが static symbol だったら TypeError 例外を発生させるようにしていましたが、rb_bug() で強制終了するように変更しています。またそもそも Symbol じゃないオブジェクトが渡された時も rb_bug() で止めるようにしています。 やっぱり assert 相当のバグ検出用だったみたいです。

nobu: r45779 2014-05-02 10:34:41 +0900

テスト用の拡張ライブラリ ext/-test-/symbol/type.c に static? と dynamic? という Symbol が dynamic method (GC で回収可能)か static symbol かを判定するメソッドを追加しています。 あれ、この Init_type() に渡される klass ってどこからくるんだろう……。extconf.rb でなにやら Init_ 関数の引数をいじっているみたいですけど。

nobu: r45780 2014-05-02 10:34:44 +0900

r45779 に続いてテスト用の拡張ライブラリに pindown というメソッドを追加して、rb_pin_dynamic_symbol() を呼んで Symbol の pin down を強制的に起こせるようにしています。
どちらも作っているだけでまだ利用していないみたいですね。

svn: r45781 2014-05-02 10:34:46 +0900

version.h の日付更新。

nobu: r45782 2014-05-02 10:37:57 +0900

r45698 および r45756 に関連して xxx= のような形のメソッド名の Symbol を取得しようとした時に異常終了する不具合を再修正しています。 rb_str_dynamic_intern() の戻り値が Symbol なのに ID として処理しようとしていたのでそのまま SYM2ID() で ID 化するようにしています。 [ruby-core:62226] [Bug #9787]

nobu: r45783 2014-05-02 11:32:53 +0900

File#seek の SEEK_DATA のテストでエラーメッセージに埋め込む File::Statfs#type の呼び出しを Proc オブジェクトで包んで評価を遅延させるようにしています。 seek 自体には成功するのに File::Statfs#type が存在しない環境でエラーになるのを避けるためとのこと。 具体的には Solaris でエラーになっていたようです。 [ruby-dev:48154] [Bug #9789]

nobu: r45784 2014-05-02 12:20:21 +0900

rb_id_attrset() で壊れた ID の種類で NameError を発生させる時に、シンボル名がみつからなかったら rb_name_error() ではなく rb_name_error_str() を使って Qnil を渡すことで Symbol の情報を表示させないようにしています。

nobu: r45785 2014-05-02 12:26:48 +0900

標準添付ライブラリ mkmf.rb で生成する Makefile の pre-install-rb ルールでインストールするファイルがない時に "installing ... libraries" というメッセージを表示しないように NULLCMD(":" など)に置き換えています。

hsbt: r45786 2014-05-02 16:25:16 +0900

標準添付ライブラリ rinda の Rinda::TupleEntry#renew の rdoc 用コメントの引数の説明を修正しています。 [ruby-core:62003] [Bug #9738]

hsbt: r45787 2014-05-02 16:34:23 +0900

標準添付ライブラリ net/imap.rb の rdoc 用コメントの英文を添削しています。 [ruby-core:61931] [Bug #9720]

nobu: r45788 2014-05-02 21:04:04 +0900

r45782 の xxx= の Symbol の修正の続きで rb_id_attrset() を呼ぶ前に ID に ID_STATIC_SYM フラグを追加していたのを消しています。rb_intern3() で dynamic symbol が返ってくることもありえるのでここで static とマークする必要はないとのこと。 ここでフラグ立ててたので rb_id_attrset() で dynamic symbol 用の処理を通らなくなっておかしくなってたんですねきっと。 [ruby-core:62226] [Bug #9787]