@@ -484,7 +484,7 @@ enum ParenthesizedGenericArgs {
484
484
/// an "elided" or "underscore" lifetime name. In the future, we probably want to move
485
485
/// everything into HIR lowering.
486
486
#[ derive( Copy , Clone , Debug ) ]
487
- enum AnonymousLifetimeMode {
487
+ pub enum AnonymousLifetimeMode {
488
488
/// For **Modern** cases, create a new anonymous region parameter
489
489
/// and reference that.
490
490
///
@@ -1835,7 +1835,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1835
1835
// Output lifetime like `'_`:
1836
1836
for ( span, node_id) in lifetimes_to_define {
1837
1837
let param = this. fresh_lifetime_to_generic_param ( span, node_id) ;
1838
- lifetime_params. push ( ( span, hir:: LifetimeName :: Implicit ( false ) ) ) ;
1838
+ lifetime_params. push ( ( span, hir:: LifetimeName :: Implicit ) ) ;
1839
1839
generic_params. push ( param) ;
1840
1840
}
1841
1841
let generic_params = this. arena . alloc_from_iter ( generic_params) ;
@@ -2017,16 +2017,16 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2017
2017
} ) ;
2018
2018
let param_name = match lt. name {
2019
2019
hir:: LifetimeName :: Param ( param_name) => param_name,
2020
- hir:: LifetimeName :: Implicit ( _ )
2021
- | hir:: LifetimeName :: Underscore
2022
- | hir :: LifetimeName :: Static => hir :: ParamName :: Plain ( lt . name . ident ( ) ) ,
2020
+ hir:: LifetimeName :: Implicit | hir :: LifetimeName :: Underscore => {
2021
+ hir:: ParamName :: Plain ( lt . name . ident ( ) )
2022
+ }
2023
2023
hir:: LifetimeName :: ImplicitObjectLifetimeDefault => {
2024
2024
self . sess . diagnostic ( ) . span_bug (
2025
2025
param. ident . span ,
2026
2026
"object-lifetime-default should not occur here" ,
2027
2027
) ;
2028
2028
}
2029
- hir:: LifetimeName :: Error => ParamName :: Error ,
2029
+ hir:: LifetimeName :: Static | hir :: LifetimeName :: Error => ParamName :: Error ,
2030
2030
} ;
2031
2031
2032
2032
let kind =
@@ -2397,27 +2397,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2397
2397
2398
2398
AnonymousLifetimeMode :: ReportError => self . new_error_lifetime ( None , span) ,
2399
2399
2400
- AnonymousLifetimeMode :: PassThrough => self . new_implicit_lifetime ( span, false ) ,
2400
+ AnonymousLifetimeMode :: PassThrough => self . new_implicit_lifetime ( span) ,
2401
2401
}
2402
2402
}
2403
2403
2404
2404
/// Report an error on illegal use of `'_` or a `&T` with no explicit lifetime;
2405
2405
/// return an "error lifetime".
2406
2406
fn new_error_lifetime ( & mut self , id : Option < NodeId > , span : Span ) -> hir:: Lifetime {
2407
- let ( id, msg, label) = match id {
2408
- Some ( id) => ( id, "`'_` cannot be used here" , "`'_` is a reserved lifetime name" ) ,
2409
-
2410
- None => (
2411
- self . resolver . next_node_id ( ) ,
2412
- "`&` without an explicit lifetime name cannot be used here" ,
2413
- "explicit lifetime name needed here" ,
2414
- ) ,
2415
- } ;
2416
-
2417
- let mut err = struct_span_err ! ( self . sess, span, E0637 , "{}" , msg, ) ;
2418
- err. span_label ( span, label) ;
2419
- err. emit ( ) ;
2420
-
2407
+ let id = id. unwrap_or_else ( || self . resolver . next_node_id ( ) ) ;
2421
2408
self . new_named_lifetime ( id, span, hir:: LifetimeName :: Error )
2422
2409
}
2423
2410
@@ -2429,12 +2416,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2429
2416
& ' s mut self ,
2430
2417
span : Span ,
2431
2418
count : usize ,
2432
- param_mode : ParamMode ,
2433
2419
) -> impl Iterator < Item = hir:: Lifetime > + Captures < ' a > + Captures < ' s > + Captures < ' hir > {
2434
- ( 0 ..count) . map ( move |_| self . elided_path_lifetime ( span, param_mode ) )
2420
+ ( 0 ..count) . map ( move |_| self . elided_path_lifetime ( span) )
2435
2421
}
2436
2422
2437
- fn elided_path_lifetime ( & mut self , span : Span , param_mode : ParamMode ) -> hir:: Lifetime {
2423
+ fn elided_path_lifetime ( & mut self , span : Span ) -> hir:: Lifetime {
2438
2424
match self . anonymous_lifetime_mode {
2439
2425
AnonymousLifetimeMode :: CreateParameter => {
2440
2426
// We should have emitted E0726 when processing this path above
@@ -2450,7 +2436,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2450
2436
// lifetime. Instead, we simply create an implicit lifetime, which will be checked
2451
2437
// later, at which point a suitable error will be emitted.
2452
2438
AnonymousLifetimeMode :: PassThrough | AnonymousLifetimeMode :: ReportError => {
2453
- self . new_implicit_lifetime ( span, param_mode == ParamMode :: Explicit )
2439
+ self . new_implicit_lifetime ( span)
2454
2440
}
2455
2441
}
2456
2442
}
@@ -2493,11 +2479,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2493
2479
r
2494
2480
}
2495
2481
2496
- fn new_implicit_lifetime ( & mut self , span : Span , missing : bool ) -> hir:: Lifetime {
2482
+ fn new_implicit_lifetime ( & mut self , span : Span ) -> hir:: Lifetime {
2497
2483
hir:: Lifetime {
2498
2484
hir_id : self . next_id ( ) ,
2499
2485
span : self . lower_span ( span) ,
2500
- name : hir:: LifetimeName :: Implicit ( missing ) ,
2486
+ name : hir:: LifetimeName :: Implicit ,
2501
2487
}
2502
2488
}
2503
2489
}
@@ -2600,7 +2586,7 @@ fn lifetimes_from_impl_trait_bounds(
2600
2586
2601
2587
fn visit_lifetime ( & mut self , lifetime : & ' v hir:: Lifetime ) {
2602
2588
let name = match lifetime. name {
2603
- hir:: LifetimeName :: Implicit ( _ ) | hir:: LifetimeName :: Underscore => {
2589
+ hir:: LifetimeName :: Implicit | hir:: LifetimeName :: Underscore => {
2604
2590
if self . collect_elided_lifetimes {
2605
2591
// Use `'_` for both implicit and underscore lifetimes in
2606
2592
// `type Foo<'_> = impl SomeTrait<'_>;`.
0 commit comments