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.