@@ -1264,17 +1264,22 @@ impl<'a> Parser<'a> {
1264
1264
&& self . look_ahead ( n + 1 , |t| t != & token:: ModSep )
1265
1265
}
1266
1266
1267
+ fn expect_self_ident ( & mut self ) -> Ident {
1268
+ match self . token . kind {
1269
+ // Preserve hygienic context.
1270
+ token:: Ident ( name, _) => {
1271
+ let span = self . token . span ;
1272
+ self . bump ( ) ;
1273
+ Ident :: new ( name, span)
1274
+ }
1275
+ _ => unreachable ! ( ) ,
1276
+ }
1277
+ }
1278
+
1267
1279
/// Returns the parsed optional self parameter and whether a self shortcut was used.
1268
1280
///
1269
1281
/// See `parse_self_param_with_attrs` to collect attributes.
1270
1282
fn parse_self_param ( & mut self ) -> PResult < ' a , Option < Param > > {
1271
- let expect_ident = |this : & mut Self | match this. token . kind {
1272
- // Preserve hygienic context.
1273
- token:: Ident ( name, _) =>
1274
- { let span = this. token . span ; this. bump ( ) ; Ident :: new ( name, span) }
1275
- _ => unreachable ! ( )
1276
- } ;
1277
-
1278
1283
// Parse optional `self` parameter of a method.
1279
1284
// Only a limited set of initial token sequences is considered `self` parameters; anything
1280
1285
// else is parsed as a normal function parameter list, so some lookahead is required.
@@ -1308,7 +1313,7 @@ impl<'a> Parser<'a> {
1308
1313
SelfKind :: Region ( Some ( lt) , Mutability :: Mutable )
1309
1314
} else {
1310
1315
return Ok ( None ) ;
1311
- } , expect_ident ( self ) , self . prev_span )
1316
+ } , self . expect_self_ident ( ) , self . prev_span )
1312
1317
}
1313
1318
token:: BinOp ( token:: Star ) => {
1314
1319
// `*self`
@@ -1333,13 +1338,13 @@ impl<'a> Parser<'a> {
1333
1338
SelfKind :: Value ( Mutability :: Immutable )
1334
1339
} else {
1335
1340
return Ok ( None ) ;
1336
- } , expect_ident ( self ) , self . prev_span )
1341
+ } , self . expect_self_ident ( ) , self . prev_span )
1337
1342
}
1338
1343
token:: Ident ( ..) => {
1339
1344
if self . is_isolated_self ( 0 ) {
1340
1345
// `self`
1341
1346
// `self: TYPE`
1342
- let eself_ident = expect_ident ( self ) ;
1347
+ let eself_ident = self . expect_self_ident ( ) ;
1343
1348
let eself_hi = self . prev_span ;
1344
1349
( if self . eat ( & token:: Colon ) {
1345
1350
let ty = self . parse_ty ( ) ?;
@@ -1352,7 +1357,7 @@ impl<'a> Parser<'a> {
1352
1357
// `mut self`
1353
1358
// `mut self: TYPE`
1354
1359
self . bump ( ) ;
1355
- let eself_ident = expect_ident ( self ) ;
1360
+ let eself_ident = self . expect_self_ident ( ) ;
1356
1361
let eself_hi = self . prev_span ;
1357
1362
( if self . eat ( & token:: Colon ) {
1358
1363
let ty = self . parse_ty ( ) ?;
0 commit comments