ruby-trunk-changes r38364 - r38381

今日は Class#initialize_copy の不具合修正、Psych の修正、VC++ の最適化対策、kill でシグナル送出した時の不要な待ち時間の削除などがありました。

charliesome:r38364 2012-12-13 23:11:01 +0900

Class#initialize_copy を再定義して使うとクラスの superclass を変更できてしまうという不具合の修正。super すると Class#initialize_copy の実装でチェックしていたのをスキップされて Module#initialize_copy を実行し、ここでチェックがされていなかったので initialize_copy に superclass にしたいクラスを継承したクラスを渡すと superclass もコピーするので上書きされてしまっていました。 Module#initialize_copy で clone が T_CLASS の時はチェックするようにしています。 [ruby-core:50869] [Bug #7557]
新しくコミッタになった charliesome さんの初コミットです。 Charlie, Wellcome to ruby-core team.

shugo:r38365 2012-12-13 23:18:20 +0900

vm_insnhelper.c の vm_call_super_method() で VC++ コンパイラの最適化で refinements のテストが失敗していたのを修正するため、 Windows 版では不要な volatile をつけた変数の宣言を追加しています。vm_call_general() と vm_call_super_method() がまったく内容が同じなのでまとめられてしまうのを防いでいるとのこと。これがまとめられると ci->call で関数ポインタで比較しているところが区別されなくなってしまうので誤動作するようです。 VC++ の最適化こわい。 [ruby-core:50871] [Bug #7556]

nobu:r38366 2012-12-13 23:32:40 +0900

r38364 の再修正。Class#initialize_copy と Module#initialize_copy は実体が同じになったので Class#initialize_copy の定義は削除しています。

tenderlove:r38367 2012-12-14 07:45:16 +0900

拡張ライブラリ Psych の修正。 YAML エンコーディングした時に先頭の要素が /^\W/ にマッチした時に明示的にクオートするようにしています。

svn:r38368 2012-12-14 07:45:21 +0900

version.h の日付更新。

naruse:r38369 2012-12-14 10:38:07 +0900

test/ruby/envutil.rb に新しいユーティリティメソッド Test::Unit::Assertions#assert_separately を追加しています。子プロセスを作ってそこで assertion を実行するもののようです。

naruse:r38370 2012-12-14 10:38:12 +0900

r38369 で追加した EnvUtil.assert_separately を使って GC::Profiler のテストや ObjectSpace.reachable_objects_from のテストなどを子プロセスで実行するようにしています。テストの高速化のためみたいです。テスト中はメモリのヒープが大きいため GC の負荷がかかるので新しいプロセスを作ってそちらで実行することで高速化しようとしているのだと思います。

naruse:r38371 2012-12-14 10:38:14 +0900

vm_trace.c の exec_hooks() にもコンパイラの最適化? かなにかで SEGV するのを修正。どうしてかはわからないけどこれで SEGV はおさまるらしいです。

drbrain:r38372 2012-12-14 14:09:37 +0900

RDoc が rdoc を上書き生成する時に、既存のファイルを削除してから出力するようにしています。また rdoc server で表示するリンクの修正など。

drbrain:r38373 2012-12-14 14:16:56 +0900

RDoc の修正。 rubygems インストール時の rdoc 生成のデフォルトを false にしています。RubyGems 側のデフォルトの設定にそろえている、ということですが RubyGems::RDoc と RDoc の関係はどういうふうになってるんでしょうね。

nobu:r38374 2012-12-14 14:58:41 +0900

r38369 で追加した Test::Unit::Assertions#assert_separately の子プロセスが親に渡す結果の出力方法を修正しています。 assertion の数も返して親プロセスで _assertions に追加するようにしています。

nobu:r38375 2012-12-14 14:59:17 +0900

test/ruby/envutil.rb で追加している Test::Unit::Assertions#assert_separately で引数の file, line は caller_locations を使って取得できるので省略可能引数として自動的に補完するようにしています。

nobu:r38376 2012-12-14 15:09:04 +0900

r38375 の ChangeLogtypo 修正。

shugo:r38377 2012-12-14 17:04:55 +0900

r38365 で VC++ の最適化対策で入れた volatile つき変数の宣言を revert して、VC++コンパイルする時に __forceinline という修飾子を付けることで vm_call_general() と vm_call_super_method() がまとめられるのを防ぐように変更しています。 [ruby-core:50867] [Bug #7556]

nobu:r38378 2012-12-14 17:11:00 +0900

文字列リテラルやヒアドキュメントで改行を含むと __LINE__ の返す行数などがずれることがあるのを修正しています。具体例はチケットをみるのがはやいと思います。 [ruby-dev:46737] [Bug #7559]

nobu:r38379 2012-12-14 17:11:03 +0900

r38378 の ChangeLog エントリの時刻修正。

kosaki:r38380 2012-12-15 00:11:59 +0900

Kernel#kill でシグナル送信すると rb_thread_polling() を呼んで 100msec の待ちが発生していたので、 rb_thread_polling() 呼び出しを削除しています。 [ruby-core:50897] [Bug #7560]

svn:r38381 2012-12-15 00:12:03 +0900

version.h の日付更新。