ruby-trunk-changes r34364 - r34371

今日は Hash() メソッドの追加と rb_iter_break_value() という break 文に値を渡す処理の C での API を追加がありました。

naruse:r34364 2012-01-24 11:52:09 +0900

URI で利用する正規表現群(TBLENCWWWCOMP_)の初期化を最初に利用する時にまで遅延するようにしていたのですが(r31266 も参照)、JRuby では Hash#replace が thread-safe でないためエラーになることがあるそうなので、require で読み込まれた時に初期化してしまうようにしています。 [ruby-core:42222] [Bug #5925]

svn:r34365 2012-01-24 11:52:14 +0900

version.h の日付更新。

naruse:r34366 2012-01-24 13:00:44 +0900

r34358 で追加した open のテストに :binmode => true で開いた時の IO#external_encoding が ASCII-8BIT になっていることをチェックする assert を追加しています。

matz:r34367 2012-01-24 13:02:30 +0900

Array() や String() と同様に Hash に変換する Kernel.Hash メソッドを追加しています。内部で to_hash メソッドを呼んで Hash に変換している他、 nil や [] (空の配列)については特別に空の Hash ({})を返しています。 [ruby-core:29462] [Feature #3131]
けど中身のある Array はエラーになるんですね。

nobu:r34368 2012-01-24 13:29:07 +0900

r34367 で追加した rb_Hash で TYPE(val) == T_ARRAY で型チェックしているところを RB_TYPE_P(val, T_ARRAY) を使うように変更しています。またテストの answer と チェック対象の引数が反対だったので入れ替え。

nobu:r34369 2012-01-24 14:20:48 +0900

C の関数で break 文に値を渡す(ブロックを渡すメソッドからその値を返す)挙動をするための関数 rb_iter_break_value() を追加しています。 [ruby-dev:45132] [Feature #5895]

nobu:r34370 2012-01-24 15:28:26 +0900

README.EXT と README.EXT.ja に rb_iter_break() (これは元々存在していたけど言及がなかったらしい)と rb_iter_break_value() についての記述を追加しています。

nobu:r34371 2012-01-24 16:21:33 +0900

r34367 の修正でブロックの途中で変数宣言をしていて C90 に違反していて gcc でエラーになっていたので修正。