summaryrefslogtreecommitdiff
path: root/lib/dfa.c
diff options
context:
space:
mode:
authorNorihiro Tanaka <noritnk@kcn.ne.jp>2018-10-23 00:02:16 +0900
committerJim Meyering <meyering@fb.com>2018-10-27 12:48:47 -0700
commitae4b73e28a97ae0658bb0847c3c042049f96c6f5 (patch)
tree5e74c4ac1c903d2d8274dd22dbcd111a6a418c53 /lib/dfa.c
parent5c7a0371823876cca7a1347fa09ca26bbbff0c98 (diff)
downloadgnulib-ae4b73e28a97ae0658bb0847c3c042049f96c6f5.tar.gz
dfa: Simplify a building state
dfa.c (build_state): Simplify a building state.
Diffstat (limited to 'lib/dfa.c')
-rw-r--r--lib/dfa.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/lib/dfa.c b/lib/dfa.c
index f8f8aa23e1..ad2716bc71 100644
--- a/lib/dfa.c
+++ b/lib/dfa.c
@@ -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);