ruby-trunk-changes r35180 - r35199

今日は st.c と hash.c のリファクタリング/修正が多数と Net::FTP の機能追加(タイムアウト)がありました。

nobu:r35180 2012-03-31 07:18:50 +0900

Thread のテストに使っている test/ruby/lbtest.rb で最後に LocalBarrier なるクラスのスレッドを join で待つようにしています。

nobu:r35181 2012-03-31 07:18:52 +0900

Hash のテストで真偽値を返すメソッドのチェックに assert を使っていたところを assert_send と assert_not_send を使ってより意図がわかるようにしています。

svn:r35182 2012-03-31 07:18:54 +0900

version.h の日付更新。

nobu:r35183 2012-03-31 07:40:54 +0900

st_foreach() や rb_ensure() に渡すコールバック関数の引数の型などを宣言の通りにして、関数内で必要に応じて明示的にキャストするようにしています。

nobu:r35184 2012-03-31 07:44:33 +0900

Hash のイテレータの実装で st_foreach_check() に渡しているコールバック関数のなかで、key に Qundef が渡された時のチェックをしているのは不要(Qundef が key に渡されることはないはず)なので削っています。また明示的なキャストの追加など。

nobu:r35185 2012-03-31 07:47:33 +0900

また同じく Hash のイテレータで st_foreach_check() の never 引数に Qundef を渡していますが、ここでは key は VALUE 型ではないので 0 を渡すようにしています。つまり 0 が key になることがないようなテーブルを想定しています。今は st_foreach_safe は変数テーブルなど ID をキーとするものに使われているのでで key == 0 にはならないそうです。

nobu:r35186 2012-03-31 07:53:26 +0900

st_foreach_check() でコールバック関数から ST_DELETE が返された時に never 引数の値を key にセットすることで要素の削除を表現するようにしています。また hash.c の hash_foreach_iter() で要素を削除するために st_delete_safe() を呼ぶのではなく ST_DELETE を返して st_foreach_check() 側に処理させるようにしています。

nobu:r35187 2012-03-31 09:48:56 +0900

Thread のテストメソッドで後置 rescue が行末に置かれて実行すべき式がなかったので作成した Thread に join するコードが実行されていなかったのを修正。ついでに join する前に Thread#kill するようにしています。

nobu:r35188 2012-03-31 10:01:41 +0900

st_delete() で pack されている場合に要素を舐めるために num_entries(有効な要素数)ではなくて real_entries(利用されている要素数。never の上書きで削除済みとされているエントリを含む)を使うようにしています。

nobu:r35189 2012-03-31 10:13:26 +0900

st_foreach_check() と st_foreach() で、st_table を順序を保存するようにした時の名残りで今は不要になっていたチェックを削除しています。

emboss:r35190 2012-03-31 12:07:53 +0900

openssl の rdoc 用コメントの typo 修正。

nobu:r35193 2012-03-31 13:20:45 +0900

hash.c のイテレーションのコールバック関数で key に Qundef が渡された時のチェックをしているところを軒並み削除しています。st_foreach_check() を利用しているので Qundef が渡されることはないはずということのようです。

shugo:r35194 2012-03-31 13:44:36 +0900

Net::FTP に open_timeout= と read_timeout= というメソッドを追加して、接続とブロックごとの読み込みのタイムアウトを設定可能にしています。

nobu:r35195 2012-03-31 14:16:04 +0900

hash.c にて freeze されているかや taint フラグのチェックが必要なところで rb_hash_modify() を呼んでいるけど、チェックだけが必要でテーブルの確保は不要な場合には rb_hash_modify_check() を呼ぶようにしています。

ktsj:r35196 2012-03-31 14:20:07 +0900

.gitignore にも自動生成されるようになった verconf.h を追加しています。

nobu:r35197 2012-03-31 14:23:01 +0900

Hash#[] (や values_at など rb_hash_aref() を利用しているメソッド)と Hash#shift でキーが存在しない時のデフォルト値を参照する処理を関数に切り出して共通化しています。これに伴ない Hash#shift では Hash#default メソッドが利用されていなかったのですが、Hash#shift でも Hash#default の再定義が考慮されるようになっています。

nobu:r35198 2012-03-31 17:13:58 +0900

Hash#default の再定義をチェックするテストで再定義された default から Hash#default_proc を参照して使っていたのを super を使うようにしています。特異クラスとして再定義しているので super すると Hash#default の本来のメソッドが呼び出されます。

naruse:r35199 2012-03-31 22:30:10 +0900

WEBrick::Utils::TimeoutHandler で @timeout_info という変数に格納されている Hash を each で回っている途中に @timeout_info に新たに要素が追加されると例外が発生してしまうので、一度 dup で複製を作っておいてそれに対して each でループを回すようにしています。