|
|
|
|
@ -1116,68 +1116,61 @@ sorts it in descending order." |
|
|
|
|
|
|
|
|
|
(defmacro -when-let (var-val &rest body) |
|
|
|
|
"If VAL evaluates to non-nil, bind it to VAR and execute body. |
|
|
|
|
VAR-VAL should be a (VAR VAL) pair." |
|
|
|
|
VAR-VAL should be a (VAR VAL) pair. |
|
|
|
|
|
|
|
|
|
Note: binding is done according to `-let'." |
|
|
|
|
(declare (debug ((symbolp form) body)) |
|
|
|
|
(indent 1)) |
|
|
|
|
(let ((var (car var-val)) |
|
|
|
|
(val (cadr var-val))) |
|
|
|
|
`(let ((,var ,val)) |
|
|
|
|
(when ,var |
|
|
|
|
,@body)))) |
|
|
|
|
`(-if-let ,var-val (progn ,@body))) |
|
|
|
|
|
|
|
|
|
(defmacro -when-let* (vars-vals &rest body) |
|
|
|
|
"If all VALS evaluate to true, bind them to their corresponding |
|
|
|
|
VARS and execute body. VARS-VALS should be a list of (VAR VAL) |
|
|
|
|
pairs (corresponding to bindings of `let*')." |
|
|
|
|
pairs. |
|
|
|
|
|
|
|
|
|
Note: binding is done according to `-let'." |
|
|
|
|
(declare (debug ((&rest (symbolp form)) body)) |
|
|
|
|
(indent 1)) |
|
|
|
|
(if (= (length vars-vals) 1) |
|
|
|
|
`(-when-let ,(car vars-vals) |
|
|
|
|
,@body) |
|
|
|
|
`(-when-let ,(car vars-vals) |
|
|
|
|
(-when-let* ,(cdr vars-vals) |
|
|
|
|
,@body)))) |
|
|
|
|
`(-if-let* ,vars-vals (progn ,@body))) |
|
|
|
|
|
|
|
|
|
(defmacro --when-let (val &rest body) |
|
|
|
|
"If VAL evaluates to non-nil, bind it to `it' and execute |
|
|
|
|
body." |
|
|
|
|
(declare (debug (form body)) |
|
|
|
|
(indent 1)) |
|
|
|
|
`(let ((it ,val)) |
|
|
|
|
(when it |
|
|
|
|
,@body))) |
|
|
|
|
`(--if-let ,val (progn ,@body))) |
|
|
|
|
|
|
|
|
|
(defmacro -if-let (var-val then &rest else) |
|
|
|
|
"If VAL evaluates to non-nil, bind it to VAR and do THEN, |
|
|
|
|
otherwise do ELSE. VAR-VAL should be a (VAR VAL) pair." |
|
|
|
|
otherwise do ELSE. VAR-VAL should be a (VAR VAL) pair. |
|
|
|
|
|
|
|
|
|
Note: binding is done according to `-let'." |
|
|
|
|
(declare (debug ((symbolp form) form body)) |
|
|
|
|
(indent 2)) |
|
|
|
|
(let ((var (car var-val)) |
|
|
|
|
(val (cadr var-val))) |
|
|
|
|
`(let ((,var ,val)) |
|
|
|
|
(if ,var ,then ,@else)))) |
|
|
|
|
`(-if-let* (,var-val) ,then ,@else)) |
|
|
|
|
|
|
|
|
|
(defmacro -if-let* (vars-vals then &rest else) |
|
|
|
|
"If all VALS evaluate to true, bind them to their corresponding |
|
|
|
|
VARS and do THEN, otherwise do ELSE. VARS-VALS should be a list |
|
|
|
|
of (VAR VAL) pairs (corresponding to the bindings of `let*')." |
|
|
|
|
of (VAR VAL) pairs. |
|
|
|
|
|
|
|
|
|
Note: binding is done according to `-let'." |
|
|
|
|
(declare (debug ((&rest (symbolp form)) form body)) |
|
|
|
|
(indent 2)) |
|
|
|
|
(let ((first-pair (car vars-vals)) |
|
|
|
|
(rest (cdr vars-vals))) |
|
|
|
|
(if (= (length vars-vals) 1) |
|
|
|
|
`(-if-let ,first-pair ,then ,@else) |
|
|
|
|
`(-if-let ,first-pair |
|
|
|
|
(-if-let* ,rest ,then ,@else) |
|
|
|
|
,@else)))) |
|
|
|
|
(->> vars-vals |
|
|
|
|
(-mapcat (-lambda ((pat src)) (dash--match pat src))) |
|
|
|
|
(-reduce-r-from |
|
|
|
|
(-lambda ((var val) memo) |
|
|
|
|
`(let ((,var ,val)) |
|
|
|
|
(if ,var ,memo ,@else))) |
|
|
|
|
then))) |
|
|
|
|
|
|
|
|
|
(defmacro --if-let (val then &rest else) |
|
|
|
|
"If VAL evaluates to non-nil, bind it to `it' and do THEN, |
|
|
|
|
otherwise do ELSE." |
|
|
|
|
(declare (debug (form form body)) |
|
|
|
|
(indent 2)) |
|
|
|
|
`(let ((it ,val)) |
|
|
|
|
(if it ,then ,@else))) |
|
|
|
|
`(-if-let (it ,val) ,then ,@else)) |
|
|
|
|
|
|
|
|
|
(defun dash--match-ignore-place-p (symbol) |
|
|
|
|
"Return non-nil if SYMBOL is a symbol and starts with _." |
|
|
|
|
|