mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
* Edebug: Generalize &lookup, use it for cl-macrolet and cl-generic
This allows the use of (declare (debug ...)) in the lexical macros defined with `cl-macrolet`. It also fixes the names used by Edebug for the methods of `cl-generic` so it doesn't need to use gensym and so they don't include the formal arg names any more. * lisp/emacs-lisp/edebug.el (edebug--match-&-spec-op): Rename from `edebug--handle-&-spec-op`. (edebug--match-&-spec-op <&interpose>): Rename from `&lookup` and generalize so it can let-bind dynamic variables around the rest of the parse. (edebug-lexical-macro-ctx): Rename from `edebug--cl-macrolet-defs` and make it into an alist. (edebug-list-form-args): Use the specs from `edebug-lexical-macro-ctx` when available. (edebug--current-cl-macrolet-defs): Delete var. (edebug-match-cl-macrolet-expr, edebug-match-cl-macrolet-name) (edebug-match-cl-macrolet-body): Delete functions. (def-declarations): Use new `&interpose`. (edebug--match-declare-arg): Rename from `edebug--get-declare-spec` and adjust to new calling convention. * lisp/subr.el (def-edebug-elem-spec): Fix docstring. (eval-after-load): Use `declare`. * lisp/emacs-lisp/cl-generic.el: Fix Edebug names so we don't need gensym any more and we only include the specializers but not the formal arg names. (cl--generic-edebug-name): New var. (cl--generic-edebug-remember-name, cl--generic-edebug-make-name): New funs. (cl-defgeneric, cl-defmethod): Use them. * lisp/emacs-lisp/cl-macs.el: Add support for `debug` declarations in `cl-macrolet`. (cl-declarations-or-string): Fix use of `lambda-doc` and allow use of `declare`. (edebug-lexical-macro-ctx): Declare var. (cl--edebug-macrolet-interposer): New function. (cl-macrolet): Use it to pass the right `lexical-macro-ctx` to the body. * lisp/emacs-lisp/pcase.el (pcase-PAT): Use new `&interpose`. (pcase--edebug-match-pat-args): Rename from `pcase--get-edebug-spec` and adjust to new calling convention. * test/lisp/emacs-lisp/cl-generic-tests.el (cl-defgeneric/edebug/method): Adjust to the new names. * test/lisp/emacs-lisp/edebug-tests.el (edebug-cl-defmethod-qualifier) (edebug-tests-cl-flet): Adjust to the new names. * doc/lispref/edebug.texi (Specification List): Document &interpose.
This commit is contained in:
parent
f5b172fb6e
commit
b939f7ad35
10 changed files with 217 additions and 213 deletions
|
|
@ -951,8 +951,8 @@ primary ones (Bug#42671)."
|
|||
(should
|
||||
(equal
|
||||
defined-symbols
|
||||
(list (intern "edebug-cl-defmethod-qualifier :around ((_ number))")
|
||||
(intern "edebug-cl-defmethod-qualifier ((_ number))")))))))
|
||||
(list (intern "edebug-cl-defmethod-qualifier :around (number)")
|
||||
(intern "edebug-cl-defmethod-qualifier (number)")))))))
|
||||
|
||||
(ert-deftest edebug-tests--conflicting-internal-names ()
|
||||
"Check conflicts between form's head symbols and Edebug spec elements."
|
||||
|
|
@ -992,23 +992,19 @@ clashes (Bug#41853)."
|
|||
;; Make generated symbols reproducible.
|
||||
(gensym-counter 10000))
|
||||
(eval-buffer)
|
||||
(should (equal (reverse instrumented-names)
|
||||
;; Use `format' so as to throw away differences due to
|
||||
;; interned/uninterned symbols.
|
||||
(should (equal (format "%s" (reverse instrumented-names))
|
||||
;; The outer definitions come after the inner
|
||||
;; ones because their body ends later.
|
||||
;; FIXME: There are twice as many inner
|
||||
;; definitions as expected due to Bug#41988.
|
||||
;; Once that bug is fixed, remove the duplicates.
|
||||
;; FIXME: We'd rather have names such as
|
||||
;; `edebug-tests-cl-flet-1@inner@cl-flet@10000',
|
||||
;; but that requires further changes to Edebug.
|
||||
'(inner@cl-flet@10000
|
||||
inner@cl-flet@10001
|
||||
inner@cl-flet@10002
|
||||
inner@cl-flet@10003
|
||||
edebug-tests-cl-flet-1
|
||||
inner@cl-flet@10004
|
||||
inner@cl-flet@10005
|
||||
edebug-tests-cl-flet-2))))))
|
||||
(format "%s" '(inner@cl-flet@10000
|
||||
inner@cl-flet@10001
|
||||
edebug-tests-cl-flet-1
|
||||
inner@cl-flet@10002
|
||||
edebug-tests-cl-flet-2)))))))
|
||||
|
||||
(ert-deftest edebug-tests-duplicate-symbol-backtrack ()
|
||||
"Check that Edebug doesn't create duplicate symbols when
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue