Skip to content

Commit 669f2d4

Browse files
committed
Revert "Rollup merge of #101496 - spastorino:lower_lifetime_binder_api_changes, r=oli-obk"
This reverts commit 953a6b3, reversing changes made to b5ffbd3.
1 parent a926696 commit 669f2d4

File tree

2 files changed

+51
-66
lines changed

2 files changed

+51
-66
lines changed

compiler/rustc_ast_lowering/src/expr.rs

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -855,22 +855,21 @@ impl<'hir> LoweringContext<'_, 'hir> {
855855
(body_id, generator_option)
856856
});
857857

858-
self.lower_lifetime_binder(closure_id, generic_params, |lctx, bound_generic_params| {
859-
// Lower outside new scope to preserve `is_in_loop_condition`.
860-
let fn_decl = lctx.lower_fn_decl(decl, None, fn_decl_span, FnDeclKind::Closure, None);
861-
862-
let c = lctx.arena.alloc(hir::Closure {
863-
binder: binder_clause,
864-
capture_clause,
865-
bound_generic_params,
866-
fn_decl,
867-
body: body_id,
868-
fn_decl_span: lctx.lower_span(fn_decl_span),
869-
movability: generator_option,
870-
});
858+
let bound_generic_params = self.lower_lifetime_binder(closure_id, generic_params);
859+
// Lower outside new scope to preserve `is_in_loop_condition`.
860+
let fn_decl = self.lower_fn_decl(decl, None, fn_decl_span, FnDeclKind::Closure, None);
861+
862+
let c = self.arena.alloc(hir::Closure {
863+
binder: binder_clause,
864+
capture_clause,
865+
bound_generic_params,
866+
fn_decl,
867+
body: body_id,
868+
fn_decl_span: self.lower_span(fn_decl_span),
869+
movability: generator_option,
870+
});
871871

872-
hir::ExprKind::Closure(c)
873-
})
872+
hir::ExprKind::Closure(c)
874873
}
875874

876875
fn generator_movability_for_fn(
@@ -957,24 +956,23 @@ impl<'hir> LoweringContext<'_, 'hir> {
957956
body_id
958957
});
959958

960-
self.lower_lifetime_binder(closure_id, generic_params, |lctx, bound_generic_params| {
961-
// We need to lower the declaration outside the new scope, because we
962-
// have to conserve the state of being inside a loop condition for the
963-
// closure argument types.
964-
let fn_decl =
965-
lctx.lower_fn_decl(&outer_decl, None, fn_decl_span, FnDeclKind::Closure, None);
966-
967-
let c = lctx.arena.alloc(hir::Closure {
968-
binder: binder_clause,
969-
capture_clause,
970-
bound_generic_params,
971-
fn_decl,
972-
body,
973-
fn_decl_span: lctx.lower_span(fn_decl_span),
974-
movability: None,
975-
});
976-
hir::ExprKind::Closure(c)
977-
})
959+
let bound_generic_params = self.lower_lifetime_binder(closure_id, generic_params);
960+
// We need to lower the declaration outside the new scope, because we
961+
// have to conserve the state of being inside a loop condition for the
962+
// closure argument types.
963+
let fn_decl =
964+
self.lower_fn_decl(&outer_decl, None, fn_decl_span, FnDeclKind::Closure, None);
965+
966+
let c = self.arena.alloc(hir::Closure {
967+
binder: binder_clause,
968+
capture_clause,
969+
bound_generic_params,
970+
fn_decl,
971+
body,
972+
fn_decl_span: self.lower_span(fn_decl_span),
973+
movability: None,
974+
});
975+
hir::ExprKind::Closure(c)
978976
}
979977

980978
/// Destructure the LHS of complex assignments.

compiler/rustc_ast_lowering/src/lib.rs

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -839,31 +839,23 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
839839
/// name resolver owing to lifetime elision; this also populates the resolver's node-id->def-id
840840
/// map, so that later calls to `opt_node_id_to_def_id` that refer to these extra lifetime
841841
/// parameters will be successful.
842-
#[instrument(level = "debug", skip(self, in_binder))]
842+
#[instrument(level = "debug", skip(self))]
843843
#[inline]
844-
fn lower_lifetime_binder<R>(
844+
fn lower_lifetime_binder(
845845
&mut self,
846846
binder: NodeId,
847847
generic_params: &[GenericParam],
848-
in_binder: impl FnOnce(&mut Self, &'hir [hir::GenericParam<'hir>]) -> R,
849-
) -> R {
848+
) -> &'hir [hir::GenericParam<'hir>] {
849+
let mut generic_params: Vec<_> = self.lower_generic_params_mut(generic_params).collect();
850850
let extra_lifetimes = self.resolver.take_extra_lifetime_params(binder);
851851
debug!(?extra_lifetimes);
852-
let extra_lifetimes: Vec<_> = extra_lifetimes
853-
.into_iter()
854-
.filter_map(|(ident, node_id, res)| {
855-
self.lifetime_res_to_generic_param(ident, node_id, res)
856-
})
857-
.collect();
858-
859-
let generic_params: Vec<_> = self
860-
.lower_generic_params_mut(generic_params)
861-
.chain(extra_lifetimes.into_iter())
862-
.collect();
852+
generic_params.extend(extra_lifetimes.into_iter().filter_map(|(ident, node_id, res)| {
853+
self.lifetime_res_to_generic_param(ident, node_id, res)
854+
}));
863855
let generic_params = self.arena.alloc_from_iter(generic_params);
864856
debug!(?generic_params);
865857

866-
in_binder(self, generic_params)
858+
generic_params
867859
}
868860

869861
fn with_dyn_type_scope<T>(&mut self, in_scope: bool, f: impl FnOnce(&mut Self) -> T) -> T {
@@ -1268,15 +1260,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
12681260
hir::TyKind::Rptr(lifetime, self.lower_mt(mt, itctx))
12691261
}
12701262
TyKind::BareFn(ref f) => {
1271-
self.lower_lifetime_binder(t.id, &f.generic_params, |lctx, generic_params| {
1272-
hir::TyKind::BareFn(lctx.arena.alloc(hir::BareFnTy {
1273-
generic_params,
1274-
unsafety: lctx.lower_unsafety(f.unsafety),
1275-
abi: lctx.lower_extern(f.ext),
1276-
decl: lctx.lower_fn_decl(&f.decl, None, t.span, FnDeclKind::Pointer, None),
1277-
param_names: lctx.lower_fn_params_to_names(&f.decl),
1278-
}))
1279-
})
1263+
let generic_params = self.lower_lifetime_binder(t.id, &f.generic_params);
1264+
hir::TyKind::BareFn(self.arena.alloc(hir::BareFnTy {
1265+
generic_params,
1266+
unsafety: self.lower_unsafety(f.unsafety),
1267+
abi: self.lower_extern(f.ext),
1268+
decl: self.lower_fn_decl(&f.decl, None, t.span, FnDeclKind::Pointer, None),
1269+
param_names: self.lower_fn_params_to_names(&f.decl),
1270+
}))
12801271
}
12811272
TyKind::Never => hir::TyKind::Never,
12821273
TyKind::Tup(ref tys) => hir::TyKind::Tup(
@@ -2246,14 +2237,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
22462237
p: &PolyTraitRef,
22472238
itctx: &mut ImplTraitContext,
22482239
) -> hir::PolyTraitRef<'hir> {
2249-
self.lower_lifetime_binder(
2250-
p.trait_ref.ref_id,
2251-
&p.bound_generic_params,
2252-
|lctx, bound_generic_params| {
2253-
let trait_ref = lctx.lower_trait_ref(&p.trait_ref, itctx);
2254-
hir::PolyTraitRef { bound_generic_params, trait_ref, span: lctx.lower_span(p.span) }
2255-
},
2256-
)
2240+
let bound_generic_params =
2241+
self.lower_lifetime_binder(p.trait_ref.ref_id, &p.bound_generic_params);
2242+
let trait_ref = self.lower_trait_ref(&p.trait_ref, itctx);
2243+
hir::PolyTraitRef { bound_generic_params, trait_ref, span: self.lower_span(p.span) }
22572244
}
22582245

22592246
fn lower_mt(&mut self, mt: &MutTy, itctx: &mut ImplTraitContext) -> hir::MutTy<'hir> {

0 commit comments

Comments
 (0)