Evaluate eql specializers

* lisp/emacs-lisp/cl-generic.el (cl-generic-generalizers): Evaluate
forms that are eql specializers.  Provide backward compatibility
with a warning.

* test/lisp/emacs-lisp/cl-generic-tests.el: Add a test.
* lisp/emacs-lisp/bindat.el (bindat--type): Adhere to the new rule.
* lisp/emacs-lisp/edebug.el (edebug--match-&-spec-op): Adhere to the new rule.
* lisp/emacs-lisp/map.el (map-into): Adhere to the new rule.
* lisp/emacs-lisp/radix-tree.el (map-into): Adhere to the new rule.
* lisp/frame.el (cl-generic-define-context-rewriter): Adhere to the new rule.
* lisp/gnus/gnus-search.el
(gnus-search-transform-expression): Adhere to the new rule.
* lisp/image/image-converter.el
(image-converter--probe image-converter--convert): Adhere to the new rule.
* lisp/mail/smtpmail.el (smtpmail-try-auth-method): Adhere to the new rule.
* lisp/progmodes/elisp-mode.el
(xref-backend-definitions)
(xref-backend-apropos): Adhere to the new rule.
* lisp/progmodes/etags.el (xref-backend-identifier-at-point)
(xref-backend-identifier-completion-table)
(xref-backend-identifier-completion-ignore-case)
(xref-backend-definitions)(xref-backend-apropos): Adhere to the new rule.
* test/lisp/emacs-lisp/checkdoc-tests.el
(checkdoc-cl-defmethod-with-types-ok)
(checkdoc-cl-defmethod-qualified-ok)
(checkdoc-cl-defmethod-with-extra-qualifier-ok): Adhere to the new rule.

* etc/NEWS: Describe the change.
This commit is contained in:
akater 2021-07-20 01:25:01 +00:00 committed by Stefan Monnier
parent 88577aed3a
commit 6535fd1fa9
14 changed files with 77 additions and 51 deletions

View file

@ -1731,7 +1731,7 @@ contains a circular object."
(defsubst edebug-match-body (cursor) (edebug-forms cursor))
(cl-defmethod edebug--match-&-spec-op ((_ (eql &optional)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&optional)) cursor specs)
;; Keep matching until one spec fails.
(edebug-&optional-wrapper cursor specs #'edebug-&optional-wrapper))
@ -1755,7 +1755,7 @@ contains a circular object."
"Handle &foo spec operators.
&foo spec operators operate on all the subsequent SPECS.")
(cl-defmethod edebug--match-&-spec-op ((_ (eql &rest)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&rest)) cursor specs)
;; Repeatedly use specs until failure.
(let (edebug-best-error
edebug-error-point)
@ -1768,7 +1768,7 @@ contains a circular object."
(edebug-&optional-wrapper c (or s specs) rh)))))
(cl-defmethod edebug--match-&-spec-op ((_ (eql &or)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&or)) cursor specs)
;; Keep matching until one spec succeeds, and return its results.
;; If none match, fail.
;; This needs to be optimized since most specs spend time here.
@ -1792,7 +1792,7 @@ contains a circular object."
(apply #'edebug-no-match cursor "Expected one of" original-specs))
))
(cl-defmethod edebug--match-&-spec-op ((_ (eql &interpose)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&interpose)) cursor specs)
"Compute the specs for `&interpose SPEC FUN ARGS...'.
Extracts the head of the data by matching it against SPEC,
and then matches the rest by calling (FUN HEAD PF ARGS...)
@ -1817,7 +1817,7 @@ a sequence of elements."
(append instrumented-head (edebug-match cursor newspecs)))
,@args))))
(cl-defmethod edebug--match-&-spec-op ((_ (eql &not)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&not)) cursor specs)
;; If any specs match, then fail
(if (null (catch 'no-match
(let ((edebug-gate nil))
@ -1829,7 +1829,7 @@ a sequence of elements."
;; This means nothing matched, so it is OK.
nil) ;; So, return nothing
(cl-defmethod edebug--match-&-spec-op ((_ (eql &key)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&key)) cursor specs)
;; Following specs must look like (<name> <spec>) ...
;; where <name> is the name of a keyword, and spec is its spec.
;; This really doesn't save much over the expanded form and takes time.
@ -1842,7 +1842,7 @@ a sequence of elements."
(car (cdr pair))))
specs))))
(cl-defmethod edebug--match-&-spec-op ((_ (eql &error)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&error)) cursor specs)
;; Signal an error, using the following string in the spec as argument.
(let ((error-string (car specs))
(edebug-error-point (edebug-before-offset cursor)))
@ -1942,7 +1942,7 @@ a sequence of elements."
(defun edebug-match-function (_cursor)
(error "Use function-form instead of function in edebug spec"))
(cl-defmethod edebug--match-&-spec-op ((_ (eql &define)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&define)) cursor specs)
;; Match a defining form.
;; Normally, &define is interpreted specially other places.
;; This should only be called inside of a spec list to match the remainder
@ -1958,7 +1958,7 @@ a sequence of elements."
;; Stop backtracking here (Bug#41988).
(setq edebug-gate t)))
(cl-defmethod edebug--match-&-spec-op ((_ (eql &name)) cursor specs)
(cl-defmethod edebug--match-&-spec-op ((_ (eql '&name)) cursor specs)
"Compute the name for `&name SPEC FUN` spec operator.
The full syntax of that operator is: