ruby-trunk-changes 2019-09-30

今日は method entry など method 関連の構造体を極力途中で書き変えないようにする変更やキーワード引数の扱いの対応のための C API 追加などがありました。

[31bb66a19d] Benoit Daloze 2019-09-29 14:03:47 UTC

spec/mspec を upstream から更新しています。

[1c938a72aa] Benoit Daloze 2019-09-29 14:03:58 UTC

spec/ruby も upstream からマージしています。

[f9a9f3c7c6] Benoit Daloze 2019-09-29 16:01:30 UTC

spec/mspec を再度更新。この2回に分かれるのなんでなんだろうなー。

[a17bc04d15] Benoit Daloze 2019-09-29 16:01:32 UTC

spec/ruby も再度 upstream からマージしています。

[f39314a98a] git 2019-09-29 16:02:54 UTC

version.h の日付更新

[59648af296] Nobuyoshi Nakada 2019-09-29 16:08:32 UTC

Numeric#step がブロックなしで呼ばれた時の Enumerator の size メソッドでキーワード引数の警告抑制のため Enumerator 作成時に引数をそのまま委譲せずに一旦解釈したものを通常引数経由で渡すようにしています。

[2d41c712a7] Benoit Daloze 2019-09-29 16:34:12 UTC

rubyspec の rubygems のテストで ruby 本体のテストで make install していない場合には通せないテストを回避するようにしています。

[869e4f6e4c] Jeremy Evans 2019-09-29 16:15:43 UTC

rubyspec の rb_scan_args() のテストでキーワード引数の 'k' 対応で警告抑制するようにしています。

[54d49aeb52] Benoit Daloze 2019-09-29 17:56:15 UTC

spec/ruby を再度 upstream からマージ。

[2740b86905] Benoit Daloze 2019-09-29 21:42:51 UTC

gems/bundled_gems の test-unit のバージョンを 3.3.4 に更新。

[59060aadea] Benoit Daloze 2019-09-29 21:43:15 UTC

d090e449ef4e92b2020e51fe495cd039e4f6fdda の GitHub Actions の macOSUbuntu 環境の設定で make test-bundled-gems で test-unit のテストのエラー無視する設定を revert しています。

[58dfea0c8d] Jeremy Evans 2019-09-29 20:15:04 UTC

d53cf854741bbf496298c5a722988d2dd84314a1 で Struct.new の keyword_init キーワード引数での警告抑制のため rb_funcall_passing_block() でメソッド呼び出しで module_eval を呼び出すようにしてましたが、これを revert して rb_mod_module_eval() を直接呼び出すように戻し、module_eval や instance_eval, instance_exec などのブロックを特定のコンテキスト化で実行するメソッドの実装関数で keyword splat の伝播を明示的に指定するようにしています。

[6fdd701472] Jeremy Evans 2019-09-29 23:41:00 UTC

メソッド呼び出しやブロック呼び出しの関数群の kw_splat 引数に渡して keyword splat を渡さないことを明示するためのフラグの定数 VM_NO_KEYWORDS を削除して RB_NO_KEYWORDS を同じ用途に使いまわすようにしています。

[86427a3219] 卜部昌平 2019-09-26 01:26:40 UTC

ここから dd883de5ba311c38818d0f638a94b4fbc63f5ee5 までは fba8627dc1c5b191713edeb5fc21cbe0ddde9e3c の invokeblock VM 命令での分岐を消すため構造体 struct rb_call_cache の def メンバーを消すためにこれを使っている箇所をなくすための変更が続きます。
method.h の METHOD_ENTRY_COMPLEMENTED() というマクロを削除して呼び元の rb_free_method_entry() で直接 rb_method_definition_t::complemented_count で判定するようにしています。

[f56506be0d] 卜部昌平 2019-09-25 04:11:28 UTC

id_table.h の enum rb_id_table_iterator_result の最後の要素 ID_TABLE_ITERATOR_RESULT_END を削除しています。未使用なので。たぶん以前 trailing comma が使えなかった時に毎回要素を追加するたびに2行変更になるのを防ぐために番兵的に置いてたやつだろうな。

[3632a812c0] 卜部昌平 2019-09-25 04:00:56 UTC

id_table.c の rb_id_table_foreach() や rb_id_table_foreach_with_replace() から共通部分を rb_id_table_foreach_with_replace_with_key() という関数に切り出すリファクタリング

[cf33608203] 卜部昌平 2019-09-20 05:12:51 UTC

構造体 rb_method_iseq_t や rb_method_cfunc_t、rb_method_attr_t、rb_method_alias_t、rb_method_refined_t、rb_method_bmethod_t、rb_method_definition_t などのメソッド関連のメンバに const を付けています。

[c11c5e69ac] 卜部昌平 2019-09-20 08:01:53 UTC

rb_method_definition_set() の定義を分割するリファクタリング

[1521f7cf89] 卜部昌平 2019-09-20 08:16:44 UTC

vm.c の vm_cref_dump() という関数は未使用になってたので削除。

[595b3c4fdd] 卜部昌平 2019-09-23 08:42:27 UTC

c11c5e69ac66ae10255a20a6b84e481f0423703d のリファクタリングで分割した rb_method_definition_new() をrb_method_definition_create() から利用して rb_method_definition_t の内容を適切に初期化するところまでまとめてやるようにしています。

[3207979278] 卜部昌平 2019-09-24 06:41:52 UTC

595b3c4fddc5cde58add2fa2637acb2664694194 の続きで rb_method_definition_set() で rb_method_definition_t の内容を memcpy(3) で書き換えるのはやめて生成時に適切にセットしておくようにしています。

[7cb96d41a5] 卜部昌平 2019-09-25 04:51:06 UTC

Refinements のために Class の method table の内容を移動するのに rb_method_entry_copy() で rb_method_definition_t の内容をコピーしてたのを、新たな構造体を作って入れかえるように変更しています。 rb_method_definition_t の内容の書き換えをなくすため。

[167e6b48f1] 卜部昌平 2019-09-25 06:52:02 UTC

rb_method_entry_alloc() の引数に flags を追加して rb_method_entry_t::flags も初期化してから返すようにしています。ついでに(?)構造体 rb_method_entry_t も一旦確保してから内容を書き換えないようにしようとしているようです。もっとも rb_method_entry_alloc() 内でも一旦確保してから METHOD_ENTRY_FLAGS_COPY() でコピーしてますが、これも後で消されます。

[6c6a25feca] 卜部昌平 2019-09-25 08:00:25 UTC

167e6b48f1b321d671998728adf5a0db06d24445 と同様に METHOD_ENTRY_FLAGS_COPY() を使ってる場所を減らして rb_method_entry_t を確保する rb_method_entry_create() は引数に元となる rb_method_entry_t を受け取る rb_method_entry_from_template() という関数に変更しています。

[dd883de5ba] 卜部昌平 2019-09-26 01:22:01 UTC

構造体 rb_callable_method_entry_t と rb_method_entry_t の全メンバーに const 修飾子をつけるようにしています。 一箇所だけになった METHOD_ENTRY_FLAGS_COPY() の呼び元に内容を展開して METHOD_ENTRY_FLAGS_COPY() の定義は削除。

[fba8627dc1] 卜部昌平 2019-09-26 04:44:51 UTC

86427a321997b733bf8ebb6036157c341a52edfc からの一連の変更で不要になった rb_call_cache_t::def メンバーを削除して calccall() の中の分岐を1つ削除しています。

[649a64ae29] Jeremy Evans 2019-09-30 00:47:17 UTC

メソッド呼び出しやブロック起動に keyword splat の情報を渡せる C API シリーズに rb_funcallv_public_kw()、rb_funcall_passing_block_kw()、rb_yield_splat_kw() などの API を追加しています。

[8ba48c1b85] Koichi Sasada 2019-09-30 05:27:02 UTC

c11c5e69ac66ae10255a20a6b84e481f0423703d で切り出した the_location() という関数(見過してたけどすごい名前の関数だ)で rb_method_attr_t::location に空を表すつもりで Qnil を返してたのを Qfalse に修正しています。ここは 0 (Qfalse) で判定していた模様。

[bf8d7d9c1d] Koichi Sasada 2019-09-30 06:35:22 UTC

tool/lib/iseq_loader_checker.rb というツール…なんだっけこれ? 名前からして ISeq のバイナリフォーマットもしくは Array からのロードがうまくいってるかのチェックを行うツールみたいですが、どっちのフォーマットを使うかの指定を行う環境変数 RUBY_ISEQ_DUMP_DEBUG の内容を標準出力に表示するようにしています。

[88f38c187e] Koichi Sasada 2019-09-30 06:36:19 UTC

8ba48c1b8509bc52c2fc1f020990c8a3a8eca2c9 の修正に対応するテストの追加?

[c3b84f2de8] Koichi Sasada 2019-09-30 08:23:36 UTC

tool/lib/leakchecker.rb に require してみるというチェックが追加されてるんですが、うーんこれはなんだろう…。 require が上書きされて戻されてないのを検出するため? CI のエラー調査のためみたいです。

[1722c156dd] Nobuyoshi Nakada 2019-09-30 08:35:29 UTC

88f38c187e3171f8f351f3198247d20ea9f016ee で追加したテストメソッドで不要そうな変数があったのでコメントアウトしています。参照位置も true or ... の右辺にしてるので評価はされないけど消してはないですね。

[771fd915a4] Nobuyoshi Nakada 2019-09-30 08:39:38 UTC

同じく 88f38c187e3171f8f351f3198247d20ea9f016ee で追加されたテストメソッドでただの assert が使われてたのを assert_operator を使うように修正しています。

[10d6a3aca7] Nobuyoshi Nakada 2019-09-30 08:43:11 UTC

3207979278bea11c50cb84f4044047b9c503230b の変更で VM_ASSERT() でチェックしている rb_method_entry_t の条件は callable_method_entry_p() だと型がおかしいみたいなので、 rb_method_entry_t::defined_class を callable_class_p() でチェックするように修正しています。

[945560008f] Koichi Sasada 2019-09-30 08:59:10 UTC

c3b84f2de83a27acc638f99743bfa2c44bac621c のデバッグ用に tool/lib/leakchecker.rb に追加したチェックを revert しています。

[fc66947c61] Yusuke Endoh 2019-09-30 11:22:29 UTC

共有文字列のテストで String#-@ の結果を使ってないのが警告になってたので未使用のローカル変数("_" ではじまる変数名を使うことで警告を抑制してる)に代入しておくようにしています。

[5ddc2ba13e] Yusuke Endoh 2019-09-30 11:24:26 UTC

Kernel#open が引数に対して to_open メソッドを内部的に呼ぶ時のキーワード引き数の委譲についてのテストで、特異メソッドの to_open を再定義する前に remove_method で定義を削除して再定義の警告を抑制しています。