Fix sorting of transitions within a lex state
This commit is contained in:
parent
a3d338781b
commit
056237f18b
1 changed files with 10 additions and 15 deletions
|
|
@ -2,6 +2,7 @@ use std::{
|
|||
char,
|
||||
cmp::{max, Ordering},
|
||||
fmt,
|
||||
iter::ExactSizeIterator,
|
||||
mem::{self, swap},
|
||||
ops::{Range, RangeInclusive},
|
||||
};
|
||||
|
|
@ -375,15 +376,9 @@ impl Ord for CharacterSet {
|
|||
let count_cmp = self
|
||||
.ranges
|
||||
.iter()
|
||||
.map(std::iter::ExactSizeIterator::len)
|
||||
.map(ExactSizeIterator::len)
|
||||
.sum::<usize>()
|
||||
.cmp(
|
||||
&other
|
||||
.ranges
|
||||
.iter()
|
||||
.map(std::iter::ExactSizeIterator::len)
|
||||
.sum(),
|
||||
);
|
||||
.cmp(&other.ranges.iter().map(ExactSizeIterator::len).sum());
|
||||
if count_cmp != Ordering::Equal {
|
||||
return count_cmp;
|
||||
}
|
||||
|
|
@ -532,7 +527,6 @@ impl<'a> NfaCursor<'a> {
|
|||
});
|
||||
}
|
||||
}
|
||||
result.sort_unstable_by(|a, b| a.characters.cmp(&b.characters));
|
||||
|
||||
let mut i = 0;
|
||||
while i < result.len() {
|
||||
|
|
@ -551,6 +545,7 @@ impl<'a> NfaCursor<'a> {
|
|||
i += 1;
|
||||
}
|
||||
|
||||
result.sort_unstable_by(|a, b| a.characters.cmp(&b.characters));
|
||||
result
|
||||
}
|
||||
|
||||
|
|
@ -832,18 +827,18 @@ mod tests {
|
|||
(CharacterSet::from_char('e'), false, 0, 2),
|
||||
],
|
||||
vec![
|
||||
NfaTransition {
|
||||
characters: CharacterSet::empty().add_char('a').add_range('c', 'd'),
|
||||
precedence: 0,
|
||||
states: vec![1],
|
||||
is_separator: false,
|
||||
},
|
||||
NfaTransition {
|
||||
characters: CharacterSet::empty().add_char('b').add_char('e'),
|
||||
precedence: 0,
|
||||
states: vec![2],
|
||||
is_separator: false,
|
||||
},
|
||||
NfaTransition {
|
||||
characters: CharacterSet::empty().add_char('a').add_range('c', 'd'),
|
||||
precedence: 0,
|
||||
states: vec![1],
|
||||
is_separator: false,
|
||||
},
|
||||
],
|
||||
),
|
||||
];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue