summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2021-06-03 21:15:11 +0200
committerMattias EngdegÄrd <mattiase@acm.org>2021-06-03 21:28:10 +0200
commita517b77ffe8ed8cdfeec1a9b5258fd16b2446214 (patch)
treed0d336d70618a55792bd92998f9ea2b0ad8578ad /lisp/emacs-lisp
parentc3b44858dc9d9eeda4863ed6ffafbeb446374465 (diff)
downloademacs-a517b77ffe8ed8cdfeec1a9b5258fd16b2446214.tar.gz
emacs-a517b77ffe8ed8cdfeec1a9b5258fd16b2446214.tar.bz2
emacs-a517b77ffe8ed8cdfeec1a9b5258fd16b2446214.zip
Optimise (cons X nil) to (list X)
* lisp/emacs-lisp/byte-opt.el (byte-optimize-cons): New function.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/byte-opt.el8
1 files changed, 8 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 10a50da4628..99e84e23ad8 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -1269,6 +1269,14 @@ See Info node `(elisp) Integer Basics'."
form)
form))
+(put 'cons 'byte-optimizer #'byte-optimize-cons)
+(defun byte-optimize-cons (form)
+ ;; (cons X nil) => (list X)
+ (if (and (= (safe-length form) 3)
+ (null (nth 2 form)))
+ `(list ,(nth 1 form))
+ form))
+
;; Fixme: delete-char -> delete-region (byte-coded)
;; optimize string-as-unibyte, string-as-multibyte, string-make-unibyte,
;; string-make-multibyte for constant args.