@@ -484,7 +484,7 @@ enum ParenthesizedGenericArgs {
484484/// an "elided" or "underscore" lifetime name. In the future, we probably want to move
485485/// everything into HIR lowering.
486486#[ derive( Copy , Clone , Debug ) ]
487- enum AnonymousLifetimeMode {
487+ pub enum AnonymousLifetimeMode {
488488 /// For **Modern** cases, create a new anonymous region parameter
489489 /// and reference that.
490490 ///
@@ -1835,7 +1835,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
18351835 // Output lifetime like `'_`:
18361836 for ( span, node_id) in lifetimes_to_define {
18371837 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 ) ) ;
18391839 generic_params. push ( param) ;
18401840 }
18411841 let generic_params = this. arena . alloc_from_iter ( generic_params) ;
@@ -2017,16 +2017,16 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
20172017 } ) ;
20182018 let param_name = match lt. name {
20192019 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+ }
20232023 hir:: LifetimeName :: ImplicitObjectLifetimeDefault => {
20242024 self . sess . diagnostic ( ) . span_bug (
20252025 param. ident . span ,
20262026 "object-lifetime-default should not occur here" ,
20272027 ) ;
20282028 }
2029- hir:: LifetimeName :: Error => ParamName :: Error ,
2029+ hir:: LifetimeName :: Static | hir :: LifetimeName :: Error => ParamName :: Error ,
20302030 } ;
20312031
20322032 let kind =
@@ -2397,27 +2397,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
23972397
23982398 AnonymousLifetimeMode :: ReportError => self . new_error_lifetime ( None , span) ,
23992399
2400- AnonymousLifetimeMode :: PassThrough => self . new_implicit_lifetime ( span, false ) ,
2400+ AnonymousLifetimeMode :: PassThrough => self . new_implicit_lifetime ( span) ,
24012401 }
24022402 }
24032403
24042404 /// Report an error on illegal use of `'_` or a `&T` with no explicit lifetime;
24052405 /// return an "error lifetime".
24062406 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 ( ) ) ;
24212408 self . new_named_lifetime ( id, span, hir:: LifetimeName :: Error )
24222409 }
24232410
@@ -2429,12 +2416,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
24292416 & ' s mut self ,
24302417 span : Span ,
24312418 count : usize ,
2432- param_mode : ParamMode ,
24332419 ) -> 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) )
24352421 }
24362422
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 {
24382424 match self . anonymous_lifetime_mode {
24392425 AnonymousLifetimeMode :: CreateParameter => {
24402426 // We should have emitted E0726 when processing this path above
@@ -2450,7 +2436,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
24502436 // lifetime. Instead, we simply create an implicit lifetime, which will be checked
24512437 // later, at which point a suitable error will be emitted.
24522438 AnonymousLifetimeMode :: PassThrough | AnonymousLifetimeMode :: ReportError => {
2453- self . new_implicit_lifetime ( span, param_mode == ParamMode :: Explicit )
2439+ self . new_implicit_lifetime ( span)
24542440 }
24552441 }
24562442 }
@@ -2493,11 +2479,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
24932479 r
24942480 }
24952481
2496- fn new_implicit_lifetime ( & mut self , span : Span , missing : bool ) -> hir:: Lifetime {
2482+ fn new_implicit_lifetime ( & mut self , span : Span ) -> hir:: Lifetime {
24972483 hir:: Lifetime {
24982484 hir_id : self . next_id ( ) ,
24992485 span : self . lower_span ( span) ,
2500- name : hir:: LifetimeName :: Implicit ( missing ) ,
2486+ name : hir:: LifetimeName :: Implicit ,
25012487 }
25022488 }
25032489}
@@ -2600,7 +2586,7 @@ fn lifetimes_from_impl_trait_bounds(
26002586
26012587 fn visit_lifetime ( & mut self , lifetime : & ' v hir:: Lifetime ) {
26022588 let name = match lifetime. name {
2603- hir:: LifetimeName :: Implicit ( _ ) | hir:: LifetimeName :: Underscore => {
2589+ hir:: LifetimeName :: Implicit | hir:: LifetimeName :: Underscore => {
26042590 if self . collect_elided_lifetimes {
26052591 // Use `'_` for both implicit and underscore lifetimes in
26062592 // `type Foo<'_> = impl SomeTrait<'_>;`.
0 commit comments