Factor out
This commit is contained in:
parent
9daa823896
commit
2c1b1c26f4
@ -138,13 +138,9 @@ pub fn add_cases_to_switch<'pat>(&mut self,
|
||||
panic!("you should have called add_variants_to_switch instead!");
|
||||
}
|
||||
PatternKind::Range { ty, lo, hi, end } => {
|
||||
indices
|
||||
.keys()
|
||||
.all(|value| {
|
||||
!self
|
||||
.const_range_contains(ty, lo, hi, end, value)
|
||||
.unwrap_or(true)
|
||||
})
|
||||
// Check that none of the switch values are in the range.
|
||||
self.values_not_contained_in_range(ty, lo, hi, end, indices)
|
||||
.unwrap_or(false)
|
||||
}
|
||||
PatternKind::Slice { .. } |
|
||||
PatternKind::Array { .. } |
|
||||
@ -541,16 +537,12 @@ pub fn sort_candidate<'pat>(&mut self,
|
||||
|
||||
(&TestKind::SwitchInt { switch_ty: _, ref options, ref indices },
|
||||
&PatternKind::Range { ty, lo, hi, end }) => {
|
||||
let not_contained = indices
|
||||
.keys()
|
||||
.all(|value| {
|
||||
!self
|
||||
.const_range_contains(ty, lo, hi, end, value)
|
||||
.unwrap_or(true)
|
||||
});
|
||||
let not_contained = self
|
||||
.values_not_contained_in_range(ty, lo, hi, end, indices)
|
||||
.unwrap_or(false);
|
||||
|
||||
if not_contained {
|
||||
// No values are contained in the pattern range,
|
||||
// No switch values are contained in the pattern range,
|
||||
// so the pattern can be matched only if this test fails.
|
||||
let otherwise = options.len();
|
||||
resulting_candidates[otherwise].push(candidate.clone());
|
||||
@ -835,6 +827,23 @@ fn const_range_contains(
|
||||
_ => Some(false),
|
||||
}
|
||||
}
|
||||
|
||||
fn values_not_contained_in_range(
|
||||
&self,
|
||||
ty: Ty<'tcx>,
|
||||
lo: &'tcx ty::Const<'tcx>,
|
||||
hi: &'tcx ty::Const<'tcx>,
|
||||
end: RangeEnd,
|
||||
indices: &FxHashMap<&'tcx ty::Const<'tcx>, usize>,
|
||||
) -> Option<bool> {
|
||||
for val in indices.keys() {
|
||||
if self.const_range_contains(ty, lo, hi, end, val)? {
|
||||
return Some(false);
|
||||
}
|
||||
}
|
||||
|
||||
Some(true)
|
||||
}
|
||||
}
|
||||
|
||||
fn is_switch_ty<'tcx>(ty: Ty<'tcx>) -> bool {
|
||||
|
Loading…
Reference in New Issue
Block a user