diff --git a/crates/js/src/parser/expression.rs b/crates/js/src/parser/expression.rs index a9af150a..b4381271 100644 --- a/crates/js/src/parser/expression.rs +++ b/crates/js/src/parser/expression.rs @@ -207,10 +207,10 @@ pub struct NewExpression { fn parse_primary_expression( tokenizer: &mut Tokenizer<'_>, ) -> Result { - if matches!( - tokenizer.attempt(Tokenizer::consume_identifier).as_deref(), - Ok("this") - ) { + if tokenizer + .attempt(|tokenizer| tokenizer.consume_keyword("this")) + .is_ok() + { Ok(Expression::This) } else if let Ok(literal) = Literal::parse(tokenizer) { Ok(Expression::Literal(literal)) diff --git a/crates/js/src/parser/tokenizer.rs b/crates/js/src/parser/tokenizer.rs index f13a09b5..3c672a3b 100644 --- a/crates/js/src/parser/tokenizer.rs +++ b/crates/js/src/parser/tokenizer.rs @@ -175,9 +175,9 @@ impl<'a> Tokenizer<'a> { self.source.go_back() } - pub fn consume_null_literal(&mut self) -> Result<(), SyntaxError> { - if self.source.remaining().starts_with("null") { - _ = self.source.advance_by("null".len()); + pub fn consume_keyword(&mut self, keyword: &str) -> Result<(), SyntaxError> { + if self.source.remaining().starts_with(keyword) { + _ = self.source.advance_by(keyword.len()); self.skip_whitespace(); Ok(()) } else { @@ -185,6 +185,10 @@ impl<'a> Tokenizer<'a> { } } + pub fn consume_null_literal(&mut self) -> Result<(), SyntaxError> { + self.consume_keyword("null") + } + pub fn consume_boolean_literal(&mut self) -> Result { let remaining = self.source.remaining(); let boolean_literal = if remaining.starts_with("true") {