]> git.eshelyaron.com Git - emacs.git/commitdiff
New edebug-spec, nested-backquote-form. This fixes bug #31090
authorAlan Mackenzie <acm@muc.de>
Tue, 24 Sep 2019 17:04:12 +0000 (17:04 +0000)
committerAlan Mackenzie <acm@muc.de>
Tue, 24 Sep 2019 17:06:20 +0000 (17:06 +0000)
* 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

index c898da3d39f17404c1b8b4a174a5a7be97b9cb5e..717026995a383167fbb4a22d792c772fb025c5b7 100644 (file)
@@ -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 [&not "," ",@"] 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 ,@)