summaryrefslogtreecommitdiff
path: root/bignum.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-03-12 09:16:15 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-03-12 09:16:15 +0000
commitd1abc53721a15bd545b60c875b05f28dd7e01e57 (patch)
tree44da5708baceb68988497901e3915fbcece7c02d /bignum.c
parent080525aa68c68df1fd4c1484bea1de88e3c1f79f (diff)
* array.c, bignum.c, dln.c, error.c, gc.c, io.c, marshal.c,
numeric.c, pack.c, strftime.c, string.c, thread.c, transcode.c, transcode_data.h, util.c, variable.c, vm_dump.c, include/ruby/encoding.h, missing/crypt.c, missing/vsnprintf.c: suppress VC type warnings. [ruby-core:22726] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/bignum.c b/bignum.c
index c03b046d05..f508f71e02 100644
--- a/bignum.c
+++ b/bignum.c
@@ -69,10 +69,11 @@ rb_cmpint(VALUE val, VALUE a, VALUE b)
}
#define RBIGNUM_SET_LEN(b,l) \
- ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
- (RBASIC(b)->flags = (RBASIC(b)->flags & ~RBIGNUM_EMBED_LEN_MASK) | \
- ((l) << RBIGNUM_EMBED_LEN_SHIFT)) : \
- (RBIGNUM(b)->as.heap.len = (l)))
+ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
+ (void)(RBASIC(b)->flags = \
+ (RBASIC(b)->flags & ~RBIGNUM_EMBED_LEN_MASK) | \
+ ((l) << RBIGNUM_EMBED_LEN_SHIFT)) : \
+ (void)(RBIGNUM(b)->as.heap.len = (l)))
static void
rb_big_realloc(VALUE big, long len)
@@ -190,17 +191,21 @@ bigfixize(VALUE x)
long len = RBIGNUM_LEN(x);
BDIGIT *ds = BDIGITS(x);
- if (len*SIZEOF_BDIGITS <= sizeof(long)) {
+ if (len > 0 && len*SIZEOF_BDIGITS <= sizeof(long)) {
long num = 0;
+#if 2*SIZEOF_BDIGITS > SIZEOF_LONG
+ num = (long)ds[0];
+#else
while (len--) {
- num = BIGUP(num) + ds[len];
+ num = (long)(BIGUP(num) + ds[len]);
}
+#endif
if (num >= 0) {
if (RBIGNUM_SIGN(x)) {
if (POSFIXABLE(num)) return LONG2FIX(num);
}
else {
- if (NEGFIXABLE(-(long)num)) return LONG2FIX(-(long)num);
+ if (NEGFIXABLE(-num)) return LONG2FIX(-num);
}
}
}
@@ -1017,7 +1022,7 @@ big2ulong(VALUE x, const char *type, int check)
num = BIGUP(num);
num += ds[len];
}
- return num;
+ return (VALUE)num;
}
VALUE
@@ -1581,7 +1586,7 @@ bigmul1_normal(VALUE x, VALUE y)
n = BIGDN(n);
}
if (n) {
- zds[i + j] = n;
+ zds[i + j] = (BDIGIT)n;
}
}
rb_thread_check_ints();
@@ -1770,7 +1775,7 @@ bigsqr_fast(VALUE x)
zds[i + len] = BIGLO(c);
c = BIGDN(c);
}
- if (c) zds[i + len + 1] += c;
+ if (c) zds[i + len + 1] += (BDIGIT)c;
}
return z;
}
@@ -1889,7 +1894,7 @@ bigdivrem1(void *ptr)
for (nyzero = 0; !yds[nyzero]; nyzero++);
do {
if (bds->stop) return Qnil;
- if (zds[j] == yds[ny-1]) q = BIGRAD-1;
+ if (zds[j] == yds[ny-1]) q = (BDIGIT)BIGRAD-1;
else q = (BDIGIT)((BIGUP(zds[j]) + zds[j-1])/yds[ny-1]);
if (q) {
i = nyzero; num = 0; t2 = 0;
@@ -2480,7 +2485,7 @@ rb_big_or(VALUE xx, VALUE yy)
zds[i] = ds1[i] | ds2[i];
}
for (; i<l2; i++) {
- zds[i] = sign?ds2[i]:(BIGRAD-1);
+ zds[i] = sign?ds2[i]:(BDIGIT)(BIGRAD-1);
}
if (!RBIGNUM_SIGN(z)) get2comp(z);