summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibJS/Parser.cpp21
-rw-r--r--Userland/Libraries/LibJS/Parser.h8
2 files changed, 12 insertions, 17 deletions
diff --git a/Userland/Libraries/LibJS/Parser.cpp b/Userland/Libraries/LibJS/Parser.cpp
index 9778b572ab..4f5228b2b2 100644
--- a/Userland/Libraries/LibJS/Parser.cpp
+++ b/Userland/Libraries/LibJS/Parser.cpp
@@ -615,8 +615,7 @@ RefPtr<FunctionExpression> Parser::try_parse_arrow_function_expression(bool expe
// The logic is duplicated below in the "real" !expect_parens branch.
if (!match_identifier() && !match(TokenType::Yield) && !match(TokenType::Await))
return nullptr;
- auto forked_lexer = m_state.lexer;
- auto token = forked_lexer.next();
+ auto token = next_token();
if (token.trivia_contains_line_terminator())
return nullptr;
if (token.type() != TokenType::Arrow)
@@ -725,9 +724,7 @@ RefPtr<Statement> Parser::try_parse_labelled_statement(AllowLabelledFunction all
{
{
// NOTE: This is a fast path where we try to fail early to avoid the expensive save_state+load_state.
- auto forked_lexer = m_state.lexer;
- auto token = forked_lexer.next();
- if (token.type() != TokenType::Colon)
+ if (next_token().type() != TokenType::Colon)
return {};
}
@@ -3138,7 +3135,7 @@ bool Parser::match_export_or_import() const
|| type == TokenType::Import;
}
-bool Parser::match_declaration()
+bool Parser::match_declaration() const
{
auto type = m_state.current_token.type();
@@ -3152,18 +3149,16 @@ bool Parser::match_declaration()
|| type == TokenType::Let;
}
-Token Parser::next_token()
+Token Parser::next_token() const
{
- save_state();
+ Lexer lookahead_lexer = m_state.lexer;
- consume();
- auto token_after = m_state.current_token;
+ auto token_after = lookahead_lexer.next();
- load_state();
return token_after;
}
-bool Parser::try_match_let_declaration()
+bool Parser::try_match_let_declaration() const
{
VERIFY(m_state.current_token.type() == TokenType::Let);
auto token_after = next_token();
@@ -3177,7 +3172,7 @@ bool Parser::try_match_let_declaration()
return false;
}
-bool Parser::match_variable_declaration()
+bool Parser::match_variable_declaration() const
{
auto type = m_state.current_token.type();
diff --git a/Userland/Libraries/LibJS/Parser.h b/Userland/Libraries/LibJS/Parser.h
index 684adb86b3..f918726d26 100644
--- a/Userland/Libraries/LibJS/Parser.h
+++ b/Userland/Libraries/LibJS/Parser.h
@@ -172,9 +172,9 @@ private:
bool match_secondary_expression(const Vector<TokenType>& forbidden = {}) const;
bool match_statement() const;
bool match_export_or_import() const;
- bool match_declaration();
- bool try_match_let_declaration();
- bool match_variable_declaration();
+ bool match_declaration() const;
+ bool try_match_let_declaration() const;
+ bool match_variable_declaration() const;
bool match_identifier() const;
bool match_identifier_name() const;
bool match_property_key() const;
@@ -195,7 +195,7 @@ private:
RefPtr<BindingPattern> synthesize_binding_pattern(Expression const& expression);
- Token next_token();
+ Token next_token() const;
void check_identifier_name_for_assignment_validity(StringView, bool force_strict = false);