From ef0fc0bed1c97a1c803fa83bee438ca9cfd238b0 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Tue, 24 Sep 2019 17:04:12 +0000 Subject: [PATCH] New edebug-spec, nested-backquote-form. This fixes bug #31090 * lisp/emacs-lisp/edebug.el: (nested-backquote-form): a new edebug-spec which handles nested backquote structures without a , or ,@ "between" the outer and inner backquotes. (backquote-form): Use nested-backquote-form. --- lisp/emacs-lisp/edebug.el | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index c898da3d39f..717026995a3 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -2165,6 +2165,9 @@ into `edebug--cl-macrolet-defs' which is checked in `edebug-list-form-args'." ;; but only at the top level inside unquotes. (def-edebug-spec backquote-form (&or + ;; Disallow instrumentation of , and ,@ inside a nested backquote, since + ;; these are likely to be forms generated by a macro being debugged. + ("`" nested-backquote-form) ([&or "," ",@"] &or ("quote" backquote-form) form) ;; The simple version: ;; (backquote-form &rest backquote-form) @@ -2180,6 +2183,16 @@ into `edebug--cl-macrolet-defs' which is checked in `edebug-list-form-args'." (vector &rest backquote-form) sexp)) +(def-edebug-spec nested-backquote-form + (&or + ;; Allow instrumentation of any , or ,@ contained within the (\, ...) or + ;; (\,@ ...) matched on the next line. + ([&or "," ",@"] backquote-form) + (nested-backquote-form [&rest [¬ "," ",@"] nested-backquote-form] + . [&or nil nested-backquote-form]) + (vector &rest nested-backquote-form) + sexp)) + ;; Special version of backquote that instruments backquoted forms ;; destined to be evaluated, usually as the result of a ;; macroexpansion. Backquoted code can only have unquotes (, and ,@) -- 2.39.2