@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
-@c Copyright (C) 1990-1995, 1998, 2001-2012 Free Software Foundation, Inc.
+@c Copyright (C) 1990-1995, 1998, 2001-2014 Free Software Foundation,
+@c Inc.
@c See the file elisp.texi for copying conditions.
@node Macros
@chapter Macros
@section A Simple Example of a Macro
Suppose we would like to define a Lisp construct to increment a
-variable value, much like the @code{++} operator in C. We would like to
+variable value, much like the @code{++} operator in C@. We would like to
write @code{(inc x)} and have the effect of @code{(setq x (1+ x))}.
Here's a macro definition that does the job:
returns this expansion, Lisp proceeds to evaluate it, thus incrementing
@code{x}.
+@defun macrop object
+This predicate tests whether its argument is a macro, and returns
+@code{t} if so, @code{nil} otherwise.
+@end defun
+
@node Expansion
@section Expansion of a Macro Call
@cindex expansion of macros
calls to other macros. It may even be a call to the same macro, though
this is unusual.
+ Note that Emacs tries to expand macros when loading an uncompiled
+Lisp file. This is not always possible, but if it is, it speeds up
+subsequent execution. @xref{How Programs Do Loading}.
+
You can see the expansion of a given macro call by calling
@code{macroexpand}.
@section Defining Macros
A Lisp macro object is a list whose @sc{car} is @code{macro}, and
-whose @sc{cdr} is a lambda expression. Expansion of the macro works
-by applying the lambda expression (with @code{apply}) to the list of
+whose @sc{cdr} is a function. Expansion of the macro works
+by applying the function (with @code{apply}) to the list of
@emph{unevaluated} arguments from the macro call.
It is possible to use an anonymous Lisp macro just like an anonymous
function receives two arguments:
@table @asis
+@item @var{pos}
+The position at which the line being indented begins.
@item @var{state}
The value returned by @code{parse-partial-sexp} (a Lisp primitive for
indentation and nesting computation) when it parses up to the
beginning of this line.
-@item @var{pos}
-The position at which the line being indented begins.
@end table
@noindent