ruby-trunk-changes r60776 - r60812

今日は TracePoint の event hook の管理方法の変更、coverage のためのトークンの位置情報の修正、VM 回りの関数の static 化などのリファクタリングなどがありました。

ko1: r60776 2017-11-15 22:21:24 +0900

rb_thread_t::event_hooks は削除して、rb_event_hook_t に filter::th を追加して対象 Thread をこちらに持つことで管理するように構造を変更しています。event_hook は全て rb_vm_t::event_hooks に持たせるようにしています。

kazu: r60777 2017-11-15 22:53:15 +0900

iseq.c の末尾の空行を削除しています。

hsbt: r60778 2017-11-16 02:07:54 +0900

bundled gem の rake のバージョンを 12.3.0 に更新しています。

svn: r60779 2017-11-16 02:07:55 +0900

version.h の日付更新。

yui-knk: r60780 2017-11-16 10:06:10 +0900

parse.y の struct parser_params に prevline メンバーを追加して、ひとつ前の行の情報を持っておくようにして、メソッド呼び出しの NODE の位置情報がずれるのを防ぐようにしているようです。よくわかってないですが、こうしないと次の行にまでみないとメソッド呼び出しが確定しない時にメソッド呼び出しの終端が次の行のトークンの位置まで伸びてしまうみたいです。

yui-knk: r60781 2017-11-16 10:56:54 +0900

演算つき代入演算子で NODE_LASGN などの NODE の位置情報の終端がずれていた不具合を修正しています。

ko1: r60782 2017-11-16 11:47:58 +0900

trace の event hook の削除時の処理を変更しています。hook 実行時に削除フラグの立った event hook の削除を行なっていたのを、hook 削除の実行時(ただし hook がいずれかの Thread で実行中でない時)と、hook 実行完了後に行うように分けています。また vm->trace_running の数のインクリメント/デクリメントを exec_hooks_precheck() と exec_hooks_postcheck() という関数で行うようにリファクタリングしています。

ko1: r60783 2017-11-16 11:53:17 +0900

r60782 の追加修正。 cont_restore_thread() で vm->trace_running のインクリメントを行なう時の条件に ec を退避していた sec の trace_arg のチェックをしていたのを削っています。コンパイルエラーになったそうです。

kazu: r60784 2017-11-16 12:32:23 +0900

Regexp#=== の rdoc 用コメントでサンプルに使われている正規表現リテラルの ^$ を \A, \z に置き換えています。 https://github.com/rurema/doctree/pull/812

yui-knk: r60785 2017-11-16 12:36:20 +0900

VM 命令へのコンパイル時に使う DECL_BRANCH_BASE() などのマクロでトークンの終了位置の情報も渡して coverage 用の情報に使うようにしています。

ko1: r60786 2017-11-16 13:37:02 +0900

r60782、r60783 の追加修正で cont_restore_thread() でやっぱり ec->trace_arg のチェックも行なうようにしています。うーん最初の if の条件部をひっくりかえすことで、条件が重複しているかどうかの判定が変わるってことですかね。

ko1: r60787 2017-11-16 14:14:18 +0900

vm_svar_get() と vm_svar_set() に第1引数に rb_execution_context_t を追加しています。中で GET_EC() しているのを、呼び元でするように変更しています。

ko1: r60788 2017-11-16 14:18:29 +0900

rb_sourcefilename() という関数は未使用になってたので削除しています。

ko1: r60789 2017-11-16 14:35:58 +0900

rb_source_location() という VALUE 型の関数で return 0 しているところがあったので return Qnil に変更して、呼び元でも NIL_P() でチェックするように修正しています。

nobu: r60790 2017-11-16 14:36:42 +0900

struct parser_params で in_class という bit field を追加して、class ... end の中での return を SyntaxError にするようにしています。トップレベルの return が許容された時に class の中でも呼べるようになってしまってました。

ko1: r60791 2017-11-16 14:45:44 +0900

r60789 の再修正。 NIL_P() のチェックが反転していたので ! を削っています。

ko1: r60792 2017-11-16 14:52:19 +0900

rb_source_loc() を rb_source_location_cstr() と改名しています。ついでに rb_source_location() を使ってたところも rb_source_location_cstr() を呼ぶように変更しています。

ko1: r60793 2017-11-16 14:56:21 +0900

r60792 の追加修正。 warning_string() で cstr (つまり const char *)に対して RSTRING_PTR() を呼んでいたので、そのまま参照するように修正しています。

ko1: r60794 2017-11-16 15:10:31 +0900

vm_check_match() および check_match() の第1引数に rb_execution_context_t を受け取るようにしています。 check_match() の中で GET_EC() していたのを呼び元(は VM の命令のところだったので ec は元から参照できてた)から渡すようにしています。

ko1: r60795 2017-11-16 16:14:45 +0900

未使用になってた rb_vm_env_write() という関数を削除しています。

ko1: r60796 2017-11-16 16:25:30 +0900

rb_vm_make_proc_lambda() lambda を 0 か 1 かで呼び分ける wrapper 関数 rb_vm_make_proc() と rb_vm_make_lambda() を vm_core.h に追加して、vm.c に定義していた rb_vm_make_proc() という関数は削除しています。

ko1: r60797 2017-11-16 16:28:16 +0900

rb_thread_mark() に static 修飾子を付けて名前も thread_mark() に改名しています。

ko1: r60798 2017-11-16 16:38:41 +0900

vm_eval.c の rb_vm_raise_method_missing() を static 関数にして、名前も vm_raise_method_missing() に変更しています。

ko1: r60799 2017-11-16 16:41:33 +0900

include/ruby/debug.h に rb_tracearg_callee_id() の prototype 宣言を追加して,シンボルを export するようにしています。

ko1: r60800 2017-11-16 16:43:27 +0900

vm.c の rb_proc_create_from_captured() も static 関数にして名前も vm_proc_create_from_captured() に変更しています。

ko1: r60801 2017-11-16 16:46:05 +0900

rb_method_entry_with_refinements() という関数を削除しています。

ko1: r60802 2017-11-16 16:47:33 +0900

vm_eval.c の rb_f_public_send() も static 関数にしています。

ko1: r60803 2017-11-16 16:49:43 +0900

vm_eval.c の rb_f_block_given_p() も static 関数にしています。

ko1: r60804 2017-11-16 16:56:56 +0900

rb_garbage_collect() が未使用になってたので削除しています。あーこれもう不要なのか。garbage_collect() の wrapper なのですが外部から呼べるようにしてるのかと思った。

ko1: r60805 2017-11-16 17:01:26 +0900

addr2line.c の main_exe_path() も static 関数にしています。

ko1: r60806 2017-11-16 17:19:46 +0900

node.c の rb_node_buffer_new() と rb_node_buffer_free() も static 関数に変更しています。

ko1: r60807 2017-11-16 17:48:59 +0900

rb_threadptr_trap_interrupt(), rb_threadptr_pending_interrupt_active_p() も static 修飾子を追加して、名前も threadptr_trap_interrupt(), threadptr_pending_interrupt_active_p() に改名しています。

ko1: r60808 2017-11-16 17:53:49 +0900

vm_method.c の rb_resolve_refined_method_callable() も static 関数にしています。これは rb_ を削らないのかな?

ko1: r60809 2017-11-16 18:00:15 +0900

vm_backtrace.c の rb_ec_backtrace_location_ary() を static 関数に変更して、名前も ec_backtrace_location_ary() に改名しています。

ko1: r60810 2017-11-16 18:24:48 +0900

eval.c の rb_iterator_p() という関数を削除しています。ただの rb_block_given_p() の wrapper で、多分互換性のために残してたのかな?

k0kubun: r60811 2017-11-16 19:02:03 +0900

thread_win32.c の native_mutex_lock(), native_mutex_unlock(), native_cond_wait() の戻り値が int になっていたので void に修正しています。 thread_pthread.c のほうの同名の関数は void でした。 JIT の導入時に利用するため、揃えたかったとのこと。 https://github.com/ruby/ruby/pull/1751

mame: r60812 2017-11-16 20:03:37 +0900

compile.c や node.c で一部の NODE で u1, u2, u3 の子ノードのメンバーに直接アクセスしていた部分があったのを、他の NODE の種類と同じくマクロを定義して nd_alias, nd_orig, nd_undef, nd_compile_option など意味のある別名を使ってアクセスするようにリファクタリングしています。