ruby-trunk-changes r63489 - r63494

今日は eval と proc と Symbol のブロック引数渡しの組み合わせで SEGV する不具合の修正がありました。

usa: r63489 2018-05-22 21:24:43 +0900

r63478 で「sub make に GOLF=golf2 を渡してるのなんでだろう」と書いたら意図を明確にするため golf2 を説明的なダミーの文字列に変更されてました。子 make では PROGRAM 変数を指定して program ターゲットでビルドさせていて golf のターゲットと衝突しないように何でもいいので被らない名前をつけたということみたいです。

k0kubun: r63490 2018-05-23 00:39:34 +0900

mjit.c でファイル削除に標準ライブラリの remove(3) を使ってたところで warnings か verbose オプションがついてたら削除失敗した時に標準エラー出力に警告を出す remove_file() という関数を定義してこれを使うようにしています。そういえば ruby のソースで remove(3) 使ってるのはじめてみたかも。

svn: r63491 2018-05-23 00:39:35 +0900

version.h の日付更新。

k0kubun: r63492 2018-05-23 00:48:58 +0900

MJIT のテストでクラス変数を使ったスクリプトの MJIT のテストで子プロセスで警告が出てたのを解消しています。また assert_eval_with_jit で子プロセスで標準エラー出力に警告らしいものが出てたら親のほうでもそれを Kernel#warn で警告として出力するようにして子プロセスの警告に気がつけるようにしています。

normal: r63493 2018-05-23 14:51:43 +0900

r63484 の parse.y での ruby_sized_xfree() などを使うようにした変更で Solaris でビルドできなかったそうで、internal.h で RUBY_SYMBOL_EXPORT_{BEGIN,END} でくくって関数の symbol を export するようにしています。 [ruby-core:87232]

ko1: r63494 2018-05-23 15:56:08 +0900

Symbol をブロック引数として渡されたメソッド内で binding.eval("proc") すると SEGV するという不具合を修正しています。うーんそもそもこんなことできるんだな。eval 内の Proc でブロックとして Symbol が渡されているケースが考慮されていなかったようです。 [ruby-core:87223] [Bug #14782]