diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2022-09-16 15:29:03 +0200 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2022-09-16 15:33:12 +0200 |
commit | 4da0fbdc82577da0583c8858a52f456beb23fd0e (patch) | |
tree | 42933fcb0f05db0327d6b8f546f21f07a2aaf6ec | |
parent | 838e6cae81392139377dd8b78b52ff3aaeba2fc1 (diff) | |
download | emacs-4da0fbdc82577da0583c8858a52f456beb23fd0e.tar.gz |
Faster and more robust list-of-strings-p
* 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.
-rw-r--r-- | lisp/subr.el | 5 | ||||
-rw-r--r-- | test/lisp/subr-tests.el | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/lisp/subr.el b/lisp/subr.el index e8e8f1584b4..caea2b9f933 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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. diff --git a/test/lisp/subr-tests.el b/test/lisp/subr-tests.el index 38966cea585..347981e8185 100644 --- a/test/lisp/subr-tests.el +++ b/test/lisp/subr-tests.el @@ -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 |