diff options
author | dgp <dgp@users.sourceforge.net> | 2013-03-06 16:07:14 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2013-03-06 16:07:14 (GMT) |
commit | 422a7123630055fe2dee317f50511c36282926ed (patch) | |
tree | 0adff472dcf6e5a46e4b17b74f5e5538ed79b194 /generic | |
parent | aa0512994660629ffbffc767b68a1043ffda2602 (diff) | |
download | tcl-422a7123630055fe2dee317f50511c36282926ed.zip tcl-422a7123630055fe2dee317f50511c36282926ed.tar.gz tcl-422a7123630055fe2dee317f50511c36282926ed.tar.bz2 |
New routine hasnonemptyout() for minor improvement to new fixempties().
Diffstat (limited to 'generic')
-rw-r--r-- | generic/regc_nfa.c | 18 | ||||
-rw-r--r-- | generic/regcomp.c | 1 |
2 files changed, 18 insertions, 1 deletions
diff --git a/generic/regc_nfa.c b/generic/regc_nfa.c index 11fd49b..852a676 100644 --- a/generic/regc_nfa.c +++ b/generic/regc_nfa.c @@ -460,6 +460,22 @@ struct arc *victim; } /* + - hasnonemptyout - Does state have a non-EMPTY out arc? + ^ static int hasnonemptyout(struct state *); + */ +static int +hasnonemptyout(s) +struct state *s; +{ + struct arc *a; + + for (a = s->outs; a != NULL; a = a->outchain) + if (a->type != EMPTY) + return 1; + return 0; +} + +/* - nonemptyouts - count non-EMPTY out arcs of a state ^ static int nonemptyouts(struct state *); */ @@ -1279,7 +1295,7 @@ FILE *f; /* for debug output; NULL none */ * forward to it, not pull them back to s; and (2) we can optimize * away the push-forward, per comment above. So do nothing. */ - if (s2->flag || nonemptyouts(s2) > 0) + if (s2->flag || hasnonemptyout(s2)) replaceempty(nfa, s, s2); /* Reset the tmp fields as we walk back */ diff --git a/generic/regcomp.c b/generic/regcomp.c index 6fd9c81..083e9b1 100644 --- a/generic/regcomp.c +++ b/generic/regcomp.c @@ -123,6 +123,7 @@ static VOID destroystate _ANSI_ARGS_((struct nfa *, struct state *)); static VOID newarc _ANSI_ARGS_((struct nfa *, int, pcolor, struct state *, struct state *)); static struct arc *allocarc _ANSI_ARGS_((struct nfa *, struct state *)); static VOID freearc _ANSI_ARGS_((struct nfa *, struct arc *)); +static int hasnonemptyout _ANSI_ARGS_((struct state *)); static int nonemptyouts _ANSI_ARGS_((struct state *)); static int nonemptyins _ANSI_ARGS_((struct state *)); static struct arc *findarc _ANSI_ARGS_((struct state *, int, pcolor)); |