@code{interactive} forms with an expression argument, anonymous lambda
expressions, and other defining forms. However, Edebug cannot determine
on its own what a user-defined macro will do with the arguments of a
-macro call, so you must provide that information; see @ref{Edebug and
-Macros}, for details.
+macro call, so you must provide that information using Edebug
+specifications; see @ref{Edebug and Macros}, for details.
When Edebug is about to instrument code for the first time in a
session, it runs the hook @code{edebug-setup-hook}, then sets it to
@code{nil}. You can use this to load Edebug specifications
-(@pxref{Edebug and Macros}) associated with a package you are
-using, but only when you use Edebug.
+associated with a package you are using, but only when you use Edebug.
@findex eval-expression @r{(Edebug)}
To remove instrumentation from a definition, simply re-evaluate its
indirect specifications.
Here's a table of the possible elements of a specification list, with
-their meanings:
+their meanings (see @ref{Specification Examples}, for the referenced
+examples):
@table @code
@item sexp
To make just a few elements optional followed by non-optional elements,
use @code{[&optional @var{specs}@dots{}]}. To specify that several
elements must all match or none, use @code{&optional
-[@var{specs}@dots{}]}. See the @code{defun} example below.
+[@var{specs}@dots{}]}. See the @code{defun} example.
@item &rest
@c @kindex &rest @r{(Edebug)}
@item nil
This is successful when there are no more arguments to match at the
current argument list level; otherwise it fails. See sublist
-specifications and the backquote example below.
+specifications and the backquote example.
@item gate
@cindex preventing backtracking
No argument is matched but backtracking through the gate is disabled
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
-below.
+@ref{Backtracking}, for more details. Also see the @code{let} example.
@item @var{other-symbol}
@cindex indirect specifications
specification} should be either a list specification that is used in
place of the symbol, or a function that is called to process the
arguments. The specification may be defined with @code{def-edebug-spec}
-just as for macros. See the @code{defun} example below.
+just as for macros. See the @code{defun} example.
Otherwise, the symbol should be a predicate. The predicate is called
with the argument and the specification fails if the predicate returns
@item (vector @var{elements}@dots{})
The argument should be a vector whose elements must match the
-@var{elements} in the specification. See the backquote example below.
+@var{elements} in the specification. See the backquote example.
@item (@var{elements}@dots{})
Any other list is a @dfn{sublist specification} and the argument must be
grouping or an indirect specification, e.g., @code{(spec . [(more
specs@dots{})])}) whose elements match the non-dotted list arguments.
This is useful in recursive specifications such as in the backquote
-example below. Also see the description of a @code{nil} specification
+example. Also see the description of a @code{nil} specification
above for terminating such recursion.
Note that a sublist specification written as @code{(specs . nil)}
@c Need to document extensions with &symbol and :symbol
Here is a list of additional specifications that may appear only after
-@code{&define}. See the @code{defun} example below.
+@code{&define}. See the @code{defun} example.
@table @code
@item name
like @code{def-body}, except use this to match a single form rather than
a list of forms. As a special case, @code{def-form} also means that
tracing information is not output when the form is executed. See the
-@code{interactive} example below.
+@code{interactive} example.
@end table
@node Backtracking