[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