guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 69/85: take_mpz optimization


From: Andy Wingo
Subject: [Guile-commits] 69/85: take_mpz optimization
Date: Thu, 13 Jan 2022 03:40:24 -0500 (EST)

wingo pushed a commit to branch main
in repository guile.

commit 443d23982856e54ad9367d004403653be787e06a
Author: Andy Wingo <wingo@pobox.com>
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

[Prev in Thread] Current Thread [Next in Thread]