From: Gerd Moellmann Date: Tue, 16 Oct 2001 11:14:04 +0000 (+0000) Subject: (print_object) [HAVE_LIBGMP]: Print bignums. X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=811e843f113f43d08147987d951e027c91269f4e;p=emacs.git (print_object) [HAVE_LIBGMP]: Print bignums. --- diff --git a/src/print.c b/src/print.c index 2fa74543c43..1626bb2f22d 100644 --- a/src/print.c +++ b/src/print.c @@ -311,7 +311,7 @@ printchar (ch, fun) #endif /* MAX_PRINT_CHARS */ if (!NILP (fun) && !EQ (fun, Qt)) - call1 (fun, make_number (ch)); + call1 (fun, make_fixnum (ch)); else { unsigned char str[MAX_MULTIBYTE_LENGTH]; @@ -1215,14 +1215,14 @@ print_preprocess (obj) if (print_number_index == 0) { /* Initialize the table. */ - Vprint_number_table = Fmake_vector (make_number (40), Qnil); + Vprint_number_table = Fmake_vector (make_fixnum (40), Qnil); } else if (XVECTOR (Vprint_number_table)->size == print_number_index * 2) { /* Reallocate the table. */ int i = print_number_index * 4; Lisp_Object old_table = Vprint_number_table; - Vprint_number_table = Fmake_vector (make_number (i), Qnil); + Vprint_number_table = Fmake_vector (make_fixnum (i), Qnil); for (i = 0; i < print_number_index; i++) { PRINT_NUMBER_OBJECT (Vprint_number_table, i) @@ -1355,6 +1355,42 @@ print_object (obj, printcharfun, escapeflag) strout (buf, -1, -1, printcharfun, 0); break; +#ifdef HAVE_LIBGMP + case Lisp_Bignum: + { + char *s; + + switch (XBIGNUMTYPE (obj)) + { + case BIG_INTEGER: + s = mpz_get_str (NULL, 10, XBIGNUM (obj)->u.i); + strout (s, -1, -1, printcharfun, 0); + xfree (s); + break; + + case BIG_FLOAT: + s = mpf_get_str (NULL, NULL, 10, 0, XBIGNUM (obj)->u.f); + strout (s, -1, -1, printcharfun, 0); + xfree (s); + break; + + case BIG_RATIONAL: + s = mpz_get_str (NULL, 10, mpq_numref (XBIGNUM (obj)->u.r)); + strout (s, -1, -1, printcharfun, 0); + xfree (s); + strout ("/", -1, -1, printcharfun, 0); + s = mpz_get_str (NULL, 10, mpq_denref (XBIGNUM (obj)->u.r)); + strout (s, -1, -1, printcharfun, 0); + xfree (s); + break; + + default: + abort (); + } + } + break; +#endif + case Lisp_Float: { char pigbuf[350]; /* see comments in float_to_string */ @@ -1536,7 +1572,7 @@ print_object (obj, printcharfun, escapeflag) case Lisp_Cons: /* If deeper than spec'd depth, print placeholder. */ - if (INTEGERP (Vprint_level) + if (FIXNUMP (Vprint_level) && print_depth > XINT (Vprint_level)) strout ("...", -1, -1, printcharfun, 0); else if (print_quoted && CONSP (XCDR (obj)) && NILP (XCDR (XCDR (obj))) @@ -1958,9 +1994,9 @@ print_interval (interval, printcharfun) Lisp_Object printcharfun; { PRINTCHAR (' '); - print_object (make_number (interval->position), printcharfun, 1); + print_object (make_fixnum (interval->position), printcharfun, 1); PRINTCHAR (' '); - print_object (make_number (interval->position + LENGTH (interval)), + print_object (make_fixnum (interval->position + LENGTH (interval)), printcharfun, 1); PRINTCHAR (' '); print_object (interval->plist, printcharfun, 1);