@@ -1259,6 +1259,11 @@ impl<'a> Parser<'a> {
12591259 Ok ( params)
12601260 }
12611261
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+
12621267 /// Returns the parsed optional self parameter and whether a self shortcut was used.
12631268 ///
12641269 /// See `parse_self_param_with_attrs` to collect attributes.
@@ -1269,10 +1274,6 @@ impl<'a> Parser<'a> {
12691274 { let span = this. token . span ; this. bump ( ) ; Ident :: new ( name, span) }
12701275 _ => unreachable ! ( )
12711276 } ;
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- } ;
12761277
12771278 // Parse optional `self` parameter of a method.
12781279 // Only a limited set of initial token sequences is considered `self` parameters; anything
@@ -1285,22 +1286,22 @@ impl<'a> Parser<'a> {
12851286 // `&'lt self`
12861287 // `&'lt mut self`
12871288 // `¬_self`
1288- ( if isolated_self ( self , 1 ) {
1289+ ( if self . is_isolated_self ( 1 ) {
12891290 self . bump ( ) ;
12901291 SelfKind :: Region ( None , Mutability :: Immutable )
12911292 } else if self . is_keyword_ahead ( 1 , & [ kw:: Mut ] ) &&
1292- isolated_self ( self , 2 ) {
1293+ self . is_isolated_self ( 2 ) {
12931294 self . bump ( ) ;
12941295 self . bump ( ) ;
12951296 SelfKind :: Region ( None , Mutability :: Mutable )
12961297 } else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
1297- isolated_self ( self , 2 ) {
1298+ self . is_isolated_self ( 2 ) {
12981299 self . bump ( ) ;
12991300 let lt = self . expect_lifetime ( ) ;
13001301 SelfKind :: Region ( Some ( lt) , Mutability :: Immutable )
13011302 } else if self . look_ahead ( 1 , |t| t. is_lifetime ( ) ) &&
13021303 self . is_keyword_ahead ( 2 , & [ kw:: Mut ] ) &&
1303- isolated_self ( self , 3 ) {
1304+ self . is_isolated_self ( 3 ) {
13041305 self . bump ( ) ;
13051306 let lt = self . expect_lifetime ( ) ;
13061307 self . bump ( ) ;
@@ -1316,14 +1317,14 @@ impl<'a> Parser<'a> {
13161317 // `*not_self`
13171318 // Emit special error for `self` cases.
13181319 let msg = "cannot pass `self` by raw pointer" ;
1319- ( if isolated_self ( self , 1 ) {
1320+ ( if self . is_isolated_self ( 1 ) {
13201321 self . bump ( ) ;
13211322 self . struct_span_err ( self . token . span , msg)
13221323 . span_label ( self . token . span , msg)
13231324 . emit ( ) ;
13241325 SelfKind :: Value ( Mutability :: Immutable )
13251326 } else if self . look_ahead ( 1 , |t| t. is_mutability ( ) ) &&
1326- isolated_self ( self , 2 ) {
1327+ self . is_isolated_self ( 2 ) {
13271328 self . bump ( ) ;
13281329 self . bump ( ) ;
13291330 self . struct_span_err ( self . token . span , msg)
@@ -1335,7 +1336,7 @@ impl<'a> Parser<'a> {
13351336 } , expect_ident ( self ) , self . prev_span )
13361337 }
13371338 token:: Ident ( ..) => {
1338- if isolated_self ( self , 0 ) {
1339+ if self . is_isolated_self ( 0 ) {
13391340 // `self`
13401341 // `self: TYPE`
13411342 let eself_ident = expect_ident ( self ) ;
@@ -1347,7 +1348,7 @@ impl<'a> Parser<'a> {
13471348 SelfKind :: Value ( Mutability :: Immutable )
13481349 } , eself_ident, eself_hi)
13491350 } else if self . token . is_keyword ( kw:: Mut ) &&
1350- isolated_self ( self , 1 ) {
1351+ self . is_isolated_self ( 1 ) {
13511352 // `mut self`
13521353 // `mut self: TYPE`
13531354 self . bump ( ) ;
0 commit comments