diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/fns.c | 15 |
1 files changed, 13 insertions, 2 deletions
| @@ -1402,9 +1402,20 @@ DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0, | |||
| 1402 | doc: /* Take cdr N times on LIST, return the result. */) | 1402 | doc: /* Take cdr N times on LIST, return the result. */) |
| 1403 | (Lisp_Object n, Lisp_Object list) | 1403 | (Lisp_Object n, Lisp_Object list) |
| 1404 | { | 1404 | { |
| 1405 | CHECK_FIXNUM (n); | 1405 | CHECK_INTEGER (n); |
| 1406 | Lisp_Object tail = list; | 1406 | Lisp_Object tail = list; |
| 1407 | for (EMACS_INT num = XFIXNUM (n); 0 < num; num--) | 1407 | |
| 1408 | EMACS_INT num; | ||
| 1409 | if (FIXNUMP (n)) | ||
| 1410 | num = XFIXNUM (n); | ||
| 1411 | else | ||
| 1412 | { | ||
| 1413 | num = mpz_sgn (XBIGNUM (n)->value); | ||
| 1414 | if (0 < num) | ||
| 1415 | num = EMACS_INT_MAX; /* LIST cannot possibly be this long. */ | ||
| 1416 | } | ||
| 1417 | |||
| 1418 | for (; 0 < num; num--) | ||
| 1408 | { | 1419 | { |
| 1409 | if (! CONSP (tail)) | 1420 | if (! CONSP (tail)) |
| 1410 | { | 1421 | { |