ruby-trunk-changes r43156 - r43183

今日はプロファイラ向けの C API の追加や Time.strptime の不具合修正などがありました。

nobu:r43156 2013-10-06 22:52:39 +0900

signal.c で sighandler_t を ruby_sighandler_t という型に #define するようにしています。直下で sighandler_t の型(関数型)を定義しているのですが、これがシステムのものと衝突しないようにしているみたいです。posix_signal() という関数が include/ruby/intern.h にプロトタイプ宣言があるのでそこに影響が……と思いきや intern.h では sighandler_t という型は使わずに直接関数型を記述していたので影響していませんでした。そりゃそうか。

nobu:r43157 2013-10-06 22:52:44 +0900

io.c の未初期化変数の警告の除去のためのリファクタリング。条件分岐が絡んで実際には未初期化にはならないのに警告が出ていたので利用する部分を関数に切り出して回避しているみたいです。

nobu:r43158 2013-10-07 03:43:50 +0900

io.c の copy_stream_body() で構造体メンバを参照しているところをローカル変数に格納しておいてそれを参照するように変更しています。変更の動機がよくわかりませんが。

nobu:r43159 2013-10-07 03:43:53 +0900

NEWS ファイルに Timeout.timeout がタイムアウト時の停止のためにデフォルトでは例外を利用しないようになったことを追記しています。

svn:r43160 2013-10-07 03:43:55 +0900

version.h の日付更新。

nobu:r43161 2013-10-07 14:03:29 +0900

win32/win32.c の w32_spawn(), w32_aspawn_flags() に static を付けて内部関数にしています。

ko1:r43162 2013-10-07 14:12:08 +0900

iseq.c の ISeq の情報取得用関数 iseq_path(), iseq_absolute_path(), iseq_label(), iseq_base_label(), iseq_first_lineno() に prefix "rb_" を付けて static を削って internal.h にプロトタイプ宣言を置くことでコア部分から呼べるようにしています。

ko1:r43163 2013-10-07 14:31:47 +0900

r43162 の変更の追随漏れ修正で rb_iseq_first_lineno() が VALUE を返すようになったのに対応しています。

nobu:r43164 2013-10-07 15:08:59 +0900

IO.popen のテストで子プロセスのコマンドを echo から exit に変更して子プロセスでの broken pipe のエラーメッセージが出るのを抑制しています。

nobu:r43165 2013-10-07 15:09:01 +0900

win32/file.c の code_page() という関数で rb_encoding のエンコーディングのコードページを返すときにキャッシュしているマップをみる前に US-ASCII と ASCII-8BIT の時は固定値(1252 Microsoft においてはいわゆる Latin-1)を返すようにしています。

nobu:r43166 2013-10-07 15:28:11 +0900

win32/file.c の code_page() でコードページをキャッシュするテーブルに Hash オブジェクトを使っていたのを st_table を直接利用するようにしています。

naruse:r43167 2013-10-07 15:36:27 +0900

Net::HTTP のテストで接続のタイムアウトのテストのために指定する Net::HTTP#open_timeout= の値を 0.01 から 0.1 に引き上げています。環境によっては実際にタイムアウトしてしまっていたみたいです。[ruby-core:57675] [Bug #8986]

nobu:r43168 2013-10-07 15:50:18 +0900

win32/file.c の code_page() でエンコーディングエンコーディング名で扱っていたのをインデックスで扱うように修正しています。

nobu:r43169 2013-10-07 16:20:59 +0900

win32/file.c の code_page() で使うエンコーディングと code page の対応表をプロセス起動時に構築しておくようにしています。ふーむ、なんとなく起動が遅くなるのは好まれないんじゃないかという気がしますけどどうなんでしょうか。

ko1:r43170 2013-10-07 16:21:11 +0900

プロファイラ向けにメソッド呼び出しやブロック呼び出しのスタックフレームを取得する rb_profile_frames() という C API やそのオブジェクトから情報を取得する rb_profile_frame_{path, absolute_path, label, base_label, first_lineno, classpath, singleton_method_p}() などの関数が追加されています。
また rb_iseq_klass() がオブジェクトが wrap している rb_iseq_t の klass ではなくて local_iseq->klass を返すように変更されています。こっちはどういう意味があるのかちょっとよくわかりません。

ko1:r43171 2013-10-07 16:35:21 +0900

r43170 で追加した API のテストを追加しています。 C API のテストなのでテスト専用の拡張ライブラリを追加しています。

nobu:r43172 2013-10-07 16:38:23 +0900

r43171 で追加した新規ファイルの svn property 設定。

ko1:r43173 2013-10-07 16:51:16 +0900

r43171 で追加したテストスクリプトで利用したクラス名が C だったのでもうちょっと意味のある名前に変更しています。というかあるテストが "C" というクラスがないことを前提としていたそうで、それはそれでどうかなって気がしますけど(remove_const するとか)。

nobu:r43174 2013-10-07 17:14:01 +0900

r43164 の IO.popen のテストの変更が Windows 以外だと exit という外部プログラムがないといけなかったので配列をやめて "exit" とすることでシェル経由の呼び出しにしてエラーにならないように修正しています。

nobu:r43175 2013-10-07 17:19:38 +0900

r43171 の ChangeLog の行末の空白除去。

kazu:r43176 2013-10-07 19:05:52 +0900

r43163 の ChangeLogtypo 修正。

akr:r43177 2013-10-07 20:10:03 +0900

標準添付ライブラリ time.rb で拡張される Time.strptime の "%s" という指示子がローカルタイムの offset つきの Time を生成してしまうのを修正して UTC の Time オブジェクトを生成するようにしています。また "%s %z" のようにタイムゾーンの指定も読み込むようにしていたら Time.strptime("0 +0900", "%s %z") 指定のタイムゾーンの Time オブジェクトを生成するようにしています。 [ruby-core:57694]
なるほどー任意のタイムゾーンの Time オブジェクトを作るのにこういう生成方法もありますね。またこの変更は 2.0.0 や 1.9.3 にも必要そうですね

zzak:r43178 2013-10-07 20:32:05 +0900

標準添付ライブラリ time.rb の Time.strptime の rdoc コメントの文法の間違いを修正しています。 https://github.com/ruby/ruby/pull/416

nobu:r43179 2013-10-07 21:03:58 +0900

Fiber の実装に makecontext()/swapcontext() や CreateFiber()/SwitchToFiber() (Windows 版) などのシステムライブラリを利用した実装にするか、自前でスタックの切り替えを行う実装を使うかの変更に使う FIBER_USE_NATIVE というマクロの設定を cont.c で #if の条件で切り替えていたのを configure で検出するようにしています。

nobu:r43180 2013-10-07 22:19:02 +0900

r43179 の configure での FIBER_USE_NATIVE の設定が Windows 版の考慮がされていなかったのでそれを追加しています。

nobu:r43181 2013-10-07 22:45:31 +0900

r43179, r43180 での FIBER_USE_NATIVE の configure での設定は revert して cont.c での条件分岐を整理してネストした #if で書くように変更しています。

knu:r43182 2013-10-07 23:47:29 +0900

misc/ruby-additional.el で char-before/char-after のかわりに preceding-char/following-char を使うように変更しています。

knu:r43183 2013-10-07 23:47:32 +0900

misc/ruby-electric.el に ruby-electric-keywords という予約語リストを設定するための変数を追加して(これまであった ruby-electric-simple-keywords-re を置き換えて)います。また自動的に end を挿入する機能の誤動作の修正もしているようです。