From f48220749dfc400691378d25ff63f8a245b9ab4b Mon Sep 17 00:00:00 2001 From: Norihiro Tanaka Date: Tue, 23 Oct 2018 00:02:16 +0900 Subject: [PATCH 6/6] dfa: Simplify a building state dfa.c (build_state): Simplify a building state. --- lib/dfa.c | 20 ++++++++------------ 1 files changed, 8 insertions(+), 12 deletions(-) diff --git a/lib/dfa.c b/lib/dfa.c index f8f8aa2..ad2716b 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); -- 1.7.1