ruby-trunk-changes r62829 - r62838

今日は rescue/ensure/else/elsif などのトークンでもインデントの一致をチェックして警告を出すようにする変更や、引数名に "_" を複数使った時の不具合修正などがありました。

nobu: r62829 2018-03-19 09:32:51 +0900

RubyVM::InstructionSequence#disasm で rb_iseq_body_t::params の内容をダンプする時にキーワード引数を ** で受け取る kwrest の内容を表示するようにしています。

svn: r62830 2018-03-19 09:32:52 +0900

version.h の日付更新。

nobu: r62831 2018-03-19 09:32:52 +0900

同じく RubyVM::InstructionSequence#disasm でローカル変数の表示にローカル変数テーブル内の index も一緒に表示するようにしています。

nobu: r62832 2018-03-19 12:16:40 +0900

parse.y で **h のようにキーワード引数を Hash として受け取る kwrest 引数の変数テーブル内の順序を調整していたのをやめています。コミットログによると kwrest 引数は常に通常のキーワード引数とブロック引数の間にあるので不要になった、みたいに書いてありますが、kwrest を最後に置ける文法だったタイミングがあったっけ……。

nobu さんからコメント頂きました。

nobu: r62833 2018-03-19 13:08:19 +0900

rest 引数(*args のように配列で可変数個の引数を受け取る記法)の名前に "_" を使った時(そして複数 "_" を使った時?)に引数の変数テーブル内の参照がおかしくなる場合がある不具合があったので、ローカル変数テーブル内の引数の順序を仮引数の出現順序で決めるようにしています。 [ruby-core:86159] [Bug #14611]

nobu: r62836 2018-03-19 17:21:26 +0900

parse.y で rescue, ensure, when, else, elsif などのトークンの処理を end の時と同じようにインデントが一致していないと警告を出すようにしています。 token_info_pop() からインデントチェック部分を token_info_warn() に切り出してそれぞれのトークンのアクション部から呼ぶようにしています。

nobu: r62838 2018-03-19 17:37:12 +0900

r62836 で切り出した rescue と ensure のトークンのアクション部で token_info_warn() でインデントチェックするのは begin ... end の時だけで、do...end のブロック内に出てきた時(2.5 から書けるようになった)にはチェックしないようにしています。この場合予約語 do の位置を合わせるようになってしまうためみたいです。"begin" というトークンかどうかでチェックしているので、メソッド内に直接書いた時もチェックからは除外っぽいですね。