mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-05 22:20:24 -08:00
Use take where clearly safe to do so (bug#56521)
* lisp/emacs-lisp/seq.el (seq-take): * lisp/auth-source.el (auth-source-secrets-search) (auth-source-plstore-search): * lisp/gnus/message.el (message-insert-formatted-citation-line): * lisp/net/dbus.el (dbus-unregister-object): * lisp/replace.el (occur-context-lines): * test/src/print-tests.el (print-circular): Replace hand-written loop or `butlast` call with `take` for clarity, performance and validation. We have the equivalence (take N LIST) = (butlast LIST (- (length LIST) N)).
This commit is contained in:
parent
2d97fe2710
commit
5ad8f3e570
6 changed files with 14 additions and 16 deletions
|
|
@ -1622,7 +1622,7 @@ authentication tokens:
|
|||
(not (string-match label item)))
|
||||
collect item)))
|
||||
;; TODO: respect max in `secrets-search-items', not after the fact
|
||||
(items (butlast items (- (length items) max)))
|
||||
(items (take max items))
|
||||
;; convert the item name to a full plist
|
||||
(items (mapcar (lambda (item)
|
||||
(append
|
||||
|
|
@ -2080,7 +2080,7 @@ entries for git.gnus.org:
|
|||
search-keys)))
|
||||
(items (plstore-find store search-spec))
|
||||
(item-names (mapcar #'car items))
|
||||
(items (butlast items (- (length items) max)))
|
||||
(items (take max items))
|
||||
;; convert the item to a full plist
|
||||
(items (mapcar (lambda (item)
|
||||
(let* ((plist (copy-tree (cdr item)))
|
||||
|
|
|
|||
|
|
@ -587,11 +587,13 @@ Signal an error if SEQUENCE is empty."
|
|||
|
||||
(cl-defmethod seq-take ((list list) n)
|
||||
"Optimized implementation of `seq-take' for lists."
|
||||
(let ((result '()))
|
||||
(while (and list (> n 0))
|
||||
(setq n (1- n))
|
||||
(push (pop list) result))
|
||||
(nreverse result)))
|
||||
(if (eval-when-compile (fboundp 'take))
|
||||
(take n list)
|
||||
(let ((result '()))
|
||||
(while (and list (> n 0))
|
||||
(setq n (1- n))
|
||||
(push (pop list) result))
|
||||
(nreverse result))))
|
||||
|
||||
(cl-defmethod seq-drop-while (pred (list list))
|
||||
"Optimized implementation of `seq-drop-while' for lists."
|
||||
|
|
|
|||
|
|
@ -4180,8 +4180,7 @@ See `message-citation-line-format'."
|
|||
(setq fname (car names)
|
||||
lname (string-join (cdr names) " ")))
|
||||
((> count 3)
|
||||
(setq fname (string-join (butlast names (- count 2))
|
||||
" ")
|
||||
(setq fname (string-join (take 2 names) " ")
|
||||
lname (string-join (nthcdr 2 names) " "))))
|
||||
(when (string-match "\\(.*\\),\\'" fname)
|
||||
(let ((newlname (match-string 1 fname)))
|
||||
|
|
|
|||
|
|
@ -941,9 +941,7 @@ association to the service from D-Bus."
|
|||
|
||||
;; Loop over the registered functions.
|
||||
(dolist (elt entry)
|
||||
(when (equal
|
||||
value
|
||||
(butlast (cdr elt) (- (length (cdr elt)) (length value))))
|
||||
(when (equal value (take (length value) (cdr elt)))
|
||||
(setq ret t)
|
||||
;; Compute new hash value. If it is empty, remove it from the
|
||||
;; hash table.
|
||||
|
|
|
|||
|
|
@ -2437,9 +2437,8 @@ See also `multi-occur'."
|
|||
(if (>= (+ prev-line (length prev-after-lines))
|
||||
(- curr-line (length before-lines)))
|
||||
(setq prev-after-lines
|
||||
(butlast prev-after-lines
|
||||
(- (length prev-after-lines)
|
||||
(- curr-line prev-line (length before-lines) 1))))
|
||||
(take (- curr-line prev-line (length before-lines) 1)
|
||||
prev-after-lines))
|
||||
;; Separate non-overlapping context lines with a dashed line.
|
||||
(setq separator "-------\n")))
|
||||
|
||||
|
|
|
|||
|
|
@ -514,7 +514,7 @@ otherwise, use a different charset."
|
|||
(should (< lead (length numbers)))
|
||||
(should (<= lead loopback-index))
|
||||
(should (< loopback-index (length numbers)))
|
||||
(let ((lead-part (butlast numbers (- (length numbers) lead)))
|
||||
(let ((lead-part (take lead numbers))
|
||||
(loop-part (nthcdr lead numbers)))
|
||||
;; The lead part must match exactly.
|
||||
(should (equal lead-part (number-sequence 1 lead)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue