]> git.eshelyaron.com Git - emacs.git/commitdiff
Speed up cl-list-length
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 18 Feb 2019 22:51:26 +0000 (14:51 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 18 Feb 2019 22:52:37 +0000 (14:52 -0800)
* lisp/emacs-lisp/cl-extra.el (cl-list-length): Use ‘length’
to do the real work; this is simpler and uses a better algorithm.

lisp/emacs-lisp/cl-extra.el

index 99b55ad6b72296a58e0d28ee6e69ea8a8b0008f2..a2400a0ba375afe72ea0e88fcdc5313078587f5a 100644 (file)
@@ -594,10 +594,10 @@ too large if positive or too small if negative)."
 ;;;###autoload
 (defun cl-list-length (x)
   "Return the length of list X.  Return nil if list is circular."
-  (let ((n 0) (fast x) (slow x))
-    (while (and (cdr fast) (not (and (eq fast slow) (> n 0))))
-      (setq n (+ n 2) fast (cdr (cdr fast)) slow (cdr slow)))
-    (if fast (if (cdr fast) nil (1+ n)) n)))
+  (cl-check-type x list)
+  (condition-case nil
+      (length x)
+    (circular-list)))
 
 ;;;###autoload
 (defun cl-tailp (sublist list)