Next: Indir, Previous: Defn, Up: Definitions
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:
Analogous to
defineandundefine.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,pushdefbehaves exactly likedefine.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,popdefbehaves likeundefine.The expansion of both
pushdefandpopdefis void. The macrospushdefandpopdefare recognized only with parameters.
define(`foo', `Expansion one.')
=>
foo
=>Expansion one.
pushdef(`foo', `Expansion two.')
=>
foo
=>Expansion two.
pushdef(`foo', `Expansion three.')
=>
pushdef(`foo', `Expansion four.')
=>
popdef(`foo')
=>
foo
=>Expansion three.
popdef(`foo', `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
Local variables within macros are made with pushdef and
popdef. At the start of the macro a new definition is pushed,
within the macro it is manipulated and at the end it is popped,
revealing the former definition.
It is possible to temporarily redefine a builtin with pushdef
and defn.