ruby-trunk-changes r44181 - r44210

今日はなかださん無双で主に Module#const_get と Module#const_defined? の仕様変更や実装の修正、Addrinfo などで rescue 節から呼ばれた時の不具合修正、Logger の logrotate の不具合修正、キーワード引数を持つメソッドの通常の引数に Hash を渡した時の不具合修正などがありました。

nobu:r44181 2013-12-14 00:22:18 +0900

再帰的呼び出しを検出しつつコールバック呼び出しする exec_recursive() で r43979 で導入した rb_catch_protect() を利用して tag の push をまとめてするようにしています。マシンスタックの節約のためだそうです。

ngoto:r44183 2013-12-14 00:44:13 +0900

r44117 の internal.h での関数宣言の typo 修正。 Solaris でビルドエラーになっていたそうです。

akr:r44184 2013-12-14 01:11:12 +0900

拡張ライブラリ socket で Addrinfo#listen が ensure 節で $! をチェックして例外があったらすぐに socket を close していたため、このメソッドの呼び元で rescue 節の中から呼ばれると listen の処理自体では例外が発生していないにもかかわらず close されてしまうという不具合を修正しています。ブロックの呼び出し部分で rescue Exception で捕捉して後始末するようにしています。 [ruby-core:59088] [Bug #9247]
また同様に ensure で $! をチェックしていたコードが lib/cgi/core.rb と lib/drb/ssl.rb にも存在していたので同様に修正しています。

tarui:r44185 2013-12-14 01:19:49 +0900

WeakMap の finalize 処理で st_table に格納しているバッファを拡張した時にポインタを更新しわすれていた不具合修正。

nobu:r44186 2013-12-14 01:32:00 +0900

rb_rescue2() で rescue 節の処理を呼び出す時に同じ tag push を再利用するようにリファクタリングしています。これもマシンスタックの節約でしょうか。

hsbt:r44187 2013-12-14 08:22:41 +0900

lib/uri/common.rb の rdoc 用コメントで参照している URL がリンク切れになっていたそうで修正しています。 https://github.com/ruby/ruby/pull/478

a_matsuda:r44188 2013-12-14 10:19:06 +0900

拡張ライブラリ psych の変数名の typo 修正。 preceeded → preceded

nobu:r44189 2013-12-14 10:50:49 +0900

Module#const_get で名前の Symbol の ID を取得して rb_const_get() または rb_const_get_at() に委譲するようにしています。 ChangeLog に Symbol はネストした定数名部分だけではないって書かれているのですがそうとは限らないような…。 Math.const_get(:PI) みたいな。

nobu:r44190 2013-12-14 11:11:37 +0900

r44189 で引数から Symbol の ID を取得するのに rb_check_id() を使っていたのをやめて、引数に Symbol が渡された時だけ ID2SYM() で……ん? ID2SYM() じゃなくて SYM2ID() の間違いですねここ……ともかく ID に変換するようにしています。

nobu:r44191 2013-12-14 11:12:50 +0900

r44190 で追記した ChangeLog エントリは間違って入ったものだったらしく revert しています。

nobu:r44192 2013-12-14 11:24:35 +0900

で r44190 の ID2SYM() -> SYM2ID() の修正。

nobu:r44193 2013-12-14 11:24:47 +0900

r44190 の修正の再修正。 StringValue(name) していましたがこの name はその後すぐにバッファへのポインタが path に代入されていたので StringValuePtr(name) でポインタを取り出して path に代入しておくようにしています。

nobu:r44194 2013-12-14 11:25:58 +0900

Module#const_defined? が "::" で連結したネストした名前も受け付けるようにしています。 [ruby-core:49770] [Feature #7414]

nobu:r44195 2013-12-14 11:45:07 +0900

util.c の ruby_qsort() で 32bit アーキテクチャを前提とした配列サイズの決定をしていたところがあったので sizeof() と CHAR_BIT を使って必要なサイズ確保するように修正しています。非常に大きい Array の sort で問題になり得るのですが実際に不具合を発生させたという報告ではないようなので実際にはなかなか起きない問題のようです。 [ruby-core:51816] [Bug #7772]

nobu:r44196 2013-12-14 11:55:33 +0900

標準添付ライブラリ scanf.rb の IO#scanf で後置 rescue に例外クラスを渡している誤った使いかたをしていたので修正しています。 [ruby-core:52813] [Bug #7940]

nobu:r44197 2013-12-14 12:38:22 +0900

Module#const_get と Module#const_defined? で渡された名前が定数として正しい文字列かのチェックを追加しています。

nobu:r44198 2013-12-14 13:02:00 +0900

メソッドエントリ作成時に respond_to_missing? のために作られたものは Method が作られた元のクラスを Method#owner にするようにしています。
おー、respond_to_missing? で true を返すと実際にメソッド定義していなくても Method オブジェクトを作れるんですね。知らなかった。

class A
  def respond_to_missing?(meth, bool)
    meth == :foo
  end
end

A.new.method(:foo) # => #<Method: A#foo>

そして A#method では作れるけど A.instance_method(:foo) では "NameError: undefined method `foo' for class `A'" になるようです。

nobu:r44199 2013-12-14 13:17:03 +0900

DateTime のミリ秒以下の違いの比較についてのテストを追加しています。

nobu:r44200 2013-12-14 13:17:04 +0900

Dir["**/*"] が directory への symbolic link を自動的に辿らないようにしていることのテストを追加しています。

nobu:r44201 2013-12-14 13:17:06 +0900

Enumerator#peek の動作のテストを追加しています。

nobu:r44202 2013-12-14 14:42:57 +0900

test/ruby/envutil.rb の assert_file_predicate でエラー時に出力するメッセージを少し整形しています。

nobu:r44203 2013-12-14 14:43:01 +0900

標準添付ライブラリ logger で logrotate 時にファイルの同値チェックが甘くて複数プロセスで余分に rotate してしまう不具合を修正しています。 [ruby-core:58620] [Bug #9133] が参照されていますが [ruby-core:58442] [Bug #9130] もですね。

a_matsuda:r44204 2013-12-14 16:26:38 +0900

doc/contributing.rdoc の typo 修正。 bugtacker → bugtracker https://github.com/ruby/ruby/pull/481

nobu:r44205 2013-12-14 16:26:52 +0900

configure の --with-rubylibprefix を指定した時に RbConfig::CONFIG["prefix"] が空文字列になってしまう不具合を修正。 [ruby-dev:47852] [Bug #9160]

nobu:r44206 2013-12-14 16:38:14 +0900

いくつかのベンチマークスクリプトsvn property 設定。

nobu:r44207 2013-12-14 17:39:17 +0900

キーワード引数をもつメソッドの最後の必須引数として Hash オブジェクトを渡すとキーワード引数として解釈されて引数不足の ArgumentError になってしまうことがあったのを修正しています。 [ruby-core:57706] [Bug #8993]

a_matsuda:r44208 2013-12-14 19:54:54 +0900

doc/ChangeLog-YARV、test/rexml/data/tutorial.xml や lib/rubygems/specification.rb、test/ruby/test_settracefunc.rb、tool/instruction.rb のコメントの typo 修正。 https://github.com/ruby/ruby/pull/482

nobu:r44209 2013-12-14 19:56:07 +0900

doc/ChangeLog-YARV の行末の空白除去。

a_matsuda:r44210 2013-12-14 23:48:36 +0900

標準添付ライブラリ debug.rb のコメントの typo 修正。 useage → usage