ruby-trunk-changes r62199 - r62224

今日は主に昨日の MJIT のマージ後の各種プラットフォームでのビルドの対応やリファクタリングなどが行なわれていました。

nobu: r62199 2018-02-04 22:12:57 +0900

tool/transform_mjit_header.rb でヘッダ内の static 宣言を警告するための検出用の正規表現に \b による単語境界もチェックするようにして、関数名などに static が含まれている時に誤って警告しないようにしています。

k0kubun: r62200 2018-02-04 22:15:28 +0900

r62197 の MJIT Compiler 追加時に rb_control_frame_t にメンバーを追加したので VM_ASSERT で rb_control_frame_t のサイズをチェックしていたところがこけるようになってたので VM_ASSERT のチェックを修正しています。 rb_control_frame_t に追加した bp メンバーは今後消せたら消すみたいですが、とりあえず CI を通すため。

nobu: r62201 2018-02-04 22:33:13 +0900

r62196 と同様に Makefile.sub でも CFLAGS の内容を architecture 毎のフラグとそれ以外に分離して CFLAGS_NO_ARCH という変数を導入するようにしています。次の r62202 の布石ですかね。

nobu: r62202 2018-02-04 22:43:06 +0900

rb_mjit_header.h の生成ルールも Makefile.in と win32/Makefile.sub にそれぞれ書かれてたのを common.mk に統合しています。コンパイラというか preprocessor の展開だけするオプションで vm.c から生成するのでコンパイラ依存が大きそうですが、configure 時に使うオプションを調べて MJIT_HEADER_FLAGS にセットしておくようにしています。

nobu: r62203 2018-02-04 22:47:07 +0900

make mjit-headers という phony ターゲットを追加しています。 ツールで minimize 化したヘッダ生成用のターゲット。

k0kubun: r62204 2018-02-04 22:49:38 +0900

r62192 で Solaris でのビルドのため mjit.c に #include "internal.h" を追加しましたが、CI は通らなかったみたいなので今度は Solaris の場合に __EXTENSIONS__ というマクロを定義しておくようにしています。

nobu: r62205 2018-02-04 22:51:02 +0900

tool/transform_mjit_header.rb で警告メッセージは STDERR でなく STDOUT に出すようにしていいます。また異常終了させる時には exit 1 ではなく exit false や Kernel#abort を使うようにしています。あー exit false ってすると EXIT_FAILURE を使うのでどの環境でも異常終了と判定される終了ステータスになることが保証できるんでしたね。

k0kubun: r62206 2018-02-05 00:05:37 +0900

rb_mjit_header.h の生成ルールで中間ファイルとして vm.i というファイル名を使うようにしています。 VisualStudio (かな?) の cl だと出力ファイル名の指定がきかないのでビルドエラーになるのを修正。

svn: r62207 2018-02-05 00:05:38 +0900

version.h の日付更新。

nobu: r62208 2018-02-05 00:17:44 +0900

r62206 を revert して、cl.exe でも出力ファイル名を指定できるように $(CPPOUTFLAG) という変数でフラグを指定するようにしています。 cl.exe は -Fi を使わないといけないらしい。

nobu: r62209 2018-02-05 00:23:37 +0900

tool/transform_mjit_header.rb の実行に BASERUBY のかわりに MINIRUBY を利用するようにしています。

nobu: r62210 2018-02-05 00:34:38 +0900

r62209 の続き。 rb_mjit_header.h の minimize 化の依存関係に $(MINIRUBY) を追加しています。

k0kubun: r62211 2018-02-05 00:40:06 +0900

r62192 r62204 の続き。 Solaris でのビルド失敗を回避するため mjit.c に __EXTENSIONS__ の定義を追加してましたが、その位置を全てのヘッダの #include の前に移動しています。

kazu: r62212 2018-02-05 09:09:09 +0900

tool/transform_mjit_header.rb で Kernel#system の shell のパイプ表記で標準エラー出力をリダイレクトしていたのを、Kernel#system の :err オプションでリダイレクトするようにしています。

nobu: r62213 2018-02-05 09:52:20 +0900

tool/transform_mjit_header.rb の find_decl というメソッドの実装で宣言を抽出するのに正規表現を使った実装にリファクタリングしています。miniruby を使うから新しめの機能を使っても OK だから、みたいなのかと思ったけどそういうわけでもなく普通に String#rindex を使うように書き直してますね。

nobu: r62214 2018-02-05 09:52:45 +0900

tool/transform_mjit_header.rb の MJITHeader.separate_macro_and_code で関数宣言とマクロ定義を分類といいつつ順番を揃えてただけなのを別の文字列として返して、続く定義の書き換えやチェックをマクロ定義部分を除外して行うようにしています。効率の問題かな?

nobu: r62215 2018-02-05 11:02:23 +0900

tool/transform_mjit_header.rb でファイル入出力を File.binread, File.binwrite を使って ASCII-8BIT で読み書きするようにしています。こっちは効率のためみたいです。

nobu: r62216 2018-02-05 11:07:49 +0900

tool/transform_mjit_header.rb で Usage の出力などに自分の名前を $0 を参照するようにしています。

nobu: r62217 2018-02-05 12:19:39 +0900

tool/vcs.rb の Kernel#system を上書きするための DebugSystem#system で古い ruby 向けに :exception オプションを削った後 opts が空になったら引数の配列から削るようにしています。うーんそもそもオプションを受け取らないというバージョンがあったのかな。

nobu: r62218 2018-02-05 12:19:39 +0900

tool/vcs.rb で STDERR.puts に配列を *args みたいに splat して渡してましたが、IO#puts は引数に配列を受け取れるのでそのまま渡すようにしています。

shyouhei: r62219 2018-02-05 13:02:55 +0900

mjit.h の enum の最後の要素の後にカンマがあったので、古いコンパイラで動かない可能性があるので削っています。

shyouhei: r62220 2018-02-05 13:07:25 +0900

r62191 でなかったら独自定義するようにしてた va_copy() ですが configure で存在チェックして適切な代替マクロなどに展開するようにしています。

shyouhei: r62221 2018-02-05 13:17:44 +0900

mjit.c や thread_pthread.c に追加された MJIT 用関数で関数ポインタを返す関数の戻り値を void * として宣言していたのを mjit_func_t など明示的に型を指定するようにしています。 void * と関数ポインタの間の暗黙の cast はダメとのこと。また NULL も void* にキャストされてるので 0 を使うようにしています。NULL もダメなのかー。

nobu: r62222 2018-02-05 13:58:04 +0900

tool/transform_mjit_header.rb でコンパイラの挙動チェックのために生成する C ソースコードの一時ファイルを開く時に mode: File::BINARY を指定して環境によって不要な改行コードの CR が入るのを防いでいます。自動で CR が入るならその環境では入っててもコンパイルできないのかな。

nobu: r62223 2018-02-05 13:58:07 +0900

r62220 で win32/Makefile.sub に HAVE_VA_COPY を追加していましたが、古いコンパイラでは va_copy() は未定義だったので MSC_VER をチェックして定義を分けるようにしています。

shyouhei: r62224 2018-02-05 14:22:22 +0900

tool/m4/ruby_check_va_copy.m4 で rb_cv_va_copy のクオートを M4 の [] ではなくて "" で括るようにしています。ところでなぜかこの行だけタブインデントになってますね。