emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] feature/bignum 23eab9a 10/24: Make number-to-string work f


From: Tom Tromey
Subject: [Emacs-diffs] feature/bignum 23eab9a 10/24: Make number-to-string work for bignums
Date: Fri, 13 Jul 2018 00:25:08 -0400 (EDT)

branch: feature/bignum
commit 23eab9a6a67604b5ebcdc99efc42fbfd3345c0b0
Author: Tom Tromey <address@hidden>
Commit: Tom Tromey <address@hidden>

    Make number-to-string work for bignums
    
    * src/data.c (Fnumber_to_string): Handle bignum.
    * test/src/data-tests.el (data-tests-number-to-string): New test.
---
 src/data.c             | 8 ++++++++
 test/src/data-tests.el | 5 +++++
 2 files changed, 13 insertions(+)

diff --git a/src/data.c b/src/data.c
index b49daab..18b572d 100644
--- a/src/data.c
+++ b/src/data.c
@@ -2756,6 +2756,14 @@ NUMBER may be an integer or a floating point number.  */)
   char buffer[max (FLOAT_TO_STRING_BUFSIZE, INT_BUFSIZE_BOUND (EMACS_INT))];
   int len;
 
+  if (BIGNUMP (number))
+    {
+      ptrdiff_t count = SPECPDL_INDEX ();
+      char *str = mpz_get_str (NULL, 10, XBIGNUM (number)->value);
+      record_unwind_protect_ptr (xfree, str);
+      return unbind_to (count, make_unibyte_string (str, strlen (str)));
+    }
+
   CHECK_FIXNUM_OR_FLOAT (number);
 
   if (FLOATP (number))
diff --git a/test/src/data-tests.el b/test/src/data-tests.el
index 543bb90..1143028 100644
--- a/test/src/data-tests.el
+++ b/test/src/data-tests.el
@@ -574,4 +574,9 @@ comparing the subr with a much slower lisp implementation."
   (should-not (fixnump (+ most-positive-fixnum 1)))
   (should (bignump (+ most-positive-fixnum 1))))
 
+(ert-deftest data-tests-number-to-string ()
+  (let* ((s "99999999999999999999999999999")
+         (v (read s)))
+    (should (equal (number-to-string v) s))))
+
 ;;; data-tests.el ends here



reply via email to

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