mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:57:35 +00:00
LibJS: Parse slashes after reserved identifiers correctly
Previously we were unable to parse code like `yield/2` because `/2` was parsed as a regex. At the same time `for (a in / b/)` was parsed as a division. This is solved by defaulting to division in the lexer, but calling `force_slash_as_regex()` from the parser whenever an IdentifierName is parsed as a ReservedWord.
This commit is contained in:
parent
b0bd1e5eb5
commit
a2efecac03
6 changed files with 65 additions and 25 deletions
|
@ -500,23 +500,18 @@ bool Lexer::is_numeric_literal_start() const
|
|||
bool Lexer::slash_means_division() const
|
||||
{
|
||||
auto type = m_current_token.type();
|
||||
return type == TokenType::BigIntLiteral
|
||||
|| type == TokenType::BoolLiteral
|
||||
return m_current_token.is_identifier_name()
|
||||
|| type == TokenType::BigIntLiteral
|
||||
|| type == TokenType::BracketClose
|
||||
|| type == TokenType::CurlyClose
|
||||
|| type == TokenType::Identifier
|
||||
|| type == TokenType::In
|
||||
|| type == TokenType::Instanceof
|
||||
|| type == TokenType::MinusMinus
|
||||
|| type == TokenType::NullLiteral
|
||||
|| type == TokenType::NumericLiteral
|
||||
|| type == TokenType::ParenClose
|
||||
|| type == TokenType::PlusPlus
|
||||
|| type == TokenType::PrivateIdentifier
|
||||
|| type == TokenType::RegexLiteral
|
||||
|| type == TokenType::StringLiteral
|
||||
|| type == TokenType::TemplateLiteralEnd
|
||||
|| type == TokenType::This;
|
||||
|| type == TokenType::TemplateLiteralEnd;
|
||||
}
|
||||
|
||||
Token Lexer::next()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue