emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/compat 9574eb1c94 2/3: compat-29: Use simpler definitio


From: ELPA Syncer
Subject: [elpa] externals/compat 9574eb1c94 2/3: compat-29: Use simpler definition for while-let
Date: Sun, 8 Jan 2023 09:57:25 -0500 (EST)

branch: externals/compat
commit 9574eb1c940d0acb11fea82edfa61f05d270b05a
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    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
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]