]> git.eshelyaron.com Git - emacs.git/commitdiff
alist-get testfn argument evaluation correction
authorMattias Engdegård <mattiase@acm.org>
Fri, 16 Dec 2022 10:08:02 +0000 (11:08 +0100)
committerMattias Engdegård <mattiase@acm.org>
Mon, 19 Dec 2022 12:19:09 +0000 (13:19 +0100)
* 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

index 11251d7a963091e57a535ae42d748225f8afe939..48bc0269f36e42a66b87fcafe45998a3e674662a 100644 (file)
@@ -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)