[JSC] Use reifying system for "name" property of builtin JSFunction
https://bugs.webkit.org/show_bug.cgi?id=175260
Reviewed by Saam Barati.
JSTests:
- stress/accessors-get-set-prefix.js:
- stress/builtin-function-name.js: Added.
(shouldBe):
(shouldThrow):
(shouldBe.JSON.stringify.Object.getOwnPropertyDescriptor):
(shouldBe.JSON.stringify.Object.getOwnPropertyNames.Array.prototype.filter.sort):
Source/JavaScriptCore:
Currently builtin JSFunction uses direct property for "name", which is different
from usual JSFunction. Usual JSFunction uses reifying system for "name". We would like
to apply this reifying mechanism to builtin JSFunction to simplify code and drop
JSFunction::createBuiltinFunction.
We would like to store the "correct" name in FunctionExecutable. For example,
we would like to store the name like "get [Symbol.species]" to FunctionExecutable
instead of specifying name when creating JSFunction. To do so, we add a new
annotations, @getter and @overriddenName. When @getter is specified, the name of
the function becomes "get xxx". And when @overriddenName="xxx" is specified,
the name of the function becomes "xxx".
- Scripts/builtins/builtins_generate_combined_header.py:
(generate_section_for_code_table_macro):
- Scripts/builtins/builtins_generate_combined_implementation.py:
(BuiltinsCombinedImplementationGenerator.generate_secondary_header_includes):
- Scripts/builtins/builtins_generate_separate_header.py:
(generate_section_for_code_table_macro):
- Scripts/builtins/builtins_generate_separate_implementation.py:
(BuiltinsSeparateImplementationGenerator.generate_secondary_header_includes):
- Scripts/builtins/builtins_model.py:
(BuiltinFunction.init):
(BuiltinFunction.fromString):
- Scripts/builtins/builtins_templates.py:
- Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Combined.js:
(overriddenName.string_appeared_here.match):
(intrinsic.RegExpTestIntrinsic.test):
- Scripts/tests/builtins/JavaScriptCore-Builtin.prototype-Separate.js:
(overriddenName.string_appeared_here.match):
(intrinsic.RegExpTestIntrinsic.test):
- Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
- Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
- Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
- Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
- Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
- Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
- Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
- Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
- Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
- Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
- Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
- Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
- Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
- builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::BuiltinExecutables):
- builtins/BuiltinExecutables.h:
- builtins/FunctionPrototype.js:
(symbolHasInstance): Deleted.
- builtins/GlobalOperations.js:
(globalPrivate.speciesGetter): Deleted.
- builtins/IteratorPrototype.js:
(symbolIteratorGetter): Deleted.
- builtins/RegExpPrototype.js:
(match): Deleted.
(replace): Deleted.
(search): Deleted.
(split): Deleted.
(functionCreateBuiltin):
- runtime/FunctionPrototype.cpp:
(JSC::FunctionPrototype::addFunctionProperties):
- runtime/IteratorPrototype.cpp:
(JSC::IteratorPrototype::finishCreation):
(JSC::JSFunction::getOwnNonIndexPropertyNames):
(JSC::JSFunction::reifyLazyBoundNameIfNeeded):
(JSC::JSFunction::createBuiltinFunction): Deleted.
- runtime/JSFunction.h:
- runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
(JSC::JSObject::putDirectBuiltinFunction):
(JSC::JSObject::putDirectBuiltinFunctionWithoutTransition):
- runtime/JSTypedArrayViewPrototype.cpp:
(JSC::JSTypedArrayViewPrototype::finishCreation):
(JSC::reifyStaticAccessor):
- runtime/RegExpPrototype.cpp:
(JSC::RegExpPrototype::finishCreation):
Source/WebCore:
Use @getter for JSBuiltin getters.
- Modules/fetch/FetchResponse.js:
(bodyUsed): Deleted.
(body): Deleted.
- Modules/streams/ReadableByteStreamController.js:
(byobRequest): Deleted.
(desiredSize): Deleted.
- Modules/streams/ReadableStream.js:
(locked): Deleted.
- Modules/streams/ReadableStreamBYOBReader.js:
(closed): Deleted.
- Modules/streams/ReadableStreamBYOBRequest.js:
(view): Deleted.
- Modules/streams/ReadableStreamDefaultController.js:
(desiredSize): Deleted.
- Modules/streams/ReadableStreamDefaultReader.js:
(closed): Deleted.
- Modules/streams/WritableStream.js:
(closed): Deleted.
(ready): Deleted.
(state): Deleted.
- bindings/js/JSDOMBuiltinConstructor.h:
(WebCore::JSDOMBuiltinConstructor<JSClass>::finishCreation):
LayoutTests:
- js/dom/builtin-getter-name-expected.txt: Added.
- js/dom/builtin-getter-name.html: Added.