emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/compat e8c9f3bbd3 68/77: sort: Fix handling of :reverse


From: ELPA Syncer
Subject: [elpa] externals/compat e8c9f3bbd3 68/77: sort: Fix handling of :reverse argument
Date: Mon, 24 Jun 2024 12:59:04 -0400 (EDT)

branch: externals/compat
commit e8c9f3bbd38a4d045b75cfde7669f5e2efe30bd8
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    sort: Fix handling of :reverse argument
---
 compat-30.el | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/compat-30.el b/compat-30.el
index 6c5db9e5c8..edbfd9af03 100644
--- a/compat-30.el
+++ b/compat-30.el
@@ -310,29 +310,26 @@ The following arguments are defined:
 For compatibility, the calling convention (sort SEQ LESSP) can also be used;
 in this case, sorting is always done in-place."
   :extended t
-  (let ((in-place t) (orig-seq seq))
+  (let ((in-place t) (reverse nil) (orig-seq seq))
     (when (or (not lessp) rest)
       (setq
        rest (if lessp (cons lessp rest) rest)
        in-place (plist-get rest :in-place)
+       reverse (plist-get rest :reverse)
        lessp (let ((key (plist-get rest :key))
-                   (reverse (plist-get rest :reverse))
                    (< (or (plist-get rest :lessp) #'value<)))
-               (cond
-                ((and key reverse)
-                 (lambda (a b) (not (funcall < (funcall key a) (funcall key 
b)))))
-                (key
-                 (lambda (a b) (funcall < (funcall key a) (funcall key b))))
-                (reverse
-                 (lambda (a b) (not (funcall < a b))))
-                (t <)))
+               (if key
+                 (lambda (a b) (funcall < (funcall key a) (funcall key b)))
+                 <))
        seq (if (or (eval-when-compile (< emacs-major-version 25)) in-place)
                seq
              (copy-sequence seq))))
     ;; Emacs 24 does not support vectors. Convert to list.
     (when (and (eval-when-compile (< emacs-major-version 25)) (vectorp seq))
       (setq seq (append seq nil)))
-    (setq seq (sort seq lessp))
+    (setq seq (if reverse
+                  (nreverse (sort (nreverse seq) lessp))
+                (sort seq lessp)))
     ;; Emacs 24: Convert back to vector.
     (if (and (eval-when-compile (< emacs-major-version 25)) (vectorp orig-seq))
         (if in-place



reply via email to

[Prev in Thread] Current Thread [Next in Thread]