]> git.eshelyaron.com Git - emacs.git/commitdiff
nthcdr now works with bignums
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 20 Aug 2018 17:24:19 +0000 (10:24 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 20 Aug 2018 17:24:42 +0000 (10:24 -0700)
Problem reported by Karl Fogel in:
https://lists.gnu.org/r/emacs-devel/2018-08/msg00671.html
* src/fns.c (Fnthcdr): Support bignum counts.

src/fns.c

index a11de1b08273fc57bb40f7a618e9999f11c41580..aeb9308d22741b49ff6f05902b6a6d53d0a45464 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -1402,9 +1402,20 @@ DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0,
        doc: /* Take cdr N times on LIST, return the result.  */)
   (Lisp_Object n, Lisp_Object list)
 {
-  CHECK_FIXNUM (n);
+  CHECK_INTEGER (n);
   Lisp_Object tail = list;
-  for (EMACS_INT num = XFIXNUM (n); 0 < num; num--)
+
+  EMACS_INT num;
+  if (FIXNUMP (n))
+    num = XFIXNUM (n);
+  else
+    {
+      num = mpz_sgn (XBIGNUM (n)->value);
+      if (0 < num)
+       num = EMACS_INT_MAX;  /* LIST cannot possibly be this long.  */
+    }
+
+  for (; 0 < num; num--)
     {
       if (! CONSP (tail))
        {