mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Fix bug when making mpz from 0
* libguile/integers.c (make_bignum_0): New helper. (make_bignum_from_uint64): (ulong_to_bignum): (long_to_bignum): Call new helper as appropriate.
This commit is contained in:
parent
443d239828
commit
eac47c3e45
1 changed files with 9 additions and 3 deletions
|
@ -174,6 +174,12 @@ negate_bignum (struct scm_bignum *z)
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct scm_bignum *
|
||||||
|
make_bignum_0 (void)
|
||||||
|
{
|
||||||
|
return allocate_bignum (0);
|
||||||
|
}
|
||||||
|
|
||||||
static struct scm_bignum *
|
static struct scm_bignum *
|
||||||
make_bignum_1 (int is_negative, mp_limb_t limb)
|
make_bignum_1 (int is_negative, mp_limb_t limb)
|
||||||
{
|
{
|
||||||
|
@ -200,7 +206,7 @@ make_bignum_from_uint64 (uint64_t val)
|
||||||
if (val > UINT32_MAX)
|
if (val > UINT32_MAX)
|
||||||
return make_bignum_2 (0, val, val >> 32);
|
return make_bignum_2 (0, val, val >> 32);
|
||||||
#endif
|
#endif
|
||||||
return make_bignum_1 (0, val);
|
return val == 0 ? make_bignum_0 () : make_bignum_1 (0, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct scm_bignum *
|
static struct scm_bignum *
|
||||||
|
@ -214,7 +220,7 @@ make_bignum_from_int64 (int64_t val)
|
||||||
static struct scm_bignum *
|
static struct scm_bignum *
|
||||||
ulong_to_bignum (unsigned long u)
|
ulong_to_bignum (unsigned long u)
|
||||||
{
|
{
|
||||||
return make_bignum_1 (0, u);
|
return u == 0 ? make_bignum_0 () : make_bignum_1 (0, u);
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct scm_bignum *
|
static struct scm_bignum *
|
||||||
|
@ -223,7 +229,7 @@ long_to_bignum (long i)
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
return ulong_to_bignum (i);
|
return ulong_to_bignum (i);
|
||||||
|
|
||||||
return make_bignum_1 (1, long_magnitude (i));
|
return i == 0 ? make_bignum_0 () : make_bignum_1 (1, long_magnitude (i));
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline SCM
|
static inline SCM
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue