(put 'let* 'byte-optimizer #'byte-optimize-letX)
(defun byte-optimize-letX (form)
(pcase form
- ;; No bindings.
+ ;; Bindings list is empty.
(`(,_ () . ,body)
`(progn . ,body))
`(progn ,@(mapcar #'cadr bindings) ,const)
`(,head ,(butlast bindings) ,(cadar (last bindings)) ,const)))
- ;; Body is last variable.
+ ;; Body does nothing but return the last variable in bindings.
(`(,head ,(and bindings
(let last-var (caar (last bindings))))
,(and last-var ; non-linear pattern