diff options
author | Norihiro Tanaka <noritnk@kcn.ne.jp> | 2018-10-23 00:02:16 +0900 |
---|---|---|
committer | Jim Meyering <meyering@fb.com> | 2018-10-27 12:48:47 -0700 |
commit | ae4b73e28a97ae0658bb0847c3c042049f96c6f5 (patch) | |
tree | 5e74c4ac1c903d2d8274dd22dbcd111a6a418c53 | |
parent | 5c7a0371823876cca7a1347fa09ca26bbbff0c98 (diff) | |
download | gnulib-ae4b73e28a97ae0658bb0847c3c042049f96c6f5.tar.gz |
dfa: Simplify a building state
dfa.c (build_state): Simplify a building state.
-rw-r--r-- | lib/dfa.c | 20 |
1 files changed, 8 insertions, 12 deletions
@@ -3112,22 +3112,18 @@ build_state (state_num s, struct dfa *d, unsigned char uc) /* Find out if the new state will want any context information, by calculating possible contexts that the group can match, and separate contexts that the new state wants to know. */ - int possible_contexts = charclass_context (d, &label); int separate_contexts = state_separate_contexts (d, &group); /* Find the state(s) corresponding to the union of the follows. */ - if (possible_contexts & ~separate_contexts) - state = state_index (d, &group, separate_contexts ^ CTX_ANY); - else - state = -1; - if (separate_contexts & possible_contexts & CTX_NEWLINE) - state_newline = state_index (d, &group, CTX_NEWLINE); - else - state_newline = state; - if (separate_contexts & possible_contexts & CTX_LETTER) - state_letter = state_index (d, &group, CTX_LETTER); + if (d->syntax.sbit[uc] & separate_contexts & CTX_NEWLINE) + state = state_index (d, &group, CTX_NEWLINE); + else if (d->syntax.sbit[uc] & separate_contexts & CTX_LETTER) + state = state_index (d, &group, CTX_LETTER); else - state_letter = state; + state = state_index (d, &group, separate_contexts ^ CTX_ANY); + + state_newline = state; + state_letter = state; /* Reallocate now, to reallocate any newline transition properly. */ realloc_trans_if_necessary (d); |