1
Fork 0

Move logic from push_wild_constructor to apply_constructor

This commit is contained in:
varkor 2018-08-12 20:39:53 +01:00
parent 4aa929cf8b
commit 5959a358e4

View file

@ -351,27 +351,6 @@ impl<'tcx> Witness<'tcx> {
ty: Ty<'tcx>)
-> Self
{
// If we've been trying to exhaustively match over the domain of values for a type,
// then we can construct witnesses directly corresponding to the missing ranges of values,
// giving far more precise diagnostics.
// `ConstantValue` and `ConstantRange` only occur in practice when doing exhaustive value
// matching (exhaustive_integer_patterns).
match ctor {
ConstantValue(value) => {
Witness(vec![Pattern {
ty,
span: DUMMY_SP,
kind: box PatternKind::Constant { value },
}])
}
ConstantRange(lo, hi, end) => {
Witness(vec![Pattern {
ty,
span: DUMMY_SP,
kind: box PatternKind::Range { lo, hi, end: *end },
}])
}
_ => {
let sub_pattern_tys = constructor_sub_pattern_tys(cx, ctor, ty);
self.0.extend(sub_pattern_tys.into_iter().map(|ty| {
Pattern {
@ -382,8 +361,6 @@ impl<'tcx> Witness<'tcx> {
}));
self.apply_constructor(cx, ctor, ty)
}
}
}
/// Constructs a partial witness for a pattern given a list of
@ -452,6 +429,7 @@ impl<'tcx> Witness<'tcx> {
_ => {
match *ctor {
ConstantValue(value) => PatternKind::Constant { value },
ConstantRange(lo, hi, end) => PatternKind::Range { lo, hi, end },
_ => PatternKind::Wild,
}
}