ruby-trunk-changes r33196 - r33203

seki:r33196 2011-09-06 05:39:54 +0900

Rinda::TuppleSpace のテストを修正しています。 write や notify のタイムアウトのチェックがタイミングによって意図せずタプルの(タイムアウトで)消失したり、NotifyTemplateEntry が expire したりすることでエラーになったりデッドロック状態になったりしていたようです。 [ruby-dev:44430] [Bug #372]
と、思ったけどデッドロックの原因は listener という Thread の join のところかもしれないのでそうだとしたら別の問題かもしれませんけど。うーむ。

svn:r33197 2011-09-06 05:39:57 +0900

version.h の日付更新。

marcandre:r33198 2011-09-06 06:44:42 +0900

Float#round でオーバフローの検出判定方法の式を変形しています。32bit 環境での判定のためらしい。具体的な問題はよくわかっていませんが。 [ruby-core:39279] [Bug #5276]

marcandre:r33199 2011-09-06 06:45:25 +0900

Float#round や Float#divmod で利用している double の数値を Integer(Fixnum or Bignum) に変換する処理で round() の位置が Fixnum の時だけ丸めるようになっていたので、最初に丸めるようにしています。 [ruby-core:39279] [Bug #5276]

nobu:r33200 2011-09-06 12:07:16 +0900

Encoding::Converter によるエンコーディング変換器の生成時のオプションに :newline を追加して、変換モードを値で指定できるようにしています。元々 :universal_newline => true のようにモード毎のオプションはありましたが、:newline オプションに :universal/:crlf/:cr のようにシンボルでモードを指定できるためモードの指定が排他的であることにそった自然な指定ができるようになっております。古いオプションも互換性のため残されています。
また Encoding::Converter#== で変換器が同じ条件を持っている時に true を返すようにしています。これはおそらくテストのためにですね。

nobu:r33201 2011-09-06 13:15:49 +0900

$SAFE を 3以上に設定すると自動的にオブジェクトが汚染状態になり、String#encode で内部的に新しいエンコーディングの変換用のコードを require しようとした時に tainted な文字列を使って require しようとして SecurityError が発生してしまうため、汚染フラグを落とした文字列を渡して require するようにしています。 [ruby-dev:44469] [Bug #5279]

nobu:r33202 2011-09-06 15:55:30 +0900

transcode.c の load_transcoder_entry() でエンコーディング変換用のライブラリのパスを生成するためにスタック上のバッファに一旦パスを作ってから String オブジェクトを作っていたのを、必要なバイト数を指定した String オブジェクトを作成してそのバッファ上で直接文字列連結するようにしています。

naruse:r33203 2011-09-06 17:11:21 +0900

rb_thread_select() の API 用のテストで assert_operator を利用するように変更しています。 assert_operator という assertion は知りませんでした。よし憶えた。