@@ -136,7 +136,7 @@ pub struct LoweringContext<'a> {
136136 // When `is_collectin_in_band_lifetimes` is true, each lifetime is checked
137137 // against this list to see if it is already in-scope, or if a definition
138138 // needs to be created for it.
139- in_scope_lifetimes : Vec < Name > ,
139+ in_scope_lifetimes : Vec < Ident > ,
140140
141141 type_def_lifetime_params : DefIdMap < usize > ,
142142
@@ -650,8 +650,9 @@ impl<'a> LoweringContext<'a> {
650650 // that collisions are ok here and this shouldn't
651651 // really show up for end-user.
652652 let str_name = match hir_name {
653- hir:: LifetimeName :: Name ( n) => n. as_str ( ) ,
654- hir:: LifetimeName :: Fresh ( _) => keywords:: UnderscoreLifetime . name ( ) . as_str ( ) ,
653+ hir:: LifetimeName :: Ident ( ident) => ident. as_interned_str ( ) ,
654+ hir:: LifetimeName :: Fresh ( _) =>
655+ keywords:: UnderscoreLifetime . ident ( ) . as_interned_str ( ) ,
655656 hir:: LifetimeName :: Implicit
656657 | hir:: LifetimeName :: Underscore
657658 | hir:: LifetimeName :: Static => {
@@ -663,7 +664,7 @@ impl<'a> LoweringContext<'a> {
663664 self . resolver . definitions ( ) . create_def_with_parent (
664665 parent_id. index ,
665666 def_node_id,
666- DefPathData :: LifetimeDef ( str_name. as_interned_str ( ) ) ,
667+ DefPathData :: LifetimeDef ( str_name) ,
667668 DefIndexAddressSpace :: High ,
668669 Mark :: root ( ) ,
669670 span,
@@ -694,25 +695,25 @@ impl<'a> LoweringContext<'a> {
694695 /// lifetimes are enabled, then we want to push that lifetime into
695696 /// the vector of names to define later. In that case, it will get
696697 /// added to the appropriate generics.
697- fn maybe_collect_in_band_lifetime ( & mut self , span : Span , name : Name ) {
698+ fn maybe_collect_in_band_lifetime ( & mut self , ident : Ident ) {
698699 if !self . is_collecting_in_band_lifetimes {
699700 return ;
700701 }
701702
702- if self . in_scope_lifetimes . contains ( & name ) {
703+ if self . in_scope_lifetimes . contains ( & ident . modern ( ) ) {
703704 return ;
704705 }
705706
706- let hir_name = hir:: LifetimeName :: Name ( name ) ;
707+ let hir_name = hir:: LifetimeName :: Ident ( ident ) ;
707708
708709 if self . lifetimes_to_define
709710 . iter ( )
710- . any ( |( _, lt_name) | * lt_name == hir_name)
711+ . any ( |( _, lt_name) | lt_name. modern ( ) == hir_name. modern ( ) )
711712 {
712713 return ;
713714 }
714715
715- self . lifetimes_to_define . push ( ( span, hir_name) ) ;
716+ self . lifetimes_to_define . push ( ( ident . span , hir_name) ) ;
716717 }
717718
718719 /// When we have either an elided or `'_` lifetime in an impl
@@ -738,7 +739,7 @@ impl<'a> LoweringContext<'a> {
738739 F : FnOnce ( & mut LoweringContext ) -> T ,
739740 {
740741 let old_len = self . in_scope_lifetimes . len ( ) ;
741- let lt_def_names = lt_defs. map ( |lt_def| lt_def. lifetime . ident . name ) ;
742+ let lt_def_names = lt_defs. map ( |lt_def| lt_def. lifetime . ident . modern ( ) ) ;
742743 self . in_scope_lifetimes . extend ( lt_def_names) ;
743744
744745 let res = f ( self ) ;
@@ -757,7 +758,7 @@ impl<'a> LoweringContext<'a> {
757758 F : FnOnce ( & mut LoweringContext ) -> T ,
758759 {
759760 let old_len = self . in_scope_lifetimes . len ( ) ;
760- let lt_def_names = lt_defs. iter ( ) . map ( |lt_def| lt_def. lifetime . name . name ( ) ) ;
761+ let lt_def_names = lt_defs. iter ( ) . map ( |lt_def| lt_def. lifetime . name . ident ( ) . modern ( ) ) ;
761762 self . in_scope_lifetimes . extend ( lt_def_names) ;
762763
763764 let res = f ( self ) ;
@@ -1279,7 +1280,7 @@ impl<'a> LoweringContext<'a> {
12791280 }
12801281 }
12811282 name @ hir:: LifetimeName :: Fresh ( _) => name,
1282- name @ hir:: LifetimeName :: Name ( _) => name,
1283+ name @ hir:: LifetimeName :: Ident ( _) => name,
12831284 hir:: LifetimeName :: Static => return ,
12841285 } ;
12851286
@@ -1298,7 +1299,7 @@ impl<'a> LoweringContext<'a> {
12981299 self . context . resolver . definitions ( ) . create_def_with_parent (
12991300 self . parent ,
13001301 def_node_id,
1301- DefPathData :: LifetimeDef ( name. name ( ) . as_interned_str ( ) ) ,
1302+ DefPathData :: LifetimeDef ( name. ident ( ) . as_interned_str ( ) ) ,
13021303 DefIndexAddressSpace :: High ,
13031304 Mark :: root ( ) ,
13041305 lifetime. span ,
@@ -1834,21 +1835,23 @@ impl<'a> LoweringContext<'a> {
18341835
18351836 fn lower_lifetime ( & mut self , l : & Lifetime ) -> hir:: Lifetime {
18361837 let span = l. ident . span ;
1837- match self . lower_ident ( l. ident ) {
1838- x if x == "'static" => self . new_named_lifetime ( l. id , span, hir:: LifetimeName :: Static ) ,
1839- x if x == "'_" => match self . anonymous_lifetime_mode {
1840- AnonymousLifetimeMode :: CreateParameter => {
1841- let fresh_name = self . collect_fresh_in_band_lifetime ( span) ;
1842- self . new_named_lifetime ( l. id , span, fresh_name)
1843- }
1838+ match l. ident {
1839+ ident if ident. name == keywords:: StaticLifetime . name ( ) =>
1840+ self . new_named_lifetime ( l. id , span, hir:: LifetimeName :: Static ) ,
1841+ ident if ident. name == keywords:: UnderscoreLifetime . name ( ) =>
1842+ match self . anonymous_lifetime_mode {
1843+ AnonymousLifetimeMode :: CreateParameter => {
1844+ let fresh_name = self . collect_fresh_in_band_lifetime ( span) ;
1845+ self . new_named_lifetime ( l. id , span, fresh_name)
1846+ }
18441847
1845- AnonymousLifetimeMode :: PassThrough => {
1846- self . new_named_lifetime ( l. id , span, hir:: LifetimeName :: Underscore )
1847- }
1848- } ,
1849- name => {
1850- self . maybe_collect_in_band_lifetime ( span , name ) ;
1851- self . new_named_lifetime ( l. id , span, hir:: LifetimeName :: Name ( name ) )
1848+ AnonymousLifetimeMode :: PassThrough => {
1849+ self . new_named_lifetime ( l. id , span, hir:: LifetimeName :: Underscore )
1850+ }
1851+ } ,
1852+ ident => {
1853+ self . maybe_collect_in_band_lifetime ( ident ) ;
1854+ self . new_named_lifetime ( l. id , span, hir:: LifetimeName :: Ident ( ident ) )
18521855 }
18531856 }
18541857 }
0 commit comments