ruby-trunk-changes r35313 - r35318

今日は主に hash.c のリファクタリング(高速化)などがありました。

nobu:r35313 2012-04-13 11:51:40 +0900

マーク漏れなどで GC されたオブジェクトの二重に free される時などの rb_bug() メッセージにそのオブジェクトの flag の値を含めるようにしています。

svn:r35314 2012-04-13 11:51:45 +0900

version.h の日付更新。

naruse:r35315 2012-04-13 15:21:50 +0900

WEBrick::GenericServer#stop でステータスをいきなり :Stop にするのではなくて、:Shutdown にして新規の接続を拒否するようにしています。また例外を Exception は r35303 で処理を止めるようにしていたのを、Interrupt だけ止めるようにして、その他の例外は以前と同じように処理を止めないように戻しています。

nobu:r35316 2012-04-13 15:26:53 +0900

Hash#[], update などの実装で要素の追加をする時に st_update() を利用して要素の検索と追加を一度に実行するようにリファクタリングしています。高速化が目的と思われます。その Hash オブジェクトで each などによるイテレーション中の場合は新規追加は例外発生させるためコールバック関数は2種類用意するようにマクロを使って処理をまとめています。

naruse:r35317 2012-04-13 17:39:13 +0900

Hash#inspect で表示するための文字列を作っているところでエンコーディングを要素の inspect 結果のエンコーディングから変更してしまわないようにしています。

nobu:r35318 2012-04-13 20:30:39 +0900

r35316 の hash.c のリファクタリングの結果イテレーション中のため新規追加をエラーにしようとするところで、キーが存在するかどうかのチェック結果を no_new_key() という関数に渡してその中で分岐していたのを、呼び元で分岐してやるようにリファクタリングしています。