ruby-trunk-changes r41006 - r41022

今日はブロックパラメータにキーワード引数があると自動 splat が効かなくなる不具合の修正と、Socket::Option に新しいオプションに対応するメソッドの追加などをしています。

akr:r41006 2013-06-01 00:24:47 +0900

r41004 や r41005 の続きで bignum.c の calc_hbase() で SIZEOF_BDIGIT によって数値を文字列化した時のサイズの計算を分岐していたのをより一般的にして大きな BDIGIT でも動くようにただの #ifdef の分岐ではなくて while ループを使って書き直しています。

svn:r41007 2013-06-01 00:24:51 +0900

version.h の日付更新。

mrkn:r41008 2013-06-01 01:59:09 +0900

拡張ライブラリ bigdecimal の power の実装で引数の vexp (指数の指定)が Float の時に double 型の浮動小数点数を Bignum に変換するのに rb_dbl2big を利用するようにしています。おそらく Infinity や NaN が渡された時に例外にするようにするためかと思います。

naruse:r41009 2013-06-01 02:37:55 +0900

拡張ライブラリ socket のソケットオプションを表現する Socket::Option に Socket::Option.ip_multicast_loop および Socket::Option.ip_multicast_ttl というメソッドを新設して、IP_MULTICAST_LOOP と IP_MULTICAST_TTL というオプションを指定できるようにしています。また、オプションの種類などを Symbol で、値を数値で渡して作ることができる API として Socket::Option.byte という一般的なメソッドを用意しています。

naruse:r41010 2013-06-01 03:21:00 +0900

r41009 で追加した Socket::Option#ip_multicast_loop および ip_multicast_ttl を使って Rinda のテストでオプションの値を取得していたところを書き直しています。コミットログによると他のプラットフォームでは int 型だったのに NetBSD では byte だったので、それを区別して取得してくれる専用のメソッドを使うようにしています。

nobu:r41011 2013-06-01 07:17:04 +0900

r40993 でうっかり前の ChangeLog のエントリを消してしまっていたのを復旧しています。

akr:r41012 2013-06-01 07:32:55 +0900

bignum.c の r41005 で切り出した calc_hbase() という関数で BDIGIT という専用の型で受け取るべき引数が long になっていたのを修正しています。

nobu:r41013 2013-06-01 07:53:58 +0900

r41009 で追加した Socket::Option#inspect から使う inspect_byte() という関数は NetBSD の時にしか使われないので #ifdef __NetBSD__ でくくっています。

nobu:r41014 2013-06-01 08:00:48 +0900

拡張ライブラリ zlib で Zlib::GzipReader を rewind でファイルポジションを巻き戻すと SEGV が発生するという不具合を修正しています。 [ruby-core:55220] [Bug #8467]
ここでもまた ChangeLog が巻き戻ってしまっていますね。

mrkn:r41015 2013-06-01 10:00:10 +0900

r41014 で消されてしまった ChangeLog を復旧しています。

nobu:r41016 2013-06-01 10:13:21 +0900

string.c の rb_str_new2-5 や rb_{tainted,usascii}_str_new2 などの古いいけてない命名だった関数(既に本体は改名されていて別名として残してあった)を削除しています。別名になったのはいつ頃だったんでしょうね。

nobu:r41017 2013-06-01 11:16:25 +0900

例外オブジェクトを生成する rb_exc_new2,3 といういけてない名前の関数を rb_exc_new_cstr() や rb_exc_new_str() という意味のある関数名に変更しています。例によって include/ruby/intern.h でマクロとしてこれまでの名称も別名として定義しています。

kazu:r41018 2013-06-01 11:25:47 +0900

r41014 の巻き戻しと r41015 での復旧の結果重複してしまっていた ChangeLog のエントリを削除しています。

nobu:r41019 2013-06-01 17:21:37 +0900

vm_insnhelper.c の vm_yield_setup_block_args() でブロックパラメータの代入の方法を決める複雑な条件文に項毎にコメントをつけてより詳しく説明するようにして、無意味になっていた else 節を削っています。
if 文の条件の変更の最後に (... || 0) ってなっている最後の 0 は不要なような気がするんですけど、どうして入ったんでしょう。

nobu:r41020 2013-06-01 17:21:39 +0900

キーワード引数の扱いに絡んでブロックパラメータに配列を渡すと自動的に splat されて代入される機能がキーワード引数が存在するとスキップされてしまって分解されなくなっていた不具合を修正しています。 キーワード引数の処理を自動 splat の処理の後に実行するように順序を入れ替えています。 [ruby-core:55203] [Bug #8463]

nobu:r41021 2013-06-01 17:25:05 +0900

41020 の続きでキーワード rest 引数があった時に simple argument として iseq->arg_simple にフラグを立てないようにしています。 arg_simple のビットフラグの内容はマジックナンバーが直書きされているのでわかりにくいですが、0x02 が立っているとブロックパラメータの自動 splat の処理がスキップされるのでそれを防いでいるようです。 [ruby-core:55203] [Bug #8463]

knu:r41022 2013-06-01 18:01:16 +0900

標準添付ライブラリ set.rb の Set#freeze, #taint, #untaint などのメソッドが super を呼んでから @hash も freeze/taint/untaint して self を返していたのを、super は self を返すので最後に super を呼ぶように順番を入れ替えて明示的に self を最後に返すのを省略するようにしています。なんとなーくですけど taint と untaint は順番が対称的になっていたほうがいいのかなという気がしますけど、どっちがどっちを先にしたほうがいいのかというのが特に意見がないのでまあ順番はどうでもいいでしょうか。