]> git.eshelyaron.com Git - emacs.git/commitdiff
Let C modules access bignum values
authorTom Tromey <tom@tromey.com>
Sun, 8 Jul 2018 04:51:58 +0000 (22:51 -0600)
committerTom Tromey <tom@tromey.com>
Fri, 13 Jul 2018 04:12:28 +0000 (22:12 -0600)
* src/emacs-module.c (module_extract_integer, module_make_integer):
Handle bignums.

src/emacs-module.c

index e781c38f4621a57014f228abad6d7593b12b6b9e..7709eeca94a72eab95d6eeb35d406da6fef3d702 100644 (file)
@@ -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