ruby-trunk-changes r31958 - r31975

今日は Psych が Class, Module, Hash を継承したオブジェクトなどの YAML エンコード/デコードの対応を追加、メインスレッドに特異クラスを作ると終了時に double free になる不具合の修正、IO.copy_stream の不具合修正など、やや多めのコミットがありました。

tenderlove:r31958 2011-06-09 09:06:29 +0900

Psych による YAML の dump/load でクラスを扱えるようになっています。ただし無名のクラスは例外になります。 "!ruby/class 'クラス名'" のような YAML になります。つまり load する時には同じクラスが存在するのが前提です(これは Marshal.dump/load も同じですが)。

svn:r31959 2011-06-09 09:06:34 +0900

version.h の日付更新。

tenderlove:r31960 2011-06-09 09:22:33 +0900

同じく Psych による YAML の load/dump で Module を扱えるようにしています。ただし無名Moduleは例外になります。 "!ruby/module 'モジュール名'" のような YAML になります。

tenderlove:r31961 2011-06-09 10:58:07 +0900

Psych で Hash を継承したクラスを load/dump する時にクラス名を保持するようにしています。"!ruby/hash:クラス名 ..." のような形式でタグ付きの Hash の YAML を生成するので、load すると dump した時と同じクラスのインスタンスになります。また load 時には "!map:#クラス名" というタグも認識してくれるようです。

mrkn:r31962 2011-06-09 18:39:47 +0900

String#[] のドキュメントを更新しています。引数に Range オブジェクトを渡した時に、開始位置が String の文字数以上の時に nil を返すという挙動の説明で、Range の開始が文字列の最後より後だったら、という意味なのですが Range の最後より後(つまり開始と終了の上下関係が反転している)という意味にも取れそうな英語だったので明確にしています。

nagachika:r31966 2011-06-09 22:38:27 +0900

ruby_1_9_2 のブランチから r31402 のうち Thread.kill に不正な引数(Thread でないオブジェクト)を渡した時のテストを forward port しています。 [ruby-core:35086] [Backport #4367]

nagachika:r31967 2011-06-09 22:58:09 +0900

Thead.kill のテストに Thread を継承したサブクラスのインスタンスを引数として渡した時のテストを追加しています。これは 1.9.2 で Thread サブクラスのインスタンスを渡すと TypeError が発生するようになっていたので、ruby_1_9_2 ブランチに back port してもらうつもりで入れました。

nagachika:r31968 2011-06-09 23:45:56 +0900

メインスレッドのオブジェクトに特異クラスを追加すると、終了時に二重に解放処理が走って double free の警告が出力される不具合の修正。終了時の VM 解放処理での GC で Thread と Mutex の解放を抑制しているところでオブジェクトのクラスとの直接比較でチェックしていたので、継承関係も含めてチェックするようにしています。 [ruby-core:36741] [Bug #4828]

akr:r31971 2011-06-10 00:02:46 +0900

IO.copy_stream で転送待ち中にシグナルで割り込みを受けた時に途中で処理を抜けてしまうなどの不安定な動作を修正しています。 [ruby-core:36156] [Bug #4683]

svn:r31972 2011-06-10 00:02:50 +0900

version.h の日付更新。

tadf:r31973 2011-06-10 00:25:12 +0900

String#to_r で文字列から Rational を生成する時に Float が返ってくることがあるので(Infinity の時?)エラーにしています。

nagachika:r31974 2011-06-10 00:31:02 +0900

r31968 の結果不要になった gc.c での rb_cMutex の宣言を削除しています。

tadf:r31975 2011-06-10 00:36:13 +0900

String#to_c や String#to_r で文字列から Complex, Rational を生成するために正規表現を利用しているところで、MatcheData#[] のメソッド呼び出しでマッチ部を取得していたのを rb_reg_nth_match() を使ってメソッド呼び出しを介さずに取得するようにしています。