]> git.eshelyaron.com Git - emacs.git/commitdiff
Normalise nested `progn` forms in byte-code optimiser
authorMattias Engdegård <mattiase@acm.org>
Mon, 6 Sep 2021 12:41:26 +0000 (14:41 +0200)
committerMattias Engdegård <mattiase@acm.org>
Mon, 6 Sep 2021 14:47:13 +0000 (16:47 +0200)
* lisp/emacs-lisp/byte-opt.el (byte-optimize-body): Flatten body.
This simplifies the source tree and reduces the number of different
cases that other optimisations need to take into account.

lisp/emacs-lisp/byte-opt.el

index 23c5a566cea55d12b782bc1bf6c276fb47995124..ff512cca36ffdeb28f7980264a769765b5be9481 100644 (file)
@@ -727,8 +727,12 @@ Same format as `byte-optimize--lexvars', with shared structure and contents.")
     (while rest
       (setq fe (or all-for-effect (cdr rest)))
       (setq new (and (car rest) (byte-optimize-form (car rest) fe)))
-      (if (or new (not fe))
-         (setq result (cons new result)))
+      (when (and (consp new) (eq (car new) 'progn))
+        ;; Flatten `progn' form into the body.
+        (setq result (append (reverse (cdr new)) result))
+        (setq new (pop result)))
+      (when (or new (not fe))
+       (setq result (cons new result)))
       (setq rest (cdr rest)))
     (nreverse result)))