Fix Edebug spec for cl-macrolet (bug#29919)

Add an Edebug matching function for cl-macrolet which keeps track of
its bindings and treats them as macros without Edebug specs when found
in the body of the expression.
* lisp/emacs-lisp/edebug.el (edebug--cl-macrolet-defs): New variable.
(edebug-list-form-args): Use it.
(edebug--current-cl-macrolet-defs): New variable.
(edebug-match-cl-macrolet-expr, edebug-match-cl-macrolet-name)
(edebug-match-cl-macrolet-body): New functions.
* lisp/emacs-lisp/cl-macs.el (cl-macrolet): Use cl-macrolet-expr
for Edebug spec.
* test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-cl-macrolet):
New test.
* test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
(edebug-test-code-use-cl-macrolet): New function.
This commit is contained in:
Gemini Lasswell 2018-07-20 21:54:00 -07:00
parent 22d463ed5c
commit df7371b84e
4 changed files with 66 additions and 4 deletions

View file

@ -913,5 +913,16 @@ test and possibly others should be updated."
"g"
(should (equal edebug-tests-@-result 5)))))
(ert-deftest edebug-tests-cl-macrolet ()
"Edebug can instrument `cl-macrolet' expressions. (Bug#29919)"
(edebug-tests-with-normal-env
(edebug-tests-setup-@ "use-cl-macrolet" '(10) t)
(edebug-tests-run-kbd-macro
"@ SPC SPC"
(edebug-tests-should-be-at "use-cl-macrolet" "func")
(edebug-tests-should-match-result-in-messages "+")
"g"
(should (equal edebug-tests-@-result "The result of applying + to (1 x) is 11")))))
(provide 'edebug-tests)
;;; edebug-tests.el ends here