Another 25% speedup for mandocdb(8) -Q mode, found with gprof(1).
authorschwarze <schwarze@openbsd.org>
Mon, 6 Jan 2014 21:33:00 +0000 (21:33 +0000)
committerschwarze <schwarze@openbsd.org>
Mon, 6 Jan 2014 21:33:00 +0000 (21:33 +0000)
commit0c4461585dcb41167cad5af5f5b2b3b8905f15d5
tree2fa38bdef0511f8450fe11b97e724f9656996c3f
parent9d69f153d006ebf6bde7d01a45bc8dca828fcd92
Another 25% speedup for mandocdb(8) -Q mode, found with gprof(1).
For /usr/share/man, we only need 56% of the time of makewhatis(8) now.

In groff, user-defined macros clashing with mdoc(7) or man(7)
standard macros are cleared when parsing the .Dd or .TH macro,
respectively.  Of course, we continue doing that in standard mode
to assure full groff bug compatibility.

However, in -Q mode, full groff bug compatibility makes no sense
when it's unreasonably expensive, so skip this step in -Q mode.
Real-world manuals hardly ever redefine standard macros,
that's terrible style, and if they do, it's pointless to do so
before .Dd or .TH because it has no effect.  Even if someone does,
it's extremely unlikely to break mandocdb(8) -Q parsing because we
abort the parse sequence after the NAME section, anyway.

So if you manually redefine .Sh, .Nm, .Nd, or .SH in a way that doesn't
work at all and rely on .Dd or .TH to fix it up for you, your broken
manual will no longer get a perfect apropos(1) entry until you re-run
mandocdb(8) without -Q.  It think that consequence is acceptable
in order to get a 25% speedup for everyone else.
usr.bin/mandoc/libmandoc.h
usr.bin/mandoc/read.c
usr.bin/mandoc/roff.c