ruby-trunk-changes r66663 - r66681

今日は Method オブジェクトを取得するための新文法 obj.:meth の追加や coverage の不具合修正などがありました。

k0kubun: r66663 2018-12-31 21:54:40 +0900

IO#wait_readable への書き込みで pipe の対向の口から書き込んでから読み出し側で wait_readable する前の sleep を IO.select に変更しています。なるほど書いてもすぐ読める状態になってるとは限らないんだなぁ。

nobu: r66664 2018-12-31 23:59:27 +0900

compile.c の defined_expr0() で nd_line() の呼び出し(といってもこれはマクロなので参照とシフト操作などしてるだけ)の結果をローカル変数に格納しておいてこれを参照するようにリファクタリングしています。

nobu: r66665 2018-12-31 23:59:29 +0900

ext/socket/raddrinfo.c のインデント修正。

svn: r66666 2018-12-31 23:59:32 +0900

r66664 のインデントのタブを空白に展開。 git svn dcommit でまとめて commit したからか 1つ飛ばしで反応してますね。

nobu: r66667 2019-01-01 00:00:37 +0900

Method オブジェクトを取得するための新しい文法 obj.:meth を追加しています。唐突に入りましたね。 [ruby-core:74036] [Feature #12125] [ruby-core:81282] [Feature #13581]

svn: r66668 2019-01-01 00:00:52 +0900

r66667 のインデントのタブを空白に展開。

svn: r66669 2019-01-01 00:00:52 +0900

version.h の日付更新。

mame: r66670 2019-01-01 10:41:23 +0900

obj&.meth = 1 のように safe-guard 演算子と代入つきメソッドの組み合わせの記法を書いた時にも obj が nil だっかか否かで branch coverage が取れるように trace 命令を追加しています。 [ruby-core:90763] [Bug #15476]

svn: r66671 2019-01-01 10:41:26 +0900

r66670 のインデントのタブを空白に展開。

mame: r66672 2019-01-01 10:47:14 +0900

r66670 を revert しています。コミットログのチケット番号が間違っていたため。

svn: r66673 2019-01-01 10:47:17 +0900

r66670 を revert した r66672 のインデントの空白を展開。

mame: r66674 2019-01-01 10:50:57 +0900

obj&.meth = 1 のように safe-guard 演算子と代入つきメソッドの組み合わせの記法を書いた時にも obj が nil だっかか否かで branch coverage が取れるように trace 命令を追加しています。 [ruby-core:90763] [Bug #15476] r66670 のやりなおし。

svn: r66675 2019-01-01 10:51:01 +0900

r66674 のインデントのタブを空白に展開。

mame: r66676 2019-01-01 12:03:17 +0900

compile.c の iseq_set_sequence() でコンパイルしたリストから命令列にまとめる前の coverage 用のテーブルの初期化部分で events 変数に type=INSN_ELEMENT のノードの insn_info.events にセットされたイベントのフラグも参照するように修正しています。具体的にはやはり &. の演算子の coverage で問題があったみたいです。 [ruby-core:90764] [Bug #15476]

svn: r66677 2019-01-01 12:03:20 +0900

r66676 のインデントのタブを空白に展開。

hsbt: r66678 2019-01-01 13:53:52 +0900

rubygems に upstream から 3.0.2 をマージしています。 https://blog.rubygems.org/2019/01/01/3.0.2-released.html

k0kubun: r66679 2019-01-01 18:52:15 +0900

r66667 で追加された文法 obj.:meth のための VM 命令 methodref の MJIT のテストを追加しています。

mrkn: r66680 2019-01-01 21:20:04 +0900

benchmark/complex_float_{add,div,mul,new,power,sub}.yml などに Complex の生成や四則演算のベンチマークを追加しています。

mrkn: r66681 2019-01-01 21:20:05 +0900

complex.c の f_add() に引数 x が Integer, Float, Rational などの数値だった場合にメソッドが再定義されていなければメソッド呼び出しせず直接対応する C の関数を呼び出す最適化を行っています。