aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/roff.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-01-06 23:46:07 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-01-06 23:46:07 +0000
commiteeacd253013c5c40ef7d34b2763ffccdbe0ea8b3 (patch)
tree84b2f6e12444365ebc8050503f85298fd5d70188 /roff.c
parentaa902148c80402b742b1e9a00236c3094b044a2b (diff)
downloadmandoc-eeacd253013c5c40ef7d34b2763ffccdbe0ea8b3.tar.gz
mandoc-eeacd253013c5c40ef7d34b2763ffccdbe0ea8b3.tar.zst
mandoc-eeacd253013c5c40ef7d34b2763ffccdbe0ea8b3.zip
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.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/roff.c b/roff.c
index a3e638e8..ca8ab7bb 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.190 2014/01/06 21:34:31 schwarze Exp $ */
+/* $Id: roff.c,v 1.191 2014/01/06 23:46:07 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -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);
}