]> git.eshelyaron.com Git - emacs.git/commitdiff
Faster and more robust list-of-strings-p
authorMattias Engdegård <mattiase@acm.org>
Fri, 16 Sep 2022 13:29:03 +0000 (15:29 +0200)
committerMattias Engdegård <mattiase@acm.org>
Fri, 16 Sep 2022 13:33:12 +0000 (15:33 +0200)
* lisp/subr.el (list-of-strings-p): Speed up by a factor 4 (approx.)
and don't crash on dotted lists.
* test/lisp/subr-tests.el (test-list-of-strings-p): Extend test.

lisp/subr.el
test/lisp/subr-tests.el

index e8e8f1584b4789bd72fdaa3cdb52097a5824ce7a..caea2b9f933c476032e314074878c0080f6b5d79 100644 (file)
@@ -4028,8 +4028,9 @@ Otherwise, return nil."
 
 (defun list-of-strings-p (object)
   "Return t if OBJECT is nil or a list of strings."
-  (and (listp object)
-       (seq-every-p #'stringp object)))
+  (while (and (consp object) (stringp (car object)))
+    (setq object (cdr object)))
+  (null object))
 
 (defun booleanp (object)
   "Return t if OBJECT is one of the two canonical boolean values: t or nil.
index 38966cea585df3ed7f08a3c26d6b0c1d56aad6d4..347981e8185b8e07a0234a36cf0cb3ed3ebb00fd 100644 (file)
@@ -1163,7 +1163,8 @@ final or penultimate step during initialization."))
   (should (list-of-strings-p nil))
   (should (list-of-strings-p '("a" "b")))
   (should-not (list-of-strings-p ["a" "b"]))
-  (should-not (list-of-strings-p '("a" nil "b"))))
+  (should-not (list-of-strings-p '("a" nil "b")))
+  (should-not (list-of-strings-p '("a" "b" . "c"))))
 
 (provide 'subr-tests)
 ;;; subr-tests.el ends here