]> git.eshelyaron.com Git - emacs.git/commit
Optimise let and let* whose body is constant or the last variable
authorMattias Engdegård <mattiase@acm.org>
Thu, 29 Jul 2021 13:35:55 +0000 (15:35 +0200)
committerMattias Engdegård <mattiase@acm.org>
Fri, 30 Jul 2021 07:54:30 +0000 (09:54 +0200)
commit52a55e11deb7822c67a8d7e6f2544b8f41d25a4e
tree0054a11e914e09d5dc775a6c07585c73c1cf0e35
parentab9c06449df4c4c58d586573003de419199cc1be
Optimise let and let* whose body is constant or the last variable

Simplify  (let ((X1 E1) ... (Xn En)) Xn)
      =>  (progn E1 ... En)

and       (let* ((X1 E1) ... (Xn En)) Xn)
      =>  (let* ((X1 E1) ... (Xn-1 En-1)) En)

and similarly the case where the body is a constant, extending a
previous optimisation that only applied to the constant nil.
This reduces the number of bound variables, shortens the code, and
enables further optimisations.

* lisp/emacs-lisp/byte-opt.el (byte-optimize-letX): Rewrite using
`pcase` and add the aforementioned transformations.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases):
Add test cases.
lisp/emacs-lisp/byte-opt.el
test/lisp/emacs-lisp/bytecomp-tests.el