mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-29 19:30:36 +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;
|
||||
}
|
||||
|
||||
static struct scm_bignum *
|
||||
make_bignum_0 (void)
|
||||
{
|
||||
return allocate_bignum (0);
|
||||
}
|
||||
|
||||
static struct scm_bignum *
|
||||
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)
|
||||
return make_bignum_2 (0, val, val >> 32);
|
||||
#endif
|
||||
return make_bignum_1 (0, val);
|
||||
return val == 0 ? make_bignum_0 () : make_bignum_1 (0, val);
|
||||
}
|
||||
|
||||
static struct scm_bignum *
|
||||
|
@ -214,7 +220,7 @@ make_bignum_from_int64 (int64_t val)
|
|||
static struct scm_bignum *
|
||||
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 *
|
||||
|
@ -223,7 +229,7 @@ long_to_bignum (long i)
|
|||
if (i > 0)
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue