ruby-trunk-changes r65536 - r65550

今日は RubyVM::AST.of という引数の Proc/Method オブジェクトに対応する RubyVM::AST::Node を取得するメソッドの追加の他、MJIT 用のヘッダファイルや出力先の permission などを考慮する変更などがありました。

nobu: r65536 2018-11-04 21:46:50 +0900

mjit.c で MJIT 用ヘッダファイルのファイルパスを作る init_header_filename() で MJIT_BUILD_DIR が相対パスだったり、world writable なディレクトリだったりするとセキュリティ上問題があるのでエラーにするようにしています。

naruse: r65537 2018-11-05 00:14:42 +0900

addr2line.c の macOSMach-O 形式の時に .dSYM ファイルが存在しなかった時に、.dSYM なしの実行形式ファイルのほうを開いてその symtab を使うようにしているようです。

svn: r65538 2018-11-05 00:14:44 +0900

version.h の日付更新。

sorah: r65539 2018-11-05 00:39:00 +0900

r65470 での rubygems の更新により --verbose をつけた時の拡張ライブラリのビルドが失敗することがあったみたいです。 --verbose が有効な時にコマンドの実行に IO.popen を使わず Kernel#system を使ってしまってたので verbose でもコマンド実行には同じパスを通すようにしています。

naruse: r65540 2018-11-05 07:36:05 +0900

addr2line.c では #pragma で -Wpedantic オプションを無効にするようにしています。

nobu: r65541 2018-11-05 11:05:12 +0900

r65536 の MJIT_BUILD_DIR のチェックで struct stat を初期化してから fstat(2) を呼ぶようにしています。またファイルの uid と mode も警告に表示するようにしています。

yui-knk: r65542 2018-11-05 11:13:45 +0900

RubyVM::AST.of というメソッドを新設して Proc オブジェクトや Method オブジェクトの ISeq に対応する AST を取得できるようにしています。AST ってコンパイル後には残ってないと思うけどどうするんだろ、と思ったら ISeq からファイル名を取得して再度 parse して、構造体 NODE に node_id というメンバーを追加して、ISeq の位置情報 rb_iseq_location_t にも node_id を保持するようにして、これを使って対応する NODE を探すようにしています。力技だ。 [ruby-core:87456] [Feature #14836]

svn: r65543 2018-11-05 11:14:00 +0900

r65542 のインデントのタブを空白に展開。

nobu: r65544 2018-11-05 11:25:46 +0900

tool/transform_mjit_header.rb で MJIT 用の minimize したヘッダファイル生成時にディレクトリやファイルを 700/600 など他のユーザーに見えないような権限を設定して mkdir/open するようにしています。なるほどー。MJIT のセキュリティ面の検証っていうのは必要かもしれないですね…。起動するコマンド、ヘッダ、生成するソース、コンパイラ生成物とか。

nobu: r65545 2018-11-05 11:57:06 +0900

r65535 で MJIT_CC を素の CC にしてましたが、元々 MJIT_CC を外から指定してた時に上書きされてしまうので 未定義の時だけ代入するようにしています。

kazu: r65546 2018-11-05 15:02:42 +0900

r65544 の tool/transform_mjit_header.rb のヘッダファイルの permission 設定の変更で追加したコメントの typo 修正。

kazu: r65547 2018-11-05 16:01:47 +0900

NEWS ファイルの標準添付ライブラリのセクションのエントリを辞書順に並べなおしています。

kazu: r65548 2018-11-05 16:01:49 +0900

r65505 の標準添付ライブラリでの require -> require_relative をできるたけ使うようにする変更で drb と net/https の rdoc 用コメントのサンプル内のは require を使うように戻して、rss/maker では追加で require_relative を使うように変更しています。

ko1: r65549 2018-11-05 17:02:29 +0900

STRUCT_CONST_PTR() で取り出したポインタを ruby のメソッド呼び出しや割り込みポイントを超えて利用しないように、そのような場所では都度 RSTRUCT_GET() を使うようにしています。任意の ruby の処理が動くのでその Struct 自体が操作されて Struct のオブジェクトが指すポインタも更新され得るので。

svn: r65550 2018-11-05 17:02:31 +0900

r65549 のインデントのタブを空白に展開。