[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 6058b4559d4: Better internal-make-closure optimisation
From: |
Mattias Engdegård |
Subject: |
master 6058b4559d4: Better internal-make-closure optimisation |
Date: |
Sun, 4 Jun 2023 13:23:29 -0400 (EDT) |
branch: master
commit 6058b4559d4b7d42bbcb6da787a95334aa8994ca
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>
Better internal-make-closure optimisation
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker):
Optimise closed-over values in closure creation like any other, which
can lead to stack variables being eliminated.
---
lisp/emacs-lisp/byte-opt.el | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 562f21aa751..f64674d5a6c 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -447,16 +447,10 @@ for speeding up processing.")
. ,(byte-optimize-body exps for-effect)))
;; Needed as long as we run byte-optimize-form after cconv.
- (`(internal-make-closure . ,_)
- (and (not for-effect)
- (progn
- ;; Look up free vars and mark them to be kept, so that they
- ;; won't be optimized away.
- (dolist (var (caddr form))
- (let ((lexvar (assq var byte-optimize--lexvars)))
- (when lexvar
- (setcar (cdr lexvar) t))))
- form)))
+ (`(internal-make-closure ,vars ,env . ,rest)
+ (if for-effect
+ `(progn ,@(byte-optimize-body env t))
+ `(,fn ,vars ,(mapcar #'byte-optimize-form env) . ,rest)))
(`((lambda . ,_) . ,_)
(let ((newform (macroexp--unfold-lambda form)))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 6058b4559d4: Better internal-make-closure optimisation,
Mattias Engdegård <=