This commit is contained in:
Yuki Okushi 2020-01-11 09:05:51 +09:00
parent 43ac9416d9
commit 1d7d4e9217
4 changed files with 28 additions and 15 deletions

View file

@ -713,16 +713,18 @@ fn all_ranges<'a, 'tcx>(cx: &LateContext<'a, 'tcx>, arms: &'tcx [Arm<'_>]) -> Ve
} = *arm
{
if let PatKind::Range(ref lhs, ref rhs, ref range_end) = pat.kind {
let lhs = constant(cx, cx.tables, lhs)?.0;
let rhs = constant(cx, cx.tables, rhs)?.0;
let rhs = match *range_end {
RangeEnd::Included => Bound::Included(rhs),
RangeEnd::Excluded => Bound::Excluded(rhs),
};
return Some(SpannedRange {
span: pat.span,
node: (lhs, rhs),
});
if let (Some(l), Some(r)) = (lhs, rhs) {
let lhs = constant(cx, cx.tables, l)?.0;
let rhs = constant(cx, cx.tables, r)?.0;
let rhs = match *range_end {
RangeEnd::Included => Bound::Included(rhs),
RangeEnd::Excluded => Bound::Excluded(rhs),
};
return Some(SpannedRange {
span: pat.span,
node: (lhs, rhs),
});
}
}
if let PatKind::Lit(ref value) = pat.kind {

View file

@ -617,9 +617,13 @@ impl<'tcx> Visitor<'tcx> for PrintVisitor {
start_pat, end_pat, end_kind, current
);
self.current = start_pat;
self.visit_expr(start);
if let Some(expr) = start {
self.visit_expr(expr);
}
self.current = end_pat;
self.visit_expr(end);
if let Some(expr) = end {
self.visit_expr(expr);
}
},
PatKind::Slice(ref start, ref middle, ref end) => {
let start_pat = self.next("start");

View file

@ -195,7 +195,10 @@ impl<'a, 'tcx> SpanlessEq<'a, 'tcx> {
ls == rs && over(l, r, |l, r| self.eq_pat(l, r))
},
(&PatKind::Range(ref ls, ref le, ref li), &PatKind::Range(ref rs, ref re, ref ri)) => {
self.eq_expr(ls, rs) && self.eq_expr(le, re) && (*li == *ri)
if let (Some(ls), Some(rs), Some(le), Some(re)) = (ls, rs, le, re) {
return self.eq_expr(ls, rs) && self.eq_expr(le, re) && (*li == *ri);
}
false
},
(&PatKind::Ref(ref le, ref lm), &PatKind::Ref(ref re, ref rm)) => lm == rm && self.eq_pat(le, re),
(&PatKind::Slice(ref ls, ref li, ref le), &PatKind::Slice(ref rs, ref ri, ref re)) => {

View file

@ -483,8 +483,12 @@ fn print_pat(cx: &LateContext<'_, '_>, pat: &hir::Pat<'_>, indent: usize) {
},
hir::PatKind::Range(ref l, ref r, ref range_end) => {
println!("{}Range", ind);
print_expr(cx, l, indent + 1);
print_expr(cx, r, indent + 1);
if let Some(expr) = l {
print_expr(cx, expr, indent + 1);
}
if let Some(expr) = r {
print_expr(cx, expr, indent + 1);
}
match *range_end {
hir::RangeEnd::Included => println!("{} end included", ind),
hir::RangeEnd::Excluded => println!("{} end excluded", ind),