Function: elisp-scope-defmethod-1
elisp-scope-defmethod-1 is a byte-compiled function defined in
elisp-scope.el.gz.
Signature
(elisp-scope-defmethod-1 LOCAL ARGS BODY)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/elisp-scope.el.gz
(defun elisp-scope-defmethod-1 (local args body)
(if args
(let ((arg (car args)) (bare nil))
(cond
((consp arg)
(let* ((var (car arg))
(spec (cadr arg)))
(cond
((setq bare (elisp-scope--sym-bare var))
(when-let* ((beg (elisp-scope--sym-pos var)))
(elisp-scope--binding bare beg))
(cond
((consp spec)
(let ((head (car spec)) (form (cadr spec)))
(and (eq 'eql (elisp-scope--sym-bare head))
(not (or (symbolp form) (symbol-with-pos-p form)))
(elisp-scope-1 form))))
((symbol-with-pos-p spec)
(when-let* ((beg (symbol-with-pos-pos spec))
(bare (bare-symbol spec)))
(elisp-scope--report 'type beg bare))))
(elisp-scope-defmethod-1 (elisp-scope--local-new bare (elisp-scope--sym-pos var) local)
(cdr args) body)))))
((setq bare (elisp-scope--sym-bare arg))
(cond
((memq bare '(&optional &rest &body _))
(when-let* ((beg (elisp-scope--sym-pos arg)))
(elisp-scope--report 'ampersand beg bare))
(elisp-scope-defmethod-1 local (cdr args) body))
((eq bare '&context)
(let* ((expr-type (cadr args))
(expr (car expr-type))
(spec (cadr expr-type))
(more (cddr args)))
(when-let* ((beg (elisp-scope--sym-pos arg)))
(elisp-scope--report 'ampersand beg bare))
(elisp-scope-1 expr)
(cond
((consp spec)
(let ((head (car spec)) (form (cadr spec)))
(and (eq 'eql (elisp-scope--sym-bare head))
(not (or (symbolp form) (symbol-with-pos-p form)))
(elisp-scope-1 form))))
((symbol-with-pos-p spec)
(when-let* ((beg (symbol-with-pos-pos spec))
(bare (bare-symbol spec)))
(elisp-scope--report 'type beg bare beg))))
(elisp-scope-defmethod-1 local more body)))
(t
(when-let* ((beg (elisp-scope--sym-pos arg)))
(elisp-scope--binding bare beg))
(elisp-scope-defmethod-1 (elisp-scope--local-new bare (elisp-scope--sym-pos arg) local)
(cdr args) body))))))
(let ((elisp-scope-local-bindings local))
(elisp-scope-n body))))