ruby-trunk-changes r46469 - r46480

今日も主に TracePoint の不具合修正やテストの修正がありました。

ko1: r46469 2014-06-20 05:27:59 +0900

r46465 と同様に rb_iterate() と rb_catch_protect() でも大域脱出時に cfp を巻き戻すのを単に書き戻していたのを rb_vm_rewind_cfp() を使って TracePoint の return イベントが発生するようにしています。 [ruby-dev:48299] [Bug #9961]

svn: r46470 2014-06-20 05:28:03 +0900

version.h の日付更新。

ko1: r46471 2014-06-20 07:09:23 +0900

InstructionSequence にコンパイルする時にブロックの label を trace 命令の前に作っていたのを後に置くように変更しています。 制御文 redo でブロックの先頭に戻るときに trace 命令の前に戻ってしまうため何度も TracePoint の call イベントが発火してしまうという不具合の修正のためだそうです。 [ruby-dev:48305] [Bug #9964]

ko1: r46472 2014-06-20 07:27:53 +0900

test/ruby/test_settracefunc.rb のテストが r46471 で導入された assert_consistent_calll_return メソッドを利用してリファクタリングされています。

nobu: r46473 2014-06-20 11:47:14 +0900

test/ruby/test_optimization.rb で最適化命令のあるメソッド(Fixnum#+ とか)はメソッドの再定義がされた時には最適化が解除されるので、その時の動作をテストするメソッド群を assert_separately を使って子プロセスで実行するようにすることで全体で最適化命令が無効になってしまうのを避けるようにしています。

akr: r46474 2014-06-20 12:12:44 +0900

bootstraptest/runner.rb で verbose モードの時はテスト毎の結果の行を上書きするのをやめてそのまま残すようにしています。

nobu: r46475 2014-06-20 13:20:26 +0900

defs/gmake.mk で make love ターゲットのための依存関係を追加しているそうです。 make の関数(?)がよくわからないですね…

nobu: r46476 2014-06-20 15:47:10 +0900

test/ruby/test_regexp.rb のユーティリティメソッド check、failcheck を assert_check、assert_failcheck と assert_ ではじまるように改名しています。

nobu: r46477 2014-06-20 15:47:37 +0900

test/ruby/test_regexp.rb の test_once という長いテストメソッドをシチュエーション毎に分割しています。

nobu: r46478 2014-06-20 15:59:28 +0900

vm_once_exec() の引数の型を rb_iseq_t * から VALUE に変更しています。 type-punned pointer cast を防ぐためということで、明示的に ISEQ -> VALUE -> rb_iseq_t * へのキャストを行うようにしています。けど ISEQ って rb_iseq_t* に typedef されているので、なんで問題だったのかよくわからないですね。

ko1: r46479 2014-06-20 17:22:09 +0900

test/lib/tracepointchecker.rb を追加して TracePoint の hook の漏れのチェックを行う処理を TracePointChecker::ZombieTraceHunter というモジュールに切り出しています。 また call 系と return 系のイベントの対応がとれているかのチェックするためのメソッドも追加しています。デフォルトで有効にはなってないみたいですが、多分ローカルで有効にしてこれで TracePoint のデバッグに使うのでしょう。

svn: r46480 2014-06-20 17:22:17 +0900

r46479 で新規追加されたファイルの svn property 設定。