ruby-trunk-changes r61984 - r62001

今日も主に parse.y のリファクタリングというか実装方針の変更がありました。

mame: r61984 2018-01-21 01:21:20 +0900

parse.y の const_path_field() や top_const_field() といったマクロで本体と ripper の差異を吸収していたのをやめて const_decl() の引数を本体と ripper で変えて明示的に DSL で別の処理を書くようにしています。

svn: r61985 2018-01-21 01:21:21 +0900

version.h の日付更新。

mame: r61986 2018-01-21 01:21:23 +0900

parse.y の new_brace_body() や new_do_body() といったマクロで本体と ripper の差異を吸収していたのをやめて DSL で ripper 向けには直接別の処理を書くようにしています。

mame: r61987 2018-01-21 01:21:25 +0900

parse.y の new_string1() というマクロや new_xstring() という関数で本体と ripper の差異を吸収していたのをやめて、DSL で直接別の処理を書くようにしています。

mame: r61988 2018-01-21 01:21:26 +0900

parse.y の ripper 向けのマクロ new_op_assign() や new_const_op_assign()、関数 new_ary_op_assign() と new_attr_op_assign() を削除して直接 DSL で ripper 向けの処理を書くようにしています。

mame: r61989 2018-01-21 01:21:28 +0900

parse.y の未使用になったマクロ定義を削除しています。

mame: r61990 2018-01-21 01:21:29 +0900

r61977 で parse.y の引数の最後の余分なカンマの処理で #if RIPPER で分岐していたのを DSL を使うようにしています。

mame: r61991 2018-01-21 02:45:24 +0900

ripper 向けの DSL で関数の引数の評価の順序が確実に前から評価されるように、変数に結果を受けてから渡すような式に展開するようにしています。

mame: r61992 2018-01-21 02:45:25 +0900

parse.y の new_qcall() や new_command_qcall() などの関数や arg_add_optblock(), method_optarg() などのマクロを削除して直接 DSL に処理を展開するようにしています。このため必要な処理を DSL の実装側に吸収しています。なんか魔境 parse.y の闇部分が DSL の実装に移っていっているような気も。

mame: r61993 2018-01-21 02:52:50 +0900

parse.y の未使用になったマクロ定義 nd_set_line() を削除しています。

mame: r61994 2018-01-21 02:52:51 +0900

ripper 用 DSL の実装で String#delete_suffix を使っていましたが、これは 2.5 からの新メソッドなので古い ruby を使ってビルドできるように String#sub を使うようにおきかえています。

normal: r61995 2018-01-21 07:07:36 +0900

load.c の load_lock() から警告メッセージを出すのに rb_mWarning を参照して rb_warning_warn() を呼んでたのを、公開 API の rb_warning() を呼ぶようにしています。 rb_mWarning の extern の必要をなくしてるみたいです。ちょっと遅くなるけど cold path だからまあいいだろ、って感じみたいですね。

kazu: r61996 2018-01-21 11:24:26 +0900

r61982 で抜けてた .m4 ファイルの m4_include() を aclocal.m4 に追加しています。

nobu: r61997 2018-01-21 16:44:23 +0900

parse.y に parser_token_value_print() という token を文字列化して表示する関数を追加してこれを利用して YYPRINT() というマクロを定義することで Bison のエラーメッセージをカスタマイズするようにしているのだと思います。 https://www.gnu.org/software/bison/manual/html_node/The-YYPRINT-Macro.html

nobu: r61998 2018-01-21 16:44:24 +0900

parse.y の parse_numeric() でトークンの種類を格納する変数の型を int から enum yytokentype に変更しています。

nobu: r61999 2018-01-21 16:44:24 +0900

parse.y の SET_LEX_STATE() でデバッグメッセージで lex_state の変更前後を出力する rb_parser_trace_lex_state() で表示する lex_state も p->lex.state に変更されてましたが、ここはただのメッセージなので lex_state に戻しています。

nobu: r62000 2018-01-21 16:44:25 +0900

parse.y の parser_yylex() で "{" を読み込んだ時の lex_state の操作で EXPR_LABEL フラグを追加するかどうかの判定を変更して、トークンが tLBRACE の時のみセットするようにしています。

nobu: r62001 2018-01-21 18:59:45 +0900

struct kwtable のメンバー name の型を int から short に変更してサイズを削減しています。 16 bit で足りるから、とのこと。