diff options
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/data.c b/src/data.c index d7175683c89..c9504694e37 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -3306,8 +3306,20 @@ DEFUN ("lognot", Flognot, Slognot, 1, 1, 0, | |||
| 3306 | doc: /* Return the bitwise complement of NUMBER. NUMBER must be an integer. */) | 3306 | doc: /* Return the bitwise complement of NUMBER. NUMBER must be an integer. */) |
| 3307 | (register Lisp_Object number) | 3307 | (register Lisp_Object number) |
| 3308 | { | 3308 | { |
| 3309 | CHECK_FIXNUM (number); | 3309 | CHECK_INTEGER (number); |
| 3310 | XSETINT (number, ~XINT (number)); | 3310 | if (BIGNUMP (number)) |
| 3311 | { | ||
| 3312 | mpz_t value; | ||
| 3313 | mpz_init (value); | ||
| 3314 | mpz_com (value, XBIGNUM (number)->value); | ||
| 3315 | number = make_number (value); | ||
| 3316 | mpz_clear (value); | ||
| 3317 | } | ||
| 3318 | else | ||
| 3319 | { | ||
| 3320 | eassume (FIXNUMP (number)); | ||
| 3321 | XSETINT (number, ~XINT (number)); | ||
| 3322 | } | ||
| 3311 | return number; | 3323 | return number; |
| 3312 | } | 3324 | } |
| 3313 | 3325 | ||