ruby-trunk-changes r63685 - r63688

今日は VM スタックに内部オブジェクトが push されるのをエラーにする assertion を追加しようとしたら rubyspec でひっかかった、というようなことがありました(結果的にはあまり変わってない)。

kazu: r63685 2018-06-18 00:42:35 +0900

test/test_open3.rb で IO#closed? でチェックしてから IO#close を呼んでるところがあったので、もう close 済みでも IO#close で IOError が発生しなくなっているのでチェックを削っています。

svn: r63686 2018-06-18 00:42:36 +0900

version.h の日付更新。

ko1: r63687 2018-06-18 16:41:22 +0900

vm_insnhelper.h に struct RBasic::klass が 0 にセットされている内部的オブジェクトかどうかをチェックする inline 関数 rb_obj_hidden_p() を追加して、PUSH() マクロで VM スタックにオブジェクトを push する時に内部的オブジェクトだったらエラーにするように VM_ASSERT() を仕込んでいます。
hidden object かどうか判定するマクロとか関数って他にもあったよな…と軽く grep してみたら iseq.c に hidden_obj_p() ってマクロがありました。

ko1: r63688 2018-06-18 17:30:03 +0900

r63687 で PUSH() に追加した VM_ASSERT() を削ってます。rubyspec でエラーがおきたそうです。えー? 内部オブジェクトが VM スタックにのったらまずいというのは確かにそうだと思ったんですがどうやったらのるんですかね。