Skip to content

Commit 2ade55d

Browse files
committed
Inline lower_generics_mut and remove GenericsCtor
1 parent d327db9 commit 2ade55d

File tree

1 file changed

+29
-54
lines changed
  • compiler/rustc_ast_lowering/src

1 file changed

+29
-54
lines changed

compiler/rustc_ast_lowering/src/item.rs

Lines changed: 29 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,31 +1314,6 @@ impl<'hir> LoweringContext<'_, 'hir> {
13141314
}
13151315
}
13161316

1317-
let mut lowered_generics = self.lower_generics_mut(generics, itctx);
1318-
let res = f(self);
1319-
1320-
let extra_lifetimes = self.resolver.take_extra_lifetime_params(parent_node_id);
1321-
let impl_trait_defs = std::mem::take(&mut self.impl_trait_defs);
1322-
lowered_generics.params.extend(
1323-
extra_lifetimes
1324-
.into_iter()
1325-
.filter_map(|(ident, node_id, res)| {
1326-
self.lifetime_res_to_generic_param(ident, node_id, res)
1327-
})
1328-
.chain(impl_trait_defs.into_iter()),
1329-
);
1330-
let impl_trait_bounds = std::mem::take(&mut self.impl_trait_bounds);
1331-
lowered_generics.predicates.extend(impl_trait_bounds.into_iter());
1332-
1333-
let lowered_generics = lowered_generics.into_generics(self.arena);
1334-
(lowered_generics, res)
1335-
}
1336-
1337-
pub(super) fn lower_generics_mut(
1338-
&mut self,
1339-
generics: &Generics,
1340-
itctx: ImplTraitContext,
1341-
) -> GenericsCtor<'hir> {
13421317
// Error if `?Trait` bounds in where clauses don't refer directly to type parameters.
13431318
// Note: we used to clone these bounds directly onto the type parameter (and avoid lowering
13441319
// these into hir when we lower thee where clauses), but this makes it quite difficult to
@@ -1386,7 +1361,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
13861361
}
13871362
}
13881363

1389-
let mut predicates = SmallVec::new();
1364+
let mut predicates: SmallVec<[hir::WherePredicate<'hir>; 4]> = SmallVec::new();
13901365
predicates.extend(generics.params.iter().filter_map(|param| {
13911366
let bounds = self.lower_param_bounds(&param.bounds, itctx);
13921367
self.lower_generic_bound_predicate(
@@ -1405,13 +1380,34 @@ impl<'hir> LoweringContext<'_, 'hir> {
14051380
.map(|predicate| self.lower_where_predicate(predicate)),
14061381
);
14071382

1408-
GenericsCtor {
1409-
params: self.lower_generic_params_mut(&generics.params).collect(),
1410-
predicates,
1411-
has_where_clause: !generics.where_clause.predicates.is_empty(),
1412-
where_clause_span: self.lower_span(generics.where_clause.span),
1413-
span: self.lower_span(generics.span),
1414-
}
1383+
let mut params: Vec<_> = self.lower_generic_params_mut(&generics.params).collect();
1384+
let has_where_clause = !generics.where_clause.predicates.is_empty();
1385+
let where_clause_span = self.lower_span(generics.where_clause.span);
1386+
let span = self.lower_span(generics.span);
1387+
let res = f(self);
1388+
1389+
let extra_lifetimes = self.resolver.take_extra_lifetime_params(parent_node_id);
1390+
let impl_trait_defs = std::mem::take(&mut self.impl_trait_defs);
1391+
params.extend(
1392+
extra_lifetimes
1393+
.into_iter()
1394+
.filter_map(|(ident, node_id, res)| {
1395+
self.lifetime_res_to_generic_param(ident, node_id, res)
1396+
})
1397+
.chain(impl_trait_defs.into_iter()),
1398+
);
1399+
let impl_trait_bounds = std::mem::take(&mut self.impl_trait_bounds);
1400+
predicates.extend(impl_trait_bounds.into_iter());
1401+
1402+
let lowered_generics = self.arena.alloc(hir::Generics {
1403+
params: self.arena.alloc_from_iter(params),
1404+
predicates: self.arena.alloc_from_iter(predicates),
1405+
has_where_clause,
1406+
where_clause_span,
1407+
span,
1408+
});
1409+
1410+
(lowered_generics, res)
14151411
}
14161412

14171413
pub(super) fn lower_generic_bound_predicate(
@@ -1527,24 +1523,3 @@ impl<'hir> LoweringContext<'_, 'hir> {
15271523
}
15281524
}
15291525
}
1530-
1531-
/// Helper struct for delayed construction of Generics.
1532-
pub(super) struct GenericsCtor<'hir> {
1533-
pub(super) params: SmallVec<[hir::GenericParam<'hir>; 4]>,
1534-
pub(super) predicates: SmallVec<[hir::WherePredicate<'hir>; 4]>,
1535-
has_where_clause: bool,
1536-
where_clause_span: Span,
1537-
span: Span,
1538-
}
1539-
1540-
impl<'hir> GenericsCtor<'hir> {
1541-
pub(super) fn into_generics(self, arena: &'hir Arena<'hir>) -> &'hir hir::Generics<'hir> {
1542-
arena.alloc(hir::Generics {
1543-
params: arena.alloc_from_iter(self.params),
1544-
predicates: arena.alloc_from_iter(self.predicates),
1545-
has_where_clause: self.has_where_clause,
1546-
where_clause_span: self.where_clause_span,
1547-
span: self.span,
1548-
})
1549-
}
1550-
}

0 commit comments

Comments
 (0)