ruby-trunk-changes r61956 - r61983

今日は parser.y の DSL の拡張や変更、parse.y のリファクタリングのほか configure.ac を複数のファイルに分割するという変更などがありました。

kazu: r61956 2018-01-19 21:15:56 +0900

r61812 で標準添付ライブラリ net/protocol で write の複数引数渡すのを利用するようにした時に引数のかっこがなくて警告が出ていたので、かっこをつけるようにしています。

mame: r61957 2018-01-19 22:11:11 +0900

r61952 で導入した parse.y の ripper 向けの DSL で C の関数を "_" を prefix に付けた名前で呼ぶようにしていたのを、 ! を suffix につけて呼ぶように変更しています。

nobu: r61958 2018-01-19 22:25:49 +0900

r61957 の続き。 parse.y の ripper 向け DSL で _ を頭につけてたところを ! を後ろにつけるように変更(の漏れが一部あったので追随)。

mame: r61959 2018-01-19 22:36:03 +0900

r61957 および r61958 の続き。まだ _foo -> foo! に変更漏れしていたところがあったので追加修正しています。

nobu: r61960 2018-01-19 22:41:44 +0900

parse.y の command ノードのアクションで $$ への代入が足りてなかったのを修正しています。コミットログみると実際は代入しなくても動きはしたっぽいですけど、明示的に代入するほうが良いということみたいです。

nobu: r61961 2018-01-19 23:50:55 +0900

IO.copy_stream のテストで子プロセスで socket から非常に長い文字列を一気読み出して OOM Killer で殺されることがあったみたいで、読み込むサイズを指定して少しずつ読み込むようにしています。

mame: r61962 2018-01-20 00:22:36 +0900

parse.y の ripper 向け DSL で foo() が ripper のイベントフック、foo!() が C の関数 foo() の呼び出しになっていましたが、この割り当てを反対にしています。コミットログをみるに、あやまって ! をつけ忘れたときに、イベントだとエラーにならない? けど C の関数であれば関数がみつからずにビルドエラーになって気がつけるから、ということみたいです。

svn: r61963 2018-01-20 00:22:37 +0900

version.h の日付更新。

mame: r61964 2018-01-20 00:43:42 +0900

parse.y の /*%%%*/ の記法の解釈をやめています。また ripper の DSL のオプションに final というのを追加して、代入先を $$ から p->result に変更するようにして parse.y のアクションに直接書かなくてすむようにしています。

mame: r61965 2018-01-20 01:24:07 +0900

parse.y で本体と ripper で分岐を避けるため導入されてたマクロ backref_assign_error() を削除して、アクション内で ripper 向けと別に書くようにしています。

mame: r61966 2018-01-20 01:28:23 +0900

r61965 と同じく本体と ripper の処理の分岐を減らすため定義されてた node_assign() というマクロを削除して、アクション内で明示的に DSL を利用して別の処理を書くようにしています。

mame: r61967 2018-01-20 02:06:56 +0900

r61899 で parse.y で必須キーワードの処理で REQUIRED_KEYWORD というマクロを導入して不正なキャストを避けるようにしていましたが、ここでは ripper 用の処理は DSL を使って明示的に処理を別に書くようにして、assignable() という関数の引数を本体と ripper 用で分けるようにしています。

mame: r61968 2018-01-20 02:29:27 +0900

parse.y の assignable() の定義を #ifndef RIPPER などの分岐でがんばって混ぜて書いてたのを、関数定義全体を分けるようにしています。

naruse: r61969 2018-01-20 03:55:32 +0900

r61950 で FreeBSDDarwin (macOS) で mode_t の型が変わったので rubyspec のテストを追随させています。

nobu: r61970 2018-01-20 10:24:15 +0900

parse.y の yycompile0() で p->error_p のチェックしているところで yyparse() がエラーを返していた場合もエラー扱いにするように修正しています。

shyouhei: r61971 2018-01-20 12:16:59 +0900

r61938 の追加修正で、nan(3) が使えない時の代替実装を missing/nan.c に追加して、NAN と nan() で分岐していたところを nan() の呼び出しにまとめています。

shyouhei: r61972 2018-01-20 13:18:09 +0900

missing/nan.c のインデント修正のみ。

nobu: r61973 2018-01-20 14:39:00 +0900

ripper 向け DSL で生成するコードのインデントをつける処理を共通の位置にして常にインデントするようにしています。

nobu: r61974 2018-01-20 14:39:01 +0900

ripper 向け DSL で C の定数の参照するためにクオートして式を書いていたところを、Qnil と Qundef を Ruby の定数として参照しても同名の文字列になるように const_missing を定義して回避しています。うーむ、これまたトリッキーだなぁ。

nobu: r61975 2018-01-20 14:39:02 +0900

r61974 と似たような話で idXXX の変数の参照のために ripper 向けの DSL で文字列リテラルで C の式を書いてたのを idXXX も method_missing でそのまま文字列として参照できるようにして直接書けるように対応してしまっています。

nobu: r61976 2018-01-20 14:39:03 +0900

parse.y の struct parser_params の変数 p も ripper 向けの DSL でクオートせずに直接書けるように変換ツールに p という変数を追加してから評価するようにしています。

nobu: r61977 2018-01-20 14:47:59 +0900

引数などの最後に余計なカンマがあった時のアクションで ripper の時に excessed_comma イベントに new_args() の結果を渡していたのを、逆に new_args() の引数に excessed_comma イベントの結果を渡すようにしています。 excessed_comma イベントに渡される範囲を修正しているってことかと思います。

nobu: r61978 2018-01-20 14:58:06 +0900

parse.y の "." や "&."、"::" のトークンを ID の値をそのまま使うようにして、不要なアクションを削っています。

mame: r61979 2018-01-20 15:11:21 +0900

parse.y の ripper 向け DSL の var_field_1 というオプションを削除して、DSL のアクション部分(?)で明示的に var_field() 関数を呼ぶように書いています。

nobu: r61980 2018-01-20 15:49:30 +0900

win32/Makefile.sub の MISSING という missing/ の代替実装群のオブジェクトファイルを書く変数に nan.obj を追加しています。

shyouhei: r61981 2018-01-20 16:05:25 +0900

configure.ac から主に AC_DEFUN() で独自マクロを定義している部分を tool/m4/*.m4 に分離して m4_include() を使って取り込むように分割しています。 https://github.com/ruby/ruby/pull/1793

shyouhei: r61982 2018-01-20 16:05:26 +0900

r61981 の続き。 acinclude.m4 ファイルは完全に削除して aclocal.m4 に展開し、configure.ac で tool/m4/*.m4 を m4_include() で取り込んでいたのも AC_CONFIG_MACRO_DIRS() を使って一度に取り込むようにしています。 https://github.com/ruby/ruby/pull/1793

shyouhei: r61983 2018-01-20 16:14:59 +0900

tool/m4/*.m4 ファイル群に Emacs 向けのマジックコメントを追加しています。