]> git.eshelyaron.com Git - emacs.git/commitdiff
Improved cons optimisation
authorMattias Engdegård <mattiase@acm.org>
Fri, 15 Jul 2022 21:42:45 +0000 (23:42 +0200)
committerMattias Engdegård <mattiase@acm.org>
Sat, 16 Jul 2022 10:18:41 +0000 (12:18 +0200)
* lisp/emacs-lisp/byte-opt.el (byte-optimize-cons):
Add the transform

 (cons X (list Y...)) -> (list X Y...)

lisp/emacs-lisp/byte-opt.el

index 5a138e9fee53b031ae059f00e20a3a8f43da5656..480b652342b969d2041db01d9da1a86e1e3c4e97 100644 (file)
@@ -1281,11 +1281,14 @@ See Info node `(elisp) Integer Basics'."
 
 (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))
+  (let ((tail (nth 2 form)))
+    (cond
+     ;; (cons X nil) => (list X)
+     ((null tail) `(list ,(nth 1 form)))
+     ;; (cons X (list YS...)) -> (list X YS...)
+     ((and (consp tail) (eq (car tail) 'list))
+      `(,(car tail) ,(nth 1 form) . ,(cdr tail)))
+     (t form))))
 
 (put 'list 'byte-optimizer #'byte-optimize-list)
 (defun byte-optimize-list (form)