ruby-trunk-changes 2019-11-06

今日は ripper の GC.compact 対応や numbered parameter のような識別子をブロックの外に書いた時の仕様変更などがありました。

[07f2062c8f] Mark Abraham 2019-11-05 13:31:52 UTC

configure.ac で文字列リテラルの連結にマクロ定数で定義されてる文字列と通常のリテラルを使ってるところで間にスペースを入れるようにしています。 C++11 では警告されるそうです。

[d47b643428] git 2019-11-05 15:39:55 UTC

version.h の日付更新

[7460c884fb] Aaron Patterson 2019-11-05 00:04:58 UTC

node.h の node_buffer_t の mark 用配列 mark_ary を mark_hash と改名して identity hash を使って GC.compact で移動されないように pin するようにしています。

[aa94245a09] Nobuyoshi Nakada 2019-11-05 23:54:32 UTC

MatchData.allocate メソッドを undef して呼べないようにしています。 MatchData を immutable にしたいのでその布石みたいです。 [ruby-core:95699] [Feature #16294]

[5251d18982] Kazuhiro NISHIYAMA 2019-11-06 00:45:27 UTC

Time#strftime の rdoc 用コメントには %Q という指示子にも対応していると書かれていますが、実際には対応していなかったので削除しています。 Date や DateTime の strftime は対応しているようですね。

[f72dc407f2] Nobuyoshi Nakada 2019-11-06 02:17:09 UTC

aa94245a09887f95bc0cd353b3462108d76d13ed のように allocate メソッドを各クラスで undef しても Class.instance_method で Class#alloc メソッドを UnboundMethod オブジェクトとして取り出してクラスに bind_call してしまうと呼べてしまうので、そのクラスで allocate メソッドが呼べない(respond_to? が偽を返す)とうだったら TypeError を発生させるようにしています。そこまでしますかー。 [ruby-dev:50856] [Bug #16297]

[82e840ad15] Nobuyoshi Nakada 2019-11-06 03:41:55 UTC

ブロック内じゃないところで numbered parameter っぽい識別子が書かれてたら SyntaxError にせずローカル変数かメソッド呼び出しとして解釈されるようにしています。テストは NameError 発生させてますが、これはローカル変数やメソッドがみつからなかったというもので、定義されてたら呼ばれるんですよね、たぶん… [ruby-core:95696] [Bug #16293]

[2fd465540f] Nobuyoshi Nakada 2019-11-06 03:45:11 UTC

同じく parse.y で numbered parameter の処理で ID_INTERNAL を使ってたのを ID_LOCAL を使うように修正しています。たぶん @1, @2 などの記法を使ってた時に使っていたのを _1, _2 に変えた時にローカル変数と同じに直すのを忘れていたのだと思います。どういう影響があったのかはよくわかりませんが……。 [ruby-core:95696] [Bug #16293]