From 75fb42a11fa91a323e2109a0d42230d96c73e3bb Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Sat, 7 Sep 2019 16:01:12 +0200 Subject: [PATCH] or-patterns: use `top_pats_hack` to make things compile. --- src/librustc/hir/intravisit.rs | 2 +- src/librustc/hir/pat_util.rs | 2 +- src/librustc/middle/dead.rs | 5 +++-- src/librustc/middle/expr_use_visitor.rs | 4 ++-- src/librustc/middle/liveness.rs | 6 +++--- src/librustc_ast_borrowck/cfg/construct.rs | 2 +- src/librustc_mir/hair/cx/expr.rs | 2 +- src/librustc_mir/hair/pattern/check_match.rs | 6 +++--- src/librustc_passes/rvalue_promotion.rs | 2 +- src/librustc_typeck/check/_match.rs | 8 +++----- src/librustc_typeck/check/regionck.rs | 4 ++-- 11 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs index 1f125de9672..91fc004b893 100644 --- a/src/librustc/hir/intravisit.rs +++ b/src/librustc/hir/intravisit.rs @@ -1103,7 +1103,7 @@ pub fn walk_expr<'v, V: Visitor<'v>>(visitor: &mut V, expression: &'v Expr) { pub fn walk_arm<'v, V: Visitor<'v>>(visitor: &mut V, arm: &'v Arm) { visitor.visit_id(arm.hir_id); - walk_list!(visitor, visit_pat, &arm.pats); + visitor.visit_pat(&arm.pat); if let Some(ref g) = arm.guard { match g { Guard::If(ref e) => visitor.visit_expr(e), diff --git a/src/librustc/hir/pat_util.rs b/src/librustc/hir/pat_util.rs index 0d2c7d393bb..3d82f37e1a9 100644 --- a/src/librustc/hir/pat_util.rs +++ b/src/librustc/hir/pat_util.rs @@ -170,7 +170,7 @@ pub fn contains_explicit_ref_binding(&self) -> Option { // for #42640 (default match binding modes). // // See #44848. - self.pats.iter() + self.top_pats_hack().iter() .filter_map(|pat| pat.contains_explicit_ref_binding()) .max_by_key(|m| match *m { hir::MutMutable => 1, diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index d4805a7c783..666c1cc96f2 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -259,8 +259,9 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) { } fn visit_arm(&mut self, arm: &'tcx hir::Arm) { - if arm.pats.len() == 1 { - let variants = arm.pats[0].necessary_variants(); + let pats = arm.top_pats_hack(); + if pats.len() == 1 { + let variants = pats[0].necessary_variants(); // Inside the body, ignore constructions of variants // necessary for the pattern to match. Those construction sites diff --git a/src/librustc/middle/expr_use_visitor.rs b/src/librustc/middle/expr_use_visitor.rs index de6dadabcbf..ef84c9bbad6 100644 --- a/src/librustc/middle/expr_use_visitor.rs +++ b/src/librustc/middle/expr_use_visitor.rs @@ -779,14 +779,14 @@ fn walk_autoref(&mut self, fn arm_move_mode(&mut self, discr_cmt: mc::cmt<'tcx>, arm: &hir::Arm) -> TrackMatchMode { let mut mode = Unknown; - for pat in &arm.pats { + for pat in arm.top_pats_hack() { self.determine_pat_move_mode(discr_cmt.clone(), &pat, &mut mode); } mode } fn walk_arm(&mut self, discr_cmt: mc::cmt<'tcx>, arm: &hir::Arm, mode: MatchMode) { - for pat in &arm.pats { + for pat in arm.top_pats_hack() { self.walk_pat(discr_cmt.clone(), &pat, mode); } diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index 00013bfc574..5e91c81dd4d 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -456,7 +456,7 @@ fn visit_local<'tcx>(ir: &mut IrMaps<'tcx>, local: &'tcx hir::Local) { } fn visit_arm<'tcx>(ir: &mut IrMaps<'tcx>, arm: &'tcx hir::Arm) { - for pat in &arm.pats { + for pat in arm.top_pats_hack() { add_from_pat(ir, pat); } intravisit::walk_arm(ir, arm); @@ -1080,7 +1080,7 @@ fn propagate_through_expr(&mut self, expr: &Expr, succ: LiveNode) // the same bindings, and we also consider the first pattern to be // the "authoritative" set of ids let arm_succ = - self.define_bindings_in_arm_pats(arm.pats.first().map(|p| &**p), + self.define_bindings_in_arm_pats(arm.top_pats_hack().first().map(|p| &**p), guard_succ); self.merge_from_succ(ln, arm_succ, first_merge); first_merge = false; @@ -1422,7 +1422,7 @@ fn check_arm<'a, 'tcx>(this: &mut Liveness<'a, 'tcx>, arm: &'tcx hir::Arm) { // patterns so the suggestions to prefix with underscores will apply to those too. let mut vars: BTreeMap)> = Default::default(); - for pat in &arm.pats { + for pat in arm.top_pats_hack() { this.arm_pats_bindings(Some(&*pat), |this, ln, var, sp, id| { let name = this.ir.variable_name(var); vars.entry(name) diff --git a/src/librustc_ast_borrowck/cfg/construct.rs b/src/librustc_ast_borrowck/cfg/construct.rs index 0dc999083a9..e2c5de648a2 100644 --- a/src/librustc_ast_borrowck/cfg/construct.rs +++ b/src/librustc_ast_borrowck/cfg/construct.rs @@ -390,7 +390,7 @@ fn match_(&mut self, id: hir::ItemLocalId, discr: &hir::Expr, // patterns and the guard (if there is one) in the arm. let bindings_exit = self.add_dummy_node(&[]); - for pat in &arm.pats { + for pat in arm.top_pats_hack() { // Visit the pattern, coming from the discriminant exit let mut pat_exit = self.pat(&pat, discr_exit); diff --git a/src/librustc_mir/hair/cx/expr.rs b/src/librustc_mir/hair/cx/expr.rs index a33d7207ed4..f3d699fa4f0 100644 --- a/src/librustc_mir/hair/cx/expr.rs +++ b/src/librustc_mir/hair/cx/expr.rs @@ -862,7 +862,7 @@ fn to_borrow_kind(&self) -> BorrowKind { fn convert_arm<'a, 'tcx>(cx: &mut Cx<'a, 'tcx>, arm: &'tcx hir::Arm) -> Arm<'tcx> { Arm { - patterns: arm.pats.iter().map(|p| cx.pattern_from_hir(p)).collect(), + patterns: arm.top_pats_hack().iter().map(|p| cx.pattern_from_hir(p)).collect(), guard: match arm.guard { Some(hir::Guard::If(ref e)) => Some(Guard::If(e.to_ref())), _ => None, diff --git a/src/librustc_mir/hair/pattern/check_match.rs b/src/librustc_mir/hair/pattern/check_match.rs index 161c58a1755..c3542d4ab6c 100644 --- a/src/librustc_mir/hair/pattern/check_match.rs +++ b/src/librustc_mir/hair/pattern/check_match.rs @@ -137,7 +137,7 @@ fn check_match( ) { for arm in arms { // First, check legality of move bindings. - self.check_patterns(arm.guard.is_some(), &arm.pats); + self.check_patterns(arm.guard.is_some(), &arm.top_pats_hack()); // Second, if there is a guard on each arm, make sure it isn't // assigning or borrowing anything mutably. @@ -146,7 +146,7 @@ fn check_match( } // Third, perform some lints. - for pat in &arm.pats { + for pat in arm.top_pats_hack() { check_for_bindings_named_same_as_variants(self, pat); } } @@ -156,7 +156,7 @@ fn check_match( let mut have_errors = false; let inlined_arms : Vec<(Vec<_>, _)> = arms.iter().map(|arm| ( - arm.pats.iter().map(|pat| { + arm.top_pats_hack().iter().map(|pat| { let mut patcx = PatternContext::new(self.tcx, self.param_env.and(self.identity_substs), self.tables); diff --git a/src/librustc_passes/rvalue_promotion.rs b/src/librustc_passes/rvalue_promotion.rs index f2461f70161..7470f5b7a5f 100644 --- a/src/librustc_passes/rvalue_promotion.rs +++ b/src/librustc_passes/rvalue_promotion.rs @@ -503,7 +503,7 @@ fn check_expr_kind<'a, 'tcx>( // 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) { + for pat in hirvec_arm.iter().flat_map(|arm| arm.top_pats_hack()) { mut_borrow = v.remove_mut_rvalue_borrow(pat); } if mut_borrow { diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs index 308a3d8ebc2..7b971803db5 100644 --- a/src/librustc_typeck/check/_match.rs +++ b/src/librustc_typeck/check/_match.rs @@ -58,11 +58,9 @@ pub fn check_match( // collection into `Vec`), so we get types for all bindings. let all_arm_pats_diverge: Vec<_> = arms.iter().map(|arm| { let mut all_pats_diverge = Diverges::WarnedAlways; - for p in &arm.pats { - self.diverges.set(Diverges::Maybe); - self.check_pat_top(&p, discrim_ty, Some(discrim.span)); - all_pats_diverge &= self.diverges.get(); - } + self.diverges.set(Diverges::Maybe); + self.check_pat_top(&arm.pat, discrim_ty, Some(discrim.span)); + all_pats_diverge &= self.diverges.get(); // As discussed with @eddyb, this is for disabling unreachable_code // warnings on patterns (they're now subsumed by unreachable_patterns diff --git a/src/librustc_typeck/check/regionck.rs b/src/librustc_typeck/check/regionck.rs index fc01a820e23..86ec477a6aa 100644 --- a/src/librustc_typeck/check/regionck.rs +++ b/src/librustc_typeck/check/regionck.rs @@ -488,7 +488,7 @@ fn visit_fn( fn visit_arm(&mut self, arm: &'tcx hir::Arm) { // see above - for p in &arm.pats { + for p in arm.top_pats_hack() { self.constrain_bindings_in_pat(p); } intravisit::walk_arm(self, arm); @@ -1069,7 +1069,7 @@ fn link_match(&self, discr: &hir::Expr, arms: &[hir::Arm]) { let discr_cmt = Rc::new(ignore_err!(self.with_mc(|mc| mc.cat_expr(discr)))); debug!("discr_cmt={:?}", discr_cmt); for arm in arms { - for root_pat in &arm.pats { + for root_pat in arm.top_pats_hack() { self.link_pattern(discr_cmt.clone(), &root_pat); } } -- 2.44.0