diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2022-12-16 11:08:02 +0100 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2022-12-16 17:17:23 +0100 |
commit | 17d65c99cd812e085d85f790c83ec0d540490a55 (patch) | |
tree | 21bce18eca8f858d3163cc9bcc677543903669a5 /lisp/emacs-lisp | |
parent | b01d0246d71a7a3fd92b2864a3c0c0bc9367ee0b (diff) | |
download | emacs-17d65c99cd812e085d85f790c83ec0d540490a55.tar.gz emacs-17d65c99cd812e085d85f790c83ec0d540490a55.tar.bz2 emacs-17d65c99cd812e085d85f790c83ec0d540490a55.zip |
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.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/gv.el | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el index 11251d7a963..48bc0269f36 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) |