ruby-trunk-changes r41839 - r41868

今日は RubyGems の 2.0.4 のマージ、bignum.c のリファクタリングと修正、dl および fiddle に同梱されている Windows registry 操作ライブラリの不具合修正などがありました。

akr:r41839 2013-07-09 00:48:09 +0900

bignum.c の biglsh_bang() で do{}while ループを使っていて xn == 0 の時に不要なループの実行をしてしまっていた不具合を修正しています。
これ、最近のリファクタリングとは無関係でもともとあったコード部分みたいですね。バックポート必要かなぁ……。

svn:r41840 2013-07-09 00:48:16 +0900

version.h の日付更新。

akr:r41841 2013-07-09 01:19:18 +0900

r41839 と同様に bignum.c の bigrsh_bang() でもループの条件の間違いでバッファの最後1要素オーバランした領域にアクセスしてしまっていた不具合を修正しています。

akr:r41842 2013-07-09 01:50:04 +0900

bignum.c の biglsh_bang() と bigrsh_bang() でシフト量がちょうど BDIGIT の整数倍だった時は MEMMOVE() を使った簡易で高速な実装を使うようにしています。

drbrain:r41843 2013-07-09 07:41:03 +0900

RubyGems の 2.0.4 をマージしています。拡張ライブラリを含む gem のインストールに関する不具合修正、gem outdated で prerelease バージョンのパッケージも表示するようになるなどの変更が入っているそうです。 変更点についてはこちらを参照 https://github.com/rubygems/rubygems/blob/2.0/History.txt

usa:r41844 2013-07-09 09:49:44 +0900

r41838 の ext/dl/win32/lib/win32/registry.rb の変更でテストがエラーになった対応として再修正。環境変数の置換のための正規表現エンコーディング指定を元の文字列と同じにするようにしているようです。
また拡張ライブラリ fiddle にある同様のライブラリ ext/fiddle/win32/lib/win32/registry.rb にも r41838 と同じような修正を施しています。

usa:r41845 2013-07-09 10:04:05 +0900

ext/dl/win32/lib/win32/registry.rb と ext/fiddle/win32/lib/win32/registry.rb の追加修正。 メッセージの CR('\r') を消すための String#tr に渡す文字列のエンコーディングを対象の文字列と揃えるようにしています。

naruse:r41846 2013-07-09 10:27:59 +0900

r41843 の RubyGems 2.0.4 のマージで巻き戻された r41148 の警告除去を再度入れています。

usa:r41847 2013-07-09 10:30:47 +0900

ext/dl/win32/lib/win32/registry.rb と ext/fiddle/win32/lib/win32/registry.rb の再修正。環境変数の参照時にエンコーディングの考慮、またレジストリの内容の取得で文字列を chop や split で加工する時にもエンコーディングの考慮を追加しています。が、まだこのファイルの修正は続きます。

usa:r41848 2013-07-09 10:45:57 +0900

r41847 での win32/registry.rb たちの修正のミスを修正。

usa:r41849 2013-07-09 11:06:13 +0900

win32/registry.rb たちの追加修正。 Win32::Registry#check で caller で取得するエラー発生箇所のバックトレースの位置を修正しています。これは元々の不具合みたいですね。また GC がらみで make test-all で crash するらしく QueryValue() というメソッドの中を GC.disable して実行するようにしてみています。

glass:r41850 2013-07-09 12:49:49 +0900

io.c で READ_CHAR_PENDING_COUNT() および READ_CHAR_PENDING_PTR() というマクロの内容を直接書いていた箇所をマクロを利用するように書き変えたり RSTRING_END() を使うようにしたりといったリファクタリング。 searchlen の代入箇所が変化していますが if 文の条件部で代入を書くのは若干まぎらわしいので直前の宣言と同時に代入してやったほうがいいかなぁという気がします。

knu:r41851 2013-07-09 16:01:59 +0900

r41796 の FileUtils.chown, chown_R の :verbose オプションが on の時のメッセージの再修正。 user も group も nil の時に ":" を表示するようにしています。 user も group も nil だと呼ぶ意味がなさそうですね。

knu:r41852 2013-07-09 16:02:01 +0900

FileUtils のテスト test/fileutils/fileasserts.rb で assert_not_symlink という独自の assertion に省略可能な第2引数 message を追加しています。参照されているのに引数がなかったのでエラーになってたはずで、これまで使われてなかったのかと思ったら使われてました。同名のメソッドがあるのかな。

knu:r41853 2013-07-09 16:02:04 +0900

FileUtils の mode_to_s メソッドを private_module_function として宣言しています。 FileUtils.chmod を特異メソッドとして呼ぶと verbose モードでエラーになっていたのを修正しています。

knu:r41854 2013-07-09 16:02:06 +0900

Object#<=> の rdoc 用コメントで Object#=== で比較すると書かれていたので equal? と Object#== で比較 するというふうに修正しています。しかし厳密には equal? メソッドは呼ばれていないので後に再修正されています。r41867 で再修正されています。

naruse:r41855 2013-07-09 16:38:15 +0900

r41786 のエンコーディングについてのコミットを revert しています。意図せずコミットされたものだったみたいです。

usa:r41856 2013-07-09 17:00:28 +0900

ext/dl/win32/lib/win32/registry.rb と ext/fiddle/win32/lib/win32/registry.rb の再修正。あまりちゃんと読んでいませんが、WIN32 API を読んで得た文字列が ASCII-8BIT などシングルバイトの文字列だったので文字のバイト幅を意識して切り出したりする処理をするようにしているのかなぁという感じです。これで最終的な修正っぽいです。 GC.disable する workaround も削除されています。
[追記]なかださんに教えていただいたところ「StringValueCStr()が常に1byteの\0しか確保しないためにWCHARとしては終端されていない状態になることがあるので、WCHARの'\0'を追加しておく」という修正内容だそうでした[/追記]

ko1:r41857 2013-07-09 17:44:48 +0900

r41843 での RubyGems 2.0.4 のマージでバックトレースに変化があり標準添付ライブラリ tracer.rb のテストがエラーになっていたので最新版に追随するようにしています。 ruby -rtracer として呼び出された時に自動的に Trace を on にするトリックが caller を利用しているので require のバックトレースの見えかたが変化すると動かなくなってしまうんですよね。なにか -r 経由なのか require 経由なのか判定する方法があればいいのですけど。

knu:r41858 2013-07-09 18:03:29 +0900

FileUtils のテスト test/fileutils/test_fileutils.rb で assert_output_lines という独自の assertion を追加して :verbose 時のメッセージのテストをリファクタリングしています。

knu:r41859 2013-07-09 18:03:32 +0900

FileUtils のテスト test/fileutils/fileasserts.rb にさらに assert_filemode と assert_equal_filemode という独自 assertion を追加してファイルの mode のチェックにこれを利用するようにしています。

knu:r41860 2013-07-09 18:03:36 +0900

標準添付ライブラリ fileutils.rb の FileUtils#chown_R で user も group も nil の時もディレクトリ走査はスキップしないようにしています。

hsbt:r41861 2013-07-09 20:40:27 +0900

string.c の関数と関数(の前のコメント)のあいだに空行を追加しています。

hsbt:r41862 2013-07-09 20:48:19 +0900

拡張ライブラリ jsonJSON.generate の rdoc で改行が消えてしまっていたのを修正しています。

hsbt:r41863 2013-07-09 21:03:07 +0900

Module#extended の rdoc コメントを追記しています。

kou:r41864 2013-07-09 21:41:26 +0900

r41818 と r41819 で REXML::Text の修正をした時にテストがコミットから漏れていたのを追加しています。

nobu:r41865 2013-07-09 21:42:48 +0900

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

akr:r41866 2013-07-09 22:19:59 +0900

bignum.c の bary_mul1() の最後で MEMZERO() を呼んでいたのを削除しています。 r41868 に続く。

eregon:r41867 2013-07-09 22:25:57 +0900

r41854 の rdoc 修正の追加みたいです。 Object#<=> の rdoc コメントから equal? の呼び出しの言及はやめて、同一のオブジェクトかどうかという表現に変更しています。確かに VALUE 型を直接比較しているので equal? メソッドの呼び出しはしてないですね。

akr:r41868 2013-07-09 22:44:49 +0900

r41866 の続き。 bignum.c の bary_mul1() で MEMZERO() を削除したかわりに bary_mul_single() で余分な領域に MEMZERO() を呼ぶようにしています。