[webkit-changes] [WebKit/WebKit] d8aca9: [JSC] Set correct ConstructorKind when reparsing f...
Commit Queue
noreply at github.com
Thu Feb 22 11:06:37 PST 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: d8aca95c28f69862452c6d9c8a92e169a337c3e5
https://github.com/WebKit/WebKit/commit/d8aca95c28f69862452c6d9c8a92e169a337c3e5
Author: Alexey Shvayka <ashvayka at apple.com>
Date: 2024-02-22 (Thu, 22 Feb 2024)
Changed paths:
M Source/JavaScriptCore/API/JSScriptRef.cpp
M Source/JavaScriptCore/builtins/BuiltinExecutables.cpp
M Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp
M Source/JavaScriptCore/debugger/DebuggerParseData.cpp
M Source/JavaScriptCore/parser/Parser.cpp
M Source/JavaScriptCore/parser/Parser.h
M Source/JavaScriptCore/runtime/CodeCache.cpp
M Source/JavaScriptCore/runtime/Completion.cpp
M Source/JavaScriptCore/runtime/JSModuleLoader.cpp
Log Message:
-----------
[JSC] Set correct ConstructorKind when reparsing functions
https://bugs.webkit.org/show_bug.cgi?id=269869
<rdar://problem/123401267>
Reviewed by Justin Michaud.
Before this change, when reparsing a function, ConstructorKind was always set to None,
which prevents a parser-level workaround to fix https://webkit.org/b/268411.
Also, ConstructorKind was abused to allow super() in eval(): please see Parser constructor.
However, passing down ConstructorKind to parser isn't trivial as it would conflict with
`defaultConstructorKindForTopLevelFunction` that is needed only for bytecode validation.
To avoid using one parameter for two purposes, this patch extracts parseRootNode(), which has
parameters special for debugger / bytecode validation while lacking ones needed only for functions.
overrideConstructorKindForTopLevelFunctionExpressions() is introduced for the same purpose.
Also, this change:
* passes correct DerivedContextType for eval() and reimplements SyntaxError check for super(),
all to avoid setting ConstructorKind for non-functions;
* hoists ConstructorKind override for bytecode validation up to parseFunctionExpression() to
limit the surface of this bytecode validation only hack;
* removes unused ParsingContext::Eval.
No new tests, no behavior change.
* Source/JavaScriptCore/API/JSScriptRef.cpp:
(parseScript):
* Source/JavaScriptCore/builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::createExecutable):
* Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp:
(JSC::generateUnlinkedFunctionCodeBlock):
* Source/JavaScriptCore/debugger/DebuggerParseData.cpp:
(JSC::gatherDebuggerParseData):
* Source/JavaScriptCore/parser/Parser.cpp:
(JSC::Parser<LexerType>::Parser):
(JSC::Parser<LexerType>::parseFunctionInfo):
(JSC::Parser<LexerType>::parseFunctionExpression):
(JSC::Parser<LexerType>::parseMemberExpression):
* Source/JavaScriptCore/parser/Parser.h:
(JSC::Scope::setDerivedContextType):
(JSC::Scope::derivedContextType const):
(JSC::Parser::overrideConstructorKindForTopLevelFunctionExpressions):
(JSC::parse):
(JSC::parseRootNode):
* Source/JavaScriptCore/runtime/CodeCache.cpp:
(JSC::generateUnlinkedCodeBlockImpl):
* Source/JavaScriptCore/runtime/Completion.cpp:
(JSC::checkSyntaxInternal):
(JSC::checkModuleSyntax):
* Source/JavaScriptCore/runtime/JSModuleLoader.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
Canonical link: https://commits.webkit.org/275189@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list