ruby-trunk-changes 2019-11-27

今日は ruby による組み込みメソッド実行から呼べる C の実装を直接埋め込むためのメソッド(のようにみえるもの)の種類を追加する変更や ripper のパターンマッチの対応の修正などがありあした。

[7db719c516] Nobuyoshi Nakada 2019-11-26 10:08:56 UTC

ruby 実装の組み込みメソッド実装の機構で .rb のファイルをコンパイルした .rbinc ファイルをカレントディレクトリに生成するようになってましたが、可能ならソースディレクトリに生成して、ソースディレクトリが書きこみできない場合にカレントディレクトリに生成するようにしています。

[265b5382b2] Nobuyoshi Nakada 2019-11-26 05:00:08 UTC

ext/ripper/tools/dsl.rb でサポートしている parse.y の記法で $10 以上の要素の指定も($20 まで)受け付けるようにしています。

[497f13aea6] Nobuyoshi Nakada 2019-11-26 06:33:40 UTC

parse.y のパターンマッチ用の keyword 引数みたいな表記の解析の ripper 向けの実装で p_kw が1つだけでも配列として表現するようになってたのを、p_kwarg のアクションで配列に詰めるようにリファクタリングしています。

[22dfd14c17] Nobuyoshi Nakada 2019-11-26 06:40:34 UTC

parse.y の struct parser_params::pvtbl の操作を push_pvtbl() と pop_pvtbl() という関数に切り出すリファクタリング。しかしこの関数部分だけみると push/pop のイメージが逆な気がしますね。

[9e01fcd0cb] Nobuyoshi Nakada 2019-11-26 13:54:35 UTC

parse.y の struct parser_params に pktbl というメンバーを追加して ripper においてパターンマッチの Hash Pattern のキーに重複がないかのチェックをするように修正しています。なるほどここで $10 以上を使う必要ができたんですね。

[a3e6f52c17] Koichi Sasada 2019-11-26 03:20:53 UTC

コミットメッセージが全てを物語ってくれているのですが、ruby よる組み込みメソッド実装のスクリプト内から呼べる __builtin_inline! というメソッドで C の文を直接書いて事前の関数定義によらず直接生成したコードを使う方法をもっと拡張して、__builtin_cstmt! (__builtin_inline! の改名)、__builtin_cexpr! (引数に文字列リテラルで C の式を書いて return を自動で補った C のソースを生成してくれる。つまり return かくのめんどいというものぐさ用)、__builtin_cconst! (たぶん主に定数マクロを取得するためのもの。コンパイル時に展開されるので渡した式でローカル変数は参照できない。ローカル変数を参照しない毎回同じ結果を返すような式ならマクロじゃなくてもこっちのほうがちょっとだけ効率的なのかも)、__builtin_cinit! (生成する C のコードの同じ位置(?)に埋め込む。 #include などを追加するためらしいけどマクロ定義の追加など他にも使えそう) などの新しいメソッド呼び出し(のようにみえるもの)を追加しています。すごいなぁ拡張ライブラリもこんなふうに書けるようになったらすごそうだ。

[177bc652a8] git 2019-11-26 18:57:46 UTC

version.h の日付更新