ruby-changes:4085
From: ko1@a...
Date: Fri, 22 Feb 2008 19:51:07 +0900 (JST)
Subject: [ruby-changes:4085] nobu - Ruby:r15575 (ruby_1_8, trunk): * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454]
nobu 2008-02-22 19:50:21 +0900 (Fri, 22 Feb 2008) New Revision: 15575 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/bignum.c trunk/ChangeLog trunk/bignum.c Log: * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=15575&r2=15574&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15575&r2=15574&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/bignum.c?r1=15575&r2=15574&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/bignum.c?r1=15575&r2=15574&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15574) +++ ChangeLog (revision 15575) @@ -1,3 +1,7 @@ +Fri Feb 22 19:50:19 2008 Nobuyoshi Nakada <nobu@r...> + + * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454] + Fri Feb 22 15:47:36 2008 Tanaka Akira <akr@f...> * encoding.c (rb_enc_mbclen): return minlen instead of 1 when Index: bignum.c =================================================================== --- bignum.c (revision 15574) +++ bignum.c (revision 15575) @@ -36,8 +36,20 @@ #define BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1))) #define BDIGMAX ((BDIGIT)-1) -#define BIGZEROP(x) (RBIGNUM_LEN(x) == 0 || (RBIGNUM_LEN(x) == 1 && BDIGITS(x)[0] == 0)) +#define BIGZEROP(x) (RBIGNUM_LEN(x) == 0 || \ + (BDIGITS(x)[0] == 0 && \ + (RBIGNUM_LEN(x) == 1 || bigzero_p(x)))) +static int +bigzero_p(VALUE x) +{ + long i; + for (i = 0; i < RBIGNUM_LEN(x); ++i) { + if (BDIGITS(x)[i]) return 0; + } + return 1; +} + #define RBIGNUM_SET_LEN(b,l) \ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ (RBASIC(b)->flags = (RBASIC(b)->flags & ~RBIGNUM_EMBED_LEN_MASK) | \ Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 15574) +++ ruby_1_8/ChangeLog (revision 15575) @@ -1,3 +1,7 @@ +Fri Feb 22 19:50:19 2008 Nobuyoshi Nakada <nobu@r...> + + * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454] + Fri Feb 22 16:09:53 2008 Nobuyoshi Nakada <nobu@r...> * bignum.c (rb_big_lshift, rb_big_rshift, rb_big_aref): removed excess Index: ruby_1_8/bignum.c =================================================================== --- ruby_1_8/bignum.c (revision 15574) +++ ruby_1_8/bignum.c (revision 15575) @@ -37,8 +37,22 @@ #define BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1))) #define BDIGMAX ((BDIGIT)-1) -#define BIGZEROP(x) (RBIGNUM(x)->len == 0 || (RBIGNUM(x)->len == 1 && BDIGITS(x)[0] == 0)) +#define BIGZEROP(x) (RBIGNUM(x)->len == 0 || \ + (BDIGITS(x)[0] == 0 && \ + (RBIGNUM(x)->len == 1 || bigzero_p(x)))) +static int bigzero_p(VALUE); +static int +bigzero_p(x) + VALUE x; +{ + long i; + for (i = 0; i < RBIGNUM(x)->len; ++i) { + if (BDIGITS(x)[i]) return 0; + } + return 1; +} + static VALUE bignew_1(klass, len, sign) VALUE klass; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/