Next: Frozen state, Previous: Preprocessor features, Up: Invoking m4
There are some limits within m4
that can be tuned. For
compatibility, m4
also accepts some options that control limits
in other implementations, but which are automatically unbounded (limited
only by your hardware and operating system constraints) in GNU
m4
.
-G
--traditional
-H
NUM--hashsize=
NUM-L
NUM--nesting-limit=
NUMThe precise effect of this option might be more correctly associated
with textual nesting than dynamic recursion. It has been useful
when some complex m4
input was generated by mechanical means.
Most users would never need this option. If shown to be obtrusive,
this option (which is still experimental) might well disappear.
This option does not have the ability to break endless
rescanning loops, since these do not necessarily consume much memory
or stack space. Through clever usage of rescanning loops, one can
request complex, time-consuming computations from m4
with useful
results. Putting limitations in this area would break m4
power.
There are many pathological cases: `define(`a', `a')a' is
only the simplest example (but see Compatibility). Expecting GNU
m4
to detect these would be a little like expecting a compiler
system to detect and diagnose endless loops: it is a quite hard
problem in general, if not undecidable!
-B
NUM-S
NUM-T
NUMm4
, but
do nothing in this implementation. They may disappear in future
releases, and issue a warning to that effect.
-N
NUM--diversions=
NUMm4
, and were controlling the number of
possible diversions which could be used at the same time. They do nothing,
because there is no fixed limit anymore. They may disappear in future
releases, and issue a warning to that effect.