Improve SpanlessEq for blocks
This commit is contained in:
parent
68cf94f6a6
commit
5df286b636
@ -81,7 +81,7 @@ impl<'a, 'tcx> SpanlessEq<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match (&left.kind, &right.kind) {
|
match (&reduce_exprkind(&left.kind), &reduce_exprkind(&right.kind)) {
|
||||||
(&ExprKind::AddrOf(lb, l_mut, ref le), &ExprKind::AddrOf(rb, r_mut, ref re)) => {
|
(&ExprKind::AddrOf(lb, l_mut, ref le), &ExprKind::AddrOf(rb, r_mut, ref re)) => {
|
||||||
lb == rb && l_mut == r_mut && self.eq_expr(le, re)
|
lb == rb && l_mut == r_mut && self.eq_expr(le, re)
|
||||||
},
|
},
|
||||||
@ -306,6 +306,32 @@ impl<'a, 'tcx> SpanlessEq<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Some simple reductions like `{ return }` => `return`
|
||||||
|
fn reduce_exprkind<'hir>(kind: &'hir ExprKind<'hir>) -> &ExprKind<'hir> {
|
||||||
|
if let ExprKind::Block(block, _) = kind {
|
||||||
|
match (block.stmts, block.expr) {
|
||||||
|
// `{}` => `()`
|
||||||
|
([], None) => &ExprKind::Tup(&[]),
|
||||||
|
([], Some(expr)) => match expr.kind {
|
||||||
|
// `{ return .. }` => `return ..`
|
||||||
|
ExprKind::Ret(..) => &expr.kind,
|
||||||
|
_ => kind,
|
||||||
|
},
|
||||||
|
([stmt], None) => match stmt.kind {
|
||||||
|
StmtKind::Expr(expr) | StmtKind::Semi(expr) => match expr.kind {
|
||||||
|
// `{ return ..; }` => `return ..`
|
||||||
|
ExprKind::Ret(..) => &expr.kind,
|
||||||
|
_ => kind,
|
||||||
|
},
|
||||||
|
_ => kind,
|
||||||
|
},
|
||||||
|
_ => kind,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
kind
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn swap_binop<'a>(
|
fn swap_binop<'a>(
|
||||||
binop: BinOpKind,
|
binop: BinOpKind,
|
||||||
lhs: &'a Expr<'a>,
|
lhs: &'a Expr<'a>,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user