aboutsummaryrefslogtreecommitdiffstats
path: root/bignum.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-20 21:45:11 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-20 21:45:11 +0000
commitde8ca8a1389093bda27836b16bd1e18a19339887 (patch)
tree5c21c3c04fbc92fdd0fa9ef32a5c8ebb9ab08237 /bignum.c
parentd1c518d416274a8142cb8281f3361e91f98cc5f4 (diff)
downloadruby-de8ca8a1389093bda27836b16bd1e18a19339887.tar.gz
* bignum.c (rb_ull2big): Refactored.
(rb_uint2big): Useless code removed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41505 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/bignum.c b/bignum.c
index c17bcda483..1c2b8dc999 100644
--- a/bignum.c
+++ b/bignum.c
@@ -345,7 +345,6 @@ rb_uint2big(VALUE n)
#if SIZEOF_BDIGITS >= SIZEOF_VALUE
digits[0] = n;
#else
- i = 0;
for (i = 0; i < bdigit_roomof(SIZEOF_VALUE); i++) {
digits[i] = BIGLO(n);
n = BIGDN(n);
@@ -1830,19 +1829,20 @@ rb_str_to_inum(VALUE str, int base, int badcheck)
static VALUE
rb_ull2big(unsigned LONG_LONG n)
{
- BDIGIT_DBL num = n;
- long i = 0;
- BDIGIT *digits;
- VALUE big;
+ long i;
+ VALUE big = bignew(DIGSPERLL, bdigit_roomof(SIZEOF_LONG_LONG));
+ BDIGIT *digits = BDIGITS(big);
- big = bignew(DIGSPERLL, 1);
- digits = BDIGITS(big);
- while (i < DIGSPERLL) {
- digits[i++] = BIGLO(num);
- num = BIGDN(num);
+#if SIZEOF_BDIGITS >= SIZEOF_LONG_LONG
+ digits[0] = n;
+#else
+ for (i = 0; i < bdigit_roomof(SIZEOF_LONG_LONG); i++) {
+ digits[i] = BIGLO(n);
+ n = BIGDN(n);
}
+#endif
- i = DIGSPERLL;
+ i = bdigit_roomof(SIZEOF_LONG_LONG);
while (i-- && !digits[i]) ;
RBIGNUM_SET_LEN(big, i+1);
return big;