diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-01-06 23:46:07 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-01-06 23:46:07 +0000 |
commit | 99897a99a694bfd305103c4a86567186e8baa884 (patch) | |
tree | 13f32f1064f9b6afc009ebf89e0686a52f03a9a9 /roff.c | |
parent | 4f5108d3edb20e0466c0447dcc9a5b4a49267ba6 (diff) | |
download | mandoc-99897a99a694bfd305103c4a86567186e8baa884.tar.gz |
Gprof(1) is fun. You should use it more often.
Another 10% speedup for mandocdb(8) -Q, and even 3% without -Q.
With -Q, we are now at 41% of the time required by makewhatis(8).
Do not copy predefined strings into the dynamic string table, just
leave them in their own static table and use that one as a fallback
at lookup time. This saves us copying and deleting them for each manual.
No functional change.
Diffstat (limited to 'roff.c')
-rw-r--r-- | roff.c | 15 |
1 files changed, 6 insertions, 9 deletions
@@ -448,14 +448,9 @@ roff_free1(struct roff *r) void roff_reset(struct roff *r) { - int i; roff_free1(r); - r->control = 0; - - for (i = 0; i < PREDEFS_MAX; i++) - roff_setstr(r, predefs[i].name, predefs[i].str, 0); } @@ -472,7 +467,6 @@ struct roff * roff_alloc(enum mparset type, struct mparse *parse, int quick) { struct roff *r; - int i; r = mandoc_calloc(1, sizeof(struct roff)); r->parsetype = type; @@ -482,9 +476,6 @@ roff_alloc(enum mparset type, struct mparse *parse, int quick) roffhash_init(); - for (i = 0; i < PREDEFS_MAX; i++) - roff_setstr(r, predefs[i].name, predefs[i].str, 0); - return(r); } @@ -1903,12 +1894,18 @@ static const char * roff_getstrn(const struct roff *r, const char *name, size_t len) { const struct roffkv *n; + int i; for (n = r->strtab; n; n = n->next) if (0 == strncmp(name, n->key.p, len) && '\0' == n->key.p[(int)len]) return(n->val.p); + for (i = 0; i < PREDEFS_MAX; i++) + if (0 == strncmp(name, predefs[i].name, len) && + '\0' == predefs[i].name[(int)len]) + return(predefs[i].str); + return(NULL); } |