ruby-trunk-changes r60643 - r60661

今日は AST の NODE 関連の構造体の変更や win32ole の不具合修正などがありました。

mame: r60643 2017-11-04 20:37:19 +0900

T_NODE 型オブジェクト削除に伴い RNODE() というキャスト用のマクロを利用しているところを削除しています。

nobu: r60644 2017-11-04 21:01:42 +0900

rb_strterm_heredoc_t の sourceline というメンバーも int に変更したうえで LP64 の環境向けに union を使って alignment を調整するようにしています。 また parser_set_line() という関数は削除しています。

nobu: r60645 2017-11-04 21:07:20 +0900

parse.y の rb_discard_node_gen という inline 関数の定義を ripper 向けの時には定義しないようにして警告除去しています。

mame: r60646 2017-11-04 22:05:05 +0900

IO#write で余計な一時オブジェクトができないことを確認しているテストでエラー時のメッセージに前後のオブジェクト数も含めるようにしています。

mame: r60647 2017-11-04 22:31:46 +0900

parse.y の new_args_tail_gen() の返す値を T_IMEMO 型オブジェクトではなく NODE 構造体を返すようにしています。うーんここでは NODE* を VALUE にキャストしているのか。NODE と rb_ast_t の関係とか使われかたとかどこかで整理しておかないと理解が追い付いてなさそう。

mame: r60648 2017-11-04 22:31:47 +0900

rb_free_tmp_buffer() で VALUE を struct RNode として利用していたところを rb_imemo_alloc_t* としてアクセスするように修正しています。r60239 の変更に追随が漏れてたところがあったようです。

yui-knk: r60649 2017-11-04 22:59:34 +0900

compile.c の setup_args() で args_splat 命令を追加する時の行番号の nd_line() に誤って args を渡しているところがあったので argn に修正しています。

mame: r60650 2017-11-04 23:24:16 +0900

parse.y で代入系の NODE とメソッドの引数の NODE の要素で splat についての情報と必須キーワード引数についての情報を表すために (NODE*)-1 とキャストした -1 を両方で使ってましたが、マクロ NODE_SPECIAL_REQUIRED_KEYWORD と NODE_SPECIAL_NO_NAME_REST というのを定義してこれを使うようにリファクタリングしています。

nobu: r60651 2017-11-04 23:32:48 +0900

r60640 で T_NODE 型オブジェクトを GC 関係の関数でみつけた時に rb_bug() で異常終了させるコードを UNEXPECTED_NODE() というマクロに切り出しています。

mame: r60652 2017-11-05 00:22:18 +0900

ソースコードの位置情報を VALUE 型にビット演算で詰めてたのを rb_code_location_t という構造体を導入して明示的にメンバーで保持するようにしています。struct RNode が struct RVALUE に含まれなくなったのでサイズをそろえる必要がなくなったので struct RNode の内容を変更しやすくなったということだと思います。

svn: r60653 2017-11-05 00:22:19 +0900

version.h の日付更新。

nobu: r60654 2017-11-05 00:39:52 +0900

parse.y で ripper 向けの時に rb_strterm_mark() という関数の定義をしないように preprocessor の #ifndef で括っています。未使用だから、かと思ったけど拡張ライブラリを static link した時に symbol が重複しないように、とのこと。

mame: r60655 2017-11-05 01:34:00 +0900

bison の定義する位置情報を管理する YYLTYPE という型のかわりに rb_code_range_t という構造体を独自に定義してこちらを利用するようにしています。r60652 で定義した rb_code_location_t を2つ持って開始位置と終了位置を示せるようにしています。この rb_code_range_t を struct RNode に持たせるつもりっぽい(けどまだそうはしていない)。

eregon: r60656 2017-11-05 02:48:51 +0900

spec/ruby/library/net/http/http/fixtures/http_server.rb でテスト用に HTTP サーバーを起動する時のアドレスを localhost から 127.0.0.1 に変更しています。

suke: r60657 2017-11-05 09:30:57 +0900

拡張ライブラリ win32ole で WIN32OLEQueryInterfaceError という例外クラスを追加して、OLE_GET_TYPEATTR() のエラー時には WIN32OLERuntimeError のかわりにこちらを発生させるようにしています。

suke: r60658 2017-11-05 09:36:37 +0900

拡張ライブラリ win32ole のテストで冗長なチェックをしている assertion があったので削除しています。

suke: r60659 2017-11-05 10:02:04 +0900

r60630 で拡張ライブラリ win32ole の WIN32OLE#methods で WIN32OLE#ole_methods の結果も混ぜるようにしたやつの続きで ole_methods が WIN32OLEQueryInterfaceError を発生させた場合に rescue して空配列にするようにしています。

mame: r60660 2017-11-05 12:52:22 +0900

r60655 の rb_code_range_t の導入と YYLTYPE の置き換えは revert しています。プロセス終了時に稀に問題が起きることがあったそうです。

nobu: r60661 2017-11-05 14:11:04 +0900

tool/runruby.rb の引数の --debuggger というオプションに run.gdb を受け付けることができるようにしているそうです。 precommand に Symbol で :gdb とか :debugger というのを入れておくのを目印にして特別な処理をするようにしているみたいですね。