Skip to content

Commit 533bdbc

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 93403de commit 533bdbc

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
@@ -641,19 +641,20 @@ impl<'a> Parser<'a> {
641641
#[inline]
642642
#[must_use]
643643
fn check_keyword(&mut self, kw: Symbol) -> bool {
644-
self.expected_token_types.push(TokenType::Keyword(kw));
645-
self.token.is_keyword(kw)
644+
let is_keyword = self.token.is_keyword(kw);
645+
if !is_keyword {
646+
self.expected_token_types.push(TokenType::Keyword(kw));
647+
}
648+
is_keyword
646649
}
647650

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

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

702700
/// If the next token is the given keyword, eats it and returns `true`.
@@ -705,12 +703,11 @@ impl<'a> Parser<'a> {
705703
#[inline]
706704
#[must_use]
707705
pub fn eat_keyword_noexpect(&mut self, kw: Symbol) -> bool {
708-
if self.token.is_keyword(kw) {
706+
let is_keyword = self.token.is_keyword(kw);
707+
if is_keyword {
709708
self.bump();
710-
true
711-
} else {
712-
false
713709
}
710+
is_keyword
714711
}
715712

716713
/// If the given word is not a keyword, signals an error.
@@ -727,12 +724,10 @@ impl<'a> Parser<'a> {
727724

728725
#[inline]
729726
fn check_or_expected(&mut self, ok: bool, typ: TokenType) -> bool {
730-
if ok {
731-
true
732-
} else {
727+
if !ok {
733728
self.expected_token_types.push(typ);
734-
false
735729
}
730+
ok
736731
}
737732

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

0 commit comments

Comments
 (0)