Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 5553144b15b75352aa94ccf50c26b100bb4c2d10 https://github.com/WebKit/WebKit/commit/5553144b15b75352aa94ccf50c26b100bb4c2d10 Author: Alexey Shvayka <ashva...@apple.com> Date: 2024-01-29 (Mon, 29 Jan 2024)
Changed paths: M JSTests/stress/class-fields-static-harmony.js A JSTests/stress/regress-268019.js M JSTests/test262/expectations.yaml M Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp M Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h M Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp M Source/JavaScriptCore/parser/ASTBuilder.h M Source/JavaScriptCore/parser/NodeConstructors.h M Source/JavaScriptCore/parser/Nodes.h M Source/JavaScriptCore/parser/Parser.cpp M Source/JavaScriptCore/parser/Parser.h M Source/JavaScriptCore/parser/SyntaxChecker.h M Source/JavaScriptCore/runtime/CachedTypes.cpp Log Message: ----------- [JSC] Computed property keys of class fields should not be reparsed https://bugs.webkit.org/show_bug.cgi?id=268019 <rdar://121538219> Reviewed by Justin Michaud. Please consider the following code: ``` async function foo() { class C { [await "foo"] = 42; } } ``` Before this change, we were remembering JSTextPosition of `[` and reparsing the whole line, which led to SyntaxError since the context of having a parent async function scope was lost. On top of that, reparsing identifier isn't very efficient and caused logic duplication. With this change, we are remembering the identifier itself (in case of computed property key, a private symbol with an ID: please see makePrivateIdentifier()) and JSTextPosition that comes after `=`. DefineFieldNode is tweaked to prevent identifier from being GCed. * JSTests/stress/class-fields-static-harmony.js: * JSTests/stress/regress-268019.js: Added. * JSTests/test262/expectations.yaml: Mark 8 tests as passing. * Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.cpp: (JSC::generateUnlinkedFunctionCodeBlock): * Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h: * Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::emitNewClassFieldInitializerFunction): * Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h: (JSC::BytecodeGenerator::emitDefineClassElements): * Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp: (JSC::PropertyListNode::emitBytecode): (JSC::DefineFieldNode::emitBytecode): (JSC::ClassExprNode::emitBytecode): * Source/JavaScriptCore/parser/ASTBuilder.h: (JSC::ASTBuilder::createDefineField): * Source/JavaScriptCore/parser/NodeConstructors.h: (JSC::DefineFieldNode::DefineFieldNode): * Source/JavaScriptCore/parser/Nodes.h: * Source/JavaScriptCore/parser/Parser.cpp: (JSC::Parser<LexerType>::parseInner): (JSC::Parser<LexerType>::parseClass): (JSC::Parser<LexerType>::parseClassFieldInitializerSourceElements): * Source/JavaScriptCore/parser/Parser.h: (JSC::Parser<LexerType>::parse): (JSC::parse): * Source/JavaScriptCore/parser/SyntaxChecker.h: (JSC::SyntaxChecker::createDefineField): * Source/JavaScriptCore/runtime/CachedTypes.cpp: (JSC::CachedJSTextPosition::encode): (JSC::CachedJSTextPosition::decode const): (JSC::CachedClassElementDefinition::encode): (JSC::CachedClassElementDefinition::decode const): (JSC::CachedFunctionExecutableRareData::encode): (JSC::CachedFunctionExecutableRareData::decode const): Canonical link: https://commits.webkit.org/273677@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes