Function: pcase--let*

pcase--let* is a byte-compiled function defined in pcase.el.gz.

Signature

(pcase--let* BINDINGS BODY &optional STRICT)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/pcase.el.gz
(defun pcase--let* (bindings body &optional strict)
  (cond
   ((null bindings) (macroexp-progn body))
   ((pcase--trivial-upat-p (caar bindings))
    (macroexp-let* `(,(car bindings)) (pcase--let* (cdr bindings) body)))
   (t
    (let* ((binding (pop bindings))
           (x (gensym "x"))
           (pcase--dontwarn-upats (cons x pcase--dontwarn-upats)))
      (pcase--expand
       (cadr binding)
       `((,(car binding) ,(pcase--let* bindings body strict))
         ,(if strict
              `(,x (error "`pcase' pattern does not match value: %S %S"
                          (quote ,(car binding))
                          ,x))
            ;; We can either signal an error here, or just use `pcase--dontcare'
            ;; which generates more efficient code.  In practice, if we use
            ;; `pcase--dontcare' we will still often get an error and the few
            ;; cases where we don't do not matter that much, so
            ;; it's a better choice.
            '(pcase--dontcare nil))))))))