ruby-trunk-changes 2021-01-14

今日は Time.new のキーワード引数 in の追加や正規表現の名前つきグループで予約語と同じ名前の変数への capture の対応や shareable_literal_constant での NODE の操作に起因する不具合修正などがありました。

[4b15caee8f] Nobuyoshi Nakada 2020-12-28 12:13:41 UTC

Time.new のキーワード引数 in で offset の指定を受け付けるようにしています。これで秒までの指定なしでも offset を指定できるようになりました。なんか in キーワード引数は既に追加されてたような気がしてたんだけどまだだったんですね。 [ruby-core:101780] [Feature #17485]

[e9b93d67ba] Nobuyoshi Nakada 2021-01-13 09:25:07 UTC

4b15caee8fe7a5aaa52ed5a3ab2a3517c9206fd7 の続きで Time.new の通常引数の offset とキーワード引数の in が両方指定されると ArgumentError を発生させるようにしています。 [ruby-core:101780] [Feature #17485]

[0036648a42] Nobuyoshi Nakada 2021-01-13 12:15:13 UTC

正規表現内の名前つきグループによる変数への値の capture で予約語と同じ名前が使われた時に値が格納されてなかったのを修正しています。普通の方法では予約語と同じ名前の変数は参照できませんが、Binding#local_variable_get であれば取得できるのですが、キーワード引数名として既に予約語がローカル変数として使われてた時にそれを上書きできていなかったようです。 [ruby-core:102060] [Bug #17533]

[521ad9a13a] Nobuyoshi Nakada 2021-01-04 01:36:38 UTC

Fiber.current、Fiber#transfer、Fiber#alive? メソッドの実装を拡張ライブラリ fiber から ruby 本体の組み込みに移動しています。これにより拡張ライブラリ fiber はなくなりました。 [ruby-core:101529] [Feature #17407]

[7f3c5e65c6] Nobuyoshi Nakada 2021-01-13 15:17:23 UTC

標準添付ライブラリ mkmf.rb の生成する Makefile の distclean ターゲットに exts.mk の削除を追加しています。

[70cd351c7c] git 2021-01-13 15:18:48 UTC

version.h の日付更新

[589a8026f0] Aaron Patterson 2021-01-13 21:46:03 UTC

gc.c の ractor_cache_slots() と gc_sweep_start_heap() で Address Sanitizer 対応のため asan_unpoison_object()/asan_poison_object() を追加しています。

[c8b47eb7c9] Aaron Patterson 2021-01-12 22:47:42 UTC

AST から VM 命令列 ISeq へのコンパイル時に catch table の先に nop 命令を追加する処理が不要な場合があったそうなので break/next/redo のための場合は省略するようにします。

[f4ce78d5c1] Koichi Sasada 2021-01-13 08:33:53 UTC

967040ba59799e6b7891168ffbf37cc646988d84 で Class/Module ごとのメソッドの negative cache というのを追加していましたが、その negative cache をクリアするタイミングの漏れがあったようで修正しています。

[efcdf68e64] Aaron Patterson 2021-01-13 21:35:11 UTC

compile.c の new_insn_send() で send 命令のための INSN 構造体を生成する時に new_callinfo() で生成した struct rb_callinfo が GC から保護されていなくて関数内で GC が発生すると誤って解放されるおそれがあったので RB_GC_GUARD() を追加して保護しています。

[e129be7592] Kenta Murata 2021-01-14 00:23:03 UTC

拡張ライブラリ bigdecimalgcc で NO_SANITIZE というマクロを再定義して __no_sanitize__ という attribute を利用する時に出る警告を局所的に抑制するため _Pragma を利用するようにしています。

[b4ade73974] Kenta Murata 2021-01-14 00:23:26 UTC

拡張ライブラリ bigdecimal の rb_uint64_convert_to_BigDecimal() で log10() に渡す引数を明示的に double にキャストするようにしています。

[4d13f3e9da] Kenta Murata 2021-01-14 00:26:15 UTC

拡張ライブラリ bigdecimla の rb_float_convert_to_BigDecimal() で BigDecimal_dtoa() の引数の digs を明示的に int にキャストするようにしています。

[e1fee7f949] Takashi Kokubun 2021-01-14 06:36:45 UTC

定数 RubyVM::MJIT を RubyVM::JIT に改名しています。実装としての MJIT のことは JIT って呼ぶようにしたほうがいいのかな(さすがにそれは一般的すぎるか)。 [ruby-core:101809] [Feature #17490]

[c060bdc2b4] Nobuyoshi Nakada 2021-01-14 06:42:45 UTC

よく知らなかったのですが NODE には nd_type によってオブジェクトとして mark できるものとできないものがあって、nd_type をこの mark できるかどうかの区別が変わるように変更するのは禁止するようにしています。デバッグ用?

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

parse.y の %i や %I でシンボルの配列を記述するリテラルで使う symbol_append() で配下の NODE が NODE_STR か NODE_DSTR 以外の時に compile_error() で例外発生させるようにしています。

[6bcc4664bd] Nobuyoshi Nakada 2021-01-14 07:15:25 UTC

parse.y の shareable_literal_constant() で NODE の nd_type を NODE_LIT に変更して子 node を差し替えてたのを、新規に NODE_LIT の NODE を作るようにしています。c060bdc2b4ab8eeef5374f4174f5de48ab936d74 でチェックしてた途中で NODE の nd_type を変更したことで mark 可能かどうかが変化してしまうパターンというのがここであったのではなかろうかと思います。