ruby-trunk-changes r39755 - r39766

今日は主に機能の r39752 の続きの変更でした。また Time#initialize を send で無理矢理呼ぶと値が変更できてしまう問題の対処を入れています。

nobu:r39755 2013-03-15 01:21:52 +0900

r39752 で追加したメッセージに関数名を含めるためのラッパ関数 rb_sys_fail_path0() で関数名とパス名のあいだにコロンと空白ですきまをつくるようにしています。

nobu:r39756 2013-03-15 01:21:54 +0900

r39752, r39753 から続く一連の変更の續きで、win32/Makefile.sub で VC9 以降(MSC_VER > 1500)の時は __FUNCTION__ というマクロが使えるのでこれを config.h で RUBY_FUNCTION_NAME_STRING として定義するようにしています。

svn:r39757 2013-03-15 01:21:56 +0900

version.h の日付更新。

zzak:r39758 2013-03-15 04:08:57 +0900

Proc#arity の rdoc のサンプルの評価値のまちがいを修正しています。 [ruby-core:53403] [Bug #8094]

naruse:r39759 2013-03-15 08:25:09 +0900

r39752 からの一連の file.c での変更と同じように io.c でも関数マクロ rb_sys_fail_path() を関数名をメッセージに付加するラッパ関数経由で呼ぶようにしています。

nobu:r39760 2013-03-15 14:51:37 +0900

r39752 および r39759 で file.c と io.c でそれぞれ変更した関数マクロ rb_sys_fail_path() とラッパ関数のしくみを internal.h にまとめて、関数本体は file.c に置くようにしています。 また dir.c でも同じマクロがあったのでこれも同じしくみを共有するようにしています。

nobu:r39761 2013-03-15 15:08:13 +0900

さらに ext/socket/basicsocket.c でも r39760 で internal.h に移動した rb_sys_fail_path() を使うようにしています。
また拡張ライブラリの socket から利用できるように internal.h で rb_sys_fail_path_with_func() の宣言に gcc 拡張の pragma を使って可視性の設定をいじっているようです。

kazu:r39762 2013-03-15 17:29:41 +0900

r39759 の ChangeLogtypo 修正。

nobu:r39763 2013-03-15 20:19:56 +0900

r39752 からの一連の変更の結果、結局 SystemCallError に発生元関数名を保持させることができるようにして rb_sys_fail_path_in() という関数を error.c に追加(ただし RUBY_FUNCTION_NAME_STRING ら定義されている時だけ)、rb_sys_fail_path_with_func() は削除しています。

nobu:r39764 2013-03-15 20:20:00 +0900

rubygems のテストでファイルが存在しないときの Errno::ENOENT のメッセージを完全一致でチェックしているのを正規表現を使ったマッチでチェックするように緩和しています。

nobu:r39765 2013-03-15 20:36:25 +0900

r39764 の文法エラーを修正(正規表現リテラルの最初の "/" の次に空白を置いてしまったので "/" 演算子としてパーされたのでしょう)。

nobu:r39766 2013-03-15 23:06:21 +0900

Time の send で initialize を呼ぶと値を変更することができてしまうので、その対処として struct time_object::gmt を -1 で初期化しておくことで initialize で値セット済みかどうかを判定できるようにしておいて、再度値が設定されそうになった時に例外を発生させるようにしています。 [ruby-core:53436] [Bug #8099]