ruby-trunk-changes 2023-11-12

今日は主に Hash のイテレーターのネスト数の管理まわりの実装の変更などがありました。

[9ab64b1d70] Nobuyoshi Nakada 2023-11-11 15:34:45 UTC

Hash のイテレーター系のブロックを受け付けるメソッド群ではそれがネストしている時にそのネストレベルを保持する機構がありますが、その値を取り出す関数群(実際にその iter lev を保持しているのは小さい数値のあいだは struct RBasic::flags のビット内に埋め込み、それを越えるとインスタンス変数を利用するのでそれぞれに対応した関数が用意されている)で取り扱う数値の型を int から unsigned long に変更しています。また一度インスタンス変数を使った iter lev の管理が行なわれるとそれ以降インスタンス変数を使い続けるようになっていたのを iter lev が減るとふたたび flags 埋め込みを利用するようにし不要なインスタンス変数の削除をするようにしています。

[60e19a0b5f] Nobuyoshi Nakada 2023-11-11 16:16:27 UTC

9ab64b1d70487055e8b7e02443546f524f1e7c9d の続きで hash_iterating_p() という Hash のオブジェクトがイテレータ系メソッドで処理中かどうかを判定するには具体的なネスト数を知る必要はないので真偽値だけ返す hash_iterating_p() という関数を導入してこれを使うようにしています。