aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias EngdegÄrd2020-07-06 12:51:04 +0200
committerMattias EngdegÄrd2020-07-07 17:55:20 +0200
commitdf3ece9d2ed61c9526dbf718e3c96d72bd53dccb (patch)
tree2939fca286698ec92b33543ad4970ea6f27b8969
parent1a850f4b20d11938d68270147d3d5ebc3c4899f4 (diff)
downloademacs-df3ece9d2ed61c9526dbf718e3c96d72bd53dccb.tar.gz
emacs-df3ece9d2ed61c9526dbf718e3c96d72bd53dccb.zip
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.
-rw-r--r--lisp/emacs-lisp/byte-opt.el11
1 files changed, 11 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 646994a37c1..194ceee176f 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -842,6 +842,15 @@
842 ;; Arity errors reported elsewhere. 842 ;; Arity errors reported elsewhere.
843 form)) 843 form))
844 844
845(defun byte-optimize-assoc (form)
846 ;; Replace 2-argument `assoc' with `assq', `rassoc' with `rassq',
847 ;; if the first arg is a symbol.
848 (if (and (= (length form) 3)
849 (byte-optimize--constant-symbol-p (nth 1 form)))
850 (cons (if (eq (car form) 'assoc) 'assq 'rassq)
851 (cdr form))
852 form))
853
845(defun byte-optimize-memq (form) 854(defun byte-optimize-memq (form)
846 ;; (memq foo '(bar)) => (and (eq foo 'bar) '(bar)) 855 ;; (memq foo '(bar)) => (and (eq foo 'bar) '(bar))
847 (if (= (length (cdr form)) 2) 856 (if (= (length (cdr form)) 2)
@@ -886,6 +895,8 @@
886(put 'memq 'byte-optimizer 'byte-optimize-memq) 895(put 'memq 'byte-optimizer 'byte-optimize-memq)
887(put 'memql 'byte-optimizer 'byte-optimize-member) 896(put 'memql 'byte-optimizer 'byte-optimize-member)
888(put 'member 'byte-optimizer 'byte-optimize-member) 897(put 'member 'byte-optimizer 'byte-optimize-member)
898(put 'assoc 'byte-optimizer 'byte-optimize-assoc)
899(put 'rassoc 'byte-optimizer 'byte-optimize-assoc)
889 900
890(put '+ 'byte-optimizer 'byte-optimize-plus) 901(put '+ 'byte-optimizer 'byte-optimize-plus)
891(put '* 'byte-optimizer 'byte-optimize-multiply) 902(put '* 'byte-optimizer 'byte-optimize-multiply)