Skip to content

Commit ac454e9

Browse files
committed
syntax refactor parse_self_param (3)
1 parent f688f8a commit ac454e9

File tree

1 file changed

+20
-28
lines changed

1 file changed

+20
-28
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,18 @@ impl<'a> Parser<'a> {
12761276
}
12771277
}
12781278

1279+
/// Parse `self` or `self: TYPE`. We already know the current token is `self`.
1280+
fn parse_self_possibly_typed(&mut self, m: Mutability) -> PResult<'a, (SelfKind, Ident, Span)> {
1281+
let eself_ident = self.expect_self_ident();
1282+
let eself_hi = self.prev_span;
1283+
let eself = if self.eat(&token::Colon) {
1284+
SelfKind::Explicit(self.parse_ty()?, m)
1285+
} else {
1286+
SelfKind::Value(m)
1287+
};
1288+
Ok((eself, eself_ident, eself_hi))
1289+
}
1290+
12791291
/// Returns the parsed optional self parameter and whether a self shortcut was used.
12801292
///
12811293
/// See `parse_self_param_with_attrs` to collect attributes.
@@ -1340,34 +1352,14 @@ impl<'a> Parser<'a> {
13401352
return Ok(None);
13411353
}, self.expect_self_ident(), self.prev_span)
13421354
}
1343-
token::Ident(..) => {
1344-
if self.is_isolated_self(0) {
1345-
// `self`
1346-
// `self: TYPE`
1347-
let eself_ident = self.expect_self_ident();
1348-
let eself_hi = self.prev_span;
1349-
(if self.eat(&token::Colon) {
1350-
let ty = self.parse_ty()?;
1351-
SelfKind::Explicit(ty, Mutability::Immutable)
1352-
} else {
1353-
SelfKind::Value(Mutability::Immutable)
1354-
}, eself_ident, eself_hi)
1355-
} else if self.token.is_keyword(kw::Mut) &&
1356-
self.is_isolated_self(1) {
1357-
// `mut self`
1358-
// `mut self: TYPE`
1359-
self.bump();
1360-
let eself_ident = self.expect_self_ident();
1361-
let eself_hi = self.prev_span;
1362-
(if self.eat(&token::Colon) {
1363-
let ty = self.parse_ty()?;
1364-
SelfKind::Explicit(ty, Mutability::Mutable)
1365-
} else {
1366-
SelfKind::Value(Mutability::Mutable)
1367-
}, eself_ident, eself_hi)
1368-
} else {
1369-
return Ok(None);
1370-
}
1355+
// `self` and `self: TYPE`
1356+
token::Ident(..) if self.is_isolated_self(0) => {
1357+
self.parse_self_possibly_typed(Mutability::Immutable)?
1358+
}
1359+
// `mut self` and `mut self: TYPE`
1360+
token::Ident(..) if self.token.is_keyword(kw::Mut) && self.is_isolated_self(1) => {
1361+
self.bump();
1362+
self.parse_self_possibly_typed(Mutability::Mutable)?
13711363
}
13721364
_ => return Ok(None),
13731365
};

0 commit comments

Comments
 (0)