The $PUSH directive saves the current values of all local compiler switches on the settings stack. Up to 20 sets of settings can be stored on the stack.
Some verbosity directives ($Warn etc.) as well as the $PACKENUM, $PACKRECORDS and $SETALLOC are also saved.
The settings can be restored from the stack using the $POP directive (see section 1.2.64, page 171).
Note that global settings (search paths etc.) are not saved by this directive.
The settings stack is preserved across units, i.e. when the compiler starts compiling a new unit, the stack is not emptied.