ruby-trunk-changes r41231 - r41258

今日は IO#getc でエンコード変換した時の不具合修正のほか、引き続き rb_integer_pack()/rb_integer_unpack() のまわりのリファクタリングや変更がありました。

akr:r41231 2013-06-11 22:15:56 +0900

rb_integer_pack() のテスト用拡張ライブラリにオーバフローのチェックもできるように拡張しています。

akr:r41232 2013-06-11 22:28:33 +0900

rb_integer_pack_internal() と rb_integer_unpack() から numwords 引数のチェックを validate_integer_pack_format() に移動しています。

akr:r41233 2013-06-11 23:02:46 +0900

validate_integer_pack_format() での wordorder_bits のチェックの例外メッセージをよりこまかく条件分けして作るようにしています。

akr:r41234 2013-06-11 23:40:16 +0900

rb_integer_pack() や rb_integer_unpack() で numwords が 1以下の時は word order の指定は不要なので指定されていなくてもエラーにしないようにしています。

kou:r41235 2013-06-11 23:57:05 +0900

test/xmlrpc/test_client.rb のメソッド定義間に空行を挿入しているだけです。

kou:r41236 2013-06-12 00:08:59 +0900

コミットログと ChangeLog によると標準添付ライブラリ xmlrpc でメソッドの抽出をしようとしたようなのですが、本体の変更が入ってなくて、抽出したメソッドのためのテストだけ追加されてしまっているようです。

svn:r41237 2013-06-12 00:09:06 +0900

version.h の日付更新。

akr:r41238 2013-06-12 01:37:37 +0900

time.c の v2w_bignum() で不要になったローカル変数の宣言を削除しています。

akr:r41239 2013-06-12 06:39:55 +0900

rb_integer_unpack() の引数 sign を削除して、flags のビットフラグを使って指定するように変更しています。またそのために INTEGER_PACK_NEGATIVE という定数を定義しています。また仕様が揺らぎそうですね。

drbrain:r41240 2013-06-12 07:17:02 +0900

Struct の rdoc 用コメントのサンプルコードや英文を修正しています。

akr:r41241 2013-06-12 07:33:01 +0900

random.c の rand_init() で Bignum の符号を反転するために clone してから RBIGNUM_SET_SIGN() でいじっていたのを rb_big_uminus() を使うようにリファクタリングしています。

kazu:r41242 2013-06-12 12:00:00 +0900

r41240 の ChangeLog のインデント修正のみ。

nobu:r41243 2013-06-12 12:00:17 +0900

r41227 で追加した ary_shrink_capa() に ary が共有化されていないことをチェックする assert() 文を追加しています。

nobu:r41244 2013-06-12 12:00:22 +0900

parse.y の parser_set_encode() で Array オブジェクトの ruby_debug_lines を RARRAY_PTR() でバッファを取りして RGenGC の shady なオブジェクトにしてしまっていたのを RARRAY_AREF() を使うようにして防いでいます。

nobu:r41245 2013-06-12 12:00:24 +0900

array.c で配列オブジェクトに埋め込みフラグ(要素数が少ない時にヒープ上にバッファを取らず struct RVALUE の空き領域を使って配列を実現していることを示すフラグ)をセットする時に freeze されていないことをチェックする assert() 文を削除しています。
また rb_ary_modify() で ARY_SET_CAPA() を呼ぶ前に共有化フラグをクリアするようにしています。 ARY_SET_CAPA() が共有化されていないことを前提としているため。
おそらくこのあたりは ARRAY_DEBUG を有効にして(= assert 文を有効にして)ひっかかったところを修正するためだと思います。

nobu:r41246 2013-06-12 12:03:46 +0900

Array#sort! の実装でArrayオブジェクトの内容を書き換える前に rb_ary_modify() を呼び出して freeze のチェックや共有解除などをするようにしています。

nobu:r41247 2013-06-12 12:04:11 +0900

Array#uniq! の実装でも r41246 と同様に書き変え前に rb_ary_modify() を呼び出すようにしています。

akr:r41248 2013-06-12 12:09:28 +0900

Kernel#sprintf などのフォーマット文字列の整形につかう rb_str_format() でフォーマット文字列自体を snprintf(3) で生成していた処理が %i が Object を指す指示子になったため不要になったので普通に "%ld" を使うように修正しています。

akr:r41249 2013-06-12 12:35:54 +0900

Array#pack の実装で整数の pack に rb_integer_pack_2comp() を利用するように書きかえています。

nobu:r41250 2013-06-12 12:44:48 +0900

IO#getc でエンコーディングの変換を伴なった時に入力した文字列の coderange が間違っていて ascii_only? が ASCII 文字なのに false を返すことがあった不具合を修正しています。 [ruby-core:55444] [Bug #8516]

knu:r41251 2013-06-12 15:41:11 +0900

README.EXT.ja に mkmf.rb のメソッドが定義するコンパイラオプションやマクロについての記述を追記しています。

knu:r41252 2013-06-12 16:08:08 +0900

標準添付ライブラリ mkmf.rb の pkg_config の rdoc 用コメントに説明を追記しています。

nobu:r41253 2013-06-12 16:41:40 +0900

Array#sort! の実装 rb_ary_sort_bang() に挿入されていた assert 文は不要だったため削除しています。 [ruby-dev:47419] [Bug #8518]

nobu:r41254 2013-06-12 17:05:56 +0900

test/ruby/test_io.rb のテストで作成する大きな一時ファイルが Windows 環境で削除に失敗するらしくて、ディスクを圧迫してしまうという問題に対処するため、削除をリトライするようにしています。 [ruby-core:55457] [Bug #8519]
また IO#tell が Errno::ENOSPC を発生させた時にテストを skip するようにしています。

knu:r41255 2013-06-12 17:48:01 +0900

README.EXT の最後に Appendix C として extconf.rb で使えるメソッドの参照先として mkmf.rb の rdoc を指す記述を追加しています。

akr:r41256 2013-06-12 18:21:11 +0900

rb_integer_pack() や rb_integer_unpack() の flags に渡すビットフラグに、その関数でサポートされていないビットフラグが立っていたら例外を発生させるようにするチェックを追加しています。

kou:r41257 2013-06-12 20:19:18 +0900

r41236 でコミット漏れしていた標準添付ライブラリ xmlrpc の XMLRPC::Client#do_rpc から parse_set_cookies メソッドを切り出す変更です。

akr:r41258 2013-06-12 22:25:00 +0900

rb_integer_unpack() から Bignum で使うメモリ領域のサイズを計算するのに integer_unpack_num_bdigits_bytes() を呼んでいたところを integer_unpack_num_bdigits_generic() を使うように書きかえています。しかし書き変えたところはもともと #if 0 ... #endif でくくられた中なので現在の動作には影響がなくて、デバッグ用のコードっぽいです。
また integer_unpack_num_bdigits_generic() では Integer に変換して rb_funcall() でメソッド呼び出しすることで演算していたのを直接計算するように書き変えているようです。