Function: elisp-scope-cl-lambda-key

elisp-scope-cl-lambda-key is a byte-compiled function defined in elisp-scope.el.gz.

Signature

(elisp-scope-cl-lambda-key ARG ARGLIST MORE BODY)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/elisp-scope.el.gz
(defun elisp-scope-cl-lambda-key (arg arglist more body)
  (let* ((a (ensure-list arg))
         (var (car a))
         (l elisp-scope-local-bindings)
         (init (cadr a))
         (svar (caddr a))
         (kw (car-safe var)))
    (elisp-scope-1 init)
    (and kw (or (symbolp kw) (symbol-with-pos-p kw))
         (cadr var)
         (not (cddr var))
         ;; VAR is (KEYWORD VAR)
         (setq var (cadr var)))
    (when-let* ((bare (elisp-scope--sym-bare kw))
                ((keywordp bare)))
      (when-let* ((beg (elisp-scope--sym-pos kw)))
        (elisp-scope--report 'constant beg bare))
      (setq l (elisp-scope--local-new bare (elisp-scope--sym-pos svar) l)))
    (if (consp var)
        (let ((elisp-scope-local-bindings l))
          (elisp-scope-cl-lambda-1 var (cons (append (when svar (list svar))
                                                     (cons '&key arglist))
                                             more)
                                   body))
      (when-let* ((bare (elisp-scope--sym-bare svar)))
        (when-let* ((beg (elisp-scope--sym-pos svar)))
          (elisp-scope--binding bare beg))
        (setq l (elisp-scope--local-new bare (elisp-scope--sym-pos svar) l)))
      (when-let* ((bare (elisp-scope--sym-bare var)))
        (when-let* ((beg (elisp-scope--sym-pos var)))
          (elisp-scope--binding bare beg))
        (setq l (elisp-scope--local-new bare (elisp-scope--sym-pos var) l)))
      (cond
       (arglist
        (let* ((head (car arglist))
               (bare (elisp-scope--sym-bare head)))
          (if (memq bare '(&aux &allow-other-keys))
              (progn
                (when-let* ((beg (elisp-scope--sym-pos head)))
                  (elisp-scope--report 'ampersand beg bare))
                (cl-case bare
                  (&aux
                   (let ((elisp-scope-local-bindings l))
                     (elisp-scope-cl-lambda-aux (cadr arglist) (cddr arglist) more body)))
                  (&allow-other-keys
                   (let ((elisp-scope-local-bindings l))
                     (elisp-scope-cl-lambda-1 (car more) (cdr more) body)))))
            (let ((elisp-scope-local-bindings l))
              (elisp-scope-cl-lambda-key head (cdr arglist) more body)))))
       (more (let ((elisp-scope-local-bindings l))
               (elisp-scope-cl-lambda-1 (car more) (cdr more) body)))
       (t (let ((elisp-scope-local-bindings l))
            (elisp-scope-lambda nil body)))))))