ruby-trunk-changes 2022-01-08

今日は ObjectSpace の slot を複数まとめて確保して T_CLASS など一部のオブジェクトで拡張情報を埋め込めるようにする Variable Width Allocation をデフォルトで有効にする変更や YJIT で C API の呼び出し時にローカル変数の型情報をクリアして ruby メソッド呼び出しにより変数が変化する可能性に対応する修正などがありました。

[3f9af8a9dc] Nobuyoshi Nakada 2022-01-07 14:55:59 UTC

chomp_rs() の doxygen 用コメントの typo 修正。

[be68b3a490] Peter Zhu 2022-01-07 14:47:09 UTC

rb_enc_cr_str_buf_cat() の Encoding と coderange 設定後に rb_str_change_terminator_length() を呼び出して終端文字サイズを調整するようにしています。 44368b5f8bc21e19fa06a0fc0625923fc41293e6 の修正のやりなおしみたいですね。 Encoding を先にセットするのではなくて終端文字サイズを後から変更するのが正しかったらしい。

[a1bef7c2ef] git 2022-01-07 15:50:17 UTC

version.h の日付更新

[c365c5921e] Peter Zhu 2022-01-07 16:52:47 UTC

be68b3a49030f592a10eacc180d21c38c5d5d5db で rb_enc_cr_str_buf_cat() が正しく修正できたので d4a95428bb244ca8c4a97ad50f3837f191f1f0c3 の Variable Width Allocation をデフォルトで有効にするため USE_RVARGC マクロのデフォルト値を 1 にする変更を再度適用しています。

[d9ef711f29] Peter Zhu 2022-01-07 19:15:42 UTC

rb_raw_obj_info() で T_STRING 型オブジェクトのダンプ時に文字列サイズやバッファが embed されているかなどの情報も表示するようにしています。

[bc643bbe2e] Peter Zhu 2022-01-07 20:11:25 UTC

Variable Width Allocation が有効な時の struct RString の as.embed.len メンバーの型を unsigned short に変更しています。

[54c91042ed] Alan Wu 2022-01-07 02:57:43 UTC

YJIT で生成したコードから C API 関数を呼び出す時の pc やスタックポインタを退避する jit_prepare_routine_call() で ctx_clear_local_types() という関数を呼び出してローカル変数の型情報をクリアしておくようにしています。 C API から ruby のメソッドが呼ばれる可能性があるため、変数の内容が変更される可能性があるためとのこと。

[32a0d9dd4b] Nobuyoshi Nakada 2022-01-08 03:49:39 UTC

Enumerable#tally の実装で引数が指定されていた時に rb_convert_type() を使って Hash に変換していたのを rb_to_hash_type() という関数を利用するようにリファクタリングしています。

[64eccbf578] Nobuyoshi Nakada 2022-01-08 04:53:10 UTC

test/ruby/test_string.rb のテストでは String についてのテストと同じテストメソッドを String を継承した子クラスのインスタンスを使ったテストにも使いまわすため文字列を S() というメソッドで変換してから使うようにしてますが、これを使ってないテストメソッドもあったので徹底するように修正しています。

[fb532d801c] Nobuyoshi Nakada 2022-01-08 05:25:36 UTC

64eccbf578b82b30299418444a1b77027c2abdd9 の続き test/ruby/test_string.rb の test_gsub_enumerator というテストメソッドに文字列リテラルをそのまま使っているところが残っていたのでこれも S() を通すようにしています。またこのテストは String#gsub が返した Enumerator を一度だけ next を呼んでエラーにならないことだけチェックしてたので、複数回 next を呼んでその戻り値もチェックするようにテストを強化しています。

[47a05f7c09] Nobuyoshi Nakada 2022-01-07 15:36:36 UTC

test/ruby/test_string.rb でメモリリークのテストなどメモリ使用量や処理量の負荷が高いものは子クラスでは実施しないように早期 return を追加しています。

[0ca00e2cb7] Samuel Williams 2022-01-08 11:03:16 UTC

io.c の rb_io_t の書き込みバッファや mutex を確保する処理を io_allocate_write_buffer() という関数に切り出すリファクタリングとコーディングスタイルの修正。

[09cfc653b7] Peter Zhu 2022-01-08 03:34:54 UTC

標準添付ライブラリ reline の Reline::Terminfo.setupterm で C の関数に渡すためのバッファを String オブジェクトとして確保していたのを Fiddle::Pointer.malloc を利用するように修正しています。 Solaris でメモリアドレスのアライメントの問題でエラーになってたのを修正するためだそうです。