ruby-trunk-changes r60827 - r60838

今日も NODE の位置情報の修正や opendir(3) openat(2) で GVL を解放する変更などがありました。

kazu: r60827 2017-11-18 00:08:03 +0900

標準添付ライブラリ timeout の Timeout.timeout の rdoc 用コメントのメソッド名の記述がインスタンスメソッドのものになっていたので、特異メソッドとしての記法に変えています。まあ module_function なので private なインスタンスメソッドとしても呼べるんですけどね。 https://github.com/ruby/ruby/pull/1760

svn: r60828 2017-11-18 00:08:04 +0900

version.h の日付更新。

yui-knk: r60829 2017-11-18 10:40:13 +0900

NODE_ARRAY 型のノードで終端位置のカラムが、最初の要素のものになっていたのを修正しています。コミットログの例だとメソッドの引数が挙げられてますが、複数の要素が並ぶところで結構広く使われてる NODE だと思います。

normal: r60830 2017-11-18 11:01:44 +0900

遅い filesystem 対策の続きで opendir(3) の時にも GVL を解放するようにしています。

normal: r60831 2017-11-18 11:01:49 +0900

さらに遅い filesystem 対策の続きで openat(2) の時にも GVL を解放するようにしています。openat() って今使ってるんだっけ…と思ったら r58860 で Dir.glob で利用するようにしていました。

suke: r60832 2017-11-18 11:53:39 +0900

拡張ライブラリ win32ole で WIN32OLE の GetTypeInfo や QueryInterface などの関数のエラー時に RuntimeError 例外や WIN32OLERuntimeError を発生させていたのを WIN32OLEQueryInterfaceError という例外を発生させるようにしています。

yui-knk: r60833 2017-11-18 12:32:05 +0900

parse.y で代入文のコード部で node_assign() というマクロを利用していないところがあったのを利用するようにリファクタリング

ktsj: r60834 2017-11-18 14:45:21 +0900

r60726 の構造体メンバ名の変更に合わせて .gdbinit の print_lineno コマンドも修正しています。

ktsj: r60835 2017-11-18 15:24:52 +0900

.gdbinit の print_pathobj コマンドで String オブジェクトの VALUE である $str をそのまま C の文字列として printf(3) に渡していたので print_string コマンドを利用するように修正しています。

yui-knk: r60836 2017-11-18 17:21:46 +0900

ローカル変数と dynamic 変数(まあ普通は単にローカル変数と呼ばれる気もしますが)の NODE NODE_LVAR と NODE_DVAR の位置情報が、メソッド引数やブロックパラメーターへ配列を splat して渡される時にずれているのを修正しています。

usa: r60837 2017-11-18 17:25:29 +0900

r60830 の opendir(3) の GVL 外しですが、r60831 と同様に Windows ではコマンドライン引数の展開のために使っていて、まだ GVL 外しができないので、使えるかどうか判定する分岐を追加しています。 [ruby-core:83810] [Bug #14115]

ko1: r60838 2017-11-18 18:39:41 +0900

rb_iseq_t::aux に trace_events というメンバーを追加して RUBY_EVENT_LINE, RUBY_EVENT_CLASS, RUBY_EVENT_END, RUBY_EVENT_CALL, RUBY_EVENT_RETURN, RUBY_EVENT_B_CALL, RUBY_EVENT_B_RETURN などの event hook は ISeq にもフラグをセットするようにしています。 rb_iseq_trace_set() で event hook に変更がない時に処理を skip できるようにしています。