From 73eb29dabe855488e9c436323f6959ac423bebe6 Mon Sep 17 00:00:00 2001 From: davidot Date: Fri, 26 Nov 2021 23:41:59 +0100 Subject: [PATCH] LibJS: Lookahead for a period when parsing new.target This allows us to skip saving and loading the state whenever we parse 'new'. --- Userland/Libraries/LibJS/Parser.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibJS/Parser.cpp b/Userland/Libraries/LibJS/Parser.cpp index cb758c802c..0f1127d6c3 100644 --- a/Userland/Libraries/LibJS/Parser.cpp +++ b/Userland/Libraries/LibJS/Parser.cpp @@ -851,6 +851,10 @@ RefPtr Parser::try_parse_labelled_statement(AllowLabelledFunction all RefPtr Parser::try_parse_new_target_expression() { + // Optimization which skips the save/load state. + if (next_token().type() != TokenType::Period) + return {}; + save_state(); auto rule_start = push_start(); ArmedScopeGuard state_rollback_guard = [&] { @@ -858,9 +862,7 @@ RefPtr Parser::try_parse_new_target_expression() }; consume(TokenType::New); - if (!match(TokenType::Period)) - return {}; - consume(); + consume(TokenType::Period); if (!match(TokenType::Identifier)) return {}; // The string 'target' cannot have escapes so we check original value.