Introduce element &error into edebug specification lists for macros
This fixes bug #37540. * lisp/emacs-lisp/edebug.el (top level): New entry for &error in alist used to associate elements with their handling functions. (edebug-match-&error): New function. (nested-backquote-form): Use the new element &error to abort instrumentation on encountering a three deep nesting of backquotes (without intervening commas). * doc/lispref/edebug.texi (Specification List): Add an entry for &error. * etc/NEWS: Add an entry for &error.
This commit is contained in:
parent
d97a77c481
commit
8d2fecdf6c
3 changed files with 24 additions and 0 deletions
|
@ -1362,6 +1362,11 @@ while matching the remainder of the specifications at this level. This
|
|||
is primarily used to generate more specific syntax error messages. See
|
||||
@ref{Backtracking}, for more details. Also see the @code{let} example.
|
||||
|
||||
@item &error
|
||||
@code{&error} should be followed by a string, an error message, in the
|
||||
edebug-spec; it aborts the instrumentation, displaying the message in
|
||||
the minibuffer.
|
||||
|
||||
@item @var{other-symbol}
|
||||
@cindex indirect specifications
|
||||
Any other symbol in a specification list may be a predicate or an
|
||||
|
|
7
etc/NEWS
7
etc/NEWS
|
@ -48,6 +48,13 @@ It was declared obsolete in Emacs 27.1.
|
|||
** The sb-image.el library is now marked obsolete.
|
||||
This file was a compatibility kludge which is no longer needed.
|
||||
|
||||
** Edebug
|
||||
|
||||
+++
|
||||
*** Edebug specification lists can use the new keyword '&error', which
|
||||
unconditionally aborts the current edebug instrumentation with the
|
||||
supplied error message.
|
||||
|
||||
|
||||
* New Modes and Packages in Emacs 28.1
|
||||
|
||||
|
|
|
@ -1714,6 +1714,7 @@ contains a circular object."
|
|||
(cl-macrolet-body . edebug-match-cl-macrolet-body)
|
||||
(¬ . edebug-match-¬)
|
||||
(&key . edebug-match-&key)
|
||||
(&error . edebug-match-&error)
|
||||
(place . edebug-match-place)
|
||||
(gate . edebug-match-gate)
|
||||
;; (nil . edebug-match-nil) not this one - special case it.
|
||||
|
@ -1847,6 +1848,15 @@ contains a circular object."
|
|||
(car (cdr pair))))
|
||||
specs))))
|
||||
|
||||
(defun edebug-match-&error (cursor specs)
|
||||
;; Signal an error, using the following string in the spec as argument.
|
||||
(let ((error-string (car specs))
|
||||
(edebug-error-point (edebug-before-offset cursor)))
|
||||
(goto-char edebug-error-point)
|
||||
(error "%s"
|
||||
(if (stringp error-string)
|
||||
error-string
|
||||
"String expected after &error in edebug-spec"))))
|
||||
|
||||
(defun edebug-match-gate (_cursor)
|
||||
;; Simply set the gate to prevent backtracking at this level.
|
||||
|
@ -2216,6 +2226,8 @@ into `edebug--cl-macrolet-defs' which is checked in `edebug-list-form-args'."
|
|||
|
||||
(def-edebug-spec nested-backquote-form
|
||||
(&or
|
||||
("`" &error "Triply nested backquotes (without commas \"between\" them) \
|
||||
are too difficult to instrument")
|
||||
;; Allow instrumentation of any , or ,@ contained within the (\, ...) or
|
||||
;; (\,@ ...) matched on the next line.
|
||||
([&or "," ",@"] backquote-form)
|
||||
|
|
Loading…
Add table
Reference in a new issue