diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-09-13 06:46:04 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-09-13 06:46:04 -0700 |
commit | 1dcaca6fb851e21b4b6da0a5639431c481a57b04 (patch) | |
tree | 3e7718caa1646ae17e64f09c844f1768bbc57032 /regex.c | |
parent | e7c55ed9b8ff89310dc08b98eb03fc35ef280e41 (diff) | |
download | txr-1dcaca6fb851e21b4b6da0a5639431c481a57b04.tar.gz txr-1dcaca6fb851e21b4b6da0a5639431c481a57b04.tar.bz2 txr-1dcaca6fb851e21b4b6da0a5639431c481a57b04.zip |
regex: factor out repeated visit-coloring pattern.
* regex.c (nfa_test_set_visited): New inline function.
(nfa_map_states, nfa_thread_epsilons, nfa_closure,
nfa_move_closure): Use function instead of coding pattern
which tests the state and sets the visited member.
Diffstat (limited to 'regex.c')
-rw-r--r-- | regex.c | 28 |
1 files changed, 15 insertions, 13 deletions
@@ -1058,13 +1058,21 @@ static nfa_t nfa_compile_regex(val exp) } } +INLINE int nfa_test_set_visited(nfa_state_t *s, unsigned visited) +{ + if (s && s->a.visited != visited) { + s->a.visited = visited; + return 1; + } + return 0; +} + static void nfa_map_states(nfa_state_t *s, mem_t *ctx, void (*fun)(nfa_state_t *, mem_t *ctx), unsigned visited) { - if (s && s->a.visited != visited) { - s->a.visited = visited; + if (nfa_test_set_visited(s, visited)) { fun(s, ctx); switch (s->a.kind) { @@ -1167,9 +1175,7 @@ static void nfa_thread_epsilons(nfa_state_t **ps, unsigned visited) break; } - if (s->a.visited != visited) { - s->a.visited = visited; - + if (nfa_test_set_visited(s, visited)) { if (ps1) nfa_thread_epsilons(ps1, visited); if (ps0) @@ -1279,16 +1285,14 @@ static int nfa_closure(nfa_state_t **stack, nfa_state_t **set, int nin, nfa_state_t *e0 = top->e.trans0; nfa_state_t *e1 = top->e.trans1; - if (e0 && e0->a.visited != visited) { - e0->a.visited = visited; + if (nfa_test_set_visited(e0, visited)) { stack[stackp++] = e0; set[nout++] = e0; if (nfa_accept_state_p(e0)) *accept = 1; } - if (e1 && e1->a.visited != visited) { - e1->a.visited = visited; + if (nfa_test_set_visited(e1, visited)) { stack[stackp++] = e1; set[nout++] = e1; if (nfa_accept_state_p(e1)) @@ -1367,16 +1371,14 @@ static int nfa_move_closure(nfa_state_t **stack, nfa_state_t **set, int nin, nfa_state_t *e0 = top->e.trans0; nfa_state_t *e1 = top->e.trans1; - if (e0 && e0->a.visited != visited) { - e0->a.visited = visited; + if (nfa_test_set_visited(e0, visited)) { stack[stackp++] = e0; set[nout++] = e0; if (nfa_accept_state_p(e0)) *accept = 1; } - if (e1 && e1->a.visited != visited) { - e1->a.visited = visited; + if (nfa_test_set_visited(e1, visited)) { stack[stackp++] = e1; set[nout++] = e1; if (nfa_accept_state_p(e1)) |