]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_mir/transform/simplify_try.rs
Remove PlaceBase enum and make Place base field be local: Local
[rust.git] / src / librustc_mir / transform / simplify_try.rs
index 2235de9a1533a16ecb1b91e5b017ab0eb6b73235..e733b0a5b5928dffdd04d888ceb5f591a56d9863 100644 (file)
@@ -9,11 +9,11 @@
 //!
 //! into just `x`.
 
-use crate::transform::{MirPass, MirSource, simplify};
-use rustc::ty::{TyCtxt, Ty};
+use crate::transform::{simplify, MirPass, MirSource};
+use itertools::Itertools as _;
 use rustc::mir::*;
+use rustc::ty::{Ty, TyCtxt};
 use rustc_target::abi::VariantIdx;
-use itertools::Itertools as _;
 
 /// Simplifies arms of form `Variant(x) => Variant(x)` to just a move.
 ///
@@ -33,7 +33,7 @@
 pub struct SimplifyArmIdentity;
 
 impl<'tcx> MirPass<'tcx> for SimplifyArmIdentity {
-    fn run_pass(&self, _: TyCtxt<'tcx>, _: MirSource<'tcx>, body: &mut BodyCache<'tcx>) {
+    fn run_pass(&self, _: TyCtxt<'tcx>, _: MirSource<'tcx>, body: &mut BodyAndCache<'tcx>) {
         let (basic_blocks, local_decls) = body.basic_blocks_and_local_decls_mut();
         for bb in basic_blocks {
             // Need 3 statements:
@@ -119,10 +119,9 @@ fn match_set_variant_field<'tcx>(stmt: &Statement<'tcx>) -> Option<(Local, Local
 /// ```
 fn match_set_discr<'tcx>(stmt: &Statement<'tcx>) -> Option<(Local, VariantIdx)> {
     match &stmt.kind {
-        StatementKind::SetDiscriminant { place, variant_index } => Some((
-            place.as_local()?,
-            *variant_index
-        )),
+        StatementKind::SetDiscriminant { place, variant_index } => {
+            Some((place.as_local()?, *variant_index))
+        }
         _ => None,
     }
 }
@@ -138,9 +137,9 @@ struct VarField<'tcx> {
 fn match_variant_field_place<'tcx>(place: &Place<'tcx>) -> Option<(Local, VarField<'tcx>)> {
     match place.as_ref() {
         PlaceRef {
-            base: &PlaceBase::Local(local),
+            local,
             projection: &[ProjectionElem::Downcast(_, var_idx), ProjectionElem::Field(field, ty)],
-        } => Some((local, VarField { field, field_ty: ty, var_idx })),
+        } => Some((*local, VarField { field, field_ty: ty, var_idx })),
         _ => None,
     }
 }
@@ -151,7 +150,7 @@ fn match_variant_field_place<'tcx>(place: &Place<'tcx>) -> Option<(Local, VarFie
 pub struct SimplifyBranchSame;
 
 impl<'tcx> MirPass<'tcx> for SimplifyBranchSame {
-    fn run_pass(&self, _: TyCtxt<'tcx>, _: MirSource<'tcx>, body: &mut BodyCache<'tcx>) {
+    fn run_pass(&self, _: TyCtxt<'tcx>, _: MirSource<'tcx>, body: &mut BodyAndCache<'tcx>) {
         let mut did_remove_blocks = false;
         let bbs = body.basic_blocks_mut();
         for bb_idx in bbs.indices() {
@@ -177,19 +176,14 @@ fn run_pass(&self, _: TyCtxt<'tcx>, _: MirSource<'tcx>, body: &mut BodyCache<'tc
                 .peekable();
 
             // We want to `goto -> bb_first`.
-            let bb_first = iter_bbs_reachable
-                .peek()
-                .map(|(idx, _)| *idx)
-                .unwrap_or(targets[0]);
+            let bb_first = iter_bbs_reachable.peek().map(|(idx, _)| *idx).unwrap_or(targets[0]);
 
             // All successor basic blocks should have the exact same form.
-            let all_successors_equivalent = iter_bbs_reachable
-                .map(|(_, bb)| bb)
-                .tuple_windows()
-                .all(|(bb_l, bb_r)| {
+            let all_successors_equivalent =
+                iter_bbs_reachable.map(|(_, bb)| bb).tuple_windows().all(|(bb_l, bb_r)| {
                     bb_l.is_cleanup == bb_r.is_cleanup
-                    && bb_l.terminator().kind == bb_r.terminator().kind
-                    && bb_l.statements.iter().eq_by(&bb_r.statements, |x, y| x.kind == y.kind)
+                        && bb_l.terminator().kind == bb_r.terminator().kind
+                        && bb_l.statements.iter().eq_by(&bb_r.statements, |x, y| x.kind == y.kind)
                 });
 
             if all_successors_equivalent {