ruby-trunk-changes r62307 - r62331

今日は MJIT 用のテストの追加や MJIT 用ヘッダのインストール方法の変更や依存関係の修正などがありました。

k0kubun: r62307 2018-02-08 21:40:33 +0900

r62291 で一度入れて一旦 revert した test/ruby/test_jit.rb を再度追加しています。 MJIT の回数なんかをチェックしているテストです。

svn: r62308 2018-02-08 21:40:34 +0900

r62307 で再度追加した test/ruby/test_jit.rb の svn property 設定。

k0kubun: r62309 2018-02-08 21:43:09 +0900

test/ruby/test_jit.rb に require "shellwords" がありましたが、今利用していないので削除しています。

k0kubun: r62310 2018-02-08 21:58:27 +0900

test/ruby/test_jit.rb で MJIT が有効かどうかの判定をコンパイラ(RbConfig::CONFIG["CC"] に格納してあるパス)の --version の出力をみてましたが、実際に eval_with_jit を1つやってみて、その結果で判定するようにしています。

k0kubun: r62311 2018-02-08 22:01:43 +0900

r62310 で eval_with_jit の戻り値の扱いを間違えてたのを修正。

k0kubun: r62312 2018-02-08 22:40:47 +0900

test/ruby/test_jit.rb のエラー時のメッセージの typo 修正。

k0kubun: r62313 2018-02-08 22:54:37 +0900

MJIT 用にさらに rb_float_eql() rb_str_eql() rb_source_location_cstr() などのシンボルも --jit-debug や --jit-wait などのオプションを使った時に必要なので export するようにしています。

k0kubun: r62314 2018-02-08 22:56:32 +0900

test/ruby/test_jit.rb の test_jit で MJIT が無効な環境では skip するようにしています。不要なタイムアウト待ちを抑制するためとのこと。

nobu: r62315 2018-02-08 23:59:31 +0900

gmake.mk で MJIT 用のヘッダの依存関係に $(PREP) を追加しています。miniruby の実行が必要なためとのこと。

nobu: r62316 2018-02-09 00:00:27 +0900

mjit.c の compile_c_to_so() で変数の static をつけたりはずしたりしています。

svn: r62317 2018-02-09 00:00:28 +0900

version.h の日付更新。

nobu: r62318 2018-02-09 00:00:28 +0900

mjit.c で #include する version.h を ruby/version.h に変更しています。これで今さら気がついたんですがそういえば version.h と include/ruby/version.h ってのがあるけど内容は違いますね。version.h は安定版ブランチでは毎回 REVISION を更新するので、こっちに依存しているものは毎回再コンパイルされることになるので。

nobu: r62319 2018-02-09 00:19:01 +0900

tool/mkconfig.rb で configure による変数の MJIT_ からはじまるものは拡張ライブラリ向けには出力しないようにしています。

nobu: r62320 2018-02-09 00:19:32 +0900

MJIT 用ヘッダのインストール時の処理で複数 architecture 対応のヘッダのインストールに対応しています。

nobu: r62321 2018-02-09 00:22:54 +0900

io.c で USE_COPY_FILE_RANGE は定義されてるけど USE_SENDFILE は未定義という環境でビルドエラーになるそうなので、preprocessor の条件を強化しています。

nobu: r62322 2018-02-09 00:46:11 +0900

r62316 で libs という文字列配列の変数に static を追加していましたが再度削っています。 Windows 環境の時の初期化が定数ではなかったため。

nobu: r62323 2018-02-09 00:47:24 +0900

mjit.c で rb_w32_system_tmpdir() の宣言を(Windows 環境の時)追加しています。 r62283 で system_tmpdir() の呼び出しを追加してたので必要になったようです。

usa: r62324 2018-02-09 03:48:25 +0900

r62320 で win32/Makefile.sub で RUBY_VERSION_NAME という変数の参照が追加されたので、未定義だったら定義も追加するようにしています。

usa: r62325 2018-02-09 03:51:33 +0900

mjit.c のリファクタリング。不要な分岐やブロック(スコープ)の導入を消したり、エラーメッセージの強化をしたりなど。

k0kubun: r62326 2018-02-09 09:00:27 +0900

tool/transform_mjit_header.rb でコンパイラが "conflicting types for..." のようなエラーメッセージを出した時にコンパイラにオプション -std=c99 を渡すようにしています。 AIX 環境でのビルドの修正のためみたいです。

k0kubun: r62327 2018-02-09 09:32:55 +0900

test/ruby/test_jit.rb で環境変数 RUBY_FORCE_TEST_JIT がセットされていたら常に MJIT のテストを実行するようにして、.travis.yml でこの変数をセットしておくようにしています。 r62310 で実際に MJIT が使えないと skip するようにしたので、そもそも MJIT がうまく動いてないとテストも実行されないという状態だったので CI では強制的にチェックするようにするためと思われます。

nobu: r62328 2018-02-09 12:15:20 +0900

sprintf.c の ruby_do_vsnprinf() でバッファのサイズ n が INT_MAX を超えている時に int にキャストすることでオーバーフローして負の値を返すのを防ぐため、size_t が int より精度が大きい時は範囲チェックをしています。

nobu: r62329 2018-02-09 12:15:21 +0900

debug_counter.h で #include "debug_counter.h" と自分自身を #include していたのを、#include __FILE__ と __FILE__ マクロを利用するようにしています。なぜこんなことしてるんだろう…と思ったらヘッダの重複 #include を防ぐための #ifndef ガードの上に RB_DEBUG_COUNTER を使ったメンバーの列挙が書かれてて、これを enum rb_debug_counter_type の宣言の中に展開しようとしているようです。うーん、なぜ直接 enum の中に書かないんだろう。と思ったら同じものを debug_counter.c でも参照して変数の初期化子に使っているんですね。うーむなるほど、トリッキーだ。

nobu: r62330 2018-02-09 12:37:38 +0900

Makefile.in に SET_LC_MESSAGES という変数の代入が同じものが2つあったので1つ消しています。

nobu: r62331 2018-02-09 12:51:57 +0900

win32/Makefile.sub で MESSAGE_BEGIN および MESSAGE_END の変数にコマンドライン(cmd.exe?)の for 文が書かれてましたが、前後にそれぞれ開きかっこと閉じかっこを追加するようにしています。