Skip to content

Commit cdfd69d

Browse files
committed
Tweak some parser check/eat methods.
The most significant is `check_keyword`: it now only pushes to `expected_token_types` if the keyword check fails, which matches how all the other `check` methods work. The remainder are just tweaks to make these methods more consistent with each other.
1 parent 1456e36 commit cdfd69d

File tree

1 file changed

+20
-25
lines changed
  • compiler/rustc_parse/src/parser

1 file changed

+20
-25
lines changed

compiler/rustc_parse/src/parser/mod.rs

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -640,19 +640,20 @@ impl<'a> Parser<'a> {
640640
#[inline]
641641
#[must_use]
642642
fn check_keyword(&mut self, kw: Symbol) -> bool {
643-
self.expected_token_types.push(TokenType::Keyword(kw));
644-
self.token.is_keyword(kw)
643+
let is_keyword = self.token.is_keyword(kw);
644+
if !is_keyword {
645+
self.expected_token_types.push(TokenType::Keyword(kw));
646+
}
647+
is_keyword
645648
}
646649

647650
#[inline]
648651
#[must_use]
649652
fn check_keyword_case(&mut self, kw: Symbol, case: Case) -> bool {
650653
if self.check_keyword(kw) {
651-
return true;
652-
}
653-
654+
true
654655
// Do an ASCII case-insensitive match, because all keywords are ASCII.
655-
if case == Case::Insensitive
656+
} else if case == Case::Insensitive
656657
&& let Some((ident, IdentIsRaw::No)) = self.token.ident()
657658
&& ident.as_str().eq_ignore_ascii_case(kw.as_str())
658659
{
@@ -668,12 +669,11 @@ impl<'a> Parser<'a> {
668669
#[inline]
669670
#[must_use]
670671
pub fn eat_keyword(&mut self, kw: Symbol) -> bool {
671-
if self.check_keyword(kw) {
672+
let is_keyword = self.check_keyword(kw);
673+
if is_keyword {
672674
self.bump();
673-
true
674-
} else {
675-
false
676675
}
676+
is_keyword
677677
}
678678

679679
/// Eats a keyword, optionally ignoring the case.
@@ -683,19 +683,17 @@ impl<'a> Parser<'a> {
683683
#[must_use]
684684
fn eat_keyword_case(&mut self, kw: Symbol, case: Case) -> bool {
685685
if self.eat_keyword(kw) {
686-
return true;
687-
}
688-
689-
if case == Case::Insensitive
686+
true
687+
} else if case == Case::Insensitive
690688
&& let Some((ident, IdentIsRaw::No)) = self.token.ident()
691689
&& ident.as_str().to_lowercase() == kw.as_str().to_lowercase()
692690
{
693691
self.dcx().emit_err(errors::KwBadCase { span: ident.span, kw: kw.as_str() });
694692
self.bump();
695-
return true;
693+
true
694+
} else {
695+
false
696696
}
697-
698-
false
699697
}
700698

701699
/// If the next token is the given keyword, eats it and returns `true`.
@@ -704,12 +702,11 @@ impl<'a> Parser<'a> {
704702
#[inline]
705703
#[must_use]
706704
pub fn eat_keyword_noexpect(&mut self, kw: Symbol) -> bool {
707-
if self.token.is_keyword(kw) {
705+
let is_keyword = self.token.is_keyword(kw);
706+
if is_keyword {
708707
self.bump();
709-
true
710-
} else {
711-
false
712708
}
709+
is_keyword
713710
}
714711

715712
/// If the given word is not a keyword, signals an error.
@@ -726,12 +723,10 @@ impl<'a> Parser<'a> {
726723

727724
#[inline]
728725
fn check_or_expected(&mut self, ok: bool, typ: TokenType) -> bool {
729-
if ok {
730-
true
731-
} else {
726+
if !ok {
732727
self.expected_token_types.push(typ);
733-
false
734728
}
729+
ok
735730
}
736731

737732
fn check_ident(&mut self) -> bool {

0 commit comments

Comments
 (0)