Skip to content

Commit fb5ba8a

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 48f7714 commit fb5ba8a

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

+20-25
Original file line numberDiff line numberDiff line change
@@ -666,19 +666,20 @@ impl<'a> Parser<'a> {
666666
#[inline]
667667
#[must_use]
668668
fn check_keyword(&mut self, kw: Symbol) -> bool {
669-
self.expected_token_types.push(TokenType::Keyword(kw));
670-
self.token.is_keyword(kw)
669+
let is_keyword = self.token.is_keyword(kw);
670+
if !is_keyword {
671+
self.expected_token_types.push(TokenType::Keyword(kw));
672+
}
673+
is_keyword
671674
}
672675

673676
#[inline]
674677
#[must_use]
675678
fn check_keyword_case(&mut self, kw: Symbol, case: Case) -> bool {
676679
if self.check_keyword(kw) {
677-
return true;
678-
}
679-
680+
true
680681
// Do an ASCII case-insensitive match, because all keywords are ASCII.
681-
if case == Case::Insensitive
682+
} else if case == Case::Insensitive
682683
&& let Some((ident, IdentIsRaw::No)) = self.token.ident()
683684
&& ident.as_str().eq_ignore_ascii_case(kw.as_str())
684685
{
@@ -694,12 +695,11 @@ impl<'a> Parser<'a> {
694695
#[inline]
695696
#[must_use]
696697
pub fn eat_keyword(&mut self, kw: Symbol) -> bool {
697-
if self.check_keyword(kw) {
698+
let is_keyword = self.check_keyword(kw);
699+
if is_keyword {
698700
self.bump();
699-
true
700-
} else {
701-
false
702701
}
702+
is_keyword
703703
}
704704

705705
/// Eats a keyword, optionally ignoring the case.
@@ -709,19 +709,17 @@ impl<'a> Parser<'a> {
709709
#[must_use]
710710
fn eat_keyword_case(&mut self, kw: Symbol, case: Case) -> bool {
711711
if self.eat_keyword(kw) {
712-
return true;
713-
}
714-
715-
if case == Case::Insensitive
712+
true
713+
} else if case == Case::Insensitive
716714
&& let Some((ident, IdentIsRaw::No)) = self.token.ident()
717715
&& ident.as_str().to_lowercase() == kw.as_str().to_lowercase()
718716
{
719717
self.dcx().emit_err(errors::KwBadCase { span: ident.span, kw: kw.as_str() });
720718
self.bump();
721-
return true;
719+
true
720+
} else {
721+
false
722722
}
723-
724-
false
725723
}
726724

727725
/// If the next token is the given keyword, eats it and returns `true`.
@@ -730,12 +728,11 @@ impl<'a> Parser<'a> {
730728
#[inline]
731729
#[must_use]
732730
pub fn eat_keyword_noexpect(&mut self, kw: Symbol) -> bool {
733-
if self.token.is_keyword(kw) {
731+
let is_keyword = self.token.is_keyword(kw);
732+
if is_keyword {
734733
self.bump();
735-
true
736-
} else {
737-
false
738734
}
735+
is_keyword
739736
}
740737

741738
/// If the given word is not a keyword, signals an error.
@@ -752,12 +749,10 @@ impl<'a> Parser<'a> {
752749

753750
#[inline]
754751
fn check_or_expected(&mut self, ok: bool, typ: TokenType) -> bool {
755-
if ok {
756-
true
757-
} else {
752+
if !ok {
758753
self.expected_token_types.push(typ);
759-
false
760754
}
755+
ok
761756
}
762757

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

0 commit comments

Comments
 (0)