ruby-trunk-changes 2021-08-20

今日は T_DATA/T_TYPEDDATA のクラスで allocate メソッドが undef または再定義されていない時の警告を 3.2 以降で出力するようにする変更などがありました。将来有効になる変更とは……。

[e8e3b7a0e2] Mike Dalessio 2021-05-26 05:38:31 UTC

T_DATA, T_TYPEDDATA 型オブジェクトの生成時の rb_data_object_wrap()/rb_data_typed_object_wrap() 関数で Check_Type() でオブジェクトの型のチェックしていたかわりに rb_get_alloc_func() で allocate 関数を取得して rb_class_allocate_instance() だったら allocate メソッドを undef しておくようにしています。T_DATA/T_TYPEDDATA ではデフォルトの allocate の実装は利用不可ということで将来的には警告も出力するようにコメントアウトした状態で rb_warn() も追加しています。

[c0f4e4ca6d] Mike Dalessio 2021-05-28 06:50:37 UTC

拡張ライブラリ objspace と socket で e8e3b7a0e2fc2cc6384eb10332cc46e385373cbb で示されているように allocate メソッドが undef されたり再定義されたりしていなかったので rb_undef_alloc_func() を呼び出して undef しておくようにしています。

[70510d1545] git 2021-08-19 23:30:24 UTC

version.h の日付更新

[754adbee91] Shugo Maeda 2021-08-20 01:42:01 UTC

Module#ancestors が Refinements を定義している Module に対して呼ぶと refine で差し込む先の Class/Module の ancestors も含めてしまっていた不具合を修正しています。 [ruby-core:86949] [Bug #14744]

[b32987a3d7] Nobuyoshi Nakada 2021-08-20 05:03:08 UTC

class.c の rb_class_remove_from_super_subclasses()、rb_class_remove_from_module_subclasses()、do_include_modules_at() などの関数のリファクタリング。同じマクロを何度も利用していたのを変数に格納しておいて使いまわすようにしています。

[371bb4eadd] Nobuyoshi Nakada 2021-08-20 00:37:55 UTC

internal/error.h の RUBY_VERSION_SINCE() や RUBY_VERSION_BEFORE() などのマクロの引数を major と minor の数値を受け取るように変更しています。従来の定義は RUBY_VERSION_STRING_SINCE() と RUBY_VERSION_STRING_BEFORE() に改名しています。

[4c93c124c2] Nobuyoshi Nakada 2021-08-20 04:46:19 UTC

e8e3b7a0e2fc2cc6384eb10332cc46e385373cbb で rb_data_object_wrap() と rb_data_typed_object_wrap() で対象のクラスの allocate メソッドが再定義もしくは undef されていなかった時の警告出力をコメントアウト状態で入れてたのを 371bb4eaddf5d6d8aaab56173649da22378bbbae で変更した RUBY_VERSION_SINCE() と 追加した RBIMPL_TODO() マクロを使って 3.2.0 以降で自動的に警告を出すようにしています。

[cad83fa3c4] Yusuke Endoh 2021-08-20 07:18:36 UTC

parse.y の構造体 struct parser_params のメンバー save_script_lines を keep_script_lines に改名して関連する関数名、引数名なども追随して変更しています。

[5e9598baea] Yusuke Endoh 2021-08-20 07:23:43 UTC

標準添付ライブラリ error_highlight のテストで DidYouMean.formatter= に渡しているダミーの formatter がクラスのままだったのでインスタンスを作って渡すように修正しています。