diff options
| author | Mattias EngdegÄrd | 2020-07-06 12:51:04 +0200 |
|---|---|---|
| committer | Mattias EngdegÄrd | 2020-07-07 17:55:20 +0200 |
| commit | df3ece9d2ed61c9526dbf718e3c96d72bd53dccb (patch) | |
| tree | 2939fca286698ec92b33543ad4970ea6f27b8969 | |
| parent | 1a850f4b20d11938d68270147d3d5ebc3c4899f4 (diff) | |
| download | emacs-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.el | 11 |
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) |