mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-21 12:27:33 +00:00
Let C modules access bignum values
* src/emacs-module.c (module_extract_integer, module_make_integer): Handle bignums.
This commit is contained in:
parent
8fb995b9e3
commit
d0fac17abd
1 changed files with 17 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue