diff options
| author | Paul Eggert | 2015-11-10 12:46:22 -0800 |
|---|---|---|
| committer | Paul Eggert | 2015-11-10 12:52:26 -0800 |
| commit | 0e0ea300ff926d3e2f6f4d514d9115f1eecc8ddb (patch) | |
| tree | 3f7b95a5cf1d1c1fefe0d48b606bf2fcdf2a8a7b /src/data.c | |
| parent | 6c16c9a649ab5a5ea4bec12345fd369752da5dc0 (diff) | |
| download | emacs-0e0ea300ff926d3e2f6f4d514d9115f1eecc8ddb.tar.gz emacs-0e0ea300ff926d3e2f6f4d514d9115f1eecc8ddb.zip | |
Move INTEGER_TO_CONS body out of .h file
* src/data.c (INTBIG_TO_LISP): New macro, with most
of the contents of the old INTEGER_TO_CONS.
(intbig_to_lisp, uintbig_to_lisp): New functions.
* src/lisp.h (INTEGER_TO_CONS):
Simplify by using EXPR_SIGNED and the new functions.
This shrinks code size a bit, and makes it easier to
put a breakpoint on handling of large integers.
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/data.c b/src/data.c index ccec15f430a..51546044c68 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -2409,6 +2409,33 @@ DEFUN ("/=", Fneq, Sneq, 2, 2, 0, | |||
| 2409 | return arithcompare (num1, num2, ARITH_NOTEQUAL); | 2409 | return arithcompare (num1, num2, ARITH_NOTEQUAL); |
| 2410 | } | 2410 | } |
| 2411 | 2411 | ||
| 2412 | /* Convert the integer I to a cons-of-integers, where I is not in | ||
| 2413 | fixnum range. */ | ||
| 2414 | |||
| 2415 | #define INTBIG_TO_LISP(i, extremum) \ | ||
| 2416 | (eassert (FIXNUM_OVERFLOW_P (i)), \ | ||
| 2417 | (! (FIXNUM_OVERFLOW_P ((extremum) >> 16) \ | ||
| 2418 | && FIXNUM_OVERFLOW_P ((i) >> 16)) \ | ||
| 2419 | ? Fcons (make_number ((i) >> 16), make_number ((i) & 0xffff)) \ | ||
| 2420 | : ! (FIXNUM_OVERFLOW_P ((extremum) >> 16 >> 24) \ | ||
| 2421 | && FIXNUM_OVERFLOW_P ((i) >> 16 >> 24)) \ | ||
| 2422 | ? Fcons (make_number ((i) >> 16 >> 24), \ | ||
| 2423 | Fcons (make_number ((i) >> 16 & 0xffffff), \ | ||
| 2424 | make_number ((i) & 0xffff))) \ | ||
| 2425 | : make_float (i))) | ||
| 2426 | |||
| 2427 | Lisp_Object | ||
| 2428 | intbig_to_lisp (intmax_t i) | ||
| 2429 | { | ||
| 2430 | return INTBIG_TO_LISP (i, INTMAX_MIN); | ||
| 2431 | } | ||
| 2432 | |||
| 2433 | Lisp_Object | ||
| 2434 | uintbig_to_lisp (uintmax_t i) | ||
| 2435 | { | ||
| 2436 | return INTBIG_TO_LISP (i, UINTMAX_MAX); | ||
| 2437 | } | ||
| 2438 | |||
| 2412 | /* Convert the cons-of-integers, integer, or float value C to an | 2439 | /* Convert the cons-of-integers, integer, or float value C to an |
| 2413 | unsigned value with maximum value MAX. Signal an error if C does not | 2440 | unsigned value with maximum value MAX. Signal an error if C does not |
| 2414 | have a valid format or is out of range. */ | 2441 | have a valid format or is out of range. */ |