From 27567fb2a9f316d9bc6a1b75d2b94b02731756c6 Mon Sep 17 00:00:00 2001 From: Alexey Shvayka Date: Wed, 24 Jan 2024 13:02:12 -0800 Subject: [PATCH] [JSC] parseMemberExpression() should create NewExpr with expression start location https://bugs.webkit.org/show_bug.cgi?id=268022 Reviewed by Yusuke Suzuki and Justin Michaud. This was the idea of https://bugs.webkit.org/show_bug.cgi?id=267728, yet unfortunately in-between implementation revisions the case of correct location for `new new new C` did regress. * Source/JavaScriptCore/parser/Parser.cpp: (JSC::Parser::parseMemberExpression): Canonical link: https://commits.webkit.org/273440@main --- Source/JavaScriptCore/parser/Parser.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Source/JavaScriptCore/parser/Parser.cpp b/Source/JavaScriptCore/parser/Parser.cpp index 4171297013d7..0c86d7b847b5 100644 --- a/Source/JavaScriptCore/parser/Parser.cpp +++ b/Source/JavaScriptCore/parser/Parser.cpp @@ -5311,14 +5311,13 @@ template TreeExpression Parser::parseMemberExpres { TreeExpression base = 0; JSTextPosition expressionStart = tokenStartPosition(); - JSTokenLocation startLocation = tokenLocation(); + JSTokenLocation location = tokenLocation(); Vector newTokenStartPositions; while (match(NEW)) { newTokenStartPositions.append(tokenStartPosition()); next(); } size_t newCount = newTokenStartPositions.size(); - JSTokenLocation location = tokenLocation(); bool baseIsSuper = match(SUPER); bool previousBaseWasSuper = false; @@ -5337,7 +5336,7 @@ template TreeExpression Parser::parseMemberExpres semanticFailIfFalse(!closestOrdinaryFunctionScope->isGlobalCode() || isFunctionEvalContextType || isClassFieldInitializer, "new.target is not valid inside arrow functions in global code"); currentScope()->setInnerArrowFunctionUsesNewTarget(); } - base = context.createNewTargetExpr(startLocation); + base = context.createNewTargetExpr(location); newCount--; next(); } else {