It is possible to redefine a macro temporarily, reverting to the
previous definition at a later time.
This is done with the builtins pushdef and popdef:
pushdef(name [, expansion]) popdef(name)
which are quite analogous to define and undefine.
These macros work in a stack-like fashion. A macro is temporarily
redefined with pushdef, which replaces an existing definition of
name, while saving the previous definition, before the new one is
installed. If there is no previous definition, pushdef behaves
exactly like define.
If a macro has several definitions (of which only one is accessible),
the topmost definition can be removed with popdef. If there is
no previous definition, popdef behaves like undefine.
define(`foo', `Expansion one.') => foo =>Expansion one. pushdef(`foo', `Expansion two.') => foo =>Expansion two. popdef(`foo') => foo =>Expansion one. popdef(`foo') => foo =>foo
If a macro with several definitions is redefined with define, the
topmost definition is replaced with the new definition. If it is
removed with undefine, all the definitions are removed,
and not only the topmost one.
define(`foo', `Expansion one.') => foo =>Expansion one. pushdef(`foo', `Expansion two.') => foo =>Expansion two. define(`foo', `Second expansion two.') => foo =>Second expansion two. undefine(`foo') => foo =>foo
It is possible to temporarily redefine a builtin with pushdef
and defn.
The macros pushdef and popdef are recognized only with
parameters.
Go to the first, previous, next, last section, table of contents.