ruby-trunk-changes r62613 - r62622

今日は ISeq のバイナリフォーマットからのロードの処理の不具合修正などがありました。

nobu: r62613 2018-02-28 22:32:29 +0900

make clean-local で MJIT のヘッダ用の timestamp ファイルと mjit_config.h を削除するようにしています。

k0kubun: r62614 2018-02-28 23:31:17 +0900

r62612 の NEWS ファイルの変更でチケットへの参照が消えてしまっていたので戻しています。

nobu: r62615 2018-03-01 08:31:42 +0900

r61936 の ibf_dump_object_list() でメモリ確保に ALLOCV_N() を使うようにした変更を revert しています。ここのループを回している dump->obj_list の Array オブジェクトはループ内で要素が追加されて最終的な要素数が伸びるかもしれないので、ALLOCV_N() で固定サイズのバッファを作るのではオーバーフローする可能性があったので、rb_ary_tmp_new() で一時利用の Array オブジェクトを作って普通の rb_ary_push() で(可能ならバッファの伸張が行なわれる)追加していくように修正しています。なるほどー、これは気がつかなかった。

svn: r62616 2018-03-01 08:31:43 +0900

version.h の日付更新。

nobu: r62617 2018-03-01 09:37:47 +0900

ISeq のバイナリフォーマットからのロードで ISeq の path と realpath をロードするところで、realpath が nil の場合に TypeError になるのを修正しています。 https://github.com/Shopify/bootsnap/issues/132

nobu: r62618 2018-03-01 11:33:15 +0900

tool/bisect.sh という git bisect のためのユーティリティツールで make srcs の実行をビルドディレクトリへの移動の後に行うように修正しています。

nobu: r62619 2018-03-01 12:26:05 +0900

tool/bisect.sh の引数の run-miniruby と run-ruby の時の処理を共通化するリファクタリング。shell でこういうところに凝ると環境依存のなにかを踏みそうだなぁ、と思ったけどビルドに必須のツールでもないし、ぱっと見トリッキーなところはないので大丈夫そう(sed への依存は増えてるけど sed は .sh を実行する環境ならあるだろう)。

nobu: r62620 2018-03-01 13:10:25 +0900

条件部で代入が行なわれてたときの警告は、右辺値がリテラルの時だけ行われるので、警告メッセージにもそのように明記するようにしています。 [ruby-core:85872] [Bug #14562]

if a = 0
  do_something(a)
end

こんな感じのですね。

if a = foo()
  do_something(a)
end

こういうのは警告は出ないと。

nobu: r62621 2018-03-01 16:59:57 +0900

ibf_dump_object_regexp() で REGEXP_SRC() の戻り値を一旦 long 型の構造体メンバーに代入してから ibf_dump_object() に渡してたので、long と VALUE のサイズが異なる環境では情報が落ちてる可能性があったので VALUE 型の変数に一時的に受けるようにしています。

nobu: r62622 2018-03-01 17:26:02 +0900

ISeq のバイナリフォーマットからのロードで、未サポートというか不正なオブジェクト型だった時などに rb_bug() で異常終了していたのを、例外を発生させるようにしています。