diff options
Diffstat (limited to 'src/parse/regex')
| -rw-r--r-- | src/parse/regex/enfa.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/parse/regex/enfa.rs b/src/parse/regex/enfa.rs index fea2976..b0588ab 100644 --- a/src/parse/regex/enfa.rs +++ b/src/parse/regex/enfa.rs @@ -233,13 +233,12 @@ impl Thread { .into_iter() .map(|t| t.step(enfa, input)) .collect(); - let negatives = self + let negatives: Vec<_> = self .negatives .into_iter() - .map(|t| t.step(enfa, input)) + .flat_map(|t| t.step(enfa, input)) .collect(); let positives = cartesian_product(positives); - let negatives = cartesian_product(negatives); let next_states: Vec<StateId> = enfa.states[self.state] .trans .iter() @@ -258,15 +257,13 @@ impl Thread { for s in next_states { for p in positives.clone() { - for n in negatives.clone() { - if let Some(thread) = Self::new(enfa, s, p.clone(), n) { - thread.step_epsilon0( - enfa, - ret, - &mut vec![false; enfa.states.len()], - Vec::new(), - ); - } + if let Some(thread) = Self::new(enfa, s, p.clone(), negatives.clone()) { + thread.step_epsilon0( + enfa, + ret, + &mut vec![false; enfa.states.len()], + Vec::new(), + ); } } } |
