ruby-trunk-changes r35772 - r35796

nobu:r35772 2012-05-24 23:01:34 +0900

backtrace のサイズを格納する変数の宣言を int から size_t に変更しています。

nobu:r35773 2012-05-24 23:01:37 +0900

rb_backtrace_p() の実装を rb_typeddata_is_kind_of() を使うようにしています。

nobu:r35774 2012-05-24 23:01:39 +0900

Init_VM() でメソッドの定義を rb_undef_method() しているクラスが間違っていたのを修正。 また rb_cFrameInfo は未使用なのでコメントアウトしています。

nobu:r35775 2012-05-24 23:01:41 +0900

Exception を Marshal する時は backtrace メソッドで取り出す時と同様配列に変換して dump するようにしています。 rb_marshal_define_compat() っていう関数があるんですね。

nobu:r35776 2012-05-24 23:36:54 +0900

rb_enc_vsprintf() で指示子に "%i" を VALUE 型のオブジェクトの埋め込みとして、 文字列オブジェクトを RSTRING_PTR() で C の文字列として渡さなくてもフォーマット文字列作成の関数に渡せるようにしています。これでエンコーディングの情報を使えるのと、RSTRING_PTR() で文字列オブジェクトのバッファだけ渡すとコンパイラの最適化避けが必要になるような場合の対処ができます。 [ruby-dev:45135] [Feature #5896]

nobu:r35777 2012-05-25 00:37:25 +0900

rubygems のテストで一時ディレクトリを格納している @tempdir を途中で書き換えていてテストで一時ディレクトリが残ってしまう問題を修正しています。 [ruby-core:39662] [Bug #5348]

svn:r35778 2012-05-25 00:37:29 +0900

version.h の日付更新。

nobu:r35779 2012-05-25 01:15:42 +0900

rb_enc_sprintf() の指示子で "%+s" のように "+" 修飾子付きで指定すると文字列化する時に to_s ではなく inspect を使うようにしています。

drbrain:r35780 2012-05-25 08:51:56 +0900

Enumerable#count の rdoc には size メソッドが定義されていたらそれを呼ぶと書いてあるのですが、実際の今の実装は常に each メソッドからの yield で要素の数を数えるようになっているので、ドキュメントを修正しています。

nobu:r35785 2012-05-25 11:20:36 +0900

r35779 のテストを追加しています。

ko1:r35787 2012-05-25 13:50:10 +0900

caller(lev) と返すフレームの位置を指定して caller を呼んだ時に帰ってくる配列サイズが正確に lev で指定した場所からにならない不具合を修正しています。[ruby-dev:45673]
また backtrace の変更のリファクタリングをしています。似た関数がいくつかあったので構造体のデータの持ちかたを変えて同じ処理を使い回すようにしています。
test/ruby/test_backtrace.rb の改行コードが \r\n になってますね。

nobu:r35788 2012-05-25 13:53:54 +0900

新規追加された test/ruby/test_backtrace.rb の svn:property 追加と、改行コードを修正しています。

usa:r35789 2012-05-25 16:13:03 +0900

テスト用の拡張ライブラリの関数の宣言と msvcrt の関数名が衝突して mswin 版のビルドが失敗していたのを修正。

ko1:r35790 2012-05-25 17:07:16 +0900

backtrace_each() を呼ぶ前に引数の構造体の data メンバーに配列オブジェクトを確保しておくようにしています。 元は oldbt_init() で確保していて、そこまでに触ることはないと思うのでなぜこの変更が必要なのかよくわかりません。

ko1:r35792 2012-05-25 20:01:01 +0900

caller() の第2引数でバックトレースの情報をいくつまで遡って取得するかを指定できるようにしています。ちなみに第1引数は開始点を現在の位置からどれだけ遡るかを指定します。 [ruby-dev:42345] [Feature #3917].

nobu:r35793 2012-05-25 21:14:48 +0900

backtrace_each() の第1引数 init の関数ポインタの引数の型を int -> size_t に変更しています。

emboss:r35795 2012-05-25 22:24:47 +0900

拡張ライブラリ openssl の修正 r35583 を revert しています。SSL_connect() などのエラー時に SystemCallError(Errno::EXXX)を発生させていたのを消したのですが、テストのほうが間違っていたということで失敗していたテストで rescue するようにしています。

emboss:r35796 2012-05-25 23:44:15 +0900

r35795 のテストの直しかただと Errno::ECONNRESET を rescue してから OpenSSL::SSL::SSLError を raise しなおしていて意図がわかりにくかったので、全体的に OpenSSL::SSL::SSLError と Errno::ECONNRESET を両方 rescue するように、両方発生し得るということがわかるようにテストを修正しなおしています。