@@ -1314,31 +1314,6 @@ impl<'hir> LoweringContext<'_, 'hir> {
1314
1314
}
1315
1315
}
1316
1316
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 > {
1342
1317
// Error if `?Trait` bounds in where clauses don't refer directly to type parameters.
1343
1318
// Note: we used to clone these bounds directly onto the type parameter (and avoid lowering
1344
1319
// these into hir when we lower thee where clauses), but this makes it quite difficult to
@@ -1386,7 +1361,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
1386
1361
}
1387
1362
}
1388
1363
1389
- let mut predicates = SmallVec :: new ( ) ;
1364
+ let mut predicates: SmallVec < [ hir :: WherePredicate < ' hir > ; 4 ] > = SmallVec :: new ( ) ;
1390
1365
predicates. extend ( generics. params . iter ( ) . filter_map ( |param| {
1391
1366
let bounds = self . lower_param_bounds ( & param. bounds , itctx) ;
1392
1367
self . lower_generic_bound_predicate (
@@ -1405,13 +1380,34 @@ impl<'hir> LoweringContext<'_, 'hir> {
1405
1380
. map ( |predicate| self . lower_where_predicate ( predicate) ) ,
1406
1381
) ;
1407
1382
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)
1415
1411
}
1416
1412
1417
1413
pub ( super ) fn lower_generic_bound_predicate (
@@ -1527,24 +1523,3 @@ impl<'hir> LoweringContext<'_, 'hir> {
1527
1523
}
1528
1524
}
1529
1525
}
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