今日は主に拡張ライブラリ objspace の trace_object_allocations の実装の修正などがありました。
nobu: r64650 2018-09-07 12:16:12 +0900
拡張ライブラリ objspace で st_get_key() や st_lookup(), st_delete() などに型の異なるポインタへの参照をキャストして無理矢理渡していたのを、一旦別の変数で受けてからキャストして代入するように修正しています(aliasing pointer の修正)。
svn: r64651 2018-09-07 12:16:13 +0900
version.h の日付更新。
nobu: r64652 2018-09-07 12:23:25 +0900
拡張ライブラリ objspace の ObjectSpace.trace_object_allocations の実装でオブジェクト解放時のフックで st_delete() する時には st_lookup() で要素を取り出す必要がないので分岐を修正して冗長な呼び出しを抑制しているようです
nobu: r64653 2018-09-07 12:39:30 +0900
RubyVM::AST.parse_file のテストで最初はエラー時にインタプリタ自体が異常終了してしまってたので子プロセスを起動してテストするようにしていましたが、r63602 で SyntaxError 例外発生になるように修正(変更)されたので直接実行して assert_raise でチェックするようにしています。 https://github.com/ruby/ruby/pull/1946
nobu: r64654 2018-09-07 12:42:51 +0900
同じく RubyVM::AST のテストで例外のメッセージもチェックするようにしています。
nobu: r64655 2018-09-07 17:28:57 +0900
拡張ライブラリ objspace の ObjectSpace.trace_object_allocations_start で登録する TracePoint のオブジェクトを rb_gc_register_mark_object() で GC の mark 対象に追加するようにしています。 GC で回収される可能性があったみたいです? そのかわり stop で newobj_trace/freeobj_trace をクリアしているのはやめて同じオブジェクトを使いまわすようにしています。これはいいのかな。まあオブジェクトが残るだけかな。というかこれまではポインタは残ってても回収されるおそれがあったわけですが。