branch: externals/compat
commit fcb8adfa7d3a6cf0c4f84b86d0ae940c1785e8af
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>

    compat-25/26: Simplify when-let and when-let*
---
 compat-25.el | 20 ++------------------
 compat-26.el | 15 ++-------------
 2 files changed, 4 insertions(+), 31 deletions(-)

diff --git a/compat-25.el b/compat-25.el
index eec0c56290..64d7fff47a 100644
--- a/compat-25.el
+++ b/compat-25.el
@@ -141,24 +141,8 @@ Evaluate each binding in turn, stopping if a binding value 
is nil.
 If all are non-nil, return the value of the last form in BODY.
 
 The variable list SPEC is the same as in `if-let'."
-  (declare (indent 1)
-           (debug ([&or (symbolp form)
-                        (&rest [&or symbolp (symbolp form) (form)])]
-                   body)))
-  (when (and (<= (length spec) 2)
-             (not (listp (car spec))))
-    ;; Adjust the single binding case
-    (setq spec (list spec)))
-  (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))))
-    `(let* ,(nreverse list)
-       (if ,(caar list) ,(macroexp-progn body)))))
+  (declare (indent 1) (debug if-let))
+  (list 'if-let spec (macroexp-progn body)))
 
 ;;;; Defined in subr-x.el
 
diff --git a/compat-26.el b/compat-26.el
index c3893ec6ca..b08dd3f89c 100644
--- a/compat-26.el
+++ b/compat-26.el
@@ -281,19 +281,8 @@ This is like `if-let' but doesn't handle a VARLIST of the 
form
   "Bind variables according to VARLIST and conditionally evaluate BODY.
 This is like `when-let' but doesn't handle a VARLIST of the form
 \(SYMBOL SOMETHING) specially."
-  (declare (indent 1)
-           (debug ((&rest [&or symbolp (symbolp form) (form)])
-                   body)))
-  (let ((empty (make-symbol "s"))
-        (last t) list)
-    (dolist (var varlist)
-      (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))))
-    `(let* ,(nreverse list)
-       (when ,(caar list) ,@body))))
+  (declare (indent 1) (debug if-let*))
+  (list 'if-let* varlist (macroexp-progn body)))
 
 (compat-defmacro and-let* (varlist &rest body) ;; <OK>
   "Bind variables according to VARLIST and conditionally evaluate BODY.

Reply via email to