diff options
| author | Philipp Stephani | 2021-03-18 12:40:08 +0100 |
|---|---|---|
| committer | Philipp Stephani | 2021-04-10 18:19:49 +0200 |
| commit | 53dfd85a7f971875e716a55f010ee508bce89eed (patch) | |
| tree | 3eb0b220ff838287f4d6cd3cd45d19794aceecf7 /doc | |
| parent | b72571ca49dd16be174f02ed14b460c136c9aaf2 (diff) | |
| download | emacs-53dfd85a7f971875e716a55f010ee508bce89eed.tar.gz emacs-53dfd85a7f971875e716a55f010ee508bce89eed.zip | |
Edebug: Disable backtracking when hitting a &define keyword.
Edebug doesn't deal well with backtracking out of definitions, see
Bug#41988. Rather than trying to support this rare situation (e.g. by
implementing a multipass parser), prevent it by adding an implicit
gate.
* lisp/emacs-lisp/edebug.el (edebug--match-&-spec-op): Disable
backtracking when hitting a &define keyword.
* test/lisp/emacs-lisp/edebug-tests.el
(edebug-tests-duplicate-&define): New unit test.
(edebug-tests--duplicate-&define): New helper macro.
* doc/lispref/edebug.texi (Backtracking): Mention &define in the list
of constructs that disable backtracking.
* etc/NEWS: Document new behavior.
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/lispref/edebug.texi | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/doc/lispref/edebug.texi b/doc/lispref/edebug.texi index 8942f55affb..323130f2378 100644 --- a/doc/lispref/edebug.texi +++ b/doc/lispref/edebug.texi | |||
| @@ -1510,11 +1510,11 @@ form specifications (that is, @code{form}, @code{body}, @code{def-form}, and | |||
| 1510 | must be in the form itself rather than at a higher level. | 1510 | must be in the form itself rather than at a higher level. |
| 1511 | 1511 | ||
| 1512 | Backtracking is also disabled after successfully matching a quoted | 1512 | Backtracking is also disabled after successfully matching a quoted |
| 1513 | symbol or string specification, since this usually indicates a | 1513 | symbol, string specification, or @code{&define} keyword, since this |
| 1514 | recognized construct. But if you have a set of alternative constructs that | 1514 | usually indicates a recognized construct. But if you have a set of |
| 1515 | all begin with the same symbol, you can usually work around this | 1515 | alternative constructs that all begin with the same symbol, you can |
| 1516 | constraint by factoring the symbol out of the alternatives, e.g., | 1516 | usually work around this constraint by factoring the symbol out of the |
| 1517 | @code{["foo" &or [first case] [second case] ...]}. | 1517 | alternatives, e.g., @code{["foo" &or [first case] [second case] ...]}. |
| 1518 | 1518 | ||
| 1519 | Most needs are satisfied by these two ways that backtracking is | 1519 | Most needs are satisfied by these two ways that backtracking is |
| 1520 | automatically disabled, but occasionally it is useful to explicitly | 1520 | automatically disabled, but occasionally it is useful to explicitly |