From 5959a358e47ac438e924c421e739b10f2c127911 Mon Sep 17 00:00:00 2001 From: varkor Date: Sun, 12 Aug 2018 20:39:53 +0100 Subject: [PATCH] Move logic from push_wild_constructor to apply_constructor --- src/librustc_mir/hair/pattern/_match.rs | 42 ++++++------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/src/librustc_mir/hair/pattern/_match.rs b/src/librustc_mir/hair/pattern/_match.rs index 065fbeda153..26df0666340 100644 --- a/src/librustc_mir/hair/pattern/_match.rs +++ b/src/librustc_mir/hair/pattern/_match.rs @@ -351,38 +351,15 @@ fn push_wild_constructor<'a>( 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 { + ty, + span: DUMMY_SP, + kind: box PatternKind::Wild, } - _ => { - let sub_pattern_tys = constructor_sub_pattern_tys(cx, ctor, ty); - self.0.extend(sub_pattern_tys.into_iter().map(|ty| { - Pattern { - ty, - span: DUMMY_SP, - kind: box PatternKind::Wild, - } - })); - self.apply_constructor(cx, ctor, ty) - } - } + })); + self.apply_constructor(cx, ctor, ty) } @@ -409,7 +386,7 @@ fn apply_constructor<'a>( let arity = constructor_arity(cx, ctor, ty); let pat = { let len = self.0.len() as u64; - let mut pats = self.0.drain((len-arity) as usize..).rev(); + let mut pats = self.0.drain((len - arity) as usize..).rev(); match ty.sty { ty::TyAdt(..) | @@ -452,6 +429,7 @@ fn apply_constructor<'a>( _ => { match *ctor { ConstantValue(value) => PatternKind::Constant { value }, + ConstantRange(lo, hi, end) => PatternKind::Range { lo, hi, end }, _ => PatternKind::Wild, } } -- GitLab