ruby-trunk-changes r65645 - r65655

今日は主に RubyVM::AbstractSyntaxTree.of の実装の強化/効率化の変更がありました。

kazu: r65645 2018-11-09 22:00:03 +0900

configure.ac での MJIT_CC のパス展開時に MJIT_CC は先に CC で初期化されているので展開時の参照でデフォルト値の指定は不要なので消しています。

nobu: r65646 2018-11-09 22:39:35 +0900

ast.c のリファクタリングで rb_ast_s_parse() から rb_ast_parse_str() を、rb_ast_s_parse_file() から rb_ast_parse_file() を括り出して static なしの関数を作ってます。

nobu: r65647 2018-11-09 22:39:36 +0900

すっかり忘れてましたが parse.y には(というか ruby の parser には) SCRIPT_LINES__ という定数に Hash を入れておくと parse した行が追加されていくという機能があって、RubyVM::AbstractSyntaxTree.of で内部的に parse しなおした時にこの定数に追加されてしまっていたらしいのを修正しています。

normal: r65648 2018-11-10 08:24:14 +0900

rb_sigwait_sleep() のコメントに ppoll(2) 前に return するパスの理由について ML の参照を追記しています。 [ruby-core:88102]

svn: r65649 2018-11-10 08:24:17 +0900

version.h の日付更新。

nobu: r65650 2018-11-10 18:29:00 +0900

r65617 で local 変数や dynamic 変数の index がみつからなった時に rb_bug でなく CompileError 例外発生にした変更の時に、compile.c の get_dyna_var_idx() で dynamic 変数(ブロックのスコープの変数)がみつからなかった時に iseq が NULL なのに CompileError の生成時に参照してしまっていたのを修正しています。

nobu: r65651 2018-11-10 19:39:58 +0900

RubyVM::AbstractSyntaxTree.of の実装で、もし SCRIPT_LINES__ に Hash がセットされていて対象の行が格納済みだったら、ファイルを再度読み込まずに SCRIPT_LINES__ から構築して parse するようにしています。

nobu: r65652 2018-11-10 20:16:36 +0900

r65646 で切り出した ast.c の関数 rb_ast_parse_str() および rb_ast_parse_file() からさらに共通の parser 生成と後始末処理を ast_parse_new() と ast_parse_done() という関数に切り出し、引数のチェックを parser 生成の前にしておくようにしています。

nobu: r65653 2018-11-10 20:40:33 +0900

r65651 の RubyVM::AbstractSyntaxTree.of の実装に SCRIPT_LINES__ を使うケースのために parse.y で配列から直接 token を取得できるようにして、不要な文字列の連結を省けるようにしています。

nobu: r65654 2018-11-10 20:43:02 +0900

RubyVM::AbstractSyntaxTree.of で -e で指定したスクリプト片内の Proc/Method が対象のときも対応できるように rb_e_script に保存されているものを再 parse するようにしています。さすがに -e は対応しなくても文句は出ないいんじゃないかなとは思いますが、とはいえ別にこれのために保存するようにしたというわけでもないので追加のコストは発生していないかと。

nobu: r65655 2018-11-10 21:04:18 +0900

struct parser_params の ruby_sourcefile メンバーの型に const 修飾子を追加しています。