Skip to content

Commit 181fbd5

Browse files
committed
Use let/else to de-indent ElaborateBoxDerefs::run_pass.
1 parent cc09ab3 commit 181fbd5

File tree

1 file changed

+44
-47
lines changed

1 file changed

+44
-47
lines changed

compiler/rustc_mir_transform/src/elaborate_box_derefs.rs

Lines changed: 44 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -92,64 +92,61 @@ pub(super) struct ElaborateBoxDerefs;
9292

9393
impl<'tcx> crate::MirPass<'tcx> for ElaborateBoxDerefs {
9494
fn run_pass(&self, tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) {
95-
if let Some(def_id) = tcx.lang_items().owned_box() {
96-
let unique_did = tcx.adt_def(def_id).non_enum_variant().fields[FieldIdx::ZERO].did;
95+
// If box is not present, this pass doesn't need to do anything.
96+
let Some(def_id) = tcx.lang_items().owned_box() else { return };
9797

98-
let Some(nonnull_def) = tcx.type_of(unique_did).instantiate_identity().ty_adt_def()
99-
else {
100-
span_bug!(tcx.def_span(unique_did), "expected Box to contain Unique")
101-
};
98+
let unique_did = tcx.adt_def(def_id).non_enum_variant().fields[FieldIdx::ZERO].did;
10299

103-
let nonnull_did = nonnull_def.non_enum_variant().fields[FieldIdx::ZERO].did;
100+
let Some(nonnull_def) = tcx.type_of(unique_did).instantiate_identity().ty_adt_def() else {
101+
span_bug!(tcx.def_span(unique_did), "expected Box to contain Unique")
102+
};
104103

105-
let patch = MirPatch::new(body);
104+
let nonnull_did = nonnull_def.non_enum_variant().fields[FieldIdx::ZERO].did;
106105

107-
let local_decls = &mut body.local_decls;
106+
let patch = MirPatch::new(body);
108107

109-
let mut visitor =
110-
ElaborateBoxDerefVisitor { tcx, unique_did, nonnull_did, local_decls, patch };
108+
let local_decls = &mut body.local_decls;
111109

112-
for (block, data) in body.basic_blocks.as_mut_preserves_cfg().iter_enumerated_mut() {
113-
visitor.visit_basic_block_data(block, data);
114-
}
110+
let mut visitor =
111+
ElaborateBoxDerefVisitor { tcx, unique_did, nonnull_did, local_decls, patch };
115112

116-
visitor.patch.apply(body);
117-
118-
for debug_info in body.var_debug_info.iter_mut() {
119-
if let VarDebugInfoContents::Place(place) = &mut debug_info.value {
120-
let mut new_projections: Option<Vec<_>> = None;
121-
122-
for (base, elem) in place.iter_projections() {
123-
let base_ty = base.ty(&body.local_decls, tcx).ty;
124-
125-
if let PlaceElem::Deref = elem
126-
&& let Some(boxed_ty) = base_ty.boxed_ty()
127-
{
128-
// Clone the projections before us, since now we need to mutate them.
129-
let new_projections =
130-
new_projections.get_or_insert_with(|| base.projection.to_vec());
131-
132-
let (unique_ty, nonnull_ty, ptr_ty) =
133-
build_ptr_tys(tcx, boxed_ty, unique_did, nonnull_did);
134-
135-
new_projections.extend_from_slice(&build_projection(
136-
unique_ty, nonnull_ty, ptr_ty,
137-
));
138-
new_projections.push(PlaceElem::Deref);
139-
} else if let Some(new_projections) = new_projections.as_mut() {
140-
// Keep building up our projections list once we've started it.
141-
new_projections.push(elem);
142-
}
143-
}
113+
for (block, data) in body.basic_blocks.as_mut_preserves_cfg().iter_enumerated_mut() {
114+
visitor.visit_basic_block_data(block, data);
115+
}
116+
117+
visitor.patch.apply(body);
118+
119+
for debug_info in body.var_debug_info.iter_mut() {
120+
if let VarDebugInfoContents::Place(place) = &mut debug_info.value {
121+
let mut new_projections: Option<Vec<_>> = None;
144122

145-
// Store the mutated projections if we actually changed something.
146-
if let Some(new_projections) = new_projections {
147-
place.projection = tcx.mk_place_elems(&new_projections);
123+
for (base, elem) in place.iter_projections() {
124+
let base_ty = base.ty(&body.local_decls, tcx).ty;
125+
126+
if let PlaceElem::Deref = elem
127+
&& let Some(boxed_ty) = base_ty.boxed_ty()
128+
{
129+
// Clone the projections before us, since now we need to mutate them.
130+
let new_projections =
131+
new_projections.get_or_insert_with(|| base.projection.to_vec());
132+
133+
let (unique_ty, nonnull_ty, ptr_ty) =
134+
build_ptr_tys(tcx, boxed_ty, unique_did, nonnull_did);
135+
136+
new_projections
137+
.extend_from_slice(&build_projection(unique_ty, nonnull_ty, ptr_ty));
138+
new_projections.push(PlaceElem::Deref);
139+
} else if let Some(new_projections) = new_projections.as_mut() {
140+
// Keep building up our projections list once we've started it.
141+
new_projections.push(elem);
148142
}
149143
}
144+
145+
// Store the mutated projections if we actually changed something.
146+
if let Some(new_projections) = new_projections {
147+
place.projection = tcx.mk_place_elems(&new_projections);
148+
}
150149
}
151-
} else {
152-
// box is not present, this pass doesn't need to do anything
153150
}
154151
}
155152
}

0 commit comments

Comments
 (0)