@@ -1361,10 +1361,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1361
1361
lctx. with_remapping ( new_remapping, |lctx| {
1362
1362
let hir_bounds = lctx. lower_param_bounds ( bounds, itctx) ;
1363
1363
1364
- let lifetime_defs =
1365
- lctx . arena . alloc_from_iter ( collected_lifetimes . iter ( ) . map ( |& ( lifetime , _ ) | {
1366
- let hir_id = lctx. lower_node_id ( lifetime . id ) ;
1367
- debug_assert_ne ! ( lctx. opt_local_def_id( lifetime . id ) , None ) ;
1364
+ let lifetime_defs = lctx . arena . alloc_from_iter ( collected_lifetimes . iter ( ) . map (
1365
+ |& ( new_node_id , lifetime ) | {
1366
+ let hir_id = lctx. lower_node_id ( new_node_id ) ;
1367
+ debug_assert_ne ! ( lctx. opt_local_def_id( new_node_id ) , None ) ;
1368
1368
1369
1369
let ( name, kind) = if lifetime. ident . name == kw:: UnderscoreLifetime {
1370
1370
( hir:: ParamName :: Fresh , hir:: LifetimeParamKind :: Elided )
@@ -1383,7 +1383,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1383
1383
kind : hir:: GenericParamKind :: Lifetime { kind } ,
1384
1384
colon_span : None ,
1385
1385
}
1386
- } ) ) ;
1386
+ } ,
1387
+ ) ) ;
1387
1388
1388
1389
debug ! ( "lower_opaque_impl_trait: lifetime_defs={:#?}" , lifetime_defs) ;
1389
1390
@@ -1405,7 +1406,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1405
1406
} ) ;
1406
1407
1407
1408
let lifetimes =
1408
- self . arena . alloc_from_iter ( collected_lifetimes. into_iter ( ) . map ( |( lifetime , res ) | {
1409
+ self . arena . alloc_from_iter ( collected_lifetimes. into_iter ( ) . map ( |( _ , lifetime ) | {
1409
1410
let id = self . next_node_id ( ) ;
1410
1411
let span = lifetime. ident . span ;
1411
1412
@@ -1415,7 +1416,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1415
1416
lifetime. ident
1416
1417
} ;
1417
1418
1418
- let l = self . new_named_lifetime_with_res ( id, span , ident , res ) ;
1419
+ let l = self . new_named_lifetime ( lifetime . id , id , span , ident ) ;
1419
1420
hir:: GenericArg :: Lifetime ( l)
1420
1421
} ) ) ;
1421
1422
@@ -1452,7 +1453,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1452
1453
parent_def_id : LocalDefId ,
1453
1454
lifetimes_in_bounds : & [ Lifetime ] ,
1454
1455
remapping : & mut FxHashMap < LocalDefId , LocalDefId > ,
1455
- ) -> Vec < ( Lifetime , LifetimeRes ) > {
1456
+ ) -> Vec < ( NodeId , Lifetime ) > {
1456
1457
let mut result = Vec :: new ( ) ;
1457
1458
1458
1459
for lifetime in lifetimes_in_bounds {
@@ -1471,8 +1472,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1471
1472
) ;
1472
1473
remapping. insert ( old_def_id, new_def_id) ;
1473
1474
1474
- let new_lifetime = Lifetime { id : node_id, ident : lifetime. ident } ;
1475
- result. push ( ( new_lifetime, res) ) ;
1475
+ result. push ( ( node_id, * lifetime) ) ;
1476
1476
}
1477
1477
}
1478
1478
@@ -1489,8 +1489,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1489
1489
) ;
1490
1490
remapping. insert ( old_def_id, new_def_id) ;
1491
1491
1492
- let new_lifetime = Lifetime { id : node_id, ident : lifetime. ident } ;
1493
- result. push ( ( new_lifetime, res) ) ;
1492
+ result. push ( ( node_id, * lifetime) ) ;
1494
1493
}
1495
1494
}
1496
1495
@@ -1732,8 +1731,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1732
1731
}
1733
1732
} ;
1734
1733
1735
- let new_lifetime = Lifetime { id : inner_node_id , ident } ;
1736
- captures. push ( ( new_lifetime , inner_res) ) ;
1734
+ let lifetime = Lifetime { id : outer_node_id , ident } ;
1735
+ captures. push ( ( inner_node_id , lifetime , Some ( inner_res) ) ) ;
1737
1736
}
1738
1737
1739
1738
debug ! ( ?captures) ;
@@ -1743,11 +1742,15 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1743
1742
lifetime_collector:: lifetimes_in_ret_ty ( & this. resolver , output) ;
1744
1743
debug ! ( ?lifetimes_in_bounds) ;
1745
1744
1746
- captures. extend ( this. create_lifetime_defs (
1747
- opaque_ty_def_id,
1748
- & lifetimes_in_bounds,
1749
- & mut new_remapping,
1750
- ) ) ;
1745
+ captures. extend (
1746
+ this. create_lifetime_defs (
1747
+ opaque_ty_def_id,
1748
+ & lifetimes_in_bounds,
1749
+ & mut new_remapping,
1750
+ )
1751
+ . into_iter ( )
1752
+ . map ( |( new_node_id, lifetime) | ( new_node_id, lifetime, None ) ) ,
1753
+ ) ;
1751
1754
1752
1755
this. with_remapping ( new_remapping, |this| {
1753
1756
// We have to be careful to get elision right here. The
@@ -1761,10 +1764,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1761
1764
let future_bound =
1762
1765
this. lower_async_fn_output_type_to_future_bound ( output, fn_def_id, span) ;
1763
1766
1764
- let generic_params =
1765
- this . arena . alloc_from_iter ( captures . iter ( ) . map ( |& ( lifetime, _) | {
1766
- let hir_id = this. lower_node_id ( lifetime . id ) ;
1767
- debug_assert_ne ! ( this. opt_local_def_id( lifetime . id ) , None ) ;
1767
+ let generic_params = this . arena . alloc_from_iter ( captures . iter ( ) . map (
1768
+ |& ( new_node_id , lifetime, _) | {
1769
+ let hir_id = this. lower_node_id ( new_node_id ) ;
1770
+ debug_assert_ne ! ( this. opt_local_def_id( new_node_id ) , None ) ;
1768
1771
1769
1772
let ( name, kind) = if lifetime. ident . name == kw:: UnderscoreLifetime {
1770
1773
( hir:: ParamName :: Fresh , hir:: LifetimeParamKind :: Elided )
@@ -1783,7 +1786,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1783
1786
kind : hir:: GenericParamKind :: Lifetime { kind } ,
1784
1787
colon_span : None ,
1785
1788
}
1786
- } ) ) ;
1789
+ } ,
1790
+ ) ) ;
1787
1791
debug ! ( "lower_async_fn_ret_ty: generic_params={:#?}" , generic_params) ;
1788
1792
1789
1793
let opaque_ty_item = hir:: OpaqueTy {
@@ -1819,7 +1823,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1819
1823
// For the "output" lifetime parameters, we just want to
1820
1824
// generate `'_`.
1821
1825
let generic_args =
1822
- self . arena . alloc_from_iter ( captures. into_iter ( ) . map ( |( lifetime, res) | {
1826
+ self . arena . alloc_from_iter ( captures. into_iter ( ) . map ( |( _ , lifetime, res) | {
1823
1827
let id = self . next_node_id ( ) ;
1824
1828
let span = lifetime. ident . span ;
1825
1829
@@ -1829,6 +1833,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1829
1833
lifetime. ident
1830
1834
} ;
1831
1835
1836
+ let res = res. unwrap_or (
1837
+ self . resolver . get_lifetime_res ( lifetime. id ) . unwrap_or ( LifetimeRes :: Error ) ,
1838
+ ) ;
1832
1839
let l = self . new_named_lifetime_with_res ( id, span, ident, res) ;
1833
1840
hir:: GenericArg :: Lifetime ( l)
1834
1841
} ) ) ;
@@ -1901,8 +1908,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1901
1908
fn lower_lifetime ( & mut self , l : & Lifetime ) -> hir:: Lifetime {
1902
1909
let span = self . lower_span ( l. ident . span ) ;
1903
1910
let ident = self . lower_ident ( l. ident ) ;
1904
- let res = self . resolver . get_lifetime_res ( l. id ) . unwrap_or ( LifetimeRes :: Error ) ;
1905
- self . new_named_lifetime_with_res ( l. id , span, ident, res)
1911
+ self . new_named_lifetime ( l. id , l. id , span, ident)
1906
1912
}
1907
1913
1908
1914
#[ tracing:: instrument( level = "debug" , skip( self ) ) ]
@@ -1936,6 +1942,18 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1936
1942
hir:: Lifetime { hir_id : self . lower_node_id ( id) , span : self . lower_span ( span) , name }
1937
1943
}
1938
1944
1945
+ #[ tracing:: instrument( level = "debug" , skip( self ) ) ]
1946
+ fn new_named_lifetime (
1947
+ & mut self ,
1948
+ id : NodeId ,
1949
+ new_id : NodeId ,
1950
+ span : Span ,
1951
+ ident : Ident ,
1952
+ ) -> hir:: Lifetime {
1953
+ let res = self . resolver . get_lifetime_res ( id) . unwrap_or ( LifetimeRes :: Error ) ;
1954
+ self . new_named_lifetime_with_res ( new_id, span, ident, res)
1955
+ }
1956
+
1939
1957
fn lower_generic_params_mut < ' s > (
1940
1958
& ' s mut self ,
1941
1959
params : & ' s [ GenericParam ] ,
0 commit comments