@@ -1259,6 +1259,11 @@ impl<'a> Parser<'a> {
1259
1259
Ok ( params)
1260
1260
}
1261
1261
1262
+ fn is_isolated_self ( & self , n : usize ) -> bool {
1263
+ self . is_keyword_ahead ( n, & [ kw:: SelfLower ] )
1264
+ && self . look_ahead ( n + 1 , |t| t != & token:: ModSep )
1265
+ }
1266
+
1262
1267
/// Returns the parsed optional self parameter and whether a self shortcut was used.
1263
1268
///
1264
1269
/// See `parse_self_param_with_attrs` to collect attributes.
@@ -1269,10 +1274,6 @@ impl<'a> Parser<'a> {
1269
1274
{ let span = this. token . span ; this. bump ( ) ; Ident :: new ( name, span) }
1270
1275
_ => unreachable ! ( )
1271
1276
} ;
1272
- let isolated_self = |this : & mut Self , n| {
1273
- this. look_ahead ( n, |t| t. is_keyword ( kw:: SelfLower ) ) &&
1274
- this. look_ahead ( n + 1 , |t| t != & token:: ModSep )
1275
- } ;
1276
1277
1277
1278
// Parse optional `self` parameter of a method.
1278
1279
// Only a limited set of initial token sequences is considered `self` parameters; anything
@@ -1285,22 +1286,22 @@ impl<'a> Parser<'a> {
1285
1286
// `&'lt self`
1286
1287
// `&'lt mut self`
1287
1288
// `¬_self`
1288
- ( if isolated_self ( self , 1 ) {
1289
+ ( if self . is_isolated_self ( 1 ) {
1289
1290
self . bump ( ) ;
1290
1291
SelfKind :: Region ( None , Mutability :: Immutable )
1291
1292
} else if self . is_keyword_ahead ( 1 , & [ kw:: Mut ] ) &&
1292
- isolated_self ( self , 2 ) {
1293
+ self . is_isolated_self ( 2 ) {
1293
1294
self . bump ( ) ;
1294
1295
self . bump ( ) ;
1295
1296
SelfKind :: Region ( None , Mutability :: Mutable )
1296
1297
} else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
1297
- isolated_self ( self , 2 ) {
1298
+ self . is_isolated_self ( 2 ) {
1298
1299
self . bump ( ) ;
1299
1300
let lt = self . expect_lifetime ( ) ;
1300
1301
SelfKind :: Region ( Some ( lt) , Mutability :: Immutable )
1301
1302
} else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
1302
1303
self . is_keyword_ahead ( 2 , & [ kw:: Mut ] ) &&
1303
- isolated_self ( self , 3 ) {
1304
+ self . is_isolated_self ( 3 ) {
1304
1305
self . bump ( ) ;
1305
1306
let lt = self . expect_lifetime ( ) ;
1306
1307
self . bump ( ) ;
@@ -1316,14 +1317,14 @@ impl<'a> Parser<'a> {
1316
1317
// `*not_self`
1317
1318
// Emit special error for `self` cases.
1318
1319
let msg = "cannot pass `self` by raw pointer" ;
1319
- ( if isolated_self ( self , 1 ) {
1320
+ ( if self . is_isolated_self ( 1 ) {
1320
1321
self . bump ( ) ;
1321
1322
self . struct_span_err ( self . token . span , msg)
1322
1323
. span_label ( self . token . span , msg)
1323
1324
. emit ( ) ;
1324
1325
SelfKind :: Value ( Mutability :: Immutable )
1325
1326
} else if self . look_ahead ( 1 , |t| t. is_mutability ( ) ) &&
1326
- isolated_self ( self , 2 ) {
1327
+ self . is_isolated_self ( 2 ) {
1327
1328
self . bump ( ) ;
1328
1329
self . bump ( ) ;
1329
1330
self . struct_span_err ( self . token . span , msg)
@@ -1335,7 +1336,7 @@ impl<'a> Parser<'a> {
1335
1336
} , expect_ident ( self ) , self . prev_span )
1336
1337
}
1337
1338
token:: Ident ( ..) => {
1338
- if isolated_self ( self , 0 ) {
1339
+ if self . is_isolated_self ( 0 ) {
1339
1340
// `self`
1340
1341
// `self: TYPE`
1341
1342
let eself_ident = expect_ident ( self ) ;
@@ -1347,7 +1348,7 @@ impl<'a> Parser<'a> {
1347
1348
SelfKind :: Value ( Mutability :: Immutable )
1348
1349
} , eself_ident, eself_hi)
1349
1350
} else if self . token . is_keyword ( kw:: Mut ) &&
1350
- isolated_self ( self , 1 ) {
1351
+ self . is_isolated_self ( 1 ) {
1351
1352
// `mut self`
1352
1353
// `mut self: TYPE`
1353
1354
self . bump ( ) ;
0 commit comments