[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 3966a28: Generalise CPS-conversion let optimisation
From: |
Mattias Engdegård |
Subject: |
master 3966a28: Generalise CPS-conversion let optimisation |
Date: |
Tue, 30 Nov 2021 09:09:30 -0500 (EST) |
branch: master
commit 3966a28454dbc8ad0d20475325d5e03299025b57
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>
Generalise CPS-conversion let optimisation
* lisp/emacs-lisp/generator.el (cps--transform-1):
Eliminate a temporary for the last of any `let` form, not just for
single-binding ones. Suggested by Stefan Monnier.
---
lisp/emacs-lisp/generator.el | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/lisp/emacs-lisp/generator.el b/lisp/emacs-lisp/generator.el
index 4e286ed..cb02410 100644
--- a/lisp/emacs-lisp/generator.el
+++ b/lisp/emacs-lisp/generator.el
@@ -294,26 +294,25 @@ DYNAMIC-VAR bound to STATIC-VAR."
(`(,(or 'let 'let*) () . ,body)
(cps--transform-1 `(progn ,@body) next-state))
- (`(let (,binding) . ,body)
- (cps--transform-1 `(let* (,binding) ,@body) next-state))
-
;; Transform multi-variable `let' into `let*':
;; (let ((v1 e1) ... (vN eN)) BODY)
- ;; -> (let* ((t1 e1) ... (tN eN) (v1 t1) (vN tN)) BODY)
+ ;; -> (let* ((t1 e1) ... (tN-1 eN-1) (vN eN) (v1 t1) (vN-1 tN-1)) BODY)
(`(let ,bindings . ,body)
(let* ((bindings (cl-loop for binding in bindings
collect (if (symbolp binding)
(list binding nil)
binding)))
- (temps (cl-loop for (var _value-form) in bindings
+ (butlast-bindings (butlast bindings))
+ (temps (cl-loop for (var _value-form) in butlast-bindings
collect (cps--add-binding var))))
(cps--transform-1
`(let* ,(append
- (cl-loop for (_var value-form) in bindings
+ (cl-loop for (_var value-form) in butlast-bindings
for temp in temps
collect (list temp value-form))
- (cl-loop for (var _binding) in bindings
+ (last bindings)
+ (cl-loop for (var _binding) in butlast-bindings
for temp in temps
collect (list var temp)))
,@body)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 3966a28: Generalise CPS-conversion let optimisation,
Mattias Engdegård <=