aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse/regex
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/regex')
-rw-r--r--src/parse/regex/enfa.rs21
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(),
+ );
}
}
}