@@ -5190,88 +5190,90 @@ impl<'a> Parser<'a> {
51905190 // Only a limited set of initial token sequences is considered self parameters, anything
51915191 // else is parsed as a normal function parameter list, so some lookahead is required.
51925192 let eself_lo = self . span ;
5193- let ( eself, eself_ident) = match self . token {
5193+ let ( eself, eself_ident, eself_hi ) = match self . token {
51945194 token:: BinOp ( token:: And ) => {
51955195 // &self
51965196 // &mut self
51975197 // &'lt self
51985198 // &'lt mut self
51995199 // ¬_self
5200- if isolated_self ( self , 1 ) {
5200+ ( if isolated_self ( self , 1 ) {
52015201 self . bump ( ) ;
5202- ( SelfKind :: Region ( None , Mutability :: Immutable ) , expect_ident ( self ) )
5202+ SelfKind :: Region ( None , Mutability :: Immutable )
52035203 } else if self . look_ahead ( 1 , |t| t. is_keyword ( keywords:: Mut ) ) &&
52045204 isolated_self ( self , 2 ) {
52055205 self . bump ( ) ;
52065206 self . bump ( ) ;
5207- ( SelfKind :: Region ( None , Mutability :: Mutable ) , expect_ident ( self ) )
5207+ SelfKind :: Region ( None , Mutability :: Mutable )
52085208 } else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
52095209 isolated_self ( self , 2 ) {
52105210 self . bump ( ) ;
52115211 let lt = self . expect_lifetime ( ) ;
5212- ( SelfKind :: Region ( Some ( lt) , Mutability :: Immutable ) , expect_ident ( self ) )
5212+ SelfKind :: Region ( Some ( lt) , Mutability :: Immutable )
52135213 } else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
52145214 self . look_ahead ( 2 , |t| t. is_keyword ( keywords:: Mut ) ) &&
52155215 isolated_self ( self , 3 ) {
52165216 self . bump ( ) ;
52175217 let lt = self . expect_lifetime ( ) ;
52185218 self . bump ( ) ;
5219- ( SelfKind :: Region ( Some ( lt) , Mutability :: Mutable ) , expect_ident ( self ) )
5219+ SelfKind :: Region ( Some ( lt) , Mutability :: Mutable )
52205220 } else {
52215221 return Ok ( None ) ;
5222- }
5222+ } , expect_ident ( self ) , self . prev_span )
52235223 }
52245224 token:: BinOp ( token:: Star ) => {
52255225 // *self
52265226 // *const self
52275227 // *mut self
52285228 // *not_self
52295229 // Emit special error for `self` cases.
5230- if isolated_self ( self , 1 ) {
5230+ ( if isolated_self ( self , 1 ) {
52315231 self . bump ( ) ;
52325232 self . span_err ( self . span , "cannot pass `self` by raw pointer" ) ;
5233- ( SelfKind :: Value ( Mutability :: Immutable ) , expect_ident ( self ) )
5233+ SelfKind :: Value ( Mutability :: Immutable )
52345234 } else if self . look_ahead ( 1 , |t| t. is_mutability ( ) ) &&
52355235 isolated_self ( self , 2 ) {
52365236 self . bump ( ) ;
52375237 self . bump ( ) ;
52385238 self . span_err ( self . span , "cannot pass `self` by raw pointer" ) ;
5239- ( SelfKind :: Value ( Mutability :: Immutable ) , expect_ident ( self ) )
5239+ SelfKind :: Value ( Mutability :: Immutable )
52405240 } else {
52415241 return Ok ( None ) ;
5242- }
5242+ } , expect_ident ( self ) , self . prev_span )
52435243 }
52445244 token:: Ident ( ..) => {
52455245 if isolated_self ( self , 0 ) {
52465246 // self
52475247 // self: TYPE
52485248 let eself_ident = expect_ident ( self ) ;
5249- if self . eat ( & token:: Colon ) {
5249+ let eself_hi = self . prev_span ;
5250+ ( if self . eat ( & token:: Colon ) {
52505251 let ty = self . parse_ty ( ) ?;
5251- ( SelfKind :: Explicit ( ty, Mutability :: Immutable ) , eself_ident )
5252+ SelfKind :: Explicit ( ty, Mutability :: Immutable )
52525253 } else {
5253- ( SelfKind :: Value ( Mutability :: Immutable ) , eself_ident )
5254- }
5254+ SelfKind :: Value ( Mutability :: Immutable )
5255+ } , eself_ident , eself_hi )
52555256 } else if self . token . is_keyword ( keywords:: Mut ) &&
52565257 isolated_self ( self , 1 ) {
52575258 // mut self
52585259 // mut self: TYPE
52595260 self . bump ( ) ;
52605261 let eself_ident = expect_ident ( self ) ;
5261- if self . eat ( & token:: Colon ) {
5262+ let eself_hi = self . prev_span ;
5263+ ( if self . eat ( & token:: Colon ) {
52625264 let ty = self . parse_ty ( ) ?;
5263- ( SelfKind :: Explicit ( ty, Mutability :: Mutable ) , eself_ident )
5265+ SelfKind :: Explicit ( ty, Mutability :: Mutable )
52645266 } else {
5265- ( SelfKind :: Value ( Mutability :: Mutable ) , eself_ident )
5266- }
5267+ SelfKind :: Value ( Mutability :: Mutable )
5268+ } , eself_ident , eself_hi )
52675269 } else {
52685270 return Ok ( None ) ;
52695271 }
52705272 }
52715273 _ => return Ok ( None ) ,
52725274 } ;
52735275
5274- let eself = codemap:: respan ( eself_lo. to ( self . prev_span ) , eself) ;
5276+ let eself = codemap:: respan ( eself_lo. to ( eself_hi ) , eself) ;
52755277 Ok ( Some ( Arg :: from_self ( eself, eself_ident) ) )
52765278 }
52775279
0 commit comments