diff options
| author | dgp <dgp@users.sourceforge.net> | 2013-03-06 16:27:38 (GMT) | 
|---|---|---|
| committer | dgp <dgp@users.sourceforge.net> | 2013-03-06 16:27:38 (GMT) | 
| commit | fcab8a84a734d1b46afcc12cd5b6416b0b37669c (patch) | |
| tree | 5c76a792a99cc153c0abdbbe8c9ce647ade02996 | |
| parent | d6374c239eef894ece7e7472ada26b15b0abe33e (diff) | |
| download | tcl-fcab8a84a734d1b46afcc12cd5b6416b0b37669c.zip tcl-fcab8a84a734d1b46afcc12cd5b6416b0b37669c.tar.gz tcl-fcab8a84a734d1b46afcc12cd5b6416b0b37669c.tar.bz2 | |
New routine hasnonemptyout() for minor improvement to new fixempties().
| -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 5857372..0d44fb0 100644 --- a/generic/regc_nfa.c +++ b/generic/regc_nfa.c @@ -497,6 +497,22 @@ freearc(  }  /* + - 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 *);   */ @@ -1388,7 +1404,7 @@ fixempties(  	     * 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 3dd89d8..aebe1ab 100644 --- a/generic/regcomp.c +++ b/generic/regcomp.c @@ -121,6 +121,7 @@ static void destroystate(struct nfa *, struct state *);  static void newarc(struct nfa *, int, pcolor, struct state *, struct state *);  static struct arc *allocarc(struct nfa *, struct state *);  static void freearc(struct nfa *, struct arc *); +static int hasnonemptyout(struct state *);  static int nonemptyouts(struct state *);  static int nonemptyins(struct state *);  static struct arc *findarc(struct state *, int, pcolor); | 
