1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-11 00:30:17 -08:00

Optimise member and assoc (etc) with constant empty list

* lisp/emacs-lisp/byte-opt.el
(byte-optimize-assq): New.
(byte-optimize-member, byte-optimize-assoc, byte-optimize-memq):
When the list argument is constant nil, the result is always nil.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
Add test cases.
This commit is contained in:
Mattias Engdegård 2021-07-28 21:07:58 +02:00
parent ba6df55475
commit fab1e220db
2 changed files with 56 additions and 25 deletions

View file

@ -536,6 +536,21 @@
(let ((_a 1)
(_b 2))
'z)
;; Check empty-list optimisations.
(mapcar (lambda (x) (member x nil)) '("a" 2 nil))
(mapcar (lambda (x) (memql x nil)) '(a 2 nil))
(mapcar (lambda (x) (memq x nil)) '(a nil))
(let ((n 0))
(list (mapcar (lambda (x) (member (setq n (1+ n)) nil)) '(a "nil"))
n))
(mapcar (lambda (x) (assoc x nil)) '("a" nil))
(mapcar (lambda (x) (assq x nil)) '(a nil))
(mapcar (lambda (x) (rassoc x nil)) '("a" nil))
(mapcar (lambda (x) (rassq x nil)) '(a nil))
(let ((n 0))
(list (mapcar (lambda (x) (assoc (setq n (1+ n)) nil)) '(a "nil"))
n))
)
"List of expressions for cross-testing interpreted and compiled code.")