ruby-trunk-changes r32631 - r32644

今日は主にこの数日の修正の再修正がありました。

naruse:r32631 2011-07-23 06:16:50 +0900

r32622 で WKFV という定数の正規表現の書き方を選択(|)から繰り返し(*)を使う書き方に変更したために WKFV を埋め込んで正規表現を作っているところで非効率な正規表現になってしまっていたので修正しています。

svn:r32632 2011-07-23 06:16:54 +0900

version.h の日付更新。

nobu:r32634 2011-07-23 12:12:28 +0900

昨日の r32621 で ???_defined? 系でシンボルの生成を遅延する修正で Symbol or String を期待したところに別のオブジェクトを渡した時の処理の条件判定が反転していて SEGV する不具合を修正。 [ruby-dev:44200] [Bug #5084]

nobu:r32635 2011-07-23 12:19:07 +0900

同じく r32621 の変更で "=" で終わるシンボルの時は "=" を削った名前の ID に attrset のフラグを立てたものになるので、rb_check_id() で定義済みシンボルを探す際にその処理を追加しています。 [ruby-dev:44200] [Bug #5084]

drbrain:r32636 2011-07-23 14:38:50 +0900

r32265 で rake のテストが flexmock という gems に依存するようになっていたのを解消しています。 [ruby-core:37847] [Bug #4987]

akr:r32638 2011-07-23 17:13:37 +0900

r32598 で応急処置した recvmsg で file descriptor passing をした時に MSG_PEEK つきで読むと、FreeBSDMac OS X では取り出した fd が有効なものでない(しかし Linux などでは MSG_PEEK で読んでもその都度有効な fd が開かれるので、再度読むなら閉じないといけない)ため、discard_cmsg() にその cmsg が MSG_PEEK つきで読んだものかどうか指定する引数を追加して、 __FreeBSD__, __NetBSD__, __APPLE__ が定義されていたら MSG_PEEK つきの時は rb_update_max_fd() と close() を呼び出す処理をスキップするようにしています。 また rb_update_max_fd() も防衛的に引数に渡された fd を fstat(2) で有効な file descriptor かチェックして不正だったら rb_bug() でインタプリタを異常終了させるようにしています。 [ruby-dev:44189] [Bug #5075]

naruse:r32639 2011-07-23 19:03:30 +0900

シンボルの種類には、先頭に $ とか @ (@@ も)が付くものと、最後に "!" や "=" がつくものでそれぞれ ID にビットフラグを立てて管理しています。 :$a! とか @a! のようの両方をもつものはそのままのリテラルは禁止されているので parse 時に弾くようにしています。文字列のようにクオートしてその前に ":" をつける記法ならシンボル化できます。

suke:r32640 2011-07-23 19:13:53 +0900

Win32OLE のテストで ADODB.connection を利用しているところで ADODB.connection が利用できない環境では skip するようにしています。

tadf:r32641 2011-07-23 20:17:00 +0900

r32554 で Time オブジェクトを複製するときに特異クラスを共有してしまっていた不具合を修正しましたが Date も同じ問題があったので修正しています。 [ruby-dev:44071] [Bug #5012]
また [ruby-dev:43284] [Bug #4456] の Time#strftime の %F 指示子にとても大きな幅を指定すると SEGV する不具合と同じ問題が Date#strftime にもあったようなのでバッファ境界越えのチェックを強化しています。

naruse:r32642 2011-07-23 20:21:55 +0900

rake のテストがソースディレクトリとは別のディレクトリでビルドした時に対応していないところの修正と、あと flexmock 依存をなくす書き替えでミスしたらしいところの修正です。

tadf:r32643 2011-07-23 21:14:43 +0900

r32047 で CMath.cbrt は主値(仰角の最も小さい複素数)を返すように戻されましたが、また実数(というか Float)を(実数が渡された場合は)返すようにしています。あれ、これはどうすることになってたんでしたっけ。
というのはまったくのわたしの勘違いで、Integer#** で負の数の (1.0/3) 乗とかを実行すると Complex で主値が返ってくるようになっているので、挙動は変化していませんでした。ただ Complex() での変換を省いているだけでした。

tadf:r32644 2011-07-23 21:49:06 +0900

r32643 の ChangeLog エントリにメソッド名の記述を追記しています。