Copyright (C) 2000-2012 |
GNU Info (elisp)Specification ExamplesSpecification Examples ...................... It may be easier to understand Edebug specifications by studying the examples provided here. A `let' special form has a sequence of bindings and a body. Each of the bindings is either a symbol or a sublist with a symbol and optional expression. In the specification below, notice the `gate' inside of the sublist to prevent backtracking once a sublist is found. (def-edebug-spec let ((&rest &or symbolp (gate symbolp &optional form)) body)) Edebug uses the following specifications for `defun' and `defmacro' and the associated argument list and `interactive' specifications. It is necessary to handle interactive forms specially since an expression argument it is actually evaluated outside of the function body. (def-edebug-spec defmacro defun) ; Indirect ref to `defun' spec. (def-edebug-spec defun (&define name lambda-list [&optional stringp] ; Match the doc string, if present. [&optional ("interactive" interactive)] def-body)) (def-edebug-spec lambda-list (([&rest arg] [&optional ["&optional" arg &rest arg]] &optional ["&rest" arg] ))) (def-edebug-spec interactive (&optional &or stringp def-form)) ; Notice: `def-form' The specification for backquote below illustrates how to match dotted lists and use `nil' to terminate recursion. It also illustrates how components of a vector may be matched. (The actual specification defined by Edebug does not support dotted lists because doing so causes very deep recursion that could fail.) (def-edebug-spec ` (backquote-form)) ; Alias just for clarity. (def-edebug-spec backquote-form (&or ([&or "," ",@"] &or ("quote" backquote-form) form) (backquote-form . [&or nil backquote-form]) (vector &rest backquote-form) sexp)) automatically generated by info2www version 1.2.2.9 |