guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 55/69: scm_to_mpz uses integer lib


From: Andy Wingo
Subject: [Guile-commits] 55/69: scm_to_mpz uses integer lib
Date: Fri, 7 Jan 2022 08:27:19 -0500 (EST)

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

commit 3710c28ce447b19476958f572e94c79d69e9409a
Author: Andy Wingo <wingo@pobox.com>
AuthorDate: Thu Jan 6 21:47:20 2022 +0100

    scm_to_mpz uses integer lib
    
    * libguile/integers.h:
    * libguile/integers.c (scm_integer_to_mpz_z): New internal function.
    * libguile/numbers.c (scm_to_mpz): Use new function.
---
 libguile/integers.c | 9 +++++++++
 libguile/integers.h | 3 ++-
 libguile/numbers.c  | 2 +-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/libguile/integers.c b/libguile/integers.c
index f00885792..0ca799b9e 100644
--- a/libguile/integers.c
+++ b/libguile/integers.c
@@ -3035,3 +3035,12 @@ scm_integer_to_uint64_z (struct scm_bignum *z, uint64_t 
*val)
 {
   return bignum_to_uint64 (z, val);
 }
+
+void
+scm_integer_to_mpz_z (struct scm_bignum *z, mpz_t n)
+{
+  mpz_t zn;
+  alias_bignum_to_mpz (z, zn);
+  mpz_init_set (n, zn);
+  scm_remember_upto_here_1 (z);
+}
diff --git a/libguile/integers.h b/libguile/integers.h
index f8d150119..e48db1d17 100644
--- a/libguile/integers.h
+++ b/libguile/integers.h
@@ -32,7 +32,8 @@ scm_bignum (SCM x)
   return (struct scm_bignum *) SCM_UNPACK (x);
 }
 
-SCM_INTERNAL SCM scm_integer_from_mpz (mpz_srcptr mpz);
+SCM_INTERNAL SCM scm_integer_from_mpz (const mpz_t n);
+SCM_INTERNAL void scm_integer_to_mpz_z (struct scm_bignum *z, mpz_t n);
 
 SCM_INTERNAL int scm_is_integer_odd_i (scm_t_inum i);
 SCM_INTERNAL int scm_is_integer_odd_z (struct scm_bignum *z);
diff --git a/libguile/numbers.c b/libguile/numbers.c
index 10efb303a..330ea2cdd 100644
--- a/libguile/numbers.c
+++ b/libguile/numbers.c
@@ -7090,7 +7090,7 @@ scm_to_mpz (SCM val, mpz_t rop)
   if (SCM_I_INUMP (val))
     mpz_set_si (rop, SCM_I_INUM (val));
   else if (SCM_BIGP (val))
-    mpz_set (rop, SCM_I_BIG_MPZ (val));
+    scm_integer_to_mpz_z (scm_bignum (val), rop);
   else
     scm_wrong_type_arg_msg (NULL, 0, val, "exact integer");
 }



reply via email to

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