Skip to content

Commit 40dc9da

Browse files
committed
syntax refactor parse_self_param (1)
1 parent 4fa9c3b commit 40dc9da

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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
// `&not_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

Comments
 (0)