Skip to content

Commit 0a40ef2

Browse files
committed
Cleanup parse_seq_* methods + record trailing separators.
1 parent 694b3c3 commit 0a40ef2

File tree

1 file changed

+35
-42
lines changed

1 file changed

+35
-42
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 35 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -890,14 +890,13 @@ impl<'a> Parser<'a> {
890890
/// Parses a sequence, including the closing delimiter. The function
891891
/// `f` must consume tokens until reaching the next separator or
892892
/// closing bracket.
893-
pub fn parse_seq_to_end<T, F>(&mut self,
894-
ket: &TokenKind,
895-
sep: SeqSep,
896-
f: F)
897-
-> PResult<'a, Vec<T>> where
898-
F: FnMut(&mut Parser<'a>) -> PResult<'a, T>,
899-
{
900-
let (val, recovered) = self.parse_seq_to_before_end(ket, sep, f)?;
893+
pub fn parse_seq_to_end<T>(
894+
&mut self,
895+
ket: &TokenKind,
896+
sep: SeqSep,
897+
f: impl FnMut(&mut Parser<'a>) -> PResult<'a, T>,
898+
) -> PResult<'a, Vec<T>> {
899+
let (val, _, recovered) = self.parse_seq_to_before_end(ket, sep, f)?;
901900
if !recovered {
902901
self.bump();
903902
}
@@ -907,39 +906,39 @@ impl<'a> Parser<'a> {
907906
/// Parses a sequence, not including the closing delimiter. The function
908907
/// `f` must consume tokens until reaching the next separator or
909908
/// closing bracket.
910-
pub fn parse_seq_to_before_end<T, F>(
909+
pub fn parse_seq_to_before_end<T>(
911910
&mut self,
912911
ket: &TokenKind,
913912
sep: SeqSep,
914-
f: F,
915-
) -> PResult<'a, (Vec<T>, bool)>
916-
where F: FnMut(&mut Parser<'a>) -> PResult<'a, T>
917-
{
913+
f: impl FnMut(&mut Parser<'a>) -> PResult<'a, T>,
914+
) -> PResult<'a, (Vec<T>, bool, bool)> {
918915
self.parse_seq_to_before_tokens(&[ket], sep, TokenExpectType::Expect, f)
919916
}
920917

921-
crate fn parse_seq_to_before_tokens<T, F>(
918+
fn expect_any_with_type(&mut self, kets: &[&TokenKind], expect: TokenExpectType) -> bool {
919+
kets.iter().any(|k| {
920+
match expect {
921+
TokenExpectType::Expect => self.check(k),
922+
TokenExpectType::NoExpect => self.token == **k,
923+
}
924+
})
925+
}
926+
927+
crate fn parse_seq_to_before_tokens<T>(
922928
&mut self,
923929
kets: &[&TokenKind],
924930
sep: SeqSep,
925931
expect: TokenExpectType,
926-
mut f: F,
927-
) -> PResult<'a, (Vec<T>, bool /* recovered */)>
928-
where F: FnMut(&mut Parser<'a>) -> PResult<'a, T>
929-
{
932+
mut f: impl FnMut(&mut Parser<'a>) -> PResult<'a, T>,
933+
) -> PResult<'a, (Vec<T>, bool /* trailing */, bool /* recovered */)> {
930934
let mut first = true;
931935
let mut recovered = false;
936+
let mut trailing = false;
932937
let mut v = vec![];
933-
while !kets.iter().any(|k| {
934-
match expect {
935-
TokenExpectType::Expect => self.check(k),
936-
TokenExpectType::NoExpect => self.token == **k,
937-
}
938-
}) {
939-
match self.token.kind {
940-
token::CloseDelim(..) | token::Eof => break,
941-
_ => {}
942-
};
938+
while !self.expect_any_with_type(kets, expect) {
939+
if let token::CloseDelim(..) | token::Eof = self.token.kind {
940+
break
941+
}
943942
if let Some(ref t) = sep.sep {
944943
if first {
945944
first = false;
@@ -973,40 +972,34 @@ impl<'a> Parser<'a> {
973972
}
974973
}
975974
}
976-
if sep.trailing_sep_allowed && kets.iter().any(|k| {
977-
match expect {
978-
TokenExpectType::Expect => self.check(k),
979-
TokenExpectType::NoExpect => self.token == **k,
980-
}
981-
}) {
975+
if sep.trailing_sep_allowed && self.expect_any_with_type(kets, expect) {
976+
trailing = true;
982977
break;
983978
}
984979

985980
let t = f(self)?;
986981
v.push(t);
987982
}
988983

989-
Ok((v, recovered))
984+
Ok((v, trailing, recovered))
990985
}
991986

992987
/// Parses a sequence, including the closing delimiter. The function
993988
/// `f` must consume tokens until reaching the next separator or
994989
/// closing bracket.
995-
fn parse_unspanned_seq<T, F>(
990+
fn parse_unspanned_seq<T>(
996991
&mut self,
997992
bra: &TokenKind,
998993
ket: &TokenKind,
999994
sep: SeqSep,
1000-
f: F,
1001-
) -> PResult<'a, Vec<T>> where
1002-
F: FnMut(&mut Parser<'a>) -> PResult<'a, T>,
1003-
{
995+
f: impl FnMut(&mut Parser<'a>) -> PResult<'a, T>,
996+
) -> PResult<'a, (Vec<T>, bool)> {
1004997
self.expect(bra)?;
1005-
let (result, recovered) = self.parse_seq_to_before_end(ket, sep, f)?;
998+
let (result, trailing, recovered) = self.parse_seq_to_before_end(ket, sep, f)?;
1006999
if !recovered {
10071000
self.eat(ket);
10081001
}
1009-
Ok(result)
1002+
Ok((result, trailing))
10101003
}
10111004

10121005
/// Advance the parser by one token

0 commit comments

Comments
 (0)