aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorGemini Lasswell2018-07-20 21:54:00 -0700
committerGemini Lasswell2018-08-01 13:59:49 -0700
commitdf7371b84e9cfbb6e62c3196c2bc588eb934b835 (patch)
tree9321571f27ac46fc4a45856fa4564c6bccc36bac /test
parent22d463ed5ca262e1d8893b115c3f1237485fc7e0 (diff)
downloademacs-df7371b84e9cfbb6e62c3196c2bc588eb934b835.tar.gz
emacs-df7371b84e9cfbb6e62c3196c2bc588eb934b835.zip
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.
Diffstat (limited to 'test')
-rw-r--r--test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el7
-rw-r--r--test/lisp/emacs-lisp/edebug-tests.el11
2 files changed, 18 insertions, 0 deletions
diff --git a/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el b/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
index e86c2f1c1e7..f3fc78d4e12 100644
--- a/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
+++ b/test/lisp/emacs-lisp/edebug-resources/edebug-test-code.el
@@ -130,5 +130,12 @@
130 (let ((two 2) (three 3)) 130 (let ((two 2) (three 3))
131 (cl-destructuring-bind (x . y) (cons two three) (+ x!x! y!y!)))) 131 (cl-destructuring-bind (x . y) (cons two three) (+ x!x! y!y!))))
132 132
133(defun edebug-test-code-use-cl-macrolet (x)
134 (cl-macrolet ((wrap (func &rest args)
135 `(format "The result of applying %s to %s is %S"
136 ',func!func! ',args
137 ,(cons func args))))
138 (wrap + 1 x)))
139
133(provide 'edebug-test-code) 140(provide 'edebug-test-code)
134;;; edebug-test-code.el ends here 141;;; edebug-test-code.el ends here
diff --git a/test/lisp/emacs-lisp/edebug-tests.el b/test/lisp/emacs-lisp/edebug-tests.el
index 85f6bd47db2..7d780edf285 100644
--- a/test/lisp/emacs-lisp/edebug-tests.el
+++ b/test/lisp/emacs-lisp/edebug-tests.el
@@ -913,5 +913,16 @@ test and possibly others should be updated."
913 "g" 913 "g"
914 (should (equal edebug-tests-@-result 5))))) 914 (should (equal edebug-tests-@-result 5)))))
915 915
916(ert-deftest edebug-tests-cl-macrolet ()
917 "Edebug can instrument `cl-macrolet' expressions. (Bug#29919)"
918 (edebug-tests-with-normal-env
919 (edebug-tests-setup-@ "use-cl-macrolet" '(10) t)
920 (edebug-tests-run-kbd-macro
921 "@ SPC SPC"
922 (edebug-tests-should-be-at "use-cl-macrolet" "func")
923 (edebug-tests-should-match-result-in-messages "+")
924 "g"
925 (should (equal edebug-tests-@-result "The result of applying + to (1 x) is 11")))))
926
916(provide 'edebug-tests) 927(provide 'edebug-tests)
917;;; edebug-tests.el ends here 928;;; edebug-tests.el ends here