wingo pushed a commit to branch wip-inline-digits
in repository guile.

commit a30fcc6f0112e7917d075edf366af4b969a68b7d
Author: Andy Wingo <[email protected]>
AuthorDate: Fri Jan 7 20:28:05 2022 +0100

    take_mpz optimization
    
    * libguile/integers.c (take_mpz): Avoid making a bignum if the value is
    fixable.
---
 libguile/integers.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libguile/integers.c b/libguile/integers.c
index 520cc6dbb..c7a6e17f8 100644
--- a/libguile/integers.c
+++ b/libguile/integers.c
@@ -299,9 +299,13 @@ normalize_bignum (struct scm_bignum *z)
 static SCM
 take_mpz (mpz_ptr mpz)
 {
-  struct scm_bignum *res = make_bignum_from_mpz (mpz);
+  SCM ret;
+  if (mpz_fits_slong_p (mpz))
+    ret = long_to_scm (mpz_get_si (mpz));
+  else
+    ret = scm_from_bignum (make_bignum_from_mpz (mpz));
   mpz_clear (mpz);
-  return normalize_bignum (res);
+  return ret;
 }
 
 static int

Reply via email to