@@ -5190,88 +5190,90 @@ impl<'a> Parser<'a> {
5190
5190
// Only a limited set of initial token sequences is considered self parameters, anything
5191
5191
// else is parsed as a normal function parameter list, so some lookahead is required.
5192
5192
let eself_lo = self . span ;
5193
- let ( eself, eself_ident) = match self . token {
5193
+ let ( eself, eself_ident, eself_hi ) = match self . token {
5194
5194
token:: BinOp ( token:: And ) => {
5195
5195
// &self
5196
5196
// &mut self
5197
5197
// &'lt self
5198
5198
// &'lt mut self
5199
5199
// ¬_self
5200
- if isolated_self ( self , 1 ) {
5200
+ ( if isolated_self ( self , 1 ) {
5201
5201
self . bump ( ) ;
5202
- ( SelfKind :: Region ( None , Mutability :: Immutable ) , expect_ident ( self ) )
5202
+ SelfKind :: Region ( None , Mutability :: Immutable )
5203
5203
} else if self . look_ahead ( 1 , |t| t. is_keyword ( keywords:: Mut ) ) &&
5204
5204
isolated_self ( self , 2 ) {
5205
5205
self . bump ( ) ;
5206
5206
self . bump ( ) ;
5207
- ( SelfKind :: Region ( None , Mutability :: Mutable ) , expect_ident ( self ) )
5207
+ SelfKind :: Region ( None , Mutability :: Mutable )
5208
5208
} else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
5209
5209
isolated_self ( self , 2 ) {
5210
5210
self . bump ( ) ;
5211
5211
let lt = self . expect_lifetime ( ) ;
5212
- ( SelfKind :: Region ( Some ( lt) , Mutability :: Immutable ) , expect_ident ( self ) )
5212
+ SelfKind :: Region ( Some ( lt) , Mutability :: Immutable )
5213
5213
} else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
5214
5214
self . look_ahead ( 2 , |t| t. is_keyword ( keywords:: Mut ) ) &&
5215
5215
isolated_self ( self , 3 ) {
5216
5216
self . bump ( ) ;
5217
5217
let lt = self . expect_lifetime ( ) ;
5218
5218
self . bump ( ) ;
5219
- ( SelfKind :: Region ( Some ( lt) , Mutability :: Mutable ) , expect_ident ( self ) )
5219
+ SelfKind :: Region ( Some ( lt) , Mutability :: Mutable )
5220
5220
} else {
5221
5221
return Ok ( None ) ;
5222
- }
5222
+ } , expect_ident ( self ) , self . prev_span )
5223
5223
}
5224
5224
token:: BinOp ( token:: Star ) => {
5225
5225
// *self
5226
5226
// *const self
5227
5227
// *mut self
5228
5228
// *not_self
5229
5229
// Emit special error for `self` cases.
5230
- if isolated_self ( self , 1 ) {
5230
+ ( if isolated_self ( self , 1 ) {
5231
5231
self . bump ( ) ;
5232
5232
self . span_err ( self . span , "cannot pass `self` by raw pointer" ) ;
5233
- ( SelfKind :: Value ( Mutability :: Immutable ) , expect_ident ( self ) )
5233
+ SelfKind :: Value ( Mutability :: Immutable )
5234
5234
} else if self . look_ahead ( 1 , |t| t. is_mutability ( ) ) &&
5235
5235
isolated_self ( self , 2 ) {
5236
5236
self . bump ( ) ;
5237
5237
self . bump ( ) ;
5238
5238
self . span_err ( self . span , "cannot pass `self` by raw pointer" ) ;
5239
- ( SelfKind :: Value ( Mutability :: Immutable ) , expect_ident ( self ) )
5239
+ SelfKind :: Value ( Mutability :: Immutable )
5240
5240
} else {
5241
5241
return Ok ( None ) ;
5242
- }
5242
+ } , expect_ident ( self ) , self . prev_span )
5243
5243
}
5244
5244
token:: Ident ( ..) => {
5245
5245
if isolated_self ( self , 0 ) {
5246
5246
// self
5247
5247
// self: TYPE
5248
5248
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 ) {
5250
5251
let ty = self . parse_ty ( ) ?;
5251
- ( SelfKind :: Explicit ( ty, Mutability :: Immutable ) , eself_ident )
5252
+ SelfKind :: Explicit ( ty, Mutability :: Immutable )
5252
5253
} else {
5253
- ( SelfKind :: Value ( Mutability :: Immutable ) , eself_ident )
5254
- }
5254
+ SelfKind :: Value ( Mutability :: Immutable )
5255
+ } , eself_ident , eself_hi )
5255
5256
} else if self . token . is_keyword ( keywords:: Mut ) &&
5256
5257
isolated_self ( self , 1 ) {
5257
5258
// mut self
5258
5259
// mut self: TYPE
5259
5260
self . bump ( ) ;
5260
5261
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 ) {
5262
5264
let ty = self . parse_ty ( ) ?;
5263
- ( SelfKind :: Explicit ( ty, Mutability :: Mutable ) , eself_ident )
5265
+ SelfKind :: Explicit ( ty, Mutability :: Mutable )
5264
5266
} else {
5265
- ( SelfKind :: Value ( Mutability :: Mutable ) , eself_ident )
5266
- }
5267
+ SelfKind :: Value ( Mutability :: Mutable )
5268
+ } , eself_ident , eself_hi )
5267
5269
} else {
5268
5270
return Ok ( None ) ;
5269
5271
}
5270
5272
}
5271
5273
_ => return Ok ( None ) ,
5272
5274
} ;
5273
5275
5274
- let eself = codemap:: respan ( eself_lo. to ( self . prev_span ) , eself) ;
5276
+ let eself = codemap:: respan ( eself_lo. to ( eself_hi ) , eself) ;
5275
5277
Ok ( Some ( Arg :: from_self ( eself, eself_ident) ) )
5276
5278
}
5277
5279
0 commit comments