ruby-trunk-changes r40191 - r40208

今日は open-uri で同じヘッダが複数存在した時のメタデータの扱いの改善などがありました。

nobu:r40191 2013-04-09 02:40:58 +0900

r40189 と同様に拡張ライブラリ socket のoptname_to_sym() という関数でも INET6 をチェックしていたところを利用している IPPROTO_IPV6 を直接 #ifdef でチェックするように修正しています。

nobu:r40192 2013-04-09 02:42:48 +0900

VC6 では IPv6 のソケットアドレス構造体が struct in6_addr ではなく struct in_addr6 という名称になっているそうなので、拡張ライブラリ socket の extconf.rb で構造体の存在をチェックして -D オプションで名前の違いを吸収するマクロを定義するようにしています。

nobu:r40193 2013-04-09 02:44:35 +0900

r40192 と類似の構造体の名称の際を吸収するマクロ定義を意図したオプション追加が socket の extconf.rb にあったものの、-D オプションがついていなかったものを修正しています。このマクロを必要とする環境ではビルドできてなかったんでしょうね。

nobu:r40194 2013-04-09 03:10:04 +0900

並列ビルド時の依存関係を付けるために(確か)導入したタイムスタンプファイルというものを各々のディレクトリに作っていたのを、タイムスタンプディレクトリというものを導入してその下にまとめてつくるように mkmf.rb を修正しています。ファイル名が被ったりはしないんでしょうか。

headius:r40195 2013-04-09 04:58:55 +0900

non-blocking IO で読み込み/書き込みが不可能な時には Errno::EAGAIN や Errno::EWOULDBLOCK に IO::WaitReadable や IO::WaitWritable モジュールを extend して例外オブジェクト毎に non-block IO の例外を識別するようにしていたのですが、extend を使うと特異クラスを作るためオブジェクト数が増えるためパフォーマンスに影響があるので、extend を使うのはやめて IO::WaitReadable や IO::ReadWritable を include した専用の例外を子クラスとして定義しておいてそれを使うようにしています。r29673 や r31378 や r32024 も関連するコミットです。 [ruby-core:43325] [Feature #6154]
同様に OpenSSL::SSLError にもモジュールを include した子クラスの例外を定義しています。

nobu:r40196 2013-04-09 05:27:01 +0900

いくつかのファイルの行末の空白除去。

nobu:r40197 2013-04-09 05:27:04 +0900

ext/-test-/bignum/ の svn property 設定。

naruse:r40199 2013-04-09 05:51:52 +0900

r40194 の mkmf.rb の変更によるタイムスタンプディレクトリ導入を revert しています。ビルドエラーになったとのこと。

hsbt:r40200 2013-04-09 09:24:24 +0900

signal.c の sigbus() で Mac OS X では guard page によるスタックオーバフローの検出時に SIGBUS を送出することを書いたコメントの typo を修正。 https://github.com/ruby/ruby/issues/279

hsbt:r40201 2013-04-09 09:26:22 +0900

Thread#keys および Thread#thread_variables の rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/issues/278

hsbt:r40202 2013-04-09 09:29:54 +0900

URI::FTP の rdoc コメントの追記と修正。 https://github.com/ruby/ruby/issues/274

nobu:r40203 2013-04-09 09:42:33 +0900

r40195 の IO::WaitReadable と IO::WaitWritable を include する例外を導入した時に EWOULDBLOCK が未定義の時に余分なクラスを定義しないようにするのを通常の条件分岐ではなく #if による静的なコンパイル時の変更にしています。

nobu:r40204 2013-04-09 10:02:53 +0900

r40194 で入れて r40199 で一旦 revert された mkmf.rb のタイムスタンプディレクトリの導入のリベンジ。 タイムスタンプディレクトリを導入するのではなく target_prefix を考慮して各拡張ライブラリのビルドディレクトリにまとめて置くようにしています。

nobu:r40205 2013-04-09 15:26:15 +0900

rest 引数とオプション引数(キーワード引数)を受けとるメソッドから無引数の super で親クラスのメソッドを呼ばれた時に、オプション引数が Hash としてではなく [key, value] のタプル(2要素のArray)として渡されてしまう不具合を修正しています。 [ruby-core:54094] [Bug #8236]

nobu:r40206 2013-04-09 16:21:50 +0900

test/ruby/test_hash.rb と test/ruby/test_env.rb のテストの assertion をよりわかりやすいメッセージが出るようなメソッドを使うように変更しています。

akr:r40207 2013-04-09 19:53:41 +0900

標準添付ライブラリ open-uri で、ヘッダにおなじ種類のヘッダフィールドが複数回現れたときの IO#meta というメソッドで取り出すときの扱いがうまくできなかったので、metas というメソッドを新設して、フィールド名に対して値を配列で格納したHashを返すようにしています。 [ruby-core:37734] [Bug #4964]

akr:r40208 2013-04-09 20:39:53 +0900

internal.h に整数の乗算のオーバーフローチェックをまとめたマクロ MUL_OVERFLOW_SIGNED_INTEGER_P(), MUL_OVERFLOW_FIXNUM_P(), MUL_OVERFLOW_LONG_P() などを定義して、各所でそれぞれにオーバフローチェックしていた部分で使うようにリファクタリング/修正しています。