ruby-trunk-changes r34046 - r34056

今日はいくつかのオブジェクトを TypedData 型を使って定義するようにする修正が入っています。

nobu:r34046 2011-12-15 10:10:45 +0900

r34027 で追加した複数の Thread から同時に同じファイルを require しようとした時にひとつだけ成功することを確認するテストで、どちらのスレッドが成功するかは確実に決まらないのでチェック方法を変更しています。 [ruby-core:41655] [Bug #5754]

svn:r34047 2011-12-15 10:10:50 +0900

version.h の日付更新。

nobu:r34048 2011-12-15 10:44:58 +0900

r32360 の変更で Array#delete_if, Array#reject! の挙動に変更があって、ブロックから真値を返すたびにレシーバの Array オブジェクトの要素を消す(以前は最後にまとめて消していて、そのために途中で抜けると消したはずの要素が消えていなかった)ようになったのをドキュメントに明記するようにしています。 [ruby-core:41616] [Bug #5752]

nobu:r34050 2011-12-15 13:15:54 +0900

正規表現オブジェクト(Regexp)の使用メモリサイズを計算する部分で OnigRange という構造体から参照するメモリ領域のサイズが考慮されていなかったのを考慮するように実装追加しています。

naruse:r34051 2011-12-15 13:29:20 +0900

IO 待ちしているプロセスをシグナルで止めるテスト test_thread_timer_and_interrupt で送信するシグナルを SIGQUIT から SIGINT にしています。おそらく Windows でも SIGINT なら使える(エミュレートしている実装が含まれている)からでしょう。

nobu:r34052 2011-12-15 14:33:34 +0900

TypedData 型のオブジェクトの型チェックをしているところでエラー時のメッセージに期待する TypedData の型名と実際の VALUE の型を表示するようにしています。またそのため組み込みのオブジェクト型/クラス名を取得する処理を関数に切り出して利用するようにしています。
しかしこの切り出されている関数 builtin_type_name() は true, false の時に文字列化により String オブジェクトを生成して、そのバッファだけを返しているので、その後 rb_raise で GC が実行されるとこの一時オブジェクトが回収されて不正なポインタ参照をしてしまう危険があると思います。

nobu:r34053 2011-12-15 14:48:39 +0900

拡張ライブラリ strscan の StringScanner クラスを TypedData を使うようにリファクタリングしています。

nobu:r34054 2011-12-15 17:40:29 +0900

r34052 での変数名 typo 修正。

nobu:r34055 2011-12-15 17:57:01 +0900

ARGF のオブジェクトも TypedData を使った定義にしてメモリ使用量を正確に検出できるようにしています。

nagachika:r34056 2011-12-15 23:19:59 +0900

というわけで builtin_type_name() で true, false の時も個別に "true", "false" という静的文字列を返して、一時 String オブジェクトを使わないようにしてみました。