ruby-trunk-changes r40753 - r40765

今日はビルドプロセス回りの改造があってファイルの切り出しや移動などがありました。また RGENGC 関係のプロファイリング用コードの追加やリファクタリングなどもありました。

tenderlove:r40753 2013-05-15 03:57:23 +0900

r40750 の Psych.safe_load の追加で Psych::Visitors::YAMLTree.new の引数が省略不可能になったので rdoc のテストが失敗するようになってしまったので、互換性のため省略可能にしています。ただし省略された時は super だけ呼んで引数を渡さない呼びかたは deprecated になったという警告メッセージを出力するようにしています。

nobu:r40755 2013-05-15 16:51:32 +0900

tool/ifchange というシェルスクリプトに --keep オプションを追加してなにやらファイルを拡張子を追加してバックアップを取っておくようにしています。

nobu:r40756 2013-05-15 16:52:53 +0900

configure.in の unexpand_shvar で '$' のエスケープを追加しています。 これはバックポートしたほうがいいのかなぁ。

nobu:r40757 2013-05-15 16:56:39 +0900

version.c からライブラリロードパスの決定のために必要なマクロ定義や変数の定義を loadpath.c というファイルに切り出しています。

nobu:r40758 2013-05-15 16:58:28 +0900

configure.in から shvar_to_cpp() と unexpand_shvar() といった関数を削除して、かわりに tool/shvar_to_cpp.rb というツールを使うようにしているみたいです。これまた大きめの改造ですね。

nobu:r40759 2013-05-15 17:06:07 +0900

vm_eval.c の eval_string_with_cref() のなかで setjmp() の前に宣言された変数を後で使っているため "clobbered by 'setjmp' or 'vfork'" のコンパイラ警告が出ていたのを抑制するため変数の宣言位置を移動しているようです。

nobu:r40760 2013-05-15 17:06:10 +0900

r40759 と同様に mv.c の vm_invoke_proc() と vm_exec() でも "clobbered by 'setjmp' or 'vfork'" 警告の除去のために変数の宣言に volatile を追加しています。 gcc 4.9.0 で警告が出るようになったそうです。

ko1:r40761 2013-05-15 17:07:30 +0900

RGENGC_PROFILE というマクロの定義の取りうる値に 2 を追加して(正確には 2以上の時、という条件で #if で条件コンパイルしていますが) RGENGC 自体のデバッグ用に GC.stat の項目にオブジェクトの内部的な型(T_OBJECT とか T_STRING, T_ARRAY など)毎のオブジェクト確保数を取得できるようにしています。

nobu:r40762 2013-05-15 17:09:14 +0900

common.mk で verconf.h が tool/shvar_to_cpp.rb に依存するように依存関係を修正しています。 r40758 の変更の追随ですね。

nobu:r40763 2013-05-15 17:56:28 +0900

ちょっとよくわかっていませんが configure.in で RUBY_PLATFORM に verconf を埋め込んでいた(後で置換するため)のを RUBY_PLATFORM_CPU に埋め込むようにしています。 自分でも書いててよくわかってません。コミットログには config.h に RUBY_PLATFORM を移動していると書かれているのですがこれも意味がよくわからず。
また ChangeLog がひとつ前のささださんのエントリを書き換えて乗っとったみたいになってしまっています。

ko1:r40764 2013-05-15 19:26:22 +0900

オブジェクトを表現する構造体を格納する struct RVALUE の共用体に VALUE 型のメンバを3つ持つ構造体 values というエントリを追加して、newobj() というオブジェクトを確保する関数を newobj_of() と改名して、フィールドに値を追加する処理もここで引数として受け取ってセットするように汎用的に処理するようにしています。つまり実際には struct RData なのだけどそのメンバに個別にセットするのではなくて newobj_of() に構造体メンバの順番と同じように引数として渡して共用体の values 経由で n 番目の VALUE 型メンバにセットするということをしています。なぜでしょうね。多分ここにも後で何かフックを追加したいとかそういうことではないかと思われます。

nobu:r40765 2013-05-15 19:31:05 +0900

r40764 の ChangeLog の行末の空白除去。