ruby-trunk-changes 2020-12-31

今日は bigdecimalリファクタリングや組み込みメソッドの ruby 実装から使える __builtin.arg! の実装追加、これを使った Time.now と Time.at の ruby 実装への移植などがありました。

[0284e7ca62] Nobuyoshi Nakada 2020-12-30 11:56:10 UTC

include/ruby/backward.h で C API の deprecated の警告を出すためのマクロ DECLARE_DEPRECATED_FEATURE() を RBIMPL_ATTR_DEPRECATED_SINCE() と RBIMPL_ATTR_INTERNAL() というメッセージの異なる 2つのマクロに分けています。関数の宣言自体をマクロの引数内に受けるようにしてたのをマクロ部分は修飾子として使えるようにしています。この前もマクロの引数に宣言を入れちゃうと未使用の警告が出たみたいなことがあったのでそういうコンパイラの警告抑制のためかな。

[4569e46550] Kenta Murata 2020-12-30 16:43:08 UTC

ext/bigdecimal/bigdecimal.c の ToValue() マクロを削除して直接 VpCheckGetValue() を使うようにしています。

[a8014dae47] Kenta Murata 2020-12-30 17:01:35 UTC

拡張ライブラリ bigdecimal のオブジェクト生成の関数 VpCreateRbObject() の引数に raise_exception を追加して rb_convert_to_BigDecimal() などの変換関数でもこの関数を利用するようにまとめています。

[b2030d4dae] git 2020-12-30 17:19:55 UTC

version.h の日付更新

[20a8425aa0] Nobuyoshi Nakada 2020-12-30 23:39:20 UTC

hash.c の any_hash() で hash 値の計算結果の st_index_t の値を Fixnum として表現可能な範囲に切り詰めるようにしています。元々そういう処理をしているつもりの分岐がありましたが、RSHIFT() でビットシフトした結果が負の値の時に Fixnum にならない可能性があったようです。 [ruby-core:101794] [Bug #17488]

[4b4dc0fac7] Nobuyoshi Nakada 2020-12-31 03:23:29 UTC

0284e7ca62e55c160c84d3471e64765e612788ec で定義したマクロ RBIMPL_ATTR_INTERNAL() を RBIMPL_ATTR_DEPRECATED_SINCE() と組み合わせて RBIMPL_ATTR_DEPRECATED_INTERNAL() に変更して、deprecated になったバージョンも引数に受け取るようにしています。常にセットで呼ばれてたので分けてると attribute が重複して警告になる場合があったみたいです。

[62450e0acf] Nobuyoshi Nakada 2020-12-31 03:30:13 UTC

0284e7ca62e55c160c84d3471e64765e612788ec の変更時に include/ruby/backward.h の rb_mod_const_missing() の宣言から NORETURN() マクロが消されてしまってたので復活させています。

[0fbf4d0374] Nobuyoshi Nakada 2020-12-29 16:22:11 UTC

ruby 実装の組み込みメソッド実装の中で予約語と同名のキーワード引数を受け取るために __builtin.arg!(:name) のように書くとそのオブジェクトの参照として扱かわれるようにしています。

[d5fb51d2d3] Nobuyoshi Nakada 2020-12-29 16:45:59 UTC

time.rb を追加して Time の組み込みメソッドを ruby 実装に移植する下準備をしています。

[93735f8fc0] Nobuyoshi Nakada 2020-12-31 08:23:37 UTC

d5fb51d2d3a7ba0e16042282d0f94c5336ed2cc1 に続いて time.rb は timev.rb に移動しています。

[9101597d05] Nobuyoshi Nakada 2020-12-29 16:54:57 UTC

d5fb51d2d3a7ba0e16042282d0f94c5336ed2cc1 および 93735f8fc0597b9f52e631739f68965ff8a4a81c で準備した timev.rb に Time.now の実装を移動して C 関数を __builtin で呼び出すようにしています。この時にキーワード引数 in に対応する必要があったので 0fbf4d0374e2cef84761985b043c2255e03f2ff2 で __builtin.arg! を追加したんですね。

[77e7082e82] Nobuyoshi Nakada 2020-12-29 16:55:51 UTC

Time.at の実装も timev.rb に移動してキーワード引数の処理を ruby で行なうようにしています。

[18ea81fd2c] Nobuyoshi Nakada 2020-12-29 16:56:13 UTC

time.c で 77e7082e824af8523c1e7c3bfc111c2e52e7e3b3 の変更で不要になった get_tmopt() の定義を削除しています。