ruby-trunk-changes r34309 - r34316

今日は st.c のリファクタリングと OptionParser の不具合修正がありました。

shyouhei:r34309 2012-01-16 00:46:30 +0900

CRuby が利用しているハッシュテーブル実装の st.c の検索、要素追加、削除などの操作がマクロとして実装されていたのをインライン関数として宣言するようにしています。こうすると若干の高速化が見られるとのこと。 i686-linux だと確かに少し benchmark が速くなるようです。

shyouhei:r34310 2012-01-16 00:46:34 +0900

st.c でエントリ数が少なくて配列内にキーと値のペアを順に並べるだけの状態の時の基本的な操作をマクロとして切り出しています。
が、unpack_entries() で pack されたものをあらためて pack されてないテーブルに追加するところで do_hash() の呼び出しがコメントアウトされているのですがこれはいいのかなぁ。[追記] pack されるのはハッシュの種類が numhash の時だけで、この時のハッシュ関数はキーをそのまま使うので良いようでした。ただ do_hash() のキャストが違っていてその結果CPUアーキテクチャによっては差があったのでそれは翌日修正されています[/追記]

svn:r34311 2012-01-16 00:46:36 +0900

version.h の日付更新。

shyouhei:r34312 2012-01-16 00:46:37 +0900

同じく st.c のメモリ確保/解放の操作をマクロに切り出しています。

shyouhei:r34313 2012-01-16 00:46:41 +0900

st.c の add_packed_direct() の返り値が意味なくなっていたので void 型に変更。

shyouhei:r34314 2012-01-16 00:46:44 +0900

st.c のいくつかの引数、変数に register 修飾子をつけています。ちょっと高速化するらしいです。久しぶりに register 使うのをみたような。

nobu:r34315 2012-01-16 11:22:47 +0900

Windows 版のファイルの truncate 処理の実装(rb_chsize()) でファイルのサイズを取得しているのが不要だったので削除しています。

nobu:r34316 2012-01-16 16:42:01 +0900

OptionParser#on で引数の型として Regexp を指定した時に正規表現のオプションを指定する /.../imx などの最後の文字の部分の解析でオプションが無効になっていた(余分な文字がないかのチェックので余分な文字がある時にオプションをくりあするところが逆になっていた)のを修正しています。