ruby-trunk-changes r54530 - r54545

今日は末尾呼び出し最適化の不具合修正の他、主にテストの警告除去などがありました。

nobu: r54530 2016-04-11 06:54:41 +0900

file.c の apply2files() という関数で処理対象の引数を Ruby の Array オブジェクトで渡すのをやめて argc/argv で渡すように変更し、呼び元での引数処理も追随して変更して中間オブジェクトの生成を抑制するようにしています。

svn: r54531 2016-04-11 06:54:43 +0900

version.h の日付更新。

nobu: r54532 2016-04-11 06:59:01 +0900

r54530 の続き。 apply2files() は long で argc をそのまま返していたのを Fixnum にして返すようにしています。呼び元で常に LONG2FIX() していたので関数内に取り込んだのですね。

nobu: r54533 2016-04-11 06:59:02 +0900

file.c のいくつかのクラスメソッドを実装する関数群でシンプルな引数のチェックに rb_check_arity() を使うようにして軽量化しています。

nobu: r54534 2016-04-11 13:28:16 +0900

拡張ライブラリ fiddle の Fiddle::Import でインスタンス変数 @type_alias の参照が未初期化のインスタンス変数参照で $VERBOSE がセットされていると警告が出るので、attr_reader を定義してメソッド経由で参照するように変更しています。

nobu: r54535 2016-04-11 14:13:31 +0900

拡張ライブラリ coverage のテストでトップレベルのメソッドを定義していたので、メソッド再定義の警告が出るのを抑制するためテスト用のモジュールの特異メソッドとして定義するようにしています。

nobu: r54536 2016-04-11 17:06:19 +0900

ループの制御文 break/next/redo などのテストで到達しないはずの部分が意図的に到達しないようにしているのに警告が出てしまうので、制御文を if true による分岐の中に入れて警告を抑制しています。そのうち if true が命令列の最適化で消されてまた警告が出るようになったりして。

nobu: r54537 2016-04-11 17:06:21 +0900

正規表現の名前つきキャプチャで未参照のローカル変数の警告が出るところで名前を "_" で始めて警告が出ないようにしています。

nobu: r54538 2016-04-11 17:06:22 +0900

test/ruby/test_rubyoptions.rb で未使用のローカル変数を削除して警告除去。

nobu: r54539 2016-04-11 17:06:23 +0900

知らなかったのですが if の条件部などに数値リテラルが書いてあると $. という特殊変数(最後に IO で読んだ行番号)との比較になるという古い機能があったそうで、テストでこれを使っていたところが残ってたので明示的に比較するように修正しています。

nobu: r54540 2016-04-11 17:27:17 +0900

テスト用のライブラリで --excludes オプションの処理用のモジュールで instance_eval を呼ぶ時に第2引数のファイルパスも渡すようにして警告の位置が正しく出るようにしています。

nobu: r54541 2016-04-11 17:27:19 +0900

test/excludes/TestException.rb でかっこなしのメソッド呼び出しの第1引数に // を使った正規表現リテラルを書いていたので "ambiguous first argument" 警告になっていたので %r によるリテラル表記を使うようにしています。また正規表現に含まれていたので冗長だった指定を削っています。

nobu: r54542 2016-04-11 17:43:06 +0900

Ruby VM による末尾呼び出し最適化を有効にした時に return 文の引数のメソッド内で発生した例外が正しく rescue できないことがある不具合を修正しています。 [ruby-core:73871] [Bug #12082]

ko1: r54543 2016-04-11 20:19:52 +0900

vm_backtrace.c の frame2klass() で引数の imemo_type が imemo_ment でない時は VM_ASSERT() で [BUG] を発生させていたのを、単に Qnil を返すようにチェックを緩めています。 imemo_iseq 型の T_IMEMO オブジェクトが渡される可能性があったとのこと。

akr: r54544 2016-04-11 20:50:00 +0900

tool/update-dep を実行してヘッダなどの依存関係を更新しています。

kazu: r54545 2016-04-11 21:39:31 +0900

r54302, r54306, r54451 の ChangeLog エントリの typo 修正。