ruby-trunk-changes r41303 - r41316

今日も引き続き bignum.c のリファクタリングと、__dir__ の不具合修正がありました。

akr:r41303 2013-06-15 02:41:38 +0900

bignum.c の bigdivrem() からシフト演算処理を bdigs_small_lshift() として切り出して再利用するリファクタリング

svn:r41304 2013-06-15 02:41:45 +0900

version.h の日付更新。

nobu:r41305 2013-06-15 08:37:33 +0900

__dir__ のテストで File.expand_path ではなく File.realpath を利用するように変更しています。よく勘違いされる点ですが __dir__ は File.expand_path(File.dirname(__FILE__)) とか File.expand_path("..", __FILE__) ではなくて File.dirname(File.realpath(__FILE__)) と同等(シンボリックリンクだった時に違いがある)なんですよね。

nobu:r41306 2013-06-15 08:37:35 +0900

Binding オブジェクトを渡した eval の中で __dir__ を参照すると nil になる不具合を修正しています。 [ruby-core:55123]. [Bug #8436]

akr:r41307 2013-06-15 10:03:37 +0900

bignum.c の bigdivrem() と bdigs_small_rshift() という関数から右シフト演算の処理を bdigs_small_rshift() として括り出しています。

zzak:r41308 2013-06-15 10:19:30 +0900

ext/bigdecimal/bigdecimal.gemspec の Author のリストに zzak の名前を追加しています。

zzak:r41309 2013-06-15 10:20:27 +0900

ext/bigdecimal/bigdecimal.c の先頭部分のコメントの体裁や copyright 表記の移動を行なっています。

akr:r41310 2013-06-15 17:15:40 +0900

これでいいのかよく確認していませんが bigmul1_normal() が返す Bignum のバッファサイズを 1 BDIGIT ぶん小さいものにしています。

akr:r41311 2013-06-15 19:35:52 +0900

bignum.c の absint_numwords_bytes() absint_numwords_small() absint_numwords_generic() などの切り出した関数群に static をつけています。

akr:r41312 2013-06-15 20:15:23 +0900

ちょっと差分がわかりずらいですが bignum.c の rb_integer_unpack_internal() から、ワード列から Bignum の BDIGITS の配列に変換するところまでの処理を bary_unpack() として切り出しています。
そしてこれがちょっと意図がわからなかったのですが absint_numwords_generic() で bary_unpack() と rb_integer_unpack() を使って引数 numbytes を Bignum として unpack しなおして比較する assert() 文を追加しています。オーバフローのチェックとかでしょうか。

akr:r41313 2013-06-15 22:32:16 +0900

bignum.c に bary_mul() bary_mul_single() bary_mul_normal() という BDIGIT の配列を引数として受け取って乗算を計算する関数を切り出してこれを利用するようにリファクタリング

akr:r41314 2013-06-15 23:52:02 +0900

これも bignum.c のリファクタリングです。 今度は bary_sub() という BDIGIT の配列どうしの減算を行う関数を切り出しています。

nobu:r41315 2013-06-16 00:31:44 +0900

r41306 で eval 内での __dir__ の不具合修正のため導入した absolute_path の宣言位置を利用しているブロック内に移動しています。 r40759 の時の bind 変数と同様に "clobbered by 'setjmp' or 'vfork'" のコンパイラ警告を抑制するためです。 [ruby-core:55123] [Bug #8436]

svn:r41316 2013-06-16 00:31:54 +0900

version.h の日付更新。