ruby-trunk-changes r46342 - r46348

今日は Hash でなおオブジェクトをメソッドの引数に **arg のようにキーワード引数展開の方法で渡した時の to_hash の挙動についての不具合修正や MatchData#[] の不具合修正などがありました。また内部的に Zombie 状態(sweep 対象になったけど finalizer を実行する前のオブジェクト)のオブジェクトに専用の型(構造体)を定義するようにしています。

nobu: r46342 2014-06-04 04:08:40 +0900

メソッドの引数に **arg のように Hash を展開してキーワード引数に渡す呼びかたをした時に to_hash で変換が行なわれる場合、メソッドにキーワード引数がなくて通常引数に格納する場合に to_hash の結果が利用されなかったり、キーワード引数があるメソッドの時に to_hash が2回呼ばれるという不具合を修正しています。 [ruby-core:62921] [Bug #9898]

svn: r46343 2014-06-04 04:08:46 +0900

version.h の日付更新。

nobu: r46344 2014-06-04 21:23:57 +0900

MatchData#[] で引数が Symbol だった時にそれを文字列化した String オブジェクトが NUL 文字で終端していることを期待したコードになっていたので、 StringValuePtr() を通すようにしています。 [ruby-dev:48275] [Bug #9902]

nobu: r46345 2014-06-04 21:33:18 +0900

MatchData#[] の Symbol/String での名前つきのグループ化の参照の name_to_backref_number() からエラー処理部分を name_to_backref_error() に切り出し、例外メッセージに文字列を %s で埋め込んでいたのを PRIsVALUE を使ってオブジェクトのまま埋め込むようにしています。

nobu: r46346 2014-06-04 22:09:57 +0900

MatchData#[] で Symbol/String でキャプチャする時にそのエンコーディングを意識した比較をしていなかったのを修正しています。 [ruby-dev:48278] [Bug #9903]

kazu: r46347 2014-06-04 22:11:55 +0900

r46336 の ChangeLog エントリの typo 修正。

ko1: r46348 2014-06-04 22:33:20 +0900

T_ZOMBIE 型のオブジェクトの RVALUE スロットを埋めて管理するために struct RZombie という型を導入しています。これには linked list を構成するためのポインタと、解放関数ポインタとその引数が格納されています。うーんなるほど、元のオブジェクトの flags に T_ZOMBIE をセットする時にリストは free の型を利用しつつ解放関数などは data を利用する中途半端な状態だったので Zombie 状態専用の型にしておくんですね。わかりやすくなりました。また Zombie 状態のオブジェクト数をカウントするようにしています。最近オブジェクトの数を数えるのが流行みたいですね。