]> git.lizzy.rs Git - rust.git/commitdiff
mir: remove a hacky recursive helper function
authorljedrz <ljedrz@gmail.com>
Wed, 7 Nov 2018 16:00:51 +0000 (17:00 +0100)
committerljedrz <ljedrz@gmail.com>
Wed, 7 Nov 2018 16:00:51 +0000 (17:00 +0100)
src/librustc_mir/transform/promote_consts.rs

index e79da88a2464bf7d75d0b6815bd52bc4f316065a..c5add6260789a34e485f5852b45695cc3d093374 100644 (file)
@@ -310,16 +310,11 @@ fn promote_candidate(mut self, candidate: Candidate) {
                     match statement.kind {
                         StatementKind::Assign(_, box Rvalue::Ref(_, _, ref mut place)) => {
                             // Find the underlying local for this (necessarily interior) borrow.
-                            // HACK(eddyb) using a recursive function because of mutable borrows.
-                            fn interior_base<'a, 'tcx>(place: &'a mut Place<'tcx>)
-                                                       -> &'a mut Place<'tcx> {
-                                if let Place::Projection(ref mut proj) = *place {
-                                    assert_ne!(proj.elem, ProjectionElem::Deref);
-                                    return interior_base(&mut proj.base);
-                                }
-                                place
-                            }
-                            let place = interior_base(place);
+                            let mut place = place;
+                            while let Place::Projection(ref mut proj) = *place {
+                                assert_ne!(proj.elem, ProjectionElem::Deref);
+                                place = &mut proj.base;
+                            };
 
                             let ty = place.ty(local_decls, self.tcx).to_ty(self.tcx);
                             let span = statement.source_info.span;