ruby-trunk-changes 2019-09-21

今日は昨日の private メソッドを self を明示的に receiver にして呼べるようにした変更のフォローアップと、keyword splat の変換処理関係の追加修正やリファクタリングなどがありました。

[6e0dd3e7c1] Takashi Kokubun 2019-09-20 12:06:07 UTC

vm_insnhelper.c の vm_push_frame() で cfp を1つたどるのに RUBY_VM_NEXT_CONTROL_FRAME() マクロを使うようにリファクタリングしています。また for 文のカウンタ変数を for 文のところで直接宣言するようにしています。

[9e171b1fa0] Takashi Kokubun 2019-09-20 12:50:00 UTC

mjit_add_iseq_to_process() において iseq->body->jit_unit->compile_info をセットするのを jit_unit の NULL チェックの前にしていたので後に移動しています。

[e81a3e6df5] Nobuyoshi Nakada 2019-09-20 13:03:37 UTC

private メソッドを self.foo のような記法で呼べるようにするために receiver のチェックをする private_recv_p() というマクロを inline 関数に変更して NODE_SELF の NODE でも nd_state が 0 の場合は拒否するようにチェックを追加しています。 (self).foo のようにかっこでくくった場合は呼べないようにするために struct NODE::nd_state を使うようにしています。

[27b6746872] Jeremy Evans 2019-09-18 19:08:14 UTC

Hash#dig や Array#dig メソッドは再帰的に要素のオブジェクトへ dig メソッドを呼ぶので、この時 keyword splat によるキーワード引数をその先の dig メソッド呼び出しにそのまま渡せるように check_funcall_missing() に kw_splat 引数を追加したり rb_check_funcall_with_hook() に kw_splat 引数を追加した rb_check_funcall_with_hook_kw() という関数を定義したりしています。

[c9f2b790ad] Jeremy Evans 2019-09-18 19:59:01 UTC

Enumerator#size でも keyword splat を扱えるように rb_check_funcall() から kw_splat 引数を追加した rb_check_funcall_kw() を定義してこれを使うように修正しています。うへー、こんなふうに C からメソッド呼び出ししている各所を対応していかないといけないのかな。

[e47b111627] Jeremy Evans 2019-09-18 22:30:59 UTC

vm_call_super() や rb_call0()、rb_check_funcall_default_kw()、rb_check_funcall_with_hook_kw()、call_method_entry() といった関数から rb_vm_call0() を呼んでいたのを、その前後の keyword splat の通常引数への変換やそのためのメモリ管理などの処理をまとめた rb_vm_call_kw() という便利関数があったのでそれを呼ぶようにリファクタリングしていす。

[fe1e623fae] Nobuyoshi Nakada 2019-09-20 14:25:18 UTC

INSN_ENTRY_SIG() マクロの通常は実行されないデバッグメッセージ出力のフォーマット指示子の修正。

[daa4ad8ed7] Nobuyoshi Nakada 2019-09-20 15:48:24 UTC

GCC 拡張を利用したメソッド定義系関数での関数ポインタの引数の数のチェックを有効にする関数群の宣言を Windows 環境では抑制するように preprocessor の条件を追加しています。

[990e714fd3] git 2019-09-20 15:48:46 UTC

version.h の日付更新

[7aeacb213b] Nobuyoshi Nakada 2019-09-20 16:57:15 UTC

e81a3e6df54842b5a836dad7055a4295cf4155bc の (self).foo を許可しないようにするための変更でうっかり関係ない変更も混ざってしまって GCC 9.2 で警告が出てたそうなので部分的に revert しています。

[27144de2bd] Jeremy Evans 2019-09-20 19:18:07 UTC

ENV.each および ENV.each_pair の rdoc 用コメントに戻り値が ENV そのものであることを示すように call-seq を修正しています。またそれを確認するテストを rubyspec に追加しています。 [ruby-core:94908] [Bug #16164]

[e006b992c2] Fangrui Song 2019-09-19 07:04:29 UTC

rb_setjmp() の実装としてコンパイラのビルトイン __builtin_setjmp() を利用する場合に rb_jmpbuf_t の定義をポインタ 5 つぶんの配列として定義するようにしています。 RUBY_JMP_BUF が適切に定義されないのでその救済策?

[b414999370] Takashi Kokubun 2019-09-21 07:09:45 UTC

benchmark/mjit_exec.yml という MJIT 有効化時のメソッド呼び出しのベンチマークを追加しています。

[5cb283217b] Yusuke Endoh 2019-09-21 10:23:47 UTC

e6378cdcd8246697be652b74442f9c07503e0ba6 で private なメソッドを self.foo= のように呼べるようにした変更時に [Bug #11096] のテストを変更した時に assert のエラーメッセージにチケットの参照を削ってしまっていたので復活させています。