ruby-trunk-changes r62161 - r62178

今日は文字列リテラルを始点/終点とする Range リテラルVM 命令の最適化の修正などがありました。

nobu: r62161 2018-02-02 22:29:23 +0900

定数参照でネストしたスコープでトップレベルの定数を参照してしまった時の警告がコメントアウト状態で残ってましたが、2.5 からは参照できないように変更されたので、コメントアウトごと削除しています。

nobu: r62162 2018-02-03 00:16:22 +0900

rb_interrupt() で例外メッセージにフォーマット指示子 "%s" で文字列リテラルを埋め込んでいたのが不要だったので、フォーマット文字列にそのまま埋め込むようにしています。

svn: r62163 2018-02-03 00:16:23 +0900

version.h の日付更新。

nobu: r62164 2018-02-03 01:02:03 +0900

rb_mod_const_missing() の宣言を include/ruby/ruby.h から internal.h に移動して、非公開にしています。EXPERIMENTAL ってコメントがついてるので、影響があるかどうか消してみて様子をみる、って感じですね。

nobu: r62165 2018-02-03 01:10:17 +0900

Kernel#system で exeption キーワード引数の指定があった時の例外メッセージの構築を中間オブジェクトを作らないように文字列オブジェクトに追記するかたちで組み立てるようにしています。

nobu: r62166 2018-02-03 01:14:21 +0900

process.c の Process::Status の文字列化に使う pst_message() から終了ステータスを表示する部分を pst_message_status() という関数に切り出して Kernel#system の例外メッセージではこちらを使うようにしています。

nobu: r62167 2018-02-03 01:39:16 +0900

Kernel#system のキーワード引数 exception の指定があった時のテストで、子プロセスを異常終了させるために exit 1 していたのを Kernel#abort で異常終了させるようにしています。 portability のためってあるけど exit 1 がダメな環境ってあるのかな。

nobu: r62168 2018-02-03 01:44:22 +0900

r62167 の続きで Kernel#system に配列でコマンドが渡されて、shell を経由しない起動だった時のテストケースも追加しています。

nobu: r62169 2018-02-03 08:25:42 +0900

r62162 の再修正。 rb_raise() の引数に空文字列のリテラルを渡してたのが警告になったそうなので rb_exc_raise() を直接呼び出すようにしています。

nobu: r62170 2018-02-03 10:57:00 +0900

r62164 の追加修正。 include/ruby/backward.h に追加した rb_mod_const_missing() の ERRORFUNC() というマクロを使った宣言に NORETURN() マクロも利用するようにしています。

nobu: r62175 2018-02-03 12:50:28 +0900

Kernel#system などに渡す文字列の Encoding を保持したまま渡すようにしています。けどこのテスト Windows 以外でも動くのかな。shebang のないファイルに shell script 書いて chmod で実行権限を与えただけのようにみえるけど。
[追記] ENOEXEC が発生した場合 shell 経由の実行でリトライする機能があるそうです。知らなかった。[/追記]

nobu: r62176 2018-02-03 16:21:58 +0900

parse.y で p->lex の位置の更新しているところに同じ式に展開されるマクロ lex_goto_eol() を利用するリファクタリング

normal: r62177 2018-02-03 16:25:21 +0900

"a"..."z" のように文字列リテラルからなる Range オブジェクトを生成する VM 命令 の最適化の判定時に magic comment やコンパイルオプションの frozen_string_literal が真の時に生成される VM 命令が異なるので判定ミスしていたのを修正しています。 [ruby-core:80290] [Feature #13355]
それにしてもコミットログの FSL で frozen string literal の略なのかな。新たな略語がうまれてた。

nobu: r62178 2018-02-03 16:30:39 +0900

parse.y の %token の宣言に \ を backslash と名前をつけて宣言するようにしています。