Function: elisp-scope-rx-let

elisp-scope-rx-let is a byte-compiled function defined in elisp-scope.el.gz.

Signature

(elisp-scope-rx-let BINDINGS BODY)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/elisp-scope.el.gz
(defun elisp-scope-rx-let (bindings body)
  (if-let* ((binding (car bindings)))
      (let ((name (car binding)) (rest (cdr binding)))
        (when-let* ((bare (elisp-scope--sym-bare name))
                    (beg (symbol-with-pos-pos name)))
          (elisp-scope--report 'rx-construct beg bare beg))
        (if (cdr rest)
            (let ((l elisp-scope-rx-alist)
                  (args (car rest))
                  (rx (cadr rest)))
              (dolist (arg args)
                (and (symbol-with-pos-p arg)
                     (when-let* ((beg (symbol-with-pos-pos arg))
                                 (bare (bare-symbol arg)))
                       (if (memq bare '(&optional &rest _))
                           (elisp-scope--report 'ampersand beg bare)
                         (elisp-scope--report 'rx-construct beg bare beg)))))
              (dolist (arg args)
                (when-let* ((bare (bare-symbol arg))
                            (beg (elisp-scope--sym-pos arg)))
                  (unless (memq bare '(&optional &rest))
                    (setq l (elisp-scope--local-new bare beg l)))))
              (let ((elisp-scope-rx-alist l))
                (elisp-scope-rx-1 rx))
              (let ((elisp-scope-rx-alist (elisp-scope--local-new (elisp-scope--sym-bare name)
                                                                  (elisp-scope--sym-pos name)
                                                                  elisp-scope-rx-alist)))
                (elisp-scope-rx-let (cdr bindings) body)))
          (elisp-scope-rx-1 (car rest))
          (let ((elisp-scope-rx-alist (elisp-scope--local-new (elisp-scope--sym-bare name)
                                                              (elisp-scope--sym-pos name)
                                                              elisp-scope-rx-alist)))
            (elisp-scope-rx-let (cdr bindings) body))))
    (elisp-scope-n body)))