diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-12 04:44:13 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-12 04:44:13 +0000 |
commit | 6c1e664bb1f7492db8dc3af02e8d159969c6bec0 (patch) | |
tree | b3103ab5066912260df2c30136a89849439feaf9 | |
parent | e17c10a3911cc698e538e936f025053c1efe87d1 (diff) |
* bignum.c (bigzero_p): check from MSB to LSB. [ruby-dev:34649]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | bignum.c | 2 | ||||
-rw-r--r-- | include/ruby/ruby.h | 1 |
3 files changed, 6 insertions, 1 deletions
@@ -1,3 +1,7 @@ +Mon May 12 13:29:26 2008 Tanaka Akira <akr@fsij.org> + + * bignum.c (bigzero_p): check from MSB to LSB. [ruby-dev:34649] + Mon May 12 12:32:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> * common.mk (RUBYOPT): affected BASERUBY too. [ruby-talk:301514] @@ -44,7 +44,7 @@ static int bigzero_p(VALUE x) { long i; - for (i = 0; i < RBIGNUM_LEN(x); ++i) { + for (i = RBIGNUM_LEN(x) - 1; 0 <= i; i--) { if (BDIGITS(x)[i]) return 0; } return 1; diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index c3696ff866..5707571cfa 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -632,6 +632,7 @@ struct RBignum { (long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \ (RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT)) : \ RBIGNUM(b)->as.heap.len) +/* LSB:RBIGNUM_DIGITS(b)[0], MSB:RBIGNUM_DIGITS(b)[RBIGNUM_LEN(b)-1] */ #define RBIGNUM_DIGITS(b) \ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ RBIGNUM(b)->as.ary : \ |