emacs-diffs
[Top][All Lists]
Advanced

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

emacs-29 17d65c99cd 1/3: alist-get testfn argument evaluation correction


From: Mattias Engdegård
Subject: emacs-29 17d65c99cd 1/3: alist-get testfn argument evaluation correction
Date: Fri, 16 Dec 2022 11:22:21 -0500 (EST)

branch: emacs-29
commit 17d65c99cd812e085d85f790c83ec0d540490a55
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    alist-get testfn argument evaluation correction
    
    * lisp/emacs-lisp/gv.el (alist-get):
    Evaluate TESTFN exactly once (previously up to 3 times).
    Reduce the macro-expansion to include a call to either assoc or assq,
    not both; this reduces the generated code size in some cases.
---
 lisp/emacs-lisp/gv.el | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el
index 11251d7a96..48bc0269f3 100644
--- a/lisp/emacs-lisp/gv.el
+++ b/lisp/emacs-lisp/gv.el
@@ -417,9 +417,9 @@ The return value is the last VAL in the list.
   (lambda (do key alist &optional default remove testfn)
     (macroexp-let2 macroexp-copyable-p k key
       (gv-letplace (getter setter) alist
-        (macroexp-let2 nil p `(if (and ,testfn (not (eq ,testfn 'eq)))
-                                  (assoc ,k ,getter ,testfn)
-                                (assq ,k ,getter))
+        (macroexp-let2 nil p (if (member testfn '(nil 'eq #'eq))
+                                 `(assq ,k ,getter)
+                               `(assoc ,k ,getter ,testfn))
           (funcall do (if (null default) `(cdr ,p)
                         `(if ,p (cdr ,p) ,default))
                    (lambda (v)



reply via email to

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