ruby-trunk-changes 2021-01-27

今日は C API の taint フラグ関係のものを deprecated にする変更や irbirb_source/irb_load コマンドの不具合修正などがありました。

[b091889ed6] Nobuyoshi Nakada 2021-01-26 01:31:53 UTC

Bison 3.7.5 でソースツリーからビルドしようとすると警告が出てエラーになるということで parse.y の rb_yytnamerr() 内の YYUSE() マクロの呼び出しを削除しています。 [ruby-core:102244] [Bug #17582]

[ed6dc066b6] Nobuyoshi Nakada 2021-01-26 13:01:07 UTC

MJIT 用の precompiled header を作るために tool//transform_mjit_header.rb を実行する時の引数に渡すコンパイラオプションから $(ARCH_FLAG) を削除しています。 CFLAGS に既に含まれているので重複して渡す必要がなかったそうです。

[479e4d13cb] Matt Valentine-House 2021-01-14 21:33:02 UTC

RGENGC_CHECK_MODE マクロを 4以上に設定した時のチェックのために ObjectSpace の全 slot を舐める処理が Ractor safe でなかったので Ractor 毎の struct gc_mark_func_data_struct を利用するように修正しています。

[a554e96a15] git 2021-01-26 16:18:18 UTC

version.h の日付更新

[8a3f816675] Matt Valentine-House 2021-01-14 21:56:44 UTC

888cf28a7e3a07fc0a41688777a40910654005ad で RGENGC_DEBUG_ENABLED() というマクロを開発版でも常に 0 にするようにしてたのを RGENGC_DEBUG の値に応じて有効にするようにしています。うーむ? なんかこれはこれでいいのかな。ちょっと意図がよくわかりません。

[d7a844cb08] Burdette Lamar 2021-01-26 17:22:13 UTC

String クラスの rdoc 用コメントの見出しの文言修正。 https://github.com/ruby/ruby/pull/4123

[646131448e] Alan Wu 2020-12-11 02:24:19 UTC

rb_define_module_id_under() で既に同名の定数が設定されていた時に取得した module を rb_gc_register_mark_object() で GC mark 用に登録するようにしています。定数に設定されてるのに mark が必要なのか? と思ったけどどうも単に mark するためではなくて compaction で移動されないように pin down するためみたいです。

[216e6605a4] Alan Wu 2020-11-25 21:35:40 UTC

class.c の rb_define_class_under()、rb_define_class_id_under()、rb_define_module() などの Doxygen 用コメントにこれらの関数群から返される Class/Module は compaction で移動できないオブジェクトになるということを追記しています。

[7ccdad7be8] 卜部昌平 2021-01-20 02:01:35 UTC

include/ruby/internal/fl_type.h で struct RBasic::flags のフラグ定数 RB_OBJ_UNTRUST と RB_OBJ_UNTRUSTED の定義を RB_OBJ_TAINT と RB_OBJ_TAINTED にそれぞれ置き換えるようなマクロ定義に変更しています。 9e6e39c3512f7a962c44dc3729c98a0f8be90341 のヘッダ大分割の時に誤って置換してしまってたみたいです。

[0300dec32b] 卜部昌平 2021-01-20 01:26:49 UTC

Object#taint は既に廃止されているので、内部実装の struct RBasic::flags の RUBY_FL_TAINT フラグの定数を削除して、C API も何も処理しないように変更しています。

[c7d1387721] 卜部昌平 2021-01-20 02:13:06 UTC

さらに C API から taint する関数が利用された時にコンパイル時の警告が出力されるように RBIMPL_ATTR_DEPRECATED() を関数定義に使っています。

[3f4f10bb60] 卜部昌平 2021-01-20 02:33:32 UTC

c7d138772167a9a489ebe062ee3027e838489e8d の RBIMPL_ATTR_DEPRECATED() で enum の定数にも警告を出すようにしてたのは GCC 6 以降でないと使えないみたいなのでチェックしてから使うようにしています。

[a2c069fca9] 卜部昌平 2021-01-20 02:59:05 UTC

win32/file.c に tainted フラグを使うコードが残ってたので削除しています。

[73e948afd5] 卜部昌平 2021-01-20 03:00:46 UTC

win32/win32.c にも OBJ_TAINT() の呼び出しが残っていたので削除しています。

[f8a117f858] 卜部昌平 2021-01-26 00:48:49 UTC

同じく RUBY_FL_DUPPED という定数も deprecated の警告が出るようにして rb_clone_setup() と rb_dup_setup() を何もしないようにしています。ただ proc.c にはなにかしらの事情で CLONESETUP() が必要だったみたいなので proc.c 内に独自に定義するようにしています。 https://github.com/ruby/ruby/pull/4100#discussion_r563481718

[d205370b96] 卜部昌平 2021-01-26 06:38:15 UTC

include/ruby/internal/fl_type.h の RBIMPL_ATTR_DEPRECATED() を使うかどうかの判定をまとめて結果を RBIMPL_HAVE_ENUM_ATTRIBUTE というマクロにしておくことでシンプルにするリファクタリング

[a67afaaa05] 卜部昌平 2021-01-26 06:43:45 UTC

f8a117f858cdb748c400396aa5a4d46e4832f4e2RUBY_FL_DUPPED を deprecated にした時のメッセージが間違ってたのを修正。

[b409a34b41] Nobuyoshi Nakada 2021-01-27 05:45:31 UTC

struct RBasic::flags の定数 RB_FL_TAINT が廃止になったので rubyspec の C API テスト用拡張ライブラリで 3.1 以降は使わないようにしています。

[0d5a4d6d49] Nobuyoshi Nakada 2021-01-27 05:50:27 UTC

configure でコンパイラオプション -fno-fast-math を試すところで CFLAGS に直接追加するようにしてたのは結果が残らないみたいなので、かわりに optflags を参照するようにしています。

[c736714de1] Nobuyoshi Nakada 2021-01-27 05:58:34 UTC

configure の MJIT_CFLAGS に -std=gnu99 を追加するかどうかの判定しているところで常に mjit_std_cflag 変数を設定する(追加しない時は空にしておく)ようにしています。

[5b05b85d85] Nobuhiro IMAI 2021-01-22 17:12:39 UTC

標準添付ライブラリ irbIRB::FileInputMethod.open というメソッドを追加してブロック渡しで呼ぶことで閉じ漏れがないようにしています。

[e80e5a2f89] Nobuhiro IMAI 2021-01-22 17:45:00 UTC

irbirb_source コマンドや irb_load (こんなのあったのか……)を実行するとファイルの内容を読み込み実行した後で irb が終了してしまうらしく、終了しないように修正しています。 [ruby-core:102177] [Bug #17564]

[69b42ae02d] Nobuhiro IMAI 2021-01-22 19:45:55 UTC

e80e5a2f897088bc5284ea61817a910d1d334652 で追加した irb のテストで IRB.conf[:VERBOSE] = false に設定しておくことで余分な出力を抑制するようにしています。

[80fb4758a9] aycabta 2021-01-27 09:33:36 UTC

e80e5a2f897088bc5284ea61817a910d1d334652 で追加した irb のテストでさらに IRB::WorkSpace.new の引数にテストクラスのインスタンスを渡すようにしています。テストクラスのインスタンスでいいのかな。他のところは Object.new を渡したりしてるけど。