+ hir::ExprMatch(ref expr, ref hirvec_arm, ref _match_source) => {
+ // Compute the most demanding borrow from all the arms'
+ // patterns and set that on the discriminator.
+ let mut mut_borrow = false;
+ for pat in hirvec_arm.iter().flat_map(|arm| &arm.pats) {
+ mut_borrow = v.remove_mut_rvalue_borrow(pat);
+ }
+ if mut_borrow {
+ v.mut_rvalue_borrows.insert(expr.id);
+ }
+
+ v.visit_expr(expr);
+ for index in hirvec_arm.iter() {
+ match *index {
+ ref arm => {
+ v.visit_expr(&*arm.body);
+ match arm.guard {
+ Some(ref expr) => v.visit_expr(&expr),
+ None => {},
+ }
+ }
+ }
+ }
+ v.promotable = false;
+ }
+
+ hir::ExprIf(ref lhs, ref rhs, ref option_expr) => {
+ v.visit_expr(lhs);
+ v.visit_expr(rhs);
+ match option_expr {
+ Some(ref expr) => v.visit_expr(&expr),
+ None => {},
+ }
+ v.promotable = false;
+ }