Optimise assoc and rassoc with symbol key to assq and rassq
This is the same transformation made for member to memq. * lisp/emacs-lisp/byte-opt.el (byte-optimize-assoc): New function. (assoc, rassoc): Set the byte-optimizer property.
This commit is contained in:
parent
1a850f4b20
commit
df3ece9d2e
1 changed files with 11 additions and 0 deletions
|
@ -842,6 +842,15 @@
|
|||
;; Arity errors reported elsewhere.
|
||||
form))
|
||||
|
||||
(defun byte-optimize-assoc (form)
|
||||
;; Replace 2-argument `assoc' with `assq', `rassoc' with `rassq',
|
||||
;; if the first arg is a symbol.
|
||||
(if (and (= (length form) 3)
|
||||
(byte-optimize--constant-symbol-p (nth 1 form)))
|
||||
(cons (if (eq (car form) 'assoc) 'assq 'rassq)
|
||||
(cdr form))
|
||||
form))
|
||||
|
||||
(defun byte-optimize-memq (form)
|
||||
;; (memq foo '(bar)) => (and (eq foo 'bar) '(bar))
|
||||
(if (= (length (cdr form)) 2)
|
||||
|
@ -886,6 +895,8 @@
|
|||
(put 'memq 'byte-optimizer 'byte-optimize-memq)
|
||||
(put 'memql 'byte-optimizer 'byte-optimize-member)
|
||||
(put 'member 'byte-optimizer 'byte-optimize-member)
|
||||
(put 'assoc 'byte-optimizer 'byte-optimize-assoc)
|
||||
(put 'rassoc 'byte-optimizer 'byte-optimize-assoc)
|
||||
|
||||
(put '+ 'byte-optimizer 'byte-optimize-plus)
|
||||
(put '* 'byte-optimizer 'byte-optimize-multiply)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue