branch: externals/compat
commit 9574eb1c940d0acb11fea82edfa61f05d270b05a
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>
compat-29: Use simpler definition for while-let
---
compat-29.el | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/compat-29.el b/compat-29.el
index ff99e176ec..a92ce4e08d 100644
--- a/compat-29.el
+++ b/compat-29.el
@@ -321,17 +321,13 @@ If all bindings are non-nil, eval BODY and repeat.
The variable list SPEC is the same as in `if-let'."
(declare (indent 1) (debug if-let))
- (let ((empty (make-symbol "s"))
- (last t) list)
- (dolist (var spec)
- (push `(,(if (cdr var) (car var) empty)
- (and ,last ,(if (cdr var) (cadr var) (car var))))
- list)
- (when (or (cdr var) (consp (car var)))
- (setq last (caar list))))
- `(while (let* ,(nreverse list)
- (and ,(caar list)
- (progn ,(macroexp-progn (or body '(t))) t))))))
+ (let ((done (gensym "done")))
+ `(catch ',done
+ (while t
+ (if-let* ,spec
+ (progn
+ ,@body)
+ (throw ',done nil))))))
;;;; Defined in files.el