]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/fns.c (mapcar1): Test types in rough order of likelyhood.
authorMattias Engdegård <mattiase@acm.org>
Thu, 16 Jun 2022 14:04:48 +0000 (16:04 +0200)
committerMattias Engdegård <mattiase@acm.org>
Thu, 16 Jun 2022 14:04:48 +0000 (16:04 +0200)
src/fns.c

index 97af39c4161c9f786a94eea7351e4516f0c0f1e7..4df944507c79c15c6fccd2ad8b3465e7a17db3be 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -2757,20 +2757,26 @@ usage: (nconc &rest LISTS)  */)
 static EMACS_INT
 mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
 {
-  if (VECTORP (seq) || COMPILEDP (seq))
+  if (NILP (seq))
+    return 0;
+  else if (CONSP (seq))
     {
+      Lisp_Object tail = seq;
       for (ptrdiff_t i = 0; i < leni; i++)
        {
-         Lisp_Object dummy = call1 (fn, AREF (seq, i));
+         if (! CONSP (tail))
+           return i;
+         Lisp_Object dummy = call1 (fn, XCAR (tail));
          if (vals)
            vals[i] = dummy;
+         tail = XCDR (tail);
        }
     }
-  else if (BOOL_VECTOR_P (seq))
+  else if (VECTORP (seq) || COMPILEDP (seq))
     {
-      for (EMACS_INT i = 0; i < leni; i++)
+      for (ptrdiff_t i = 0; i < leni; i++)
        {
-         Lisp_Object dummy = call1 (fn, bool_vector_ref (seq, i));
+         Lisp_Object dummy = call1 (fn, AREF (seq, i));
          if (vals)
            vals[i] = dummy;
        }
@@ -2788,17 +2794,14 @@ mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
            vals[i_before] = dummy;
        }
     }
-  else   /* Must be a list, since Flength did not get an error */
+  else
     {
-      Lisp_Object tail = seq;
-      for (ptrdiff_t i = 0; i < leni; i++)
+      eassert (BOOL_VECTOR_P (seq));
+      for (EMACS_INT i = 0; i < leni; i++)
        {
-         if (! CONSP (tail))
-           return i;
-         Lisp_Object dummy = call1 (fn, XCAR (tail));
+         Lisp_Object dummy = call1 (fn, bool_vector_ref (seq, i));
          if (vals)
            vals[i] = dummy;
-         tail = XCDR (tail);
        }
     }