ruby-trunk-changes r40450 - r40466

今日は URI のメソッドの機能拡張、OpenSSL::BN.new の機能拡張などの機能追加と、open の mode に BOM つきの external encoding 指定をした時の不具合修正、debug.rb の不具合修正、Hash#shift のパフォーマンス改善の変更など盛り沢山でした。

nobu:r40450 2013-04-25 01:19:00 +0900

標準添付ライブラリ debug.rb の不具合修正。 詳細確認していませんが list コマンドで require "debug" したファイルではエラーが起きるのを修正したみたいです。 [ruby-core:54543] [Bug #8318]

svn:r40451 2013-04-25 01:19:07 +0900

version.h の日付更新。

nobu:r40452 2013-04-25 01:21:54 +0900

r40450 の続きで標準添付ライブラリ debug.rb の list コマンドの修正。行番号情報の取得のコードの共通部分を括り出すリファクタリングのようです。 [ruby-core:54543] [Bug #8318]

nobu:r40453 2013-04-25 01:22:44 +0900

標準添付ライブラリ tracer.rb で open + IO#readlines で書いていた部分を File.readlines を使って短く書き直しています。

nobu:r40454 2013-04-25 02:23:36 +0900

r39648 で configure に rm というシェル関数を追加した部分に darwin (Mac OS X)の特定のバージョンの autoconf(というか m4?) のバージョンの時だけ定義するような変更を加えています。これ backport したほうがいいのかなぁ。

marcandre:r40455 2013-04-25 07:12:31 +0900

Array#eql? の rdoc コメントに各要素の比較を eql? メソッドによって行うことを追記しています。

akr:r40456 2013-04-25 12:03:59 +0900

拡張ライブラリ socket の extconf.rb で関数などのチェック用の C のコードをヒアドキュメントでメソッドの引数に渡すところで記述していたのを、ファイル先頭で定数に格納しておいて呼ぶように変更しています。

charliesome:r40457 2013-04-25 14:03:30 +0900

Hash#shift という要素を破壊的にキーと値の配列として取り出すメソッドが、その Hash オブジェクトがブロックを受け取るメソッドでイテレーション中だった時のことを考慮して rb_hash_foreach() を呼ぶようにしていたのを、RHASH_ITER_LEV(hash) をチェックしてイテレーション中でなかったら直接削除するようにしています。またこのために st.c に st_shift() という関数を追加しています。 [ruby-core:54524] [Bug #8312]
Hash#shift なんてあったんですね。使ったことないや。

nobu:r40458 2013-04-25 14:06:11 +0900

r40457 で追加された benchmark のファイルの svn property 設定。

nobu:r40459 2013-04-25 14:25:53 +0900

r40457 で追加された st.c の st_shift() の未使用変数の削除。

naruse:r40460 2013-04-25 14:27:41 +0900

標準添付ライブラリ uriURI.decode_www_form と URI.encode_www_form の変更。 URI.encode_www_form のほうは省略可能な第2引数にエンコードの指定を受け取れるようにして %xx に変換する前にエンコードの変換を行うようにしています。 UTF-16 の URL を正しく変換できるようにするためみたいです。 URI.decode_www_form のほうもエンコーディングの指定のほかいくつかキーワード引数が追加されていて、"a=0&b" のような query string をパースできるようにしています(b は空文字列になる)。 [ruby-core:53475] [Bug #8103]

naruse:r40461 2013-04-25 16:02:31 +0900

拡張ライブラリ openssl の OpenSSL::BN.new に直接 Integer (Fixnum および Bignum) を受け取れるようにしています。テストは文字列を渡すケースも拡充しています。 [ruby-core:53986] [Feature #8217]

nobu:r40462 2013-04-25 16:11:20 +0900

open の mode 引数で "r:BOM|UTF-8:UTF-8" のように external encoding と internal encoding を指定した時に "BOM|UTF-8" というのは "BOM" を読んでエンコーディングを自動判定するので、実際には external encoding != internal encoding なのに mode 引数などの指定上同じだと変換されない不具合があったのを修正しています。 [ruby-core:54563] [Bug #8323] [ruby-core:54569]

nobu:r40463 2013-04-25 16:57:17 +0900

r40461 で OpenSSL::BN.new に Fixnum, Bignum を受け付けるようにした部分で abs() -> labs() に修正したりキャストを追加するなどしてオーバフローを防ぐ/検出するようにしています。

akr:r40464 2013-04-25 17:45:58 +0900

拡張ライブラリ socket の extconf.rb に --{enable,disable}-close-fds-by-recvmsg-with-peek および --{enable,disable}-wide-getaddrinfo というコマンドラインオプションを追加して、プラットフォーム依存の挙動をチェックする項目を外から指定できるようにしています。クロスコンパイルの為のようです。

akr:r40465 2013-04-25 17:57:15 +0900

拡張ライブラリ socket の extconf.rb から --with-ipv6-lib という obsolete として警告を出していたコマンドラインオプションを削除しています。

akr:r40466 2013-04-25 18:17:54 +0900

r40464 で socket の extconf.rb に追加した --{enable,disable}-wide-getaddrinfo の処理の修正。check_for() の結果の判定が逆転していたのを修正。 WIDE getaddrinfo をデフォルトでは使わないようにしています、と ChangeLog には書いてあるのですが、第1 hunk の変更はチェックして使えない時に getaddr_info_ok = :wide にしてしまっているような気がします。これでいいんでしょうか?