*** empty log message ***
[bpt/emacs.git] / lispref / macros.texi
index f7af852..dc82235 100644 (file)
@@ -1,6 +1,7 @@
 @c -*-texinfo-*-
 @c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc.
+@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 2002, 2003,
+@c   2004, 2005 Free Software Foundation, Inc.
 @c See the file elisp.texi for copying conditions.
 @setfilename ../info/macros
 @node Macros, Customization, Functions, Top
@@ -137,6 +138,25 @@ uses this feature.
 @end smallexample
 @end defun
 
+
+@defun macroexpand-all form &optional environment
+@cindex macro expansion in entire form
+@code{macroexpand-all} expands macros like @code{macroexpand}, but
+will look for and expand all macros in @var{form}, not just at the
+top-level.  If no macros are expanded, the return value is @code{eq}
+to @var{form}.
+
+Repeating the example used for @code{macroexpand} above with
+@code{macroexpand-all}, we see that @code{macroexpand-all} @emph{does}
+expand the embedded calls to @code{inc}:
+
+@smallexample
+(macroexpand-all '(inc2 r s))
+     @result{} (progn (setq r (1+ r)) (setq s (1+ s)))
+@end smallexample
+
+@end defun
+
 @node Compiling Macros
 @section Macros and Byte Compilation
 @cindex byte-compiling macros
@@ -210,13 +230,14 @@ called interactively.
 which can specify how @key{TAB} should indent macro calls, and how to
 step through them for Edebug.
 
-@defspec declare @var{specs}...
-This special form is used at top level in a macro definition to
-specify various additional information about it.  Two kinds of
-specification are currently supported:
+@defmac declare @var{specs}@dots{}
+@anchor{Definition of declare}
+A @code{declare} form is used in a macro definition to specify various
+additional information about it.  Two kinds of specification are
+currently supported:
 
 @table @code
-@item (edebug @var{edebug-form-spec})
+@item (debug @var{edebug-form-spec})
 Specify how to step through macro calls for Edebug.
 @xref{Instrumenting Macro Calls}, for more details.
 
@@ -224,7 +245,17 @@ Specify how to step through macro calls for Edebug.
 Specify how to indent calls to this macro.  @xref{Indenting Macros},
 for more details.
 @end table
-@end defspec
+
+A @code{declare} form only has its special effect in the body of a
+@code{defmacro} form if it immediately follows the documentation
+string, if present, or the argument list otherwise.  (Strictly
+speaking, @emph{several} @code{declare} forms can follow the
+documentation string or argument list, but since a @code{declare} form
+can have several @var{specs}, they can always be combined into a
+single form.)  When used at other places in a @code{defmacro} form, or
+outside a @code{defmacro} form, @code{declare} just returns @code{nil}
+without evaluating any @var{specs}.
+@end defmac
 
   No macro absolutely needs a @code{declare} form, because that form
 has no effect on how the macro expands, on what the macro means in the
@@ -356,9 +387,9 @@ trouble, and rules to follow to avoid trouble.
 @node Wrong Time
 @subsection Wrong Time
 
-  The most common problem in writing macros is doing too some of the
+  The most common problem in writing macros is doing some of the
 real work prematurely---while expanding the macro, rather than in the
-expansion itself.  For instance, one real package had this nmacro
+expansion itself.  For instance, one real package had this macro
 definition:
 
 @example
@@ -415,7 +446,7 @@ For example, (for i from 1 to 10 do (print i))."
 (let ((i 1))
   (while (<= i 3)
     (setq square (* i i))
-    (princ (format "%d      %d" i square))
+    (princ (format "\n%d %d" i square))
     (inc i)))
 @end group
 @group
@@ -682,7 +713,7 @@ This is the same as no property---use the standard indentation pattern.
 @item @code{defun}
 Handle this function like a @samp{def} construct: treat the second
 line as the start of a @dfn{body}.
-@item a number, @var{number}
+@item an integer, @var{number}
 The first @var{number} arguments of the function are
 @dfn{distinguished} arguments; the rest are considered the body
 of the expression.  A line in the expression is indented according to
@@ -716,3 +747,7 @@ indentation is being computed by @kbd{C-M-q}; if the value is a
 number, @kbd{C-M-q} need not recalculate indentation for the following
 lines until the end of the list.
 @end table
+
+@ignore
+   arch-tag: d4cce66d-1047-45c3-bfde-db6719d6e82b
+@end ignore