mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-19 02:10:10 +00:00
Rename to if-let* and when-let*
Make the existing if-let and when-let aliases. * lisp/emacs-lisp/subr-x.el (if-let*, when-let*): New macros. Rewrite docstrings, incorporating that from let* and the existing if-let. (if-let, when-let, and-let*): Alias them.
This commit is contained in:
parent
e080d019f4
commit
be10c00d3d
2 changed files with 28 additions and 12 deletions
|
@ -115,12 +115,16 @@ threading."
|
|||
binding))
|
||||
bindings)))
|
||||
|
||||
(defmacro if-let (bindings then &rest else)
|
||||
"Process BINDINGS and if all values are non-nil eval THEN, else ELSE.
|
||||
Argument BINDINGS is a list of tuples whose car is a symbol to be
|
||||
bound and (optionally) used in THEN, and its cadr is a sexp to be
|
||||
evalled to set symbol's value. In the special case you only want
|
||||
to bind a single value, BINDINGS can just be a plain tuple."
|
||||
(defmacro if-let* (bindings then &rest else)
|
||||
"Bind variables according to VARLIST and eval THEN or ELSE.
|
||||
Each binding is evaluated in turn with `let*', and evaluation
|
||||
stops if a binding value is nil. If all are non-nil, the value
|
||||
of THEN is returned, or the last form in ELSE is returned.
|
||||
Each element of VARLIST is a symbol (which is bound to nil)
|
||||
or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
|
||||
In the special case you only want to bind a single value,
|
||||
VARLIST can just be a plain tuple.
|
||||
\n(fn VARLIST THEN ELSE...)"
|
||||
(declare (indent 2)
|
||||
(debug ([&or (&rest (symbolp form)) (symbolp form)] form body)))
|
||||
(when (and (<= (length bindings) 2)
|
||||
|
@ -132,15 +136,23 @@ to bind a single value, BINDINGS can just be a plain tuple."
|
|||
,then
|
||||
,@else)))
|
||||
|
||||
(defmacro when-let (bindings &rest body)
|
||||
"Process BINDINGS and if all values are non-nil eval BODY.
|
||||
Argument BINDINGS is a list of tuples whose car is a symbol to be
|
||||
bound and (optionally) used in BODY, and its cadr is a sexp to be
|
||||
evalled to set symbol's value. In the special case you only want
|
||||
to bind a single value, BINDINGS can just be a plain tuple."
|
||||
(defmacro when-let* (bindings &rest body)
|
||||
"Bind variables according to VARLIST and conditionally eval BODY.
|
||||
Each binding is evaluated in turn with `let*', and evaluation
|
||||
stops if a binding value is nil. If all are non-nil, the value
|
||||
of the last form in BODY is returned.
|
||||
Each element of VARLIST is a symbol (which is bound to nil)
|
||||
or a list (SYMBOL VALUEFORM) (which binds SYMBOL to the value of VALUEFORM).
|
||||
In the special case you only want to bind a single value,
|
||||
VARLIST can just be a plain tuple.
|
||||
\n(fn VARLIST BODY...)"
|
||||
(declare (indent 1) (debug if-let))
|
||||
(list 'if-let bindings (macroexp-progn body)))
|
||||
|
||||
(defalias 'if-let 'if-let*)
|
||||
(defalias 'when-let 'when-let*)
|
||||
(defalias 'and-let* 'when-let*)
|
||||
|
||||
(defsubst hash-table-empty-p (hash-table)
|
||||
"Check whether HASH-TABLE is empty (has 0 elements)."
|
||||
(zerop (hash-table-count hash-table)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue