[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master f559bd1248a: * lisp/emacs-lisp/cl-macs.el (cl--slet): Unbreak boo
From: |
Stefan Monnier |
Subject: |
master f559bd1248a: * lisp/emacs-lisp/cl-macs.el (cl--slet): Unbreak bootstrap |
Date: |
Sat, 24 Jun 2023 11:44:36 -0400 (EDT) |
branch: master
commit f559bd1248a265662665c462b750eb5fc64dd811
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* lisp/emacs-lisp/cl-macs.el (cl--slet): Unbreak bootstrap
---
lisp/emacs-lisp/cl-macs.el | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 4caa573ea9d..540bcc7f3b3 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -245,17 +245,20 @@ The name is made by appending a number to PREFIX, default
\"T\"."
(defun cl--slet (bindings body)
"Like `cl--slet*' but for \"parallel let\"."
- (cond
- ((seq-some (lambda (binding) (macroexp--dynamic-variable-p (car binding)))
- bindings)
- ;; FIXME: We use `identity' to obfuscate the code enough to
- ;; circumvent the known bug in `macroexp--unfold-lambda' :-(
- `(funcall (identity (lambda (,@(mapcar #'car bindings))
- ,@(macroexp-unprogn body)))
- ,@(mapcar #'cadr bindings)))
- ((null (cdr bindings))
- (macroexp-let* bindings body))
- (t `(let ,bindings ,@(macroexp-unprogn body)))))
+ (let ((dyn nil)) ;Is there a var declared as dynbound among the bindings?
+ ;; `seq-some' lead to bootstrap problems.
+ (dolist (binding bindings)
+ (if (macroexp--dynamic-variable-p (car binding)) (setq dyn t)))
+ (cond
+ (dyn
+ ;; FIXME: We use `identity' to obfuscate the code enough to
+ ;; circumvent the known bug in `macroexp--unfold-lambda' :-(
+ `(funcall (identity (lambda (,@(mapcar #'car bindings))
+ ,@(macroexp-unprogn body)))
+ ,@(mapcar #'cadr bindings)))
+ ((null (cdr bindings))
+ (macroexp-let* bindings body))
+ (t `(let ,bindings ,@(macroexp-unprogn body))))))
(defun cl--slet* (bindings body)
"Like `macroexp-let*' but uses static scoping for all the BINDINGS."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master f559bd1248a: * lisp/emacs-lisp/cl-macs.el (cl--slet): Unbreak bootstrap,
Stefan Monnier <=