From 443d23982856e54ad9367d004403653be787e06a Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 7 Jan 2022 20:28:05 +0100 Subject: [PATCH] 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