今日は String#=~ の最適化命令が String を継承したクラスでも効いてしまっていた不具合の修正や、メソッド呼び出しの arity チェックの不具合修正などがありました。
normal: r45318 2014-03-12 07:28:33 +0900
String#=~ メソッドの最適化命令 opt_regexpmatch2 でレシーバが String そのものでなくて String を継承したクラスの時も直接 rb_reg_match() を呼ぶパスに入ってしまっていたのでそのクラスで独自に定義した =~ メソッドがあっても呼ばれない不具合を修正しています。 [ruby-core:61151] [Bug #9581]
svn: r45319 2014-03-12 07:28:39 +0900
version.h の日付更新。
nobu: r45320 2014-03-12 11:18:50 +0900
vm_insnhelper.c の VM_CALLEE_SETUP_ARG() という関数マクロを vm_callee_setup_arg() という inline 関数として定義しなおすリファクタリングです。
nobu: r45321 2014-03-12 11:19:13 +0900
r45320 で inline 関数にした vm_callee_setup_arg() で rb_call_info_t::flags に VM_CALL_ARGS_SPLAT が立っている時に簡易版の呼び出し処理を行なわないようにして、配列の引数を *args のように渡した時に arity のチェックが働かなくなることがある不具合を修正しています。 [ruby-core:61422] [Bug #9622]
nobu: r45322 2014-03-12 17:16:47 +0900
複数のブロックパラメータを yield する Enumerable#each などから生成した Enumerator に lambda 型の Proc オブジェクトを渡したときに、arity のチェックで ArgumentError になるのを修正してテストを追加した r45284、r45286、r45292 を revert しています。 詳細はわかりませんが、既存の挙動との衝突がはげしいのでやっぱりあきらめるみたいです。うーむ。 [ruby-core:61340] [Bug #9605]