ruby-trunk-changes r61030 - r61056

今日は coverage の取得方法の変更とそれに伴ない trace2 命令の tracebranch への改名の他 NODE の位置情報の修正などがありました。

nobu: r61030 2017-12-05 22:30:06 +0900

parse.y で二項演算子の NODE を生成する call_bin_op_gen() で nd_set_line() を呼び出して、flags に埋め込んでいる行番号に NODE の範囲情報の先頭をセットするようにしています。

nobu: r61031 2017-12-05 22:38:01 +0900

r61030 と同様に =~ 演算子の NODE にも nd_set_line() を呼び出すようにしています。

nobu: r61032 2017-12-05 22:42:46 +0900

論理演算子の NODE にも演算子の部分の行番号で nd_set_line() を呼ぶようにしています。

nobu: r61033 2017-12-05 22:46:21 +0900

単項演算子の NODE でも演算子部分の行番号で set_nd_line() を呼び出すようにしています。

nobu: r61034 2017-12-05 22:49:40 +0900

NODE::nd_loc を設定すると同時に set_nd_line() を呼ぶ nd_set_loc() という関数を導入して、全体的にこれを呼んで位置情報をセットするようにしています。

yui-knk: r61035 2017-12-06 08:34:14 +0900

test/ruby/test_syntax.rb に not() という式を parse するテストを追加しています。

svn: r61036 2017-12-06 08:34:15 +0900

version.h の日付更新。

yui-knk: r61037 2017-12-06 09:44:18 +0900

式展開つきのヒアドキュメントで NODE_DSTR の位置情報の開始位置がずれていたので、ヒアドキュメントのトークンの前の << の位置になるように修正しているようです。

mame: r61038 2017-12-06 10:41:05 +0900

parse.y で struct rb_strterm_heredoc_struct を typedef で rb_strterm_heredoc_t と名付けていたのをやめています。もっと上のほうで typedef はされているのですが、再度 typedef するのが許されているのは C11 からの機能なんだそうです。

yui-knk: r61039 2017-12-06 12:09:55 +0900

r61037 の再修正。ヒアドキュメントの NODE_DSTR の開始位置のカラムは << の前の空白まで含めるようにしてる? もしかしてカラムって 0-origin だったんですかね? それだとこれまでの NODE の位置情報のコメントが微妙に間違ってることになりそうだけど…。そうだとすると << の2文字目が開始位置になってたのを << の最初の文字を開始位置にするように修正したことになります。

ko1: r61040 2017-12-06 12:16:08 +0900

EC_ の prefix のない PUSH_TAG(), EXEC_TAG(), POP_TAG(), JUMP_TAG() などのマクロを削除して、常に ec を明示的に指定するようにしています。おお、ついに。

mame: r61041 2017-12-06 12:19:17 +0900

eval_intern.h の VAR_FROM_MEMORY(), VAR_INITIALIZED(), VAR_NOCLOBBERED() などの変数を gcc の未初期化の参照の警告を抑制するために、volatile をつけて宣言するようにするマクロを clang の時にも利用するようにしています。 clang 4.0.0 と 4.0.1 で SEGV していたのがこれで回避できるそうです。

nobu: r61042 2017-12-06 14:22:19 +0900

template/prelude.c.tmpl で prelude.rb を C のソースコードに埋め込む時に prelude_eval() に行番号を渡す時に INT2FIX() してしまっていたところを修正しています。

mame: r61043 2017-12-06 15:39:05 +0900

拡張ライブラリ coverage の line coverage の取得のために trace2 命令を埋め込んでいたのをやめて TracePoint の RUBY_EVENT_LINE のフックを利用して取得するようにしています。

ko1: r61044 2017-12-06 15:53:15 +0900

TracePoint の event の種類の定数で RUBY_EVENT_SPECIFIED_LINE の参照を消しています。もうサポートされていないそうです。 r38728 でこの定数に変更があったけどその前からあったので、かなり昔に実験で作ったものの名残みたいです。

ko1: r61045 2017-12-06 15:54:40 +0900

r61044 で RUBY_EVENT_SPECIFIED_LINE の参照の消し漏れと RUBY_EVENT_LINE の case 節が重複していたのを消しています。

mame: r61046 2017-12-06 16:04:48 +0900

thread.c の update_coverage() は今では branch coverage のための操作だけ行うようになったので update_branch_coverage() に改名して、int の中の bit を分割して利用していたのももう不要になったので普通に int を index として利用するようにしています。

mame: r61047 2017-12-06 16:04:49 +0900

coverage 用の VM 命令を trace2 から tracebranch に改名しています。 r61023 や r61043 の変更で trace2 命令も branch coverage 用にだけ利用されるようになったので、tracebranch という名称にできるようになったということみたいです。

mame: r61048 2017-12-06 16:19:16 +0900

r61044 と r61045 の続き。 RUBY_EVENT_SPECIFIED_LINE の定数マクロの定義自体を削除しています。また参照箇所もまだ1つ残っていたのでそこも削除しています。

mame: r61049 2017-12-06 16:19:17 +0900

coverage 用の TracePoint のイベント定数 RUBY_EVENT_COVERAGE を RUBY_EVENT_COVERAGE_BRANCH に改名しています。これも branch coverage 専用になったため。

mame: r61050 2017-12-06 16:26:54 +0900

rb_iseq_compile_node() で node の種類で分岐している if 文で imemo_type_p() でのチェックを nd_type() を使ったチェックの前に移動しています。 node が T_IMEMO の場合に nd_type() を呼ぶのはたまたまうまく動いているけど、意味的にはまずそうなので。

hsbt: r61051 2017-12-06 17:32:01 +0900

拡張ライブラリ dbm のバージョンを 1.0.0 に更新しています。また required_ruby_version を 2.3.0 以上に変更しています。

hsbt: r61052 2017-12-06 17:34:34 +0900

拡張ライブラリ gdbm のバージョンを 2.0.0 に更新しています。required_ruby_version も同じく 2.3.0 以上に変更しています。

hsbt: r61053 2017-12-06 17:35:13 +0900

拡張ライブラリ fiddle もバージョンを 1.0.0 に更新しています。これも required_ruby_version を同じく 2.3.0 以上に変更しています。

nobu: r61054 2017-12-06 20:18:52 +0900

tool/vcs.rb で git や svn などのコマンドがみつからなくて Errno::ENOENT が発生した時に、かわりに例外 VCS::NotFoundError を発生させるメソッドを定義して、これを利用するようにしています。

nobu: r61055 2017-12-06 20:18:53 +0900

tool/file2lastrev.rb で r61054 の変更に対応して VCS::NotFoundError でエラーになった場合は終了ステータスをエラーにしないようにして、r60987 の make revision.h のコマンド先頭の - 削除(r60994 で revert された)を再度入れています。

nobu: r61056 2017-12-06 20:36:42 +0900

r61054 で tool/vcs.rb に追加した cmd_read_at の第2引数はコマンドと mode の配列を期待していたところに、コマンドを表現する配列をそのまま渡していたので、もうひとつ配列に包んで渡すようにしています。ううーんむずい。