]> git.eshelyaron.com Git - emacs.git/commitdiff
Small unwind-protect optimisation improvement
authorMattias Engdegård <mattiase@acm.org>
Wed, 1 Mar 2023 18:37:52 +0000 (19:37 +0100)
committerMattias Engdegård <mattiase@acm.org>
Thu, 2 Mar 2023 14:47:26 +0000 (15:47 +0100)
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
Use the current for-effect mode when optimising the body form,
instead of always optimising it for value.

lisp/emacs-lisp/byte-opt.el

index 0ae4c452c73e8cbc2e95318924ec6425d3a9360f..3c7aeb895259061b20939db297ed61d61dce29f4 100644 (file)
@@ -439,13 +439,12 @@ for speeding up processing.")
                               (byte-optimize-body (cdr clause) for-effect))))
                     clauses)))
 
-      ;; `unwind-protect' is a special form which here takes the shape
-      ;; (unwind-protect EXPR :fun-body UNWIND-FUN).
-      ;; We can treat it as if it were a plain function at this point,
-      ;; although there are specific optimizations possible.
-      ;; In particular, the return value of UNWIND-FUN is never used
-      ;; so its body should really be compiled for-effect, but we
-      ;; don't do that right now.
+      (`(unwind-protect ,protected-expr :fun-body ,unwind-fun)
+       ;; FIXME: The return value of UNWIND-FUN is never used so we
+       ;; could potentially optimise it for-effect, but we don't do
+       ;; that right no.
+       `(,fn ,(byte-optimize-form protected-expr for-effect)
+             :fun-body ,(byte-optimize-form unwind-fun)))
 
       (`(catch ,tag . ,exps)
        `(,fn ,(byte-optimize-form tag nil)