ruby-trunk-changes 2019-12-04

今日は Regexp#match, #match? の挙動の変更を元に戻す変更や、Enumerable#chain や Method/UnboundMethod、 MonitorMixin などの不具合修正、VM 命令列の最適化により line coverage が正確に取れなくなるケースの対策などがありました。

[5c2c396685] Jeremy Evans 2019-08-25 19:09:19 UTC

Thread 内からその同じ Thread を作るメソッドを呼んで再帰させることで Thread bomb みたいなことをすると切り替えポイントがなくて割り込みがきかないという問題の修正のため thread_do_start() でブロック起動前に vm_check_ints_blocking() を呼んで割り込みチェックするようにしています。はー、なんか微妙に嫌な予感のする変更だけど、ぱっとみ args_ptr に RARRAY_CONST_PTR() で取り出した Array のポインタを渡してるところがその Array が割り込み先で変更されるとまずいかもというくらいで、この args はth->invoke_arg.proc.args から来ているのでそうそう変更されることはなさそう? [ruby-core:81801] [Bug #13688]

[b96d559c69] git 2019-12-03 15:27:58 UTC

version.h の日付更新

[47c97e1e84] Jeremy Evans 2019-08-12 03:53:37 UTC

autoload でファイルがロードされる時にターゲットとなっている定数の private_constant や deprecated_constant などの属性が無効になった状態で実行されてしまうという不具合を修正しています。そもそも autoload を設定しておいてその定数名に対して private_constant とかロード前に設定できるんですね。 [Bug #11055]

[a029b54ec7] Jeremy Evans 2019-08-28 23:41:39 UTC

Enumerabl#chain が返す Enumerator::Chain が渡されたブロックの Proc オブジェクトの lambda? のフラグが消されてしまうという不具合を修正しています。 rb_block_call() のコールバックから rb_funcallv() で call メソッド呼んでたのを rb_funcall_with_block() を使うようにしています。 [ruby-core:91600] [Bug #15613]

[34a66b1f36] "NARUSE, Yui" 2019-12-03 16:26:24 UTC

ここから Regexp#match, Regexp#match? の例外発生の revert の関連。テストでの警告抑制の 782d1b8fb0a039cedef9ad9c94f432dad51901e6 を revert しています。

[a705f6472c] "NARUSE, Yui" 2019-12-03 16:26:27 UTC

31110d820cc1258cbc84b46ecc65b254c7d5529a の警告メッセージの変更を revert。

[08074eb712] "NARUSE, Yui" 2019-12-03 16:26:28 UTC

452bee3ee8d68059fabd9b1c7a75661b14e3933e の String/Symbol の #match, #match? メソッドに nil が渡された時の例外を抑制して警告にした変更を revert しています。

[8852fa8760] "NARUSE, Yui" 2019-12-03 16:26:29 UTC

でこれが本命? 2a22a6b2d8465934e75520a7fdcf522d50890caf の Regexp#match? に nil を渡した時に例外発生にしたのを revert しています。 [ruby-core:78891] [Feature #13083]

[f9754f0ea0] Yusuke Endoh 2019-12-03 23:22:48 UTC

compile.c の iseq_set_sequence() で while で書かれたループを for 文で書きなおすリファクタリング

[a91637c516] Jeremy Evans 2019-10-02 22:20:10 UTC

Method/UnboundMethod の super_method メソッドが、Method#unbind や UnboundMethod#bind で変換したものや、clone で複製したインスタンスではちゃんと super で呼ばれるメソッドが返されなくなる不具合を修正しています。単にコピーし忘れてたようですね。これ call した時は大丈夫だったのかな。 [ruby-core:91649] [Bug #15629]

[447d583536] Jeremy Evans 2019-08-27 18:48:50 UTC

拡張ライブラリ ripper で parse した時に誤った未使用変数の警告が出ることがあった不具合を修正しています。 [ruby-core:89236] [Bug #15188]

[5a404efd29] Nobuyoshi Nakada 2019-12-04 01:06:54 UTC

拡張ライブラリ io/console の IO#getch の Windows 環境での :intr というオプションに false を指定した時の挙動を修正しています。

[f9e5c74cd2] Yusuke Endoh 2019-12-04 01:33:35 UTC

拡張ライブラリ coverage で行単位の coverage 計測するためのイベントが peephole optimization で jump 命令が消された時に消えてしまって coverage が取れなくなるという不具合の対応のため line coverage が有効な時にはこの最適化を抑制するようにしています。 TracePoint の line イベントの発火もなくなるそうですが、それは(coverage が有効になってなければ)この変更では直らないとのこと。 [ruby-core:93508] [Bug #15980] [ruby-core:96088] [Bug #16397]

[c6e3db0c66] Koichi Sasada 2019-12-04 04:36:41 UTC

caac5f777ae288b5982708b8690e712e1cae0cf6 の拡張ライブラリとしての monitor の導入で MonitorMixin の mon_initialize を呼ぶ前に new_cond を呼ぶとエラーになってしまっていたので、new_cond が呼ばれた時もまだだったら自動的に mon_initialize を呼んでインスタンス変数を初期化するようにしています。 [ruby-core:95349] [Feature #16255]

[00bbdf4451] 卜部昌平 2019-12-04 06:31:51 UTC

Range#count メソッドを定義して endless range に対して count メソッドを無引数で呼んだ時に無限ループに陥って停止するのではなく Float::INFINITY を返すようにしています。引数やブロックが渡された場合は従来通り無限ループします。 [ruby-core:95939] [Bug #16366]