ruby-trunk-changes 2023-05-14

今日は parse.y の処理結果を拡張ライブラリ ripper 向けに変更する処理を Lrama の機能で吸収するようにする変更などがありました。

多値代入の左辺にメソッド呼び出しの形式を書くことで x.a= のような代入記号つきメソッドを呼ぶという記法があり(x.a, x.y = 0, 1 のように書ける)、parse.y でこのメソッド呼び出しの mlhs_node のルールで &. によるメソッド呼び出しも同じアクションにまとめられていますが、これは多値代入の左辺値では禁止とのことでチェックしていたのを anddot_multiple_assignment_check() という関数に切り出すリファクタリング

[edca57e6e3] Yuta Saito 2023-05-14 03:59:39 UTC

WASI 実装のための setjmp の代替実装でデバッグログ出力をするための RB_WASM_DEBUG_LOG() というマクロで fprintf(3) を利用していたのを __wasi_fd_write() という API を利用するように書き換えています。 asyncify というツール? を利用した時に問題があったようです。

[3150516aab] Nobuyoshi Nakada 2023-05-14 00:13:29 UTC

拡張ライブラリ ripper のビルド時に一時ファイル ripper.tmp.y を生成していたのをパイプを使って生成した .y ファイルの内容をやりとりするようにしています。

[bdaa491565] Nobuyoshi Nakada 2023-05-14 00:28:53 UTC

parse.y の YY_LOCATION_PRINT() マクロに引数を追加して Lrama で追加の引数を処理できるようにしています。また拡張ライブラリ ripper のビルド時に tool/ytab.sed を使って処理結果の yydebug 関係のコードを置換していたのをやめて tool/ytab.sed は不要になったので削除しています。