ruby-trunk-changes r40918 - r40929

今日は File.fnmatch の不具合修正がありました。

nobu:r40918 2013-05-25 07:03:41 +0900

eval_error.c と safe.c でいずれも rb_frame_callee() を2回呼んでいるのを結果を変数に格納して使いまわすようにしています。

svn:r40919 2013-05-25 07:04:19 +0900

version.h の日付更新。

nobu:r40920 2013-05-25 08:58:35 +0900

string.c の rb_str_quote_unprintable() で引数が String オブジェクトかどうか Check_Type() マクロで確認するようにしています。

nobu:r40921 2013-05-25 11:24:33 +0900

r40915 で無引数の Module#private_constant の警告表示のために rb_frame_callee() を使って SEGV していたので rb_frame_current_frame() に置き換えたのですが、これは rb_frame_callee() の名前が悪いという方針で再修正しています。 rb_frame_callee() はその関数を呼んだ時点でのメソッド名の ID を返すようにし、その1つ呼び元に遡ったメソッド名は prev_frame_callee() や prev_frame_func() で返すようにしています。

nobu:r40922 2013-05-25 11:27:34 +0900

set_method_visibility() という関数に無引数(argc == 0) で呼ぶと何も影響がおきないという警告を表示する時にメソッド名をクオートして表示するようにしています。ちなみに Ruby スクリプト上で private とか public を無引数で呼び出した時はこの関数に入る前にその呼び元の関数でモードを切り替える処理をするように分岐しているので、この警告が効くのは Module#public_class_method, Module#private_class_method だけのようです。 private_class_method っていうメソッドあったんですね。

nobu:r40923 2013-05-25 11:28:51 +0900

r40915 や r40921、r40922 で修正した set_const_visibility や set_method_visibility() で無引数で呼ばれて警告を表示した場合は何の処理もしないのにメソッドキャッシュをクリアしてしまっていたので早々に return で抜けるようにしています。

ko1:r40924 2013-05-25 17:11:04 +0900

r40914 で RGENGC の full GC の実行タイミングを増やしたうち、shady オブジェクト数が全オブジェクト数の半分を越えた時に実行するようにしていたのを条件を緩和して(多分「生きて」いるオブジェクトの半分ではなくて、確保しているスロットの半分を越えた時にしている?)、full GC の実行頻度を減らすチューニング中のようです。

mame:r40925 2013-05-25 18:32:47 +0900

File.fnmatch の中で "[]" のなかで範囲を使ったパターンマッチに1バイト文字とマルチバイト文字があった時に、本来マッチすべきでない文字にマッチしてしまう不具合があったのを修正。 Coverity Scan で検出された不具合だそうです。

mame:r40926 2013-05-25 18:55:17 +0900

proc.c の rb_method_entry_min_max_arity() で switch 文の break 漏れで fall through していたのを修正しています。 r38236 で入ったものですがこの関数の現状の呼ばれかたではこの部分に来ることがないので実害はなかったそうです。これも Coverity Scan によって検出されたそうです。

naruse:r40927 2013-05-25 20:37:35 +0900

r40881 で拡張ライブラリ strscan の StringScanner#[] に機能追加した時に導入して、その後 r40912 の変更で不要になった変数の宣言を除去しています。

naruse:r40928 2013-05-25 21:34:50 +0900

拡張ライブラリ pty で posix_openpt(3) で端末を開く時に O_CLOEXEC フラグがサポートされていなかった FreeBSD で 10-current や 9-stable ではサポートされるようになったので、FreeBSD 9.2 以降では利用するように条件コンパイルの判定を変更しています。 r33665, r33668 や r33689 も参照。参考URL: http://www.freebsd.org/cgi/query-pr.cgi?pr=162374

nobu:r40929 2013-05-25 21:36:05 +0900

r40928 の ChangeLog エントリの行末の空白除去。