[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] feature/bignum d0fac17 18/24: Let C modules access bignum
From: |
Tom Tromey |
Subject: |
[Emacs-diffs] feature/bignum d0fac17 18/24: Let C modules access bignum values |
Date: |
Fri, 13 Jul 2018 00:25:09 -0400 (EDT) |
branch: feature/bignum
commit d0fac17abdf6883bbf82b1752988db38d05282e6
Author: Tom Tromey <address@hidden>
Commit: Tom Tromey <address@hidden>
Let C modules access bignum values
* src/emacs-module.c (module_extract_integer, module_make_integer):
Handle bignums.
---
src/emacs-module.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/emacs-module.c b/src/emacs-module.c
index e781c38..7709eec 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -518,17 +518,31 @@ module_extract_integer (emacs_env *env, emacs_value n)
{
MODULE_FUNCTION_BEGIN (0);
Lisp_Object l = value_to_lisp (n);
- CHECK_FIXNUM (l);
+ CHECK_INTEGER (l);
+ if (BIGNUMP (l))
+ {
+ if (!mpz_fits_slong_p (XBIGNUM (l)->value))
+ xsignal1 (Qoverflow_error, l);
+ return mpz_get_si (XBIGNUM (l)->value);
+ }
return XINT (l);
}
static emacs_value
module_make_integer (emacs_env *env, intmax_t n)
{
+ Lisp_Object obj;
MODULE_FUNCTION_BEGIN (module_nil);
if (FIXNUM_OVERFLOW_P (n))
- xsignal0 (Qoverflow_error);
- return lisp_to_value (env, make_fixnum (n));
+ {
+ mpz_t val;
+ mpz_init_set_si (val, n);
+ obj = make_number (val);
+ mpz_clear (val);
+ }
+ else
+ obj = make_fixnum (n);
+ return lisp_to_value (env, obj);
}
static double
- [Emacs-diffs] feature/bignum 5875fba 08/24: Make arithmetic work with bignums, (continued)
- [Emacs-diffs] feature/bignum 5875fba 08/24: Make arithmetic work with bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum a770fb4 16/24: Make logcount handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 0d86891 14/24: Make 1+ and 1- handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 8fb995b 17/24: Make min and max handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 3dea8f8 19/24: Make % and mod handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum d14808c 11/24: Make format handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum c7e393b 15/24: Make lognot handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 1e8ae6c 06/24: Make the reader accept bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 27980e3 21/24: Make ash and lsh handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum cca0e79 20/24: Make logb handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum d0fac17 18/24: Let C modules access bignum values,
Tom Tromey <=
- [Emacs-diffs] feature/bignum e2a78b0 23/24: Bignum fixes for byte-compiler and bytecode interpreter, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 45eb3b3 22/24: Use fixnump rather than integerp in some spots, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum cc3d758 24/24: Document bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 7cb45cd 02/24: Add configury for GMP library, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 42fe787 01/24: Rename integerp->fixnum, etc, in preparation for bignums, Tom Tromey, 2018/07/13