WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-171637-20170605175508.patch (text/plain), 437.51 KB, created by
Yusuke Suzuki
on 2017-06-05 01:55:10 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Yusuke Suzuki
Created:
2017-06-05 01:55:10 PDT
Size:
437.51 KB
patch
obsolete
>Subversion Revision: 217775 >diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 5078394fba14588dc3349b9f277aa8ccd32b97cc..9b58ca09d1490256dc9f37f12a799c51c1307f6c 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,146 @@ >+2017-06-04 Yusuke Suzuki <utatane.tea@gmail.com> >+ >+ Hoist DOM binding attribute getter prologue into JavaScriptCore taking advantage of DOMJIT / CheckSubClass >+ https://bugs.webkit.org/show_bug.cgi?id=171637 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Each DOM attribute getter has the code to perform ClassInfo check. But it is largely duplicate and causes code bloating. >+ In this patch, we move ClassInfo check from WebCore to JSC and reduce code size. >+ >+ We introduce DOMAnnotation which has ClassInfo* and DOMJIT::GetterSetter*. If the getter is not DOMJIT getter, this >+ DOMJIT::GetterSetter becomes nullptr. We support such a CustomAccessorGetter in all the JIT tiers. >+ >+ In IC, we drop CheckSubClass completely since IC's Structure check subsumes it. We do not enable this optimization for >+ op_get_by_id_with_this case yet. >+ In DFG and FTL, we emit CheckSubClass node. Which is typically removed by CheckStructure leading to CheckSubClass. >+ >+ And we add DOMAttributeGetterSetter, which is derived class of CustomGetterSetter. It holds DOMAnnotation and perform >+ ClassInfo check. >+ >+ * CMakeLists.txt: >+ * JavaScriptCore.xcodeproj/project.pbxproj: >+ * bytecode/AccessCase.cpp: >+ (JSC::AccessCase::generateImpl): >+ * bytecode/GetByIdStatus.cpp: >+ (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback): >+ * bytecode/GetByIdVariant.cpp: >+ (JSC::GetByIdVariant::GetByIdVariant): >+ (JSC::GetByIdVariant::operator=): >+ (JSC::GetByIdVariant::attemptToMerge): >+ (JSC::GetByIdVariant::dumpInContext): >+ * bytecode/GetByIdVariant.h: >+ (JSC::GetByIdVariant::customAccessorGetter): >+ (JSC::GetByIdVariant::domAttribute): >+ (JSC::GetByIdVariant::domJIT): Deleted. >+ * bytecode/GetterSetterAccessCase.cpp: >+ (JSC::GetterSetterAccessCase::create): >+ (JSC::GetterSetterAccessCase::GetterSetterAccessCase): >+ (JSC::GetterSetterAccessCase::emitDOMJITGetter): >+ * bytecode/GetterSetterAccessCase.h: >+ (JSC::GetterSetterAccessCase::domAttribute): >+ (JSC::GetterSetterAccessCase::customAccessor): >+ (JSC::GetterSetterAccessCase::domJIT): Deleted. >+ * bytecompiler/BytecodeGenerator.cpp: >+ (JSC::BytecodeGenerator::instantiateLexicalVariables): >+ * create_hash_table: >+ * dfg/DFGAbstractInterpreterInlines.h: >+ (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): >+ * dfg/DFGByteCodeParser.cpp: >+ (JSC::DFG::blessCallDOMGetter): >+ (JSC::DFG::ByteCodeParser::handleDOMJITGetter): >+ (JSC::DFG::ByteCodeParser::handleGetById): >+ * dfg/DFGClobberize.h: >+ (JSC::DFG::clobberize): >+ * dfg/DFGFixupPhase.cpp: >+ (JSC::DFG::FixupPhase::fixupNode): >+ * dfg/DFGNode.h: >+ * dfg/DFGSpeculativeJIT.cpp: >+ (JSC::DFG::SpeculativeJIT::compileCallDOMGetter): >+ * dfg/DFGSpeculativeJIT.h: >+ (JSC::DFG::SpeculativeJIT::callCustomGetter): >+ * domjit/DOMJITGetterSetter.h: >+ (JSC::DOMJIT::GetterSetter::GetterSetter): >+ (JSC::DOMJIT::GetterSetter::getter): >+ (JSC::DOMJIT::GetterSetter::compiler): >+ (JSC::DOMJIT::GetterSetter::resultType): >+ (JSC::DOMJIT::GetterSetter::~GetterSetter): Deleted. >+ (JSC::DOMJIT::GetterSetter::setter): Deleted. >+ (JSC::DOMJIT::GetterSetter::thisClassInfo): Deleted. >+ * ftl/FTLLowerDFGToB3.cpp: >+ (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter): >+ * jit/Repatch.cpp: >+ (JSC::tryCacheGetByID): >+ * jsc.cpp: >+ (WTF::DOMJITGetter::DOMJITAttribute::DOMJITAttribute): >+ (WTF::DOMJITGetter::DOMJITAttribute::callDOMGetter): >+ (WTF::DOMJITGetter::customGetter): >+ (WTF::DOMJITGetter::finishCreation): >+ (WTF::DOMJITGetterComplex::DOMJITAttribute::DOMJITAttribute): >+ (WTF::DOMJITGetterComplex::DOMJITAttribute::callDOMGetter): >+ (WTF::DOMJITGetterComplex::customGetter): >+ (WTF::DOMJITGetterComplex::finishCreation): >+ (WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT): Deleted. >+ (WTF::DOMJITGetter::DOMJITNodeDOMJIT::slowCall): Deleted. >+ (WTF::DOMJITGetter::domJITNodeGetterSetter): Deleted. >+ (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT): Deleted. >+ (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::slowCall): Deleted. >+ (WTF::DOMJITGetterComplex::domJITNodeGetterSetter): Deleted. >+ * runtime/CustomGetterSetter.h: >+ (JSC::CustomGetterSetter::create): >+ (JSC::CustomGetterSetter::setter): >+ (JSC::CustomGetterSetter::CustomGetterSetter): >+ (): Deleted. >+ * runtime/DOMAnnotation.h: Added. >+ (JSC::operator==): >+ (JSC::operator!=): >+ * runtime/DOMAttributeGetterSetter.cpp: Added. >+ * runtime/DOMAttributeGetterSetter.h: Copied from Source/JavaScriptCore/runtime/CustomGetterSetter.h. >+ (JSC::isDOMAttributeGetterSetter): >+ * runtime/Error.cpp: >+ (JSC::throwDOMAttributeGetterTypeError): >+ * runtime/Error.h: >+ (JSC::throwVMDOMAttributeGetterTypeError): >+ * runtime/JSCustomGetterSetterFunction.cpp: >+ (JSC::JSCustomGetterSetterFunction::customGetterSetterFunctionCall): >+ * runtime/JSObject.cpp: >+ (JSC::JSObject::putInlineSlow): >+ (JSC::JSObject::deleteProperty): >+ (JSC::JSObject::getOwnStaticPropertySlot): >+ (JSC::JSObject::reifyAllStaticProperties): >+ (JSC::JSObject::fillGetterPropertySlot): >+ (JSC::JSObject::findPropertyHashEntry): Deleted. >+ * runtime/JSObject.h: >+ (JSC::JSObject::getOwnNonIndexPropertySlot): >+ (JSC::JSObject::fillCustomGetterPropertySlot): >+ * runtime/Lookup.cpp: >+ (JSC::setUpStaticFunctionSlot): >+ * runtime/Lookup.h: >+ (JSC::HashTableValue::domJIT): >+ (JSC::getStaticPropertySlotFromTable): >+ (JSC::putEntry): >+ (JSC::lookupPut): >+ (JSC::reifyStaticProperty): >+ (JSC::reifyStaticProperties): >+ Each static property table has a new field ClassInfo*. It indicates that which ClassInfo check DOMAttribute registered in >+ this static property table requires. >+ >+ * runtime/ProgramExecutable.cpp: >+ (JSC::ProgramExecutable::initializeGlobalProperties): >+ * runtime/PropertyName.h: >+ * runtime/PropertySlot.cpp: >+ (JSC::PropertySlot::customGetter): >+ (JSC::PropertySlot::customAccessorGetter): >+ * runtime/PropertySlot.h: >+ (JSC::PropertySlot::domAttribute): >+ (JSC::PropertySlot::setCustom): >+ (JSC::PropertySlot::setCacheableCustom): >+ (JSC::PropertySlot::getValue): >+ (JSC::PropertySlot::domJIT): Deleted. >+ * runtime/VM.cpp: >+ (JSC::VM::VM): >+ * runtime/VM.h: >+ > 2017-06-04 Konstantin Tokarev <annulen@yandex.ru> > > Fix build of Windows-specific code with ICU 59.1 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index f597376cb378f677e967bcf555487b76a8682e55..68f41e391b8ce342019f0022a48c6f54fa7b036a 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,388 @@ >+2017-06-04 Yusuke Suzuki <utatane.tea@gmail.com> >+ >+ Hoist DOM binding attribute getter prologue into JavaScriptCore taking advantage of DOMJIT / CheckSubClass >+ https://bugs.webkit.org/show_bug.cgi?id=171637 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ We use DOMAttribute. When DOMAttribute is specified, ClassInfo check is performed by JSC side. >+ So, we can drop ClassInfo check from the actual function. >+ >+ We also simplify DOMJIT::GetterSetter to make it smaller size. >+ >+ WebCore size comparison >+ Before: 48443292 >+ After: 48087800 (0.7% reduction) >+ >+ Speedometer Scores show 0.8% improvement. >+ Before: 158.9 +- 0.46 >+ After: 160.2 +- 0.36 >+ >+ Dromaeo DOM core Scores show 5.8% improvement. >+ Before After >+ Total Score: 8424.12runs/s ±1.38% 8911.60runs/s ±1.47% >+ DOM Attributes 12627.27runs/s ±1.87% 14023.17runs/s ±1.87% >+ DOM Modification 1207.82runs/s ±2.48% 1204.21runs/s ±3.05% >+ DOM Query 68068.82runs/s ±0.63% 74273.38runs/s ±0.69% >+ DOM Traversal 1240.07runs/s ±1.96% 1256.64runs/s ±1.77% >+ >+ Performance improvement can be explained by the following optimizations. >+ >+ 1. Type checks are typically eliminated in all the JIT tiers. IC / DFG / FTL can >+ drop type checks since get_by_id operation already performs a structure check >+ which subsumes this type check. >+ 2. Direct getter call by CallDOMGetter without creating IC in DFG and FTL. >+ >+ * bindings/js/JSDOMAttribute.h: >+ (WebCore::IDLAttribute::get): >+ Add CastedThisErrorBehavior::Assert case. When this is specified, we perform casting without using jsDynamicCast. >+ >+ * bindings/scripts/CodeGeneratorJS.pm: >+ (IsAcceleratedDOMAttribute): >+ (GetJSCAttributesForAttribute): >+ (GenerateHeader): >+ (GeneratePropertiesHashTable): >+ (GenerateImplementation): >+ (GenerateAttributeGetterDefinition): >+ (GenerateCallbackImplementationContent): >+ (GenerateHashTableValueArray): >+ (GenerateHashTable): >+ (GenerateConstructorHelperMethods): >+ Update CodeGeneratorJS to emit DOMAttribute. And DOMJIT::GetterSetter becomes changed to be smaller size. >+ >+ (ComputeFunctionSpecial): >+ * bindings/scripts/test/JS/JSInterfaceName.cpp: >+ (WebCore::JSInterfaceNamePrototype::finishCreation): >+ * bindings/scripts/test/JS/JSMapLike.cpp: >+ (WebCore::JSMapLikePrototype::finishCreation): >+ * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp: >+ (WebCore::JSReadOnlyMapLikePrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: >+ (WebCore::JSTestActiveDOMObjectPrototype::finishCreation): >+ (WebCore::jsTestActiveDOMObjectExcitingAttr): >+ * bindings/scripts/test/JS/JSTestCEReactions.cpp: >+ (WebCore::JSTestCEReactionsPrototype::finishCreation): >+ (WebCore::jsTestCEReactionsAttributeWithCEReactions): >+ (WebCore::jsTestCEReactionsReflectAttributeWithCEReactions): >+ (WebCore::jsTestCEReactionsStringifierAttribute): >+ * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp: >+ (WebCore::JSTestCEReactionsStringifierPrototype::finishCreation): >+ (WebCore::jsTestCEReactionsStringifierValue): >+ * bindings/scripts/test/JS/JSTestCallbackInterface.cpp: >+ (WebCore::JSTestCallbackInterfaceConstructor::initializeProperties): >+ * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp: >+ (WebCore::JSTestClassWithJSBuiltinConstructorPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp: >+ (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: >+ (WebCore::JSTestCustomNamedGetterPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestDOMJIT.cpp: >+ (WebCore::JSTestDOMJITPrototype::finishCreation): >+ (WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITAnyAttr): Deleted. >+ (WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITBooleanAttr): Deleted. >+ (WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITByteAttr): Deleted. >+ (WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITOctetAttr): Deleted. >+ (WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITShortAttr): Deleted. >+ (WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr): Deleted. >+ (WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITLongAttr): Deleted. >+ (WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr): Deleted. >+ (WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITLongLongAttr): Deleted. >+ (WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr): Deleted. >+ (WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITFloatAttr): Deleted. >+ (WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr): Deleted. >+ (WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITDoubleAttr): Deleted. >+ (WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr): Deleted. >+ (WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITDomStringAttr): Deleted. >+ (WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITByteStringAttr): Deleted. >+ (WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr): Deleted. >+ (WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITNodeAttr): Deleted. >+ (WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr): Deleted. >+ (WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr): Deleted. >+ (WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr): Deleted. >+ (WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr): Deleted. >+ (WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr): Deleted. >+ (WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr): Deleted. >+ (WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr): Deleted. >+ (WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr): Deleted. >+ (WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr): Deleted. >+ (WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr): Deleted. >+ (WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr): Deleted. >+ (WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr): Deleted. >+ (WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr): Deleted. >+ (WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr): Deleted. >+ (WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr): Deleted. >+ (WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr): Deleted. >+ (WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT): Deleted. >+ (WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr): Deleted. >+ * bindings/scripts/test/JS/JSTestDOMJIT.h: >+ * bindings/scripts/test/JS/JSTestEventConstructor.cpp: >+ (WebCore::JSTestEventConstructorPrototype::finishCreation): >+ (WebCore::jsTestEventConstructorAttr1): >+ (WebCore::jsTestEventConstructorAttr2): >+ (WebCore::jsTestEventConstructorAttr3): >+ * bindings/scripts/test/JS/JSTestEventTarget.cpp: >+ (WebCore::JSTestEventTargetPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestException.cpp: >+ (WebCore::JSTestExceptionPrototype::finishCreation): >+ (WebCore::jsTestExceptionName): >+ * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: >+ (WebCore::JSTestGenerateIsReachablePrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestGlobalObject.cpp: >+ (WebCore::jsTestGlobalObjectRegularAttribute): >+ * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp: >+ (WebCore::JSTestIndexedSetterNoIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp: >+ (WebCore::JSTestIndexedSetterThrowingExceptionPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp: >+ (WebCore::JSTestIndexedSetterWithIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestInterface.cpp: >+ (WebCore::JSTestInterfaceConstructor::initializeProperties): >+ (WebCore::JSTestInterfacePrototype::finishCreation): >+ (WebCore::jsTestInterfaceImplementsStr1): >+ (WebCore::jsTestInterfaceImplementsStr2): >+ (WebCore::jsTestInterfaceImplementsStr3): >+ (WebCore::jsTestInterfaceImplementsNode): >+ (WebCore::jsTestInterfaceSupplementalStr1): >+ (WebCore::jsTestInterfaceSupplementalStr2): >+ (WebCore::jsTestInterfaceSupplementalStr3): >+ (WebCore::jsTestInterfaceSupplementalNode): >+ * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp: >+ (WebCore::JSTestInterfaceLeadingUnderscorePrototype::finishCreation): >+ (WebCore::jsTestInterfaceLeadingUnderscoreReadonly): >+ * bindings/scripts/test/JS/JSTestIterable.cpp: >+ (WebCore::JSTestIterablePrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp: >+ (WebCore::JSTestJSBuiltinConstructorPrototype::finishCreation): >+ (WebCore::jsTestJSBuiltinConstructorTestAttributeCustom): >+ (WebCore::jsTestJSBuiltinConstructorTestAttributeRWCustom): >+ * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: >+ (WebCore::JSTestMediaQueryListListenerPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp: >+ (WebCore::JSTestNamedAndIndexedSetterNoIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp: >+ (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp: >+ (WebCore::JSTestNamedAndIndexedSetterWithIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: >+ (WebCore::JSTestNamedConstructorPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp: >+ (WebCore::JSTestNamedDeleterNoIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp: >+ (WebCore::JSTestNamedDeleterThrowingExceptionPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp: >+ (WebCore::JSTestNamedDeleterWithIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp: >+ (WebCore::JSTestNamedDeleterWithIndexedGetterPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp: >+ (WebCore::JSTestNamedSetterNoIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp: >+ (WebCore::JSTestNamedSetterThrowingExceptionPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp: >+ (WebCore::JSTestNamedSetterWithIdentifierPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp: >+ (WebCore::JSTestNamedSetterWithOverrideBuiltinsPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp: >+ (WebCore::JSTestNamedSetterWithUnforgablePropertiesPrototype::finishCreation): >+ (WebCore::jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttribute): >+ * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp: >+ (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototype::finishCreation): >+ (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttribute): >+ * bindings/scripts/test/JS/JSTestNode.cpp: >+ (WebCore::JSTestNodePrototype::finishCreation): >+ (WebCore::jsTestNodeName): >+ * bindings/scripts/test/JS/JSTestObj.cpp: >+ (WebCore::JSTestObjConstructor::initializeProperties): >+ (WebCore::JSTestObjPrototype::finishCreation): >+ (WebCore::jsTestObjReadOnlyLongAttr): >+ (WebCore::jsTestObjReadOnlyStringAttr): >+ (WebCore::jsTestObjReadOnlyTestObjAttr): >+ (WebCore::jsTestObjEnumAttr): >+ (WebCore::jsTestObjByteAttr): >+ (WebCore::jsTestObjOctetAttr): >+ (WebCore::jsTestObjShortAttr): >+ (WebCore::jsTestObjClampedShortAttr): >+ (WebCore::jsTestObjEnforceRangeShortAttr): >+ (WebCore::jsTestObjUnsignedShortAttr): >+ (WebCore::jsTestObjLongAttr): >+ (WebCore::jsTestObjLongLongAttr): >+ (WebCore::jsTestObjUnsignedLongLongAttr): >+ (WebCore::jsTestObjStringAttr): >+ (WebCore::jsTestObjUsvstringAttr): >+ (WebCore::jsTestObjTestObjAttr): >+ (WebCore::jsTestObjTestNullableObjAttr): >+ (WebCore::jsTestObjUnforgeableAttr): >+ (WebCore::jsTestObjStringAttrTreatingNullAsEmptyString): >+ (WebCore::jsTestObjUsvstringAttrTreatingNullAsEmptyString): >+ (WebCore::jsTestObjByteStringAttrTreatingNullAsEmptyString): >+ (WebCore::jsTestObjStringLongRecordAttr): >+ (WebCore::jsTestObjUsvstringLongRecordAttr): >+ (WebCore::jsTestObjStringObjRecordAttr): >+ (WebCore::jsTestObjStringNullableObjRecordAttr): >+ (WebCore::jsTestObjDictionaryAttr): >+ (WebCore::jsTestObjNullableDictionaryAttr): >+ (WebCore::jsTestObjAnnotatedTypeInUnionAttr): >+ (WebCore::jsTestObjAnnotatedTypeInSequenceAttr): >+ (WebCore::jsTestObjImplementationEnumAttr): >+ (WebCore::jsTestObjXMLObjAttr): >+ (WebCore::jsTestObjCreate): >+ (WebCore::jsTestObjReflectedStringAttr): >+ (WebCore::jsTestObjReflectedUSVStringAttr): >+ (WebCore::jsTestObjReflectedIntegralAttr): >+ (WebCore::jsTestObjReflectedUnsignedIntegralAttr): >+ (WebCore::jsTestObjReflectedBooleanAttr): >+ (WebCore::jsTestObjReflectedURLAttr): >+ (WebCore::jsTestObjReflectedUSVURLAttr): >+ (WebCore::jsTestObjReflectedCustomIntegralAttr): >+ (WebCore::jsTestObjReflectedCustomBooleanAttr): >+ (WebCore::jsTestObjReflectedCustomURLAttr): >+ (WebCore::jsTestObjEnabledAtRuntimeAttribute): >+ (WebCore::jsTestObjEnabledBySettingAttribute): >+ (WebCore::jsTestObjTypedArrayAttr): >+ (WebCore::jsTestObjAttributeWithGetterException): >+ (WebCore::jsTestObjAttributeWithSetterException): >+ (WebCore::jsTestObjStringAttrWithGetterException): >+ (WebCore::jsTestObjStringAttrWithSetterException): >+ (WebCore::jsTestObjCustomAttr): >+ (WebCore::jsTestObjOnfoo): >+ (WebCore::jsTestObjOnwebkitfoo): >+ (WebCore::jsTestObjWithScriptStateAttribute): >+ (WebCore::jsTestObjWithCallWithAndSetterCallWithAttribute): >+ (WebCore::jsTestObjWithScriptExecutionContextAttribute): >+ (WebCore::jsTestObjWithScriptStateAttributeRaises): >+ (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises): >+ (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute): >+ (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises): >+ (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute): >+ (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute): >+ (WebCore::jsTestObjConditionalAttr1): >+ (WebCore::jsTestObjConditionalAttr2): >+ (WebCore::jsTestObjConditionalAttr3): >+ (WebCore::jsTestObjCachedAttribute1): >+ (WebCore::jsTestObjCachedAttribute2): >+ (WebCore::jsTestObjAnyAttribute): >+ (WebCore::jsTestObjObjectAttribute): >+ (WebCore::jsTestObjContentDocument): >+ (WebCore::jsTestObjMutablePoint): >+ (WebCore::jsTestObjStrawberry): >+ (WebCore::jsTestObjDescription): >+ (WebCore::jsTestObjId): >+ (WebCore::jsTestObjHash): >+ (WebCore::jsTestObjReplaceableAttribute): >+ (WebCore::jsTestObjNullableDoubleAttribute): >+ (WebCore::jsTestObjNullableLongAttribute): >+ (WebCore::jsTestObjNullableBooleanAttribute): >+ (WebCore::jsTestObjNullableStringAttribute): >+ (WebCore::jsTestObjNullableLongSettableAttribute): >+ (WebCore::jsTestObjNullableStringSettableAttribute): >+ (WebCore::jsTestObjNullableUSVStringSettableAttribute): >+ (WebCore::jsTestObjNullableByteStringSettableAttribute): >+ (WebCore::jsTestObjNullableStringValue): >+ (WebCore::jsTestObjAttribute): >+ (WebCore::jsTestObjAttributeWithReservedEnumType): >+ (WebCore::jsTestObjPutForwardsAttribute): >+ (WebCore::jsTestObjPutForwardsNullableAttribute): >+ (WebCore::jsTestObjStringifierAttribute): >+ * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: >+ (WebCore::JSTestOverloadedConstructorsPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp: >+ (WebCore::JSTestOverloadedConstructorsWithSequencePrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp: >+ (WebCore::JSTestOverrideBuiltinsPrototype::finishCreation): >+ * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp: >+ (WebCore::JSTestPromiseRejectionEventPrototype::finishCreation): >+ (WebCore::jsTestPromiseRejectionEventReason): >+ * bindings/scripts/test/JS/JSTestSerialization.cpp: >+ (WebCore::JSTestSerializationPrototype::finishCreation): >+ (WebCore::jsTestSerializationFirstStringAttribute): >+ (WebCore::jsTestSerializationSecondLongAttribute): >+ (WebCore::jsTestSerializationThirdUnserializableAttribute): >+ (WebCore::jsTestSerializationFourthUnrestrictedDoubleAttribute): >+ (WebCore::jsTestSerializationFifthLongAttribute): >+ (WebCore::jsTestSerializationSixthTypedefAttribute): >+ * bindings/scripts/test/JS/JSTestSerializationInherit.cpp: >+ (WebCore::JSTestSerializationInheritPrototype::finishCreation): >+ (WebCore::jsTestSerializationInheritInheritLongAttribute): >+ * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp: >+ (WebCore::JSTestSerializationInheritFinalPrototype::finishCreation): >+ (WebCore::jsTestSerializationInheritFinalFinalLongAttributeFoo): >+ (WebCore::jsTestSerializationInheritFinalFinalLongAttributeBar): >+ * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: >+ (WebCore::JSTestSerializedScriptValueInterfacePrototype::finishCreation): >+ (WebCore::jsTestSerializedScriptValueInterfaceValue): >+ (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue): >+ (WebCore::jsTestSerializedScriptValueInterfaceCachedValue): >+ (WebCore::jsTestSerializedScriptValueInterfacePorts): >+ (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue): >+ * bindings/scripts/test/JS/JSTestTypedefs.cpp: >+ (WebCore::JSTestTypedefsConstructor::initializeProperties): >+ (WebCore::JSTestTypedefsPrototype::finishCreation): >+ (WebCore::jsTestTypedefsUnsignedLongLongAttr): >+ (WebCore::jsTestTypedefsSerializedScriptValue): >+ (WebCore::jsTestTypedefsAttributeWithClamp): >+ (WebCore::jsTestTypedefsAttributeWithClampInTypedef): >+ (WebCore::jsTestTypedefsAttrWithGetterException): >+ (WebCore::jsTestTypedefsAttrWithSetterException): >+ (WebCore::jsTestTypedefsStringAttrWithGetterException): >+ (WebCore::jsTestTypedefsStringAttrWithSetterException): >+ They are binding test rebaselines. >+ >+ * domjit/DOMJITIDLTypeFilter.h: >+ * domjit/JSDocumentDOMJIT.cpp: >+ (WebCore::compileDocumentDocumentElementAttribute): >+ (WebCore::compileDocumentBodyAttribute): >+ (WebCore::DocumentDocumentElementDOMJIT::callDOMGetter): Deleted. >+ (WebCore::DocumentBodyDOMJIT::callDOMGetter): Deleted. >+ * domjit/JSNodeDOMJIT.cpp: >+ (WebCore::compileNodeFirstChildAttribute): >+ (WebCore::compileNodeLastChildAttribute): >+ (WebCore::compileNodeNextSiblingAttribute): >+ (WebCore::compileNodePreviousSiblingAttribute): >+ (WebCore::compileNodeParentNodeAttribute): >+ (WebCore::compileNodeNodeTypeAttribute): >+ (WebCore::compileNodeOwnerDocumentAttribute): >+ (WebCore::NodeFirstChildDOMJIT::callDOMGetter): Deleted. >+ (WebCore::NodeLastChildDOMJIT::callDOMGetter): Deleted. >+ (WebCore::NodeNextSiblingDOMJIT::callDOMGetter): Deleted. >+ (WebCore::NodePreviousSiblingDOMJIT::callDOMGetter): Deleted. >+ (WebCore::NodeParentNodeDOMJIT::callDOMGetter): Deleted. >+ (WebCore::NodeNodeTypeDOMJIT::callDOMGetter): Deleted. >+ (WebCore::NodeOwnerDocumentDOMJIT::callDOMGetter): Deleted. >+ DOMJIT::GetterSetter becomes smaller constexpr data. >+ > 2017-06-04 Eric Carlson <eric.carlson@apple.com> > > [MediaStream] Page capture state not reported correctly >diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt >index 8bd354043676c1ef1fe4926eaf32a7e36813fef2..435f4b26339d1fdb71fd7996e4efc4f53cb3d5db 100644 >--- a/Source/JavaScriptCore/CMakeLists.txt >+++ b/Source/JavaScriptCore/CMakeLists.txt >@@ -710,6 +710,7 @@ set(JavaScriptCore_SOURCES > runtime/ConstructData.cpp > runtime/ControlFlowProfiler.cpp > runtime/CustomGetterSetter.cpp >+ runtime/DOMAttributeGetterSetter.cpp > runtime/DataView.cpp > runtime/DateConstructor.cpp > runtime/DateConversion.cpp >diff --git a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj >index 270d2263fab0ede546d5ac29e36be5c9849e813b..89a95b7957deb962343a2253cb773b69509113bb 100644 >--- a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj >+++ b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj >@@ -2352,6 +2352,9 @@ > E124A8F70E555775003091F1 /* OpaqueJSString.h in Headers */ = {isa = PBXBuildFile; fileRef = E124A8F50E555775003091F1 /* OpaqueJSString.h */; settings = {ATTRIBUTES = (Private, ); }; }; > E124A8F80E555775003091F1 /* OpaqueJSString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E124A8F60E555775003091F1 /* OpaqueJSString.cpp */; }; > E18E3A590DF9278C00D90B34 /* VM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E18E3A570DF9278C00D90B34 /* VM.cpp */; }; >+ E31618131EC5FE170006A218 /* DOMAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = E31618101EC5FE080006A218 /* DOMAnnotation.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ E31618141EC5FE220006A218 /* DOMAttributeGetterSetter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E31618111EC5FE080006A218 /* DOMAttributeGetterSetter.cpp */; }; >+ E31618151EC5FE270006A218 /* DOMAttributeGetterSetter.h in Headers */ = {isa = PBXBuildFile; fileRef = E31618121EC5FE080006A218 /* DOMAttributeGetterSetter.h */; settings = {ATTRIBUTES = (Private, ); }; }; > E318CBC01B8AEF5100A2929D /* JSModuleNamespaceObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E318CBBE1B8AEF5100A2929D /* JSModuleNamespaceObject.cpp */; }; > E318CBC11B8AEF5100A2929D /* JSModuleNamespaceObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E318CBBF1B8AEF5100A2929D /* JSModuleNamespaceObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; > E322E5A21DA64439006E7709 /* DFGSnippetParams.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E322E5A01DA64435006E7709 /* DFGSnippetParams.cpp */; }; >@@ -4981,6 +4984,9 @@ > E18E3A560DF9278C00D90B34 /* VM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = VM.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; > E18E3A570DF9278C00D90B34 /* VM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = VM.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; > E30677971B8BC6F5003F87F0 /* ModuleLoaderPrototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ModuleLoaderPrototype.js; sourceTree = "<group>"; }; >+ E31618101EC5FE080006A218 /* DOMAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMAnnotation.h; sourceTree = "<group>"; }; >+ E31618111EC5FE080006A218 /* DOMAttributeGetterSetter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMAttributeGetterSetter.cpp; sourceTree = "<group>"; }; >+ E31618121EC5FE080006A218 /* DOMAttributeGetterSetter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMAttributeGetterSetter.h; sourceTree = "<group>"; }; > E318CBBE1B8AEF5100A2929D /* JSModuleNamespaceObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSModuleNamespaceObject.cpp; sourceTree = "<group>"; }; > E318CBBF1B8AEF5100A2929D /* JSModuleNamespaceObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSModuleNamespaceObject.h; sourceTree = "<group>"; }; > E322E5A01DA64435006E7709 /* DFGSnippetParams.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGSnippetParams.cpp; path = dfg/DFGSnippetParams.cpp; sourceTree = "<group>"; }; >@@ -6620,6 +6626,9 @@ > 52678F901A04177C006A306D /* ControlFlowProfiler.h */, > 2A111243192FCE79005EE18D /* CustomGetterSetter.cpp */, > 2A111244192FCE79005EE18D /* CustomGetterSetter.h */, >+ E31618101EC5FE080006A218 /* DOMAnnotation.h */, >+ E31618111EC5FE080006A218 /* DOMAttributeGetterSetter.cpp */, >+ E31618121EC5FE080006A218 /* DOMAttributeGetterSetter.h */, > 0F2B66B017B6B5AB00A7AE3F /* DataView.cpp */, > 0F2B66B117B6B5AB00A7AE3F /* DataView.h */, > BCD203450E17135E002C7E82 /* DateConstructor.cpp */, >@@ -8865,6 +8874,7 @@ > A5EA710319F6DE6F0098F5EC /* generate_objc_backend_dispatcher_header.py in Headers */, > A5EA710419F6DE720098F5EC /* generate_objc_backend_dispatcher_implementation.py in Headers */, > A5EA710519F6DE740098F5EC /* generate_objc_configuration_header.py in Headers */, >+ E31618151EC5FE270006A218 /* DOMAttributeGetterSetter.h in Headers */, > A5EA710619F6DE760098F5EC /* generate_objc_configuration_implementation.py in Headers */, > A5EA710819F6DE7A0098F5EC /* generate_objc_frontend_dispatcher_implementation.py in Headers */, > A5EA710919F6DE7C0098F5EC /* generate_objc_header.py in Headers */, >@@ -8953,6 +8963,7 @@ > 99F1A7011B98FBEC00463B26 /* InspectorFrontendRouter.h in Headers */, > A5339EC61BB399A60054F005 /* InspectorHeapAgent.h in Headers */, > E35E03601B7AB43E0073AD2A /* InspectorInstrumentationObject.h in Headers */, >+ E31618131EC5FE170006A218 /* DOMAnnotation.h in Headers */, > E33B3E261B7ABD750048DB2E /* InspectorInstrumentationObject.lut.h in Headers */, > A532438C18568335002ED692 /* InspectorProtocolObjects.h in Headers */, > A55D93AC18514F7900400DED /* InspectorProtocolTypes.h in Headers */, >@@ -10356,6 +10367,7 @@ > 0FF0F19D16B72A08005DF95B /* DFGCommon.cpp in Sources */, > 0FEA0A31170D40BF00BB722C /* DFGCommonData.cpp in Sources */, > 0F38B01717CFE75500B144D3 /* DFGCompilationKey.cpp in Sources */, >+ E31618141EC5FE220006A218 /* DOMAttributeGetterSetter.cpp in Sources */, > 0F38B01917CFE75500B144D3 /* DFGCompilationMode.cpp in Sources */, > 0F3B3A1A153E68F2003ED0FF /* DFGConstantFoldingPhase.cpp in Sources */, > 0FED67B91B26256D0066CE15 /* DFGConstantHoistingPhase.cpp in Sources */, >diff --git a/Source/JavaScriptCore/bytecode/AccessCase.cpp b/Source/JavaScriptCore/bytecode/AccessCase.cpp >index 30aedc3412cdd22294dac59b58cdfa953eb8e853..1b99dfd3f4ad0a4b1dc810e5f67cd3f129ec9030 100644 >--- a/Source/JavaScriptCore/bytecode/AccessCase.cpp >+++ b/Source/JavaScriptCore/bytecode/AccessCase.cpp >@@ -548,13 +548,18 @@ void AccessCase::generateImpl(AccessGenerationState& state) > return; > } > >- if (Options::useDOMJIT() && m_type == CustomAccessorGetter && this->as<GetterSetterAccessCase>().domJIT()) { >+ if (m_type == CustomAccessorGetter && this->as<GetterSetterAccessCase>().domAttribute()) { > auto& access = this->as<GetterSetterAccessCase>(); > // We do not need to emit CheckDOM operation since structure check ensures > // that the structure of the given base value is structure()! So all we should > // do is performing the CheckDOM thingy in IC compiling time here. >- if (structure()->classInfo()->isSubClassOf(access.domJIT()->thisClassInfo())) { >- access.emitDOMJITGetter(state, baseForGetGPR); >+ if (!structure()->classInfo()->isSubClassOf(access.domAttribute()->classInfo)) { >+ state.failAndIgnore.append(jit.jump()); >+ return; >+ } >+ >+ if (Options::useDOMJIT() && access.domAttribute()->domJIT) { >+ access.emitDOMJITGetter(state, access.domAttribute()->domJIT, baseForGetGPR); > return; > } > } >diff --git a/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp b/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp >index 1537cd9b1b0d53a61b97544ddcc9ff7d88f6488d..624b232a6238f0e539840c572c930903ac9866ce 100644 >--- a/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp >+++ b/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp >@@ -244,7 +244,8 @@ GetByIdStatus GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback( > case ComplexGetStatus::Inlineable: { > std::unique_ptr<CallLinkStatus> callLinkStatus; > JSFunction* intrinsicFunction = nullptr; >- DOMJIT::GetterSetter* domJIT = nullptr; >+ PropertySlot::GetValueFunc customAccessorGetter = nullptr; >+ std::optional<DOMAttributeAnnotation> domAttribute; > > switch (access.type()) { > case AccessCase::Load: >@@ -265,8 +266,9 @@ GetByIdStatus GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback( > break; > } > case AccessCase::CustomAccessorGetter: { >- domJIT = access.as<GetterSetterAccessCase>().domJIT(); >- if (!domJIT) >+ customAccessorGetter = bitwise_cast<PropertySlot::GetValueFunc>(access.as<GetterSetterAccessCase>().customAccessor()); >+ domAttribute = access.as<GetterSetterAccessCase>().domAttribute(); >+ if (!domAttribute) > return GetByIdStatus(slowPathState, true); > result.m_state = Custom; > break; >@@ -282,12 +284,13 @@ GetByIdStatus GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback( > StructureSet(structure), complexGetStatus.offset(), > complexGetStatus.conditionSet(), WTFMove(callLinkStatus), > intrinsicFunction, >- domJIT); >+ customAccessorGetter, >+ domAttribute); > > if (!result.appendVariant(variant)) > return GetByIdStatus(slowPathState, true); > >- if (domJIT) { >+ if (domAttribute) { > // Give up when cutom accesses are not merged into one. > if (result.numVariants() != 1) > return GetByIdStatus(slowPathState, true); >diff --git a/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp b/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp >index d940b62cae8c3643397e972e133d474f7b3cb64a..937074d8554c5ca1cf7c5561f5d7cae1a9542cf7 100644 >--- a/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp >+++ b/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp >@@ -37,13 +37,15 @@ GetByIdVariant::GetByIdVariant( > const ObjectPropertyConditionSet& conditionSet, > std::unique_ptr<CallLinkStatus> callLinkStatus, > JSFunction* intrinsicFunction, >- DOMJIT::GetterSetter* domJIT) >+ PropertySlot::GetValueFunc customAccessorGetter, >+ std::optional<DOMAttributeAnnotation> domAttribute) > : m_structureSet(structureSet) > , m_conditionSet(conditionSet) > , m_offset(offset) > , m_callLinkStatus(WTFMove(callLinkStatus)) > , m_intrinsicFunction(intrinsicFunction) >- , m_domJIT(domJIT) >+ , m_customAccessorGetter(customAccessorGetter) >+ , m_domAttribute(domAttribute) > { > if (!structureSet.size()) { > ASSERT(offset == invalidOffset); >@@ -67,7 +69,8 @@ GetByIdVariant& GetByIdVariant::operator=(const GetByIdVariant& other) > m_conditionSet = other.m_conditionSet; > m_offset = other.m_offset; > m_intrinsicFunction = other.m_intrinsicFunction; >- m_domJIT = other.m_domJIT; >+ m_customAccessorGetter = other.m_customAccessorGetter; >+ m_domAttribute = other.m_domAttribute; > if (other.m_callLinkStatus) > m_callLinkStatus = std::make_unique<CallLinkStatus>(*other.m_callLinkStatus); > else >@@ -106,9 +109,16 @@ bool GetByIdVariant::attemptToMerge(const GetByIdVariant& other) > if (!canMergeIntrinsicStructures(other)) > return false; > >- if (m_domJIT != other.m_domJIT) >+ if (m_customAccessorGetter != other.m_customAccessorGetter) > return false; > >+ if (m_domAttribute || other.m_domAttribute) { >+ if (!(m_domAttribute && other.m_domAttribute)) >+ return false; >+ if (*m_domAttribute != *other.m_domAttribute) >+ return false; >+ } >+ > if (m_conditionSet.isEmpty() != other.m_conditionSet.isEmpty()) > return false; > >@@ -144,8 +154,13 @@ void GetByIdVariant::dumpInContext(PrintStream& out, DumpContext* context) const > out.print(", call = ", *m_callLinkStatus); > if (m_intrinsicFunction) > out.print(", intrinsic = ", *m_intrinsicFunction); >- if (m_domJIT) >- out.print(", domjit = ", RawPointer(m_domJIT)); >+ if (m_customAccessorGetter) >+ out.print(", customaccessorgetter = ", RawPointer(bitwise_cast<const void*>(m_customAccessorGetter))); >+ if (m_domAttribute) { >+ out.print(", domclass = ", RawPointer(m_domAttribute->classInfo)); >+ if (m_domAttribute->domJIT) >+ out.print(", domjit = ", RawPointer(m_domAttribute->domJIT)); >+ } > out.print(">"); > } > >diff --git a/Source/JavaScriptCore/bytecode/GetByIdVariant.h b/Source/JavaScriptCore/bytecode/GetByIdVariant.h >index 8ded248675f871d7908f22a5694372978b8953a5..0de56d949974e334a339d2a216a21d63d0d760b0 100644 >--- a/Source/JavaScriptCore/bytecode/GetByIdVariant.h >+++ b/Source/JavaScriptCore/bytecode/GetByIdVariant.h >@@ -47,7 +47,8 @@ class GetByIdVariant { > const ObjectPropertyConditionSet& = ObjectPropertyConditionSet(), > std::unique_ptr<CallLinkStatus> = nullptr, > JSFunction* = nullptr, >- DOMJIT::GetterSetter* = nullptr); >+ PropertySlot::GetValueFunc = nullptr, >+ std::optional<DOMAttributeAnnotation> = std::nullopt); > > ~GetByIdVariant(); > >@@ -66,7 +67,8 @@ class GetByIdVariant { > CallLinkStatus* callLinkStatus() const { return m_callLinkStatus.get(); } > JSFunction* intrinsicFunction() const { return m_intrinsicFunction; } > Intrinsic intrinsic() const { return m_intrinsicFunction ? m_intrinsicFunction->intrinsic() : NoIntrinsic; } >- DOMJIT::GetterSetter* domJIT() const { return m_domJIT; } >+ PropertySlot::GetValueFunc customAccessorGetter() const { return m_customAccessorGetter; } >+ std::optional<DOMAttributeAnnotation> domAttribute() const { return m_domAttribute; } > > bool isPropertyUnset() const { return offset() == invalidOffset; } > >@@ -85,7 +87,8 @@ class GetByIdVariant { > PropertyOffset m_offset; > std::unique_ptr<CallLinkStatus> m_callLinkStatus; > JSFunction* m_intrinsicFunction; >- DOMJIT::GetterSetter* m_domJIT; >+ PropertySlot::GetValueFunc m_customAccessorGetter; >+ std::optional<DOMAttributeAnnotation> m_domAttribute; > }; > > } // namespace JSC >diff --git a/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp b/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp >index 460984eacfd820cf66e517cd0e80ab52436bdfd3..c4da80ecc19c2147e2fa7b5d99684cdfeb2e4780 100644 >--- a/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp >+++ b/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.cpp >@@ -50,7 +50,7 @@ GetterSetterAccessCase::GetterSetterAccessCase(VM& vm, JSCell* owner, AccessType > std::unique_ptr<AccessCase> GetterSetterAccessCase::create( > VM& vm, JSCell* owner, AccessType type, PropertyOffset offset, Structure* structure, > const ObjectPropertyConditionSet& conditionSet, bool viaProxy, WatchpointSet* additionalSet, >- PropertySlot::GetValueFunc customGetter, JSObject* customSlotBase, DOMJIT::GetterSetter* domJIT) >+ PropertySlot::GetValueFunc customGetter, JSObject* customSlotBase, std::optional<DOMAttributeAnnotation> domAttribute) > { > switch (type) { > case Getter: >@@ -62,7 +62,7 @@ std::unique_ptr<AccessCase> GetterSetterAccessCase::create( > }; > > std::unique_ptr<GetterSetterAccessCase> result(new GetterSetterAccessCase(vm, owner, type, offset, structure, conditionSet, viaProxy, additionalSet, customSlotBase)); >- result->m_domJIT = domJIT; >+ result->m_domAttribute = domAttribute; > result->m_customAccessor.getter = customGetter; > return WTFMove(result); > } >@@ -88,7 +88,7 @@ GetterSetterAccessCase::GetterSetterAccessCase(const GetterSetterAccessCase& oth > , m_customSlotBase(other.m_customSlotBase) > { > m_customAccessor.opaque = other.m_customAccessor.opaque; >- m_domJIT = other.m_domJIT; >+ m_domAttribute = other.m_domAttribute; > } > > std::unique_ptr<AccessCase> GetterSetterAccessCase::clone() const >@@ -114,7 +114,7 @@ void GetterSetterAccessCase::dumpImpl(PrintStream& out, CommaPrinter& comma) con > out.print(comma, "customAccessor = ", RawPointer(m_customAccessor.opaque)); > } > >-void GetterSetterAccessCase::emitDOMJITGetter(AccessGenerationState& state, GPRReg baseForGetGPR) >+void GetterSetterAccessCase::emitDOMJITGetter(AccessGenerationState& state, const DOMJIT::GetterSetter* domJIT, GPRReg baseForGetGPR) > { > CCallHelpers& jit = *state.jit; > StructureStubInfo& stubInfo = *state.stubInfo; >@@ -123,7 +123,7 @@ void GetterSetterAccessCase::emitDOMJITGetter(AccessGenerationState& state, GPRR > GPRReg scratchGPR = state.scratchGPR; > > // We construct the environment that can execute the DOMJIT::Snippet here. >- Ref<DOMJIT::CallDOMGetterSnippet> snippet = domJIT()->callDOMGetter(); >+ Ref<DOMJIT::CallDOMGetterSnippet> snippet = domJIT->compiler()(); > > Vector<GPRReg> gpScratch; > Vector<FPRReg> fpScratch; >diff --git a/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h b/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h >index 06192dac242aff5230ce3f6b55341d233d4f7e8c..762625584ded1eed68a5c98ae1d713ee742a6c54 100644 >--- a/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h >+++ b/Source/JavaScriptCore/bytecode/GetterSetterAccessCase.h >@@ -40,11 +40,11 @@ class GetterSetterAccessCase : public ProxyableAccessCase { > // actually somewhat likely because of how we do buffering of new cases. > CallLinkInfo* callLinkInfo() const { return m_callLinkInfo.get(); } > JSObject* customSlotBase() const { return m_customSlotBase.get(); } >- DOMJIT::GetterSetter* domJIT() const { return m_domJIT; } >+ std::optional<DOMAttributeAnnotation> domAttribute() const { return m_domAttribute; } > > JSObject* alternateBase() const override; > >- void emitDOMJITGetter(AccessGenerationState&, GPRReg baseForGetGPR); >+ void emitDOMJITGetter(AccessGenerationState&, const DOMJIT::GetterSetter*, GPRReg baseForGetGPR); > > static std::unique_ptr<AccessCase> create( > VM&, JSCell* owner, AccessType, PropertyOffset, Structure*, >@@ -53,7 +53,7 @@ class GetterSetterAccessCase : public ProxyableAccessCase { > WatchpointSet* additionalSet = nullptr, > PropertySlot::GetValueFunc = nullptr, > JSObject* customSlotBase = nullptr, >- DOMJIT::GetterSetter* = nullptr); >+ std::optional<DOMAttributeAnnotation> = std::nullopt); > > static std::unique_ptr<AccessCase> create(VM&, JSCell* owner, AccessType, Structure*, PropertyOffset, > const ObjectPropertyConditionSet&, PutPropertySlot::PutValueFunc = nullptr, >@@ -64,6 +64,8 @@ class GetterSetterAccessCase : public ProxyableAccessCase { > > ~GetterSetterAccessCase(); > >+ void* customAccessor() const { return m_customAccessor.opaque; } >+ > private: > GetterSetterAccessCase(VM&, JSCell*, AccessType, PropertyOffset, Structure*, const ObjectPropertyConditionSet&, bool viaProxy, WatchpointSet* additionalSet, JSObject* customSlotBase); > >@@ -76,7 +78,7 @@ class GetterSetterAccessCase : public ProxyableAccessCase { > PropertySlot::GetValueFunc getter; > void* opaque; > } m_customAccessor; >- DOMJIT::GetterSetter* m_domJIT; >+ std::optional<DOMAttributeAnnotation> m_domAttribute; > }; > > } // namespace JSC >diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >index e77031b6da679f69d50db6ad1b874b5675732dfb..5be11194841e0407e1afe76cd2c792f585cd48be 100644 >--- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >+++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp >@@ -2000,7 +2000,7 @@ bool BytecodeGenerator::instantiateLexicalVariables(const VariableEnvironment& l > varOffset = VarOffset(local->virtualRegister()); > } > >- SymbolTableEntry newEntry(varOffset, entry.value.isConst() ? ReadOnly : 0); >+ SymbolTableEntry newEntry(varOffset, entry.value.isConst() ? ReadOnly : None); > symbolTable->add(NoLockingNecessary, entry.key.get(), newEntry); > } > } >diff --git a/Source/JavaScriptCore/create_hash_table b/Source/JavaScriptCore/create_hash_table >index d020f02db0e22b9e3d2189f094ed185a4aa9adaf..0a41473e411e3cc58f2008f6e94cd87f751ab0c5 100755 >--- a/Source/JavaScriptCore/create_hash_table >+++ b/Source/JavaScriptCore/create_hash_table >@@ -345,7 +345,7 @@ sub output() { > print "};\n"; > print "\n"; > print "static const struct HashTable $name =\n"; >- print " \{ $packedSize, $compactHashSizeMask, $hasSetter, $nameEntries, $nameIndex \};\n"; >+ print " \{ $packedSize, $compactHashSizeMask, $hasSetter, nullptr, $nameEntries, $nameIndex \};\n"; > print "\n"; > print "} // namespace JSC\n"; > } >diff --git a/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h b/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h >index c8ddda5f9112890971972bc975686522ca237463..60283954faf3ead5c4f9e28948835871a7540726 100644 >--- a/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h >+++ b/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h >@@ -2407,9 +2407,12 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi > case CallDOMGetter: { > CallDOMGetterData* callDOMGetterData = node->callDOMGetterData(); > DOMJIT::CallDOMGetterSnippet* snippet = callDOMGetterData->snippet; >- if (snippet->effect.writes) >+ if (!snippet || snippet->effect.writes) > clobberWorld(node->origin.semantic, clobberLimit); >- forNode(node).setType(m_graph, callDOMGetterData->domJIT->resultType()); >+ if (callDOMGetterData->domJIT) >+ forNode(node).setType(m_graph, callDOMGetterData->domJIT->resultType()); >+ else >+ forNode(node).makeBytecodeTop(); > break; > } > case CallDOM: { >diff --git a/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp b/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp >index 57cdbfb26dc2aebeb02eea956eab776f6ae233d0..ad424404dc970a000f4198b4701dfb848c4ba8e6 100644 >--- a/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp >+++ b/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp >@@ -2976,16 +2976,16 @@ bool ByteCodeParser::handleIntrinsicGetter(int resultOperand, const GetByIdVaria > static void blessCallDOMGetter(Node* node) > { > DOMJIT::CallDOMGetterSnippet* snippet = node->callDOMGetterData()->snippet; >- if (!snippet->effect.mustGenerate()) >+ if (snippet && !snippet->effect.mustGenerate()) > node->clearFlags(NodeMustGenerate); > } > > bool ByteCodeParser::handleDOMJITGetter(int resultOperand, const GetByIdVariant& variant, Node* thisNode, unsigned identifierNumber, SpeculatedType prediction) > { >- if (!variant.domJIT()) >+ if (!variant.domAttribute()) > return false; > >- DOMJIT::GetterSetter* domJIT = variant.domJIT(); >+ auto domAttribute = variant.domAttribute().value(); > > // We do not need to actually look up CustomGetterSetter here. Checking Structures or registering watchpoints are enough, > // since replacement of CustomGetterSetter always incurs Structure transition. >@@ -2994,19 +2994,24 @@ bool ByteCodeParser::handleDOMJITGetter(int resultOperand, const GetByIdVariant& > addToGraph(CheckStructure, OpInfo(m_graph.addStructureSet(variant.structureSet())), thisNode); > > // We do not need to emit CheckCell thingy here. When the custom accessor is replaced to different one, Structure transition occurs. >- addToGraph(CheckSubClass, OpInfo(domJIT->thisClassInfo()), thisNode); >+ addToGraph(CheckSubClass, OpInfo(domAttribute.classInfo), thisNode); > > CallDOMGetterData* callDOMGetterData = m_graph.m_callDOMGetterData.add(); >- Ref<DOMJIT::CallDOMGetterSnippet> callDOMGetterSnippet = domJIT->callDOMGetter(); >- m_graph.m_domJITSnippets.append(callDOMGetterSnippet.copyRef()); >+ callDOMGetterData->customAccessorGetter = variant.customAccessorGetter(); >+ ASSERT(callDOMGetterData->customAccessorGetter); > >- callDOMGetterData->domJIT = domJIT; >- callDOMGetterData->snippet = callDOMGetterSnippet.ptr(); >+ if (const auto* domJIT = domAttribute.domJIT) { >+ callDOMGetterData->domJIT = domJIT; >+ Ref<DOMJIT::CallDOMGetterSnippet> snippet = domJIT->compiler()(); >+ callDOMGetterData->snippet = snippet.ptr(); >+ m_graph.m_domJITSnippets.append(WTFMove(snippet)); >+ } >+ DOMJIT::CallDOMGetterSnippet* callDOMGetterSnippet = callDOMGetterData->snippet; > callDOMGetterData->identifierNumber = identifierNumber; > > Node* callDOMGetterNode = nullptr; > // GlobalObject of thisNode is always used to create a DOMWrapper. >- if (callDOMGetterSnippet->requireGlobalObject) { >+ if (callDOMGetterSnippet && callDOMGetterSnippet->requireGlobalObject) { > Node* globalObject = addToGraph(GetGlobalObject, thisNode); > callDOMGetterNode = addToGraph(CallDOMGetter, OpInfo(callDOMGetterData), OpInfo(prediction), thisNode, globalObject); > } else >@@ -3657,7 +3662,7 @@ void ByteCodeParser::handleGetById( > ASSERT(getByIdStatus.numVariants() == 1); > ASSERT(!getByIdStatus.makesCalls()); > GetByIdVariant variant = getByIdStatus[0]; >- ASSERT(variant.domJIT()); >+ ASSERT(variant.domAttribute()); > if (handleDOMJITGetter(destinationOperand, variant, base, identifierNumber, prediction)) { > if (m_graph.compilation()) > m_graph.compilation()->noticeInlinedGetById(); >diff --git a/Source/JavaScriptCore/dfg/DFGClobberize.h b/Source/JavaScriptCore/dfg/DFGClobberize.h >index bd6e71379fa3a0b0155bd0844bb460ed5d206387..86b1c6cfdc9d0fa7f6a72f41859d19ddfaba3ee3 100644 >--- a/Source/JavaScriptCore/dfg/DFGClobberize.h >+++ b/Source/JavaScriptCore/dfg/DFGClobberize.h >@@ -993,6 +993,11 @@ void clobberize(Graph& graph, Node* node, const ReadFunctor& read, const WriteFu > > case CallDOMGetter: { > DOMJIT::CallDOMGetterSnippet* snippet = node->callDOMGetterData()->snippet; >+ if (!snippet) { >+ read(World); >+ write(Heap); >+ return; >+ } > DOMJIT::Effect effect = snippet->effect; > if (effect.reads) { > if (effect.reads == DOMJIT::HeapRange::top()) >@@ -1009,7 +1014,7 @@ void clobberize(Graph& graph, Node* node, const ReadFunctor& read, const WriteFu > if (effect.def != DOMJIT::HeapRange::top()) { > DOMJIT::HeapRange range = effect.def; > if (range == DOMJIT::HeapRange::none()) >- def(PureValue(node, node->callDOMGetterData()->domJIT)); >+ def(PureValue(node, bitwise_cast<uintptr_t>(node->callDOMGetterData()->customAccessorGetter))); > else { > // Def with heap location. We do not include "GlobalObject" for that since this information is included in the base node. > // We only see the DOMJIT getter here. So just including "base" is ok. >diff --git a/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp b/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp >index 8edcfab866f595d8780eb3f17b36f7b3d6f8d3f6..47401a97bd623575b30ad31a8c56649ad6a0d63a 100644 >--- a/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp >+++ b/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp >@@ -1885,7 +1885,7 @@ class FixupPhase : public Phase { > case CallDOMGetter: { > DOMJIT::CallDOMGetterSnippet* snippet = node->callDOMGetterData()->snippet; > fixEdge<CellUse>(node->child1()); // DOM. >- if (snippet->requireGlobalObject) >+ if (snippet && snippet->requireGlobalObject) > fixEdge<KnownCellUse>(node->child2()); // GlobalObject. > break; > } >diff --git a/Source/JavaScriptCore/dfg/DFGNode.h b/Source/JavaScriptCore/dfg/DFGNode.h >index 0722652180f538c33e3de723e86d8855e0769ccf..6798b7f5ffcfc60e32e548badf548a2a22b1fca1 100644 >--- a/Source/JavaScriptCore/dfg/DFGNode.h >+++ b/Source/JavaScriptCore/dfg/DFGNode.h >@@ -239,7 +239,8 @@ struct StackAccessData { > }; > > struct CallDOMGetterData { >- DOMJIT::GetterSetter* domJIT { nullptr }; >+ PropertySlot::GetValueFunc customAccessorGetter { nullptr }; >+ const DOMJIT::GetterSetter* domJIT { nullptr }; > DOMJIT::CallDOMGetterSnippet* snippet { nullptr }; > unsigned identifierNumber { 0 }; > }; >diff --git a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp >index 2f1b5810e48503b8dc0d4b044eae493eccbe22ad..69e163570e7b4c71081f863fe59148a60782df35 100644 >--- a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp >+++ b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp >@@ -7870,6 +7870,24 @@ void SpeculativeJIT::compileCallDOM(Node* node) > void SpeculativeJIT::compileCallDOMGetter(Node* node) > { > DOMJIT::CallDOMGetterSnippet* snippet = node->callDOMGetterData()->snippet; >+ if (!snippet) { >+ auto* getter = node->callDOMGetterData()->customAccessorGetter; >+ SpeculateCellOperand base(this, node->child1()); >+ JSValueRegsTemporary result(this); >+ >+ JSValueRegs resultRegs = result.regs(); >+ GPRReg baseGPR = base.gpr(); >+ >+ flushRegisters(); >+#if USE(JSVALUE64) >+ callCustomGetter(bitwise_cast<J_JITOperation_EJI>(getter), resultRegs, baseGPR, identifierUID(node->callDOMGetterData()->identifierNumber)); >+#else >+ callCustomGetter(bitwise_cast<J_JITOperation_EJI>(getter), resultRegs, TrustedImm32(JSValue::CellTag), baseGPR, identifierUID(node->callDOMGetterData()->identifierNumber)); >+#endif >+ m_jit.exceptionCheck(); >+ jsValueResult(resultRegs, node); >+ return; >+ } > > Vector<GPRReg> gpScratch; > Vector<FPRReg> fpScratch; >diff --git a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h >index d3c8b842211f00ba168498c9e7b3e40881ce3fc6..d22f229c5f9851169149ff19720424664531a84a 100644 >--- a/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h >+++ b/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h >@@ -1907,6 +1907,17 @@ class SpeculativeJIT { > m_jit.setupArgumentsWithExecState(arg1.gpr()); > return appendCallSetResult(operation, result); > } >+ >+ JITCompiler::Call callCustomGetter(J_JITOperation_EJI function, JSValueRegs result, GPRReg arg1, UniquedStringImpl* uid) >+ { >+ m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(uid)); >+ m_jit.storePtr(GPRInfo::callFrameRegister, &m_jit.vm()->topCallFrame); >+ m_jit.emitStoreCodeOrigin(m_currentNode->origin.semantic); >+ JITCompiler::Call call = m_jit.appendCall(function); >+ if (result.payloadGPR() != InvalidGPRReg) >+ m_jit.move(GPRInfo::returnValueGPR, result.payloadGPR()); >+ return call; >+ } > #else // USE(JSVALUE32_64) > JITCompiler::Call callOperation(Z_JITOperation_EOJ operation, GPRReg result, GPRReg arg1, JSValueRegs arg2) > { >@@ -2440,6 +2451,16 @@ class SpeculativeJIT { > m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR()); > return appendCallSetResult(operation, result); > } >+ >+ JITCompiler::Call callCustomGetter(J_JITOperation_EJI function, JSValueRegs result, TrustedImm32 arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid) >+ { >+ m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, TrustedImmPtr(uid)); >+ m_jit.storePtr(GPRInfo::callFrameRegister, &m_jit.vm()->topCallFrame); >+ m_jit.emitStoreCodeOrigin(m_currentNode->origin.semantic); >+ JITCompiler::Call call = m_jit.appendCall(function); >+ m_jit.setupResults(result.payloadGPR(), result.tagGPR()); >+ return call; >+ } > #endif // USE(JSVALUE32_64) > > #if !defined(NDEBUG) && !CPU(ARM) && !CPU(MIPS) >diff --git a/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h b/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h >index 2cf3f3c7b2e1b040d9645281d8b2fa7c5a8eec88..4c2f7ab08be68b34daada66afee36678cb2c303b 100644 >--- a/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h >+++ b/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h >@@ -34,32 +34,24 @@ namespace JSC { namespace DOMJIT { > > class GetterSetter { > public: >- typedef PropertySlot::GetValueFunc CustomGetter; >- typedef PutPropertySlot::PutValueFunc CustomSetter; >+ using CustomGetter = PropertySlot::GetValueFunc; >+ using CustomSetter = PutPropertySlot::PutValueFunc; >+ using SnippetCompiler = Ref<DOMJIT::CallDOMGetterSnippet>(*)(); > >- GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo, SpeculatedType resultType) >+ constexpr GetterSetter(CustomGetter getter, SnippetCompiler compiler, SpeculatedType resultType) > : m_getter(getter) >- , m_setter(setter) >- , m_thisClassInfo(classInfo) >+ , m_compiler(compiler) > , m_resultType(resultType) > { > } > >- virtual ~GetterSetter() { } >- >- CustomGetter getter() const { return m_getter; } >- CustomSetter setter() const { return m_setter; } >- const ClassInfo* thisClassInfo() const { return m_thisClassInfo; } >- SpeculatedType resultType() const { return m_resultType; } >- >-#if ENABLE(JIT) >- virtual Ref<CallDOMGetterSnippet> callDOMGetter() = 0; >-#endif >+ constexpr CustomGetter getter() const { return m_getter; } >+ constexpr SnippetCompiler compiler() const { return m_compiler; } >+ constexpr SpeculatedType resultType() const { return m_resultType; } > > private: > CustomGetter m_getter; >- CustomSetter m_setter; >- const ClassInfo* m_thisClassInfo; >+ SnippetCompiler m_compiler; > SpeculatedType m_resultType; > }; > >diff --git a/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp b/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp >index bd04d577530185cb24cf8b9df8e33a2f26056dc0..26d8ac9e5b70a55820a0392b10fad34bdc1db42d 100644 >--- a/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp >+++ b/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp >@@ -10330,6 +10330,15 @@ class LowerDFGToB3 { > void compileCallDOMGetter() > { > DOMJIT::CallDOMGetterSnippet* domJIT = m_node->callDOMGetterData()->snippet; >+ if (!domJIT) { >+ // The following function is not an operation: we directly call a custom accessor getter. >+ // Since the getter does not have code setting topCallFrame, As is the same to IC, we should set topCallFrame in caller side. >+ m_out.storePtr(m_callFrame, m_out.absolute(&vm().topCallFrame)); >+ setJSValue( >+ vmCall(Int64, m_out.operation(m_node->callDOMGetterData()->customAccessorGetter), >+ m_callFrame, lowCell(m_node->child1()), m_out.constIntPtr(m_graph.identifiers()[m_node->callDOMGetterData()->identifierNumber]))); >+ return; >+ } > > Edge& baseEdge = m_node->child1(); > LValue base = lowCell(baseEdge); >diff --git a/Source/JavaScriptCore/jit/Repatch.cpp b/Source/JavaScriptCore/jit/Repatch.cpp >index 7a5aa78512f497f97652b71a318bfa234c009d95..1fe528c81f264e19079e7516776100b60f1c8a3d 100644 >--- a/Source/JavaScriptCore/jit/Repatch.cpp >+++ b/Source/JavaScriptCore/jit/Repatch.cpp >@@ -277,9 +277,9 @@ static InlineCacheAction tryCacheGetByID(ExecState* exec, JSValue baseValue, con > if (slot.isCacheableGetter()) > getter = jsDynamicCast<JSFunction*>(vm, slot.getterSetter()->getter()); > >- DOMJIT::GetterSetter* domJIT = nullptr; >- if (slot.isCacheableCustom() && slot.domJIT()) >- domJIT = slot.domJIT(); >+ std::optional<DOMAttributeAnnotation> domAttribute; >+ if (slot.isCacheableCustom() && slot.domAttribute()) >+ domAttribute = slot.domAttribute(); > > if (kind == GetByIDKind::Try) { > AccessCase::AccessType type; >@@ -308,15 +308,14 @@ static InlineCacheAction tryCacheGetByID(ExecState* exec, JSValue baseValue, con > else > type = AccessCase::CustomValueGetter; > >- // we don't emit IC for DOMJIT when op is get_by_id_with_this >- if (Options::useDOMJIT() && kind == GetByIDKind::WithThis && type == AccessCase::CustomAccessorGetter && domJIT) >+ if (kind == GetByIDKind::WithThis && type == AccessCase::CustomAccessorGetter && domAttribute) > return GiveUpOnCache; > > newCase = GetterSetterAccessCase::create( > vm, codeBlock, type, offset, structure, conditionSet, loadTargetFromProxy, > slot.watchpointSet(), slot.isCacheableCustom() ? slot.customGetter() : nullptr, > slot.isCacheableCustom() ? slot.slotBase() : nullptr, >- domJIT); >+ domAttribute); > } > } > } >diff --git a/Source/JavaScriptCore/jsc.cpp b/Source/JavaScriptCore/jsc.cpp >index 16a7942b8235e2fdf5b5cbfff949b8a797951789..15b0b607f20b718acdb7d79e8b6e832704c30dab 100644 >--- a/Source/JavaScriptCore/jsc.cpp >+++ b/Source/JavaScriptCore/jsc.cpp >@@ -30,6 +30,7 @@ > #include "CodeBlock.h" > #include "Completion.h" > #include "ConfigFile.h" >+#include "DOMAttributeGetterSetter.h" > #include "DOMJITGetterSetter.h" > #include "Disassembler.h" > #include "Exception.h" >@@ -646,10 +647,17 @@ class DOMJITGetter : public DOMJITNode { > return getter; > } > >- class DOMJITNodeDOMJIT : public DOMJIT::GetterSetter { >+ class DOMJITAttribute : public DOMJIT::GetterSetter { > public: >- DOMJITNodeDOMJIT() >- : DOMJIT::GetterSetter(DOMJITGetter::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only) >+ constexpr DOMJITAttribute() >+ : DOMJIT::GetterSetter( >+ DOMJITGetter::customGetter, >+#if ENABLE(JIT) >+ &callDOMGetter, >+#else >+ nullptr, >+#endif >+ SpecInt32Only) > { > } > >@@ -660,7 +668,7 @@ class DOMJITGetter : public DOMJITNode { > return JSValue::encode(jsNumber(static_cast<DOMJITGetter*>(pointer)->value())); > } > >- Ref<DOMJIT::CallDOMGetterSnippet> callDOMGetter() override >+ static Ref<DOMJIT::CallDOMGetterSnippet> callDOMGetter() > { > Ref<DOMJIT::CallDOMGetterSnippet> snippet = DOMJIT::CallDOMGetterSnippet::create(); > snippet->requireGlobalObject = false; >@@ -676,33 +684,28 @@ class DOMJITGetter : public DOMJITNode { > #endif > }; > >- static DOMJIT::GetterSetter* domJITNodeGetterSetter() >- { >- static NeverDestroyed<DOMJITNodeDOMJIT> graph; >- return &graph.get(); >- } >- > private: >- void finishCreation(VM& vm) >- { >- Base::finishCreation(vm); >- DOMJIT::GetterSetter* domJIT = domJITNodeGetterSetter(); >- CustomGetterSetter* customGetterSetter = CustomGetterSetter::create(vm, domJIT->getter(), domJIT->setter(), domJIT); >- putDirectCustomAccessor(vm, Identifier::fromString(&vm, "customGetter"), customGetterSetter, ReadOnly | CustomAccessor); >- } >+ void finishCreation(VM&); > > static EncodedJSValue customGetter(ExecState* exec, EncodedJSValue thisValue, PropertyName) > { > VM& vm = exec->vm(); >- auto scope = DECLARE_THROW_SCOPE(vm); >- > DOMJITNode* thisObject = jsDynamicCast<DOMJITNode*>(vm, JSValue::decode(thisValue)); >- if (!thisObject) >- return throwVMTypeError(exec, scope); >+ ASSERT(thisObject); > return JSValue::encode(jsNumber(thisObject->value())); > } > }; > >+static const DOMJITGetter::DOMJITAttribute DOMJITGetterDOMJIT; >+ >+void DOMJITGetter::finishCreation(VM& vm) >+{ >+ Base::finishCreation(vm); >+ const DOMJIT::GetterSetter* domJIT = &DOMJITGetterDOMJIT; >+ auto* customGetterSetter = DOMAttributeGetterSetter::create(vm, domJIT->getter(), nullptr, DOMAttributeAnnotation { DOMJITNode::info(), domJIT }); >+ putDirectCustomAccessor(vm, Identifier::fromString(&vm, "customGetter"), customGetterSetter, ReadOnly | CustomAccessor); >+} >+ > class DOMJITGetterComplex : public DOMJITNode { > public: > DOMJITGetterComplex(VM& vm, Structure* structure) >@@ -726,10 +729,17 @@ class DOMJITGetterComplex : public DOMJITNode { > return getter; > } > >- class DOMJITNodeDOMJIT : public DOMJIT::GetterSetter { >+ class DOMJITAttribute : public DOMJIT::GetterSetter { > public: >- DOMJITNodeDOMJIT() >- : DOMJIT::GetterSetter(DOMJITGetterComplex::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only) >+ constexpr DOMJITAttribute() >+ : DOMJIT::GetterSetter( >+ DOMJITGetterComplex::customGetter, >+#if ENABLE(JIT) >+ &callDOMGetter, >+#else >+ nullptr, >+#endif >+ SpecInt32Only) > { > } > >@@ -748,42 +758,29 @@ class DOMJITGetterComplex : public DOMJITNode { > return JSValue::encode(jsNumber(object->value())); > } > >- Ref<DOMJIT::CallDOMGetterSnippet> callDOMGetter() override >+ static Ref<DOMJIT::CallDOMGetterSnippet> callDOMGetter() > { >- RefPtr<DOMJIT::CallDOMGetterSnippet> snippet = DOMJIT::CallDOMGetterSnippet::create(); >+ Ref<DOMJIT::CallDOMGetterSnippet> snippet = DOMJIT::CallDOMGetterSnippet::create(); > static_assert(GPRInfo::numberOfRegisters >= 4, "Number of registers should be larger or equal to 4."); >- snippet->numGPScratchRegisters = GPRInfo::numberOfRegisters - 4; >+ unsigned numGPScratchRegisters = GPRInfo::numberOfRegisters - 4; >+ snippet->numGPScratchRegisters = numGPScratchRegisters; > snippet->numFPScratchRegisters = 3; > snippet->setGenerator([=](CCallHelpers& jit, SnippetParams& params) { > JSValueRegs results = params[0].jsValueRegs(); > GPRReg domGPR = params[1].gpr(); >- for (unsigned i = 0; i < snippet->numGPScratchRegisters; ++i) >+ for (unsigned i = 0; i < numGPScratchRegisters; ++i) > jit.move(CCallHelpers::TrustedImm32(42), params.gpScratch(i)); > > params.addSlowPathCall(jit.jump(), jit, slowCall, results, domGPR); > return CCallHelpers::JumpList(); >- > }); >- return *snippet.get(); >+ return snippet; > } > #endif > }; > >- static DOMJIT::GetterSetter* domJITNodeGetterSetter() >- { >- static NeverDestroyed<DOMJITNodeDOMJIT> graph; >- return &graph.get(); >- } >- > private: >- void finishCreation(VM& vm, JSGlobalObject* globalObject) >- { >- Base::finishCreation(vm); >- DOMJIT::GetterSetter* domJIT = domJITNodeGetterSetter(); >- CustomGetterSetter* customGetterSetter = CustomGetterSetter::create(vm, domJIT->getter(), domJIT->setter(), domJIT); >- putDirectCustomAccessor(vm, Identifier::fromString(&vm, "customGetter"), customGetterSetter, ReadOnly | CustomAccessor); >- putDirectNativeFunction(vm, globalObject, Identifier::fromString(&vm, "enableException"), 0, functionEnableException, NoIntrinsic, 0); >- } >+ void finishCreation(VM&, JSGlobalObject*); > > static EncodedJSValue JSC_HOST_CALL functionEnableException(ExecState* exec) > { >@@ -799,19 +796,27 @@ class DOMJITGetterComplex : public DOMJITNode { > VM& vm = exec->vm(); > auto scope = DECLARE_THROW_SCOPE(vm); > >- auto* thisObject = jsDynamicCast<DOMJITNode*>(vm, JSValue::decode(thisValue)); >- if (!thisObject) >- return throwVMTypeError(exec, scope); >- if (auto* domjitGetterComplex = jsDynamicCast<DOMJITGetterComplex*>(vm, JSValue::decode(thisValue))) { >- if (domjitGetterComplex->m_enableException) >- return JSValue::encode(throwException(exec, scope, createError(exec, ASCIILiteral("DOMJITGetterComplex slow call exception")))); >- } >+ auto* thisObject = jsDynamicCast<DOMJITGetterComplex*>(vm, JSValue::decode(thisValue)); >+ ASSERT(thisObject); >+ if (thisObject->m_enableException) >+ return JSValue::encode(throwException(exec, scope, createError(exec, ASCIILiteral("DOMJITGetterComplex slow call exception")))); > return JSValue::encode(jsNumber(thisObject->value())); > } > > bool m_enableException { false }; > }; > >+static const DOMJITGetterComplex::DOMJITAttribute DOMJITGetterComplexDOMJIT; >+ >+void DOMJITGetterComplex::finishCreation(VM& vm, JSGlobalObject* globalObject) >+{ >+ Base::finishCreation(vm); >+ const DOMJIT::GetterSetter* domJIT = &DOMJITGetterComplexDOMJIT; >+ auto* customGetterSetter = DOMAttributeGetterSetter::create(vm, domJIT->getter(), nullptr, DOMAttributeAnnotation { DOMJITGetterComplex::info(), domJIT }); >+ putDirectCustomAccessor(vm, Identifier::fromString(&vm, "customGetter"), customGetterSetter, ReadOnly | CustomAccessor); >+ putDirectNativeFunction(vm, globalObject, Identifier::fromString(&vm, "enableException"), 0, functionEnableException, NoIntrinsic, 0); >+} >+ > class DOMJITFunctionObject : public DOMJITNode { > public: > DOMJITFunctionObject(VM& vm, Structure* structure) >diff --git a/Source/JavaScriptCore/runtime/CustomGetterSetter.h b/Source/JavaScriptCore/runtime/CustomGetterSetter.h >index 44b7306a589959af2fbe36d15100664d4a068d23..7a105673c9513738ab68a8839e40a543a5016ee9 100644 >--- a/Source/JavaScriptCore/runtime/CustomGetterSetter.h >+++ b/Source/JavaScriptCore/runtime/CustomGetterSetter.h >@@ -31,11 +31,8 @@ > #include "Structure.h" > > namespace JSC { >-namespace DOMJIT { >-class GetterSetter; >-} > >-class CustomGetterSetter final : public JSCell { >+class CustomGetterSetter : public JSCell { > public: > typedef JSCell Base; > static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal; >@@ -43,16 +40,15 @@ class CustomGetterSetter final : public JSCell { > typedef PropertySlot::GetValueFunc CustomGetter; > typedef PutPropertySlot::PutValueFunc CustomSetter; > >- static CustomGetterSetter* create(VM& vm, CustomGetter customGetter, CustomSetter customSetter, DOMJIT::GetterSetter* domJIT = nullptr) >+ static CustomGetterSetter* create(VM& vm, CustomGetter customGetter, CustomSetter customSetter) > { >- CustomGetterSetter* customGetterSetter = new (NotNull, allocateCell<CustomGetterSetter>(vm.heap)) CustomGetterSetter(vm, customGetter, customSetter, domJIT); >+ CustomGetterSetter* customGetterSetter = new (NotNull, allocateCell<CustomGetterSetter>(vm.heap)) CustomGetterSetter(vm, vm.customGetterSetterStructure.get(), customGetter, customSetter); > customGetterSetter->finishCreation(vm); > return customGetterSetter; > } > > CustomGetterSetter::CustomGetter getter() const { return m_getter; } > CustomGetterSetter::CustomSetter setter() const { return m_setter; } >- DOMJIT::GetterSetter* domJIT() const { return m_domJIT; } > > static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) > { >@@ -61,18 +57,17 @@ class CustomGetterSetter final : public JSCell { > > DECLARE_EXPORT_INFO; > >-private: >- CustomGetterSetter(VM& vm, CustomGetter getter, CustomSetter setter, DOMJIT::GetterSetter* domJIT) >- : JSCell(vm, vm.customGetterSetterStructure.get()) >+protected: >+ CustomGetterSetter(VM& vm, Structure* structure, CustomGetter getter, CustomSetter setter) >+ : JSCell(vm, structure) > , m_getter(getter) > , m_setter(setter) >- , m_domJIT(domJIT) > { > } > >+private: > CustomGetter m_getter; > CustomSetter m_setter; >- DOMJIT::GetterSetter* m_domJIT; > }; > > JS_EXPORT_PRIVATE bool callCustomSetter(ExecState*, CustomGetterSetter::CustomSetter, bool isAccessor, JSValue thisValue, JSValue); >diff --git a/Source/JavaScriptCore/runtime/DOMAnnotation.h b/Source/JavaScriptCore/runtime/DOMAnnotation.h >new file mode 100644 >index 0000000000000000000000000000000000000000..3b3733ad11af8489428b8a71c84ac46ae12b3a2e >--- /dev/null >+++ b/Source/JavaScriptCore/runtime/DOMAnnotation.h >@@ -0,0 +1,51 @@ >+/* >+ * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#pragma once >+ >+namespace JSC { >+ >+struct ClassInfo; >+ >+namespace DOMJIT { >+class GetterSetter; >+} >+ >+struct DOMAttributeAnnotation { >+ const ClassInfo* classInfo; >+ const DOMJIT::GetterSetter* domJIT; >+}; >+ >+inline bool operator==(const DOMAttributeAnnotation& left, const DOMAttributeAnnotation& right) >+{ >+ return left.classInfo == right.classInfo && left.domJIT == right.domJIT; >+} >+ >+inline bool operator!=(const DOMAttributeAnnotation& left, const DOMAttributeAnnotation& right) >+{ >+ return !(left == right); >+} >+ >+} // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/DOMAttributeGetterSetter.cpp b/Source/JavaScriptCore/runtime/DOMAttributeGetterSetter.cpp >new file mode 100644 >index 0000000000000000000000000000000000000000..505f6c4b6544af636bdc44fb0f5dc593367b1b98 >--- /dev/null >+++ b/Source/JavaScriptCore/runtime/DOMAttributeGetterSetter.cpp >@@ -0,0 +1,35 @@ >+/* >+ * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#include "config.h" >+#include "DOMAttributeGetterSetter.h" >+ >+namespace JSC { >+ >+STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(DOMAttributeGetterSetter); >+ >+const ClassInfo DOMAttributeGetterSetter::s_info = { "DOMAttributeGetterSetter", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(DOMAttributeGetterSetter) }; >+ >+} // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/DOMAttributeGetterSetter.h b/Source/JavaScriptCore/runtime/DOMAttributeGetterSetter.h >new file mode 100644 >index 0000000000000000000000000000000000000000..4b291926500ed056bdc80168da0ab90a7930e13e >--- /dev/null >+++ b/Source/JavaScriptCore/runtime/DOMAttributeGetterSetter.h >@@ -0,0 +1,73 @@ >+/* >+ * Copyright (C) 2017 Yusuke Suzuki <utatane.tea@gmail.com>. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#pragma once >+ >+#include "CustomGetterSetter.h" >+#include "DOMAnnotation.h" >+ >+namespace JSC { >+namespace DOMJIT { >+ >+class GetterSetter; >+ >+} >+ >+class DOMAttributeGetterSetter final : public CustomGetterSetter { >+public: >+ using Base = CustomGetterSetter; >+ >+ static DOMAttributeGetterSetter* create(VM& vm, CustomGetter customGetter, CustomSetter customSetter, DOMAttributeAnnotation domAttribute) >+ { >+ DOMAttributeGetterSetter* customGetterSetter = new (NotNull, allocateCell<DOMAttributeGetterSetter>(vm.heap)) DOMAttributeGetterSetter(vm, customGetter, customSetter, domAttribute); >+ customGetterSetter->finishCreation(vm); >+ return customGetterSetter; >+ } >+ >+ DOMAttributeAnnotation domAttribute() const { return m_domAttribute; } >+ >+ static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) >+ { >+ return Structure::create(vm, globalObject, prototype, TypeInfo(CustomGetterSetterType, StructureFlags), info()); >+ } >+ >+ DECLARE_EXPORT_INFO; >+ >+private: >+ DOMAttributeGetterSetter(VM& vm, CustomGetter getter, CustomSetter setter, DOMAttributeAnnotation domAttribute) >+ : Base(vm, vm.domAttributeGetterSetterStructure.get(), getter, setter) >+ , m_domAttribute(domAttribute) >+ { >+ } >+ >+ DOMAttributeAnnotation m_domAttribute; >+}; >+ >+inline bool isDOMAttributeGetterSetter(VM& vm, JSCell* cell) >+{ >+ return cell->classInfo(vm) == DOMAttributeGetterSetter::info(); >+} >+ >+} // namespace JSC >diff --git a/Source/JavaScriptCore/runtime/Error.cpp b/Source/JavaScriptCore/runtime/Error.cpp >index 6415736709bb5ee7dc9f7145d767b7279b614ad7..fd0a8a10b96af6a228ec2445b229c8dc5041f55d 100644 >--- a/Source/JavaScriptCore/runtime/Error.cpp >+++ b/Source/JavaScriptCore/runtime/Error.cpp >@@ -258,6 +258,11 @@ JSObject* throwSyntaxError(ExecState* exec, ThrowScope& scope, const String& mes > return throwException(exec, scope, createSyntaxError(exec, message)); > } > >+JSValue throwDOMAttributeGetterTypeError(ExecState* exec, ThrowScope& scope, const ClassInfo* classInfo, PropertyName propertyName) >+{ >+ return throwTypeError(exec, scope, makeString("The ", classInfo->className, '.', String(propertyName.uid()), " getter can only be used on instances of ", classInfo->className)); >+} >+ > JSObject* createError(ExecState* exec, const String& message) > { > return createError(exec, message, nullptr); >diff --git a/Source/JavaScriptCore/runtime/Error.h b/Source/JavaScriptCore/runtime/Error.h >index 330186fcb271fc7dbb24e077a1ca13cd49dd2be5..8adc299b38c3998f10a371d27265bcadb154579a 100644 >--- a/Source/JavaScriptCore/runtime/Error.h >+++ b/Source/JavaScriptCore/runtime/Error.h >@@ -90,6 +90,7 @@ JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, ThrowScope&, const String > JS_EXPORT_PRIVATE JSObject* throwSyntaxError(ExecState*, ThrowScope&); > JS_EXPORT_PRIVATE JSObject* throwSyntaxError(ExecState*, ThrowScope&, const String& errorMessage); > inline JSObject* throwRangeError(ExecState* state, ThrowScope& scope, const String& errorMessage) { return throwException(state, scope, createRangeError(state, errorMessage)); } >+JS_EXPORT_PRIVATE JSValue throwDOMAttributeGetterTypeError(ExecState*, ThrowScope&, const ClassInfo*, PropertyName); > > // Convenience wrappers, wrap result as an EncodedJSValue. > inline void throwVMError(ExecState* exec, ThrowScope& scope, Exception* exception) { throwException(exec, scope, exception); } >@@ -99,6 +100,7 @@ inline EncodedJSValue throwVMTypeError(ExecState* exec, ThrowScope& scope) { ret > inline EncodedJSValue throwVMTypeError(ExecState* exec, ThrowScope& scope, ASCIILiteral errorMessage) { return JSValue::encode(throwTypeError(exec, scope, errorMessage)); } > inline EncodedJSValue throwVMTypeError(ExecState* exec, ThrowScope& scope, const String& errorMessage) { return JSValue::encode(throwTypeError(exec, scope, errorMessage)); } > inline EncodedJSValue throwVMRangeError(ExecState* state, ThrowScope& scope, const String& errorMessage) { return JSValue::encode(throwRangeError(state, scope, errorMessage)); } >+inline EncodedJSValue throwVMDOMAttributeGetterTypeError(ExecState* state, ThrowScope& scope, const ClassInfo* classInfo, PropertyName propertyName) { return JSValue::encode(throwDOMAttributeGetterTypeError(state, scope, classInfo, propertyName)); } > > class StrictModeTypeErrorFunction : public InternalFunction { > private: >diff --git a/Source/JavaScriptCore/runtime/JSCustomGetterSetterFunction.cpp b/Source/JavaScriptCore/runtime/JSCustomGetterSetterFunction.cpp >index a2f3edcd7ce7fe21f43447b37f3bf4f9f831a4b0..a0c0188e2f14519f6b8d7f963d974c5d1da32f66 100644 >--- a/Source/JavaScriptCore/runtime/JSCustomGetterSetterFunction.cpp >+++ b/Source/JavaScriptCore/runtime/JSCustomGetterSetterFunction.cpp >@@ -37,19 +37,27 @@ const ClassInfo JSCustomGetterSetterFunction::s_info = { "Function", &Base::s_in > > EncodedJSValue JSC_HOST_CALL JSCustomGetterSetterFunction::customGetterSetterFunctionCall(ExecState* exec) > { >+ VM& vm = exec->vm(); >+ auto scope = DECLARE_THROW_SCOPE(vm); >+ > JSCustomGetterSetterFunction* customGetterSetterFunction = jsCast<JSCustomGetterSetterFunction*>(exec->jsCallee()); > CustomGetterSetter* customGetterSetter = customGetterSetterFunction->customGetterSetter(); >+ JSValue thisValue = exec->thisValue(); > > if (customGetterSetterFunction->isSetter()) { > CustomGetterSetter::CustomSetter setter = customGetterSetter->setter(); > ASSERT(setter); >- callCustomSetter(exec, setter, true, exec->thisValue(), exec->argument(0)); >+ callCustomSetter(exec, setter, true, thisValue, exec->argument(0)); > return JSValue::encode(jsUndefined()); > } > >- CustomGetterSetter::CustomGetter getter = customGetterSetter->getter(); >- ASSERT(getter); >- return getter(exec, JSValue::encode(exec->thisValue()), customGetterSetterFunction->propertyName()); >+ if (isDOMAttributeGetterSetter(vm, customGetterSetter)) { >+ auto domAttribute = jsCast<DOMAttributeGetterSetter*>(customGetterSetter)->domAttribute(); >+ if (!thisValue.inherits(vm, domAttribute.classInfo)) >+ return throwVMDOMAttributeGetterTypeError(exec, scope, domAttribute.classInfo, customGetterSetterFunction->propertyName()); >+ } >+ >+ return customGetterSetter->getter()(exec, JSValue::encode(thisValue), customGetterSetterFunction->propertyName()); > } > > JSCustomGetterSetterFunction::JSCustomGetterSetterFunction(VM& vm, JSGlobalObject* globalObject, Structure* structure, const Type type, const PropertyName& propertyName) >diff --git a/Source/JavaScriptCore/runtime/JSObject.cpp b/Source/JavaScriptCore/runtime/JSObject.cpp >index 77f473613520b5ecf888d1e2518e72d98f948ec1..cebb992a1d9cd39878eccef382dd0ec016e3e234 100644 >--- a/Source/JavaScriptCore/runtime/JSObject.cpp >+++ b/Source/JavaScriptCore/runtime/JSObject.cpp >@@ -791,8 +791,8 @@ bool JSObject::putInlineSlow(ExecState* exec, PropertyName propertyName, JSValue > } > if (!obj->staticPropertiesReified()) { > if (obj->classInfo(vm)->hasStaticSetterOrReadonlyProperties()) { >- if (auto* entry = obj->findPropertyHashEntry(vm, propertyName)) >- return putEntry(exec, entry, obj, this, propertyName, value, slot); >+ if (auto entry = obj->findPropertyHashEntry(vm, propertyName)) >+ return putEntry(exec, entry->table->classForThis, entry->value, obj, this, propertyName, value, slot); > } > } > if (obj->type() == ProxyObjectType && propertyName != vm.propertyNames->underscoreProto) { >@@ -1799,11 +1799,11 @@ bool JSObject::deleteProperty(JSCell* cell, ExecState* exec, PropertyName proper > unsigned attributes; > > if (!thisObject->staticPropertiesReified()) { >- if (auto* entry = thisObject->findPropertyHashEntry(vm, propertyName)) { >+ if (auto entry = thisObject->findPropertyHashEntry(vm, propertyName)) { > // If the static table contains a non-configurable (DontDelete) property then we can return early; > // if there is a property in the storage array it too must be non-configurable (the language does > // not allow repacement of a non-configurable property with a configurable one). >- if (entry->attributes() & DontDelete && vm.deletePropertyMode() != VM::DeletePropertyMode::IgnoreConfigurable) { >+ if (entry->value->attributes() & DontDelete && vm.deletePropertyMode() != VM::DeletePropertyMode::IgnoreConfigurable) { > ASSERT(!isValidOffset(thisObject->structure(vm)->get(vm, propertyName, attributes)) || attributes & DontDelete); > return false; > } >@@ -2002,22 +2002,22 @@ bool JSObject::getOwnStaticPropertySlot(VM& vm, PropertyName propertyName, Prope > { > for (auto* info = classInfo(vm); info; info = info->parentClass) { > if (auto* table = info->staticPropHashTable) { >- if (getStaticPropertySlotFromTable(vm, *table, this, propertyName, slot)) >+ if (getStaticPropertySlotFromTable(vm, table->classForThis, *table, this, propertyName, slot)) > return true; > } > } > return false; > } > >-const HashTableValue* JSObject::findPropertyHashEntry(VM& vm, PropertyName propertyName) const >+auto JSObject::findPropertyHashEntry(VM& vm, PropertyName propertyName) const -> std::optional<PropertyHashEntry> > { > for (const ClassInfo* info = classInfo(vm); info; info = info->parentClass) { > if (const HashTable* propHashTable = info->staticPropHashTable) { > if (const HashTableValue* entry = propHashTable->entry(propertyName)) >- return entry; >+ return PropertyHashEntry { propHashTable, entry }; > } > } >- return 0; >+ return std::nullopt; > } > > bool JSObject::hasInstance(ExecState* exec, JSValue value, JSValue hasInstanceValue) >@@ -2296,14 +2296,14 @@ void JSObject::reifyAllStaticProperties(ExecState* exec) > auto key = Identifier::fromString(&vm, value.m_key); > PropertyOffset offset = getDirectOffset(vm, key, attributes); > if (!isValidOffset(offset)) >- reifyStaticProperty(vm, key, value, *this); >+ reifyStaticProperty(vm, hashTable->classForThis, key, value, *this); > } > } > > structure(vm)->setStaticPropertiesReified(true); > } > >-NEVER_INLINE void JSObject::fillGetterPropertySlot(PropertySlot& slot, JSValue getterSetter, unsigned attributes, PropertyOffset offset) >+NEVER_INLINE void JSObject::fillGetterPropertySlot(PropertySlot& slot, JSCell* getterSetter, unsigned attributes, PropertyOffset offset) > { > if (structure()->isUncacheableDictionary()) { > slot.setGetterSlot(this, attributes, jsCast<GetterSetter*>(getterSetter)); >diff --git a/Source/JavaScriptCore/runtime/JSObject.h b/Source/JavaScriptCore/runtime/JSObject.h >index d35419a86fed23d7a9d357ba3d97d5022dc4330e..ed2dcd107a92fd5c5d62ff0a4dfe505b895f857f 100644 >--- a/Source/JavaScriptCore/runtime/JSObject.h >+++ b/Source/JavaScriptCore/runtime/JSObject.h >@@ -32,6 +32,7 @@ > #include "ClassInfo.h" > #include "CommonIdentifiers.h" > #include "CustomGetterSetter.h" >+#include "DOMAttributeGetterSetter.h" > #include "DeferGC.h" > #include "Heap.h" > #include "IndexingHeaderInlines.h" >@@ -1013,11 +1014,15 @@ class JSObject : public JSCell { > > bool getNonIndexPropertySlot(ExecState*, PropertyName, PropertySlot&); > bool getOwnNonIndexPropertySlot(VM&, Structure*, PropertyName, PropertySlot&); >- JS_EXPORT_PRIVATE void fillGetterPropertySlot(PropertySlot&, JSValue, unsigned, PropertyOffset); >- void fillCustomGetterPropertySlot(PropertySlot&, JSValue, unsigned, Structure*); >+ JS_EXPORT_PRIVATE void fillGetterPropertySlot(PropertySlot&, JSCell*, unsigned, PropertyOffset); >+ void fillCustomGetterPropertySlot(VM&, PropertySlot&, CustomGetterSetter*, unsigned, Structure*); > > JS_EXPORT_PRIVATE bool getOwnStaticPropertySlot(VM&, PropertyName, PropertySlot&); >- JS_EXPORT_PRIVATE const HashTableValue* findPropertyHashEntry(VM&, PropertyName) const; >+ struct PropertyHashEntry { >+ const HashTable* table; >+ const HashTableValue* value; >+ }; >+ std::optional<PropertyHashEntry> findPropertyHashEntry(VM&, PropertyName) const; > > bool putIndexedDescriptor(ExecState*, SparseArrayEntry*, const PropertyDescriptor&, PropertyDescriptor& old); > >@@ -1329,10 +1334,10 @@ ALWAYS_INLINE bool JSObject::getOwnNonIndexPropertySlot(VM& vm, Structure* struc > JSType type = cell->type(); > switch (type) { > case GetterSetterType: >- fillGetterPropertySlot(slot, value, attributes, offset); >+ fillGetterPropertySlot(slot, cell, attributes, offset); > return true; > case CustomGetterSetterType: >- fillCustomGetterPropertySlot(slot, value, attributes, structure); >+ fillCustomGetterPropertySlot(vm, slot, jsCast<CustomGetterSetter*>(cell), attributes, structure); > return true; > default: > break; >@@ -1343,16 +1348,21 @@ ALWAYS_INLINE bool JSObject::getOwnNonIndexPropertySlot(VM& vm, Structure* struc > return true; > } > >-ALWAYS_INLINE void JSObject::fillCustomGetterPropertySlot(PropertySlot& slot, JSValue customGetterSetter, unsigned attributes, Structure* structure) >+ALWAYS_INLINE void JSObject::fillCustomGetterPropertySlot(VM& vm, PropertySlot& slot, CustomGetterSetter* customGetterSetter, unsigned attributes, Structure* structure) > { >- if (structure->isUncacheableDictionary()) { >- slot.setCustom(this, attributes, jsCast<CustomGetterSetter*>(customGetterSetter)->getter()); >+ if (isDOMAttributeGetterSetter(vm, customGetterSetter)) { >+ auto* domAttribute = jsCast<DOMAttributeGetterSetter*>(customGetterSetter); >+ if (structure->isUncacheableDictionary()) >+ slot.setCustom(this, attributes, domAttribute->getter(), domAttribute->domAttribute()); >+ else >+ slot.setCacheableCustom(this, attributes, domAttribute->getter(), domAttribute->domAttribute()); > return; > } > >- // This access is cacheable because Structure requires an attributeChangedTransition >- // if this property stops being an accessor. >- slot.setCacheableCustom(this, attributes, jsCast<CustomGetterSetter*>(customGetterSetter)->getter(), jsCast<CustomGetterSetter*>(customGetterSetter)->domJIT()); >+ if (structure->isUncacheableDictionary()) >+ slot.setCustom(this, attributes, customGetterSetter->getter()); >+ else >+ slot.setCacheableCustom(this, attributes, customGetterSetter->getter()); > } > > // It may seem crazy to inline a function this large, especially a virtual function, >diff --git a/Source/JavaScriptCore/runtime/Lookup.cpp b/Source/JavaScriptCore/runtime/Lookup.cpp >index f40740e359d78bd128f4e6a41b8c61a47b90f46a..3005abbb44d7b01566f4782df36a86f552705517 100644 >--- a/Source/JavaScriptCore/runtime/Lookup.cpp >+++ b/Source/JavaScriptCore/runtime/Lookup.cpp >@@ -41,7 +41,7 @@ void reifyStaticAccessor(VM& vm, const HashTableValue& value, JSObject& thisObje > thisObject.putDirectNonIndexAccessor(vm, propertyName, accessor, attributesForStructure(value.attributes())); > } > >-bool setUpStaticFunctionSlot(VM& vm, const HashTableValue* entry, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot) >+bool setUpStaticFunctionSlot(VM& vm, const ClassInfo* classInfo, const HashTableValue* entry, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot) > { > ASSERT(thisObject->globalObject()); > ASSERT(entry->attributes() & BuiltinOrFunctionOrAccessorOrLazyProperty); >@@ -55,7 +55,7 @@ bool setUpStaticFunctionSlot(VM& vm, const HashTableValue* entry, JSObject* this > if (thisObject->staticPropertiesReified()) > return false; > >- reifyStaticProperty(vm, propertyName, *entry, *thisObject); >+ reifyStaticProperty(vm, classInfo, propertyName, *entry, *thisObject); > > offset = thisObject->getDirectOffset(vm, propertyName, attributes); > if (!isValidOffset(offset)) { >diff --git a/Source/JavaScriptCore/runtime/Lookup.h b/Source/JavaScriptCore/runtime/Lookup.h >index b627f7947246efeaf0a55c9ba07949801e11db14..b95b1453b75418c930fda2c6249ef74cb0ec82a4 100644 >--- a/Source/JavaScriptCore/runtime/Lookup.h >+++ b/Source/JavaScriptCore/runtime/Lookup.h >@@ -49,7 +49,6 @@ typedef PropertySlot::GetValueFunc GetFunction; > typedef PutPropertySlot::PutValueFunc PutFunction; > typedef FunctionExecutable* (*BuiltinGenerator)(VM&); > typedef JSValue (*LazyPropertyCallback)(VM&, JSObject*); >-typedef DOMJIT::GetterSetter* (*DOMJITGetterSetterGenerator)(void); > > // Hash table generated by the create_hash_table script. > struct HashTableValue { >@@ -88,7 +87,7 @@ struct HashTableValue { > GetFunction propertyGetter() const { ASSERT(!(m_attributes & BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant)); return reinterpret_cast<GetFunction>(m_values.value1); } > PutFunction propertyPutter() const { ASSERT(!(m_attributes & BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant)); return reinterpret_cast<PutFunction>(m_values.value2); } > >- DOMJIT::GetterSetter* domJIT() const { ASSERT(m_attributes & DOMJITAttribute); return reinterpret_cast<DOMJITGetterSetterGenerator>(m_values.value1)(); } >+ const DOMJIT::GetterSetter* domJIT() const { ASSERT(m_attributes & DOMJITAttribute); return reinterpret_cast<const DOMJIT::GetterSetter*>(m_values.value1); } > const DOMJIT::Signature* signature() const { ASSERT(m_attributes & DOMJITFunction); return reinterpret_cast<const DOMJIT::Signature*>(m_values.value2); } > > NativeFunction accessorGetter() const { ASSERT(m_attributes & Accessor); return reinterpret_cast<NativeFunction>(m_values.value1); } >@@ -109,6 +108,7 @@ struct HashTable { > int numberOfValues; > int indexMask; > bool hasSetterOrReadonlyProperties; >+ const ClassInfo* classForThis; // Used by DOMAttribute. Attribute accessors perform type check against this classInfo. > > const HashTableValue* values; // Fixed values generated by script. > const CompactHashIndex* index; >@@ -203,7 +203,7 @@ struct HashTable { > } > }; > >-JS_EXPORT_PRIVATE bool setUpStaticFunctionSlot(VM&, const HashTableValue*, JSObject* thisObject, PropertyName, PropertySlot&); >+JS_EXPORT_PRIVATE bool setUpStaticFunctionSlot(VM&, const ClassInfo*, const HashTableValue*, JSObject* thisObject, PropertyName, PropertySlot&); > JS_EXPORT_PRIVATE void reifyStaticAccessor(VM&, const HashTableValue&, JSObject& thisObject, PropertyName); > > inline BuiltinGenerator HashTableValue::builtinAccessorGetterGenerator() const >@@ -220,7 +220,7 @@ inline BuiltinGenerator HashTableValue::builtinAccessorSetterGenerator() const > return reinterpret_cast<BuiltinGenerator>(m_values.value2); > } > >-inline bool getStaticPropertySlotFromTable(VM& vm, const HashTable& table, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot) >+inline bool getStaticPropertySlotFromTable(VM& vm, const ClassInfo* classInfo, const HashTable& table, JSObject* thisObject, PropertyName propertyName, PropertySlot& slot) > { > if (thisObject->staticPropertiesReified()) > return false; >@@ -230,7 +230,7 @@ inline bool getStaticPropertySlotFromTable(VM& vm, const HashTable& table, JSObj > return false; > > if (entry->attributes() & BuiltinOrFunctionOrAccessorOrLazyProperty) >- return setUpStaticFunctionSlot(vm, entry, thisObject, propertyName, slot); >+ return setUpStaticFunctionSlot(vm, classInfo, entry, thisObject, propertyName, slot); > > if (entry->attributes() & ConstantInteger) { > slot.setValue(thisObject, attributesForStructure(entry->attributes()), jsNumber(entry->constantInteger())); >@@ -238,8 +238,13 @@ inline bool getStaticPropertySlotFromTable(VM& vm, const HashTable& table, JSObj > } > > if (entry->attributes() & DOMJITAttribute) { >- DOMJIT::GetterSetter* domJIT = entry->domJIT(); >- slot.setCacheableCustom(thisObject, attributesForStructure(entry->attributes()), domJIT->getter(), domJIT); >+ const DOMJIT::GetterSetter* domJIT = entry->domJIT(); >+ slot.setCacheableCustom(thisObject, attributesForStructure(entry->attributes()), domJIT->getter(), DOMAttributeAnnotation { classInfo, domJIT }); >+ return true; >+ } >+ >+ if (entry->attributes() & DOMAttribute) { >+ slot.setCacheableCustom(thisObject, attributesForStructure(entry->attributes()), entry->propertyGetter(), DOMAttributeAnnotation { classInfo, nullptr }); > return true; > } > >@@ -261,7 +266,7 @@ inline bool replaceStaticPropertySlot(VM& vm, JSObject* thisObject, PropertyName > // 'base' means the object holding the property (possibly in the prototype chain of the object put was called on). > // 'thisValue' is the object that put is being applied to (in the case of a proxy, the proxy target). > // 'slot.thisValue()' is the object the put was originally performed on (in the case of a proxy, the proxy itself). >-inline bool putEntry(ExecState* exec, const HashTableValue* entry, JSObject* base, JSObject* thisValue, PropertyName propertyName, JSValue value, PutPropertySlot& slot) >+inline bool putEntry(ExecState* exec, const ClassInfo*, const HashTableValue* entry, JSObject* base, JSObject* thisValue, PropertyName propertyName, JSValue value, PutPropertySlot& slot) > { > VM& vm = exec->vm(); > auto scope = DECLARE_THROW_SCOPE(vm); >@@ -307,11 +312,11 @@ inline bool lookupPut(ExecState* exec, PropertyName propertyName, JSObject* base > if (!entry) > return false; > >- putResult = putEntry(exec, entry, base, base, propertyName, value, slot); >+ putResult = putEntry(exec, table.classForThis, entry, base, base, propertyName, value, slot); > return true; > } > >-inline void reifyStaticProperty(VM& vm, const PropertyName& propertyName, const HashTableValue& value, JSObject& thisObj) >+inline void reifyStaticProperty(VM& vm, const ClassInfo* classInfo, const PropertyName& propertyName, const HashTableValue& value, JSObject& thisObj) > { > if (value.attributes() & Builtin) { > if (value.attributes() & Accessor) >@@ -366,8 +371,16 @@ inline void reifyStaticProperty(VM& vm, const PropertyName& propertyName, const > } > > if (value.attributes() & DOMJITAttribute) { >- DOMJIT::GetterSetter* domJIT = value.domJIT(); >- CustomGetterSetter* customGetterSetter = CustomGetterSetter::create(vm, domJIT->getter(), domJIT->setter(), domJIT); >+ ASSERT_WITH_MESSAGE(classInfo, "DOMJITAttribute should have class info for type checking."); >+ const DOMJIT::GetterSetter* domJIT = value.domJIT(); >+ auto* customGetterSetter = DOMAttributeGetterSetter::create(vm, domJIT->getter(), value.propertyPutter(), DOMAttributeAnnotation { classInfo, domJIT }); >+ thisObj.putDirectCustomAccessor(vm, propertyName, customGetterSetter, attributesForStructure(value.attributes())); >+ return; >+ } >+ >+ if (value.attributes() & DOMAttribute) { >+ ASSERT_WITH_MESSAGE(classInfo, "DOMAttribute should have class info for type checking."); >+ auto* customGetterSetter = DOMAttributeGetterSetter::create(vm, value.propertyGetter(), value.propertyPutter(), DOMAttributeAnnotation { classInfo, nullptr }); > thisObj.putDirectCustomAccessor(vm, propertyName, customGetterSetter, attributesForStructure(value.attributes())); > return; > } >@@ -377,14 +390,14 @@ inline void reifyStaticProperty(VM& vm, const PropertyName& propertyName, const > } > > template<unsigned numberOfValues> >-inline void reifyStaticProperties(VM& vm, const HashTableValue (&values)[numberOfValues], JSObject& thisObj) >+inline void reifyStaticProperties(VM& vm, const ClassInfo* classInfo, const HashTableValue (&values)[numberOfValues], JSObject& thisObj) > { > BatchedTransitionOptimizer transitionOptimizer(vm, &thisObj); > for (auto& value : values) { > if (!value.m_key) > continue; > auto key = Identifier::fromString(&vm, reinterpret_cast<const LChar*>(value.m_key), strlen(value.m_key)); >- reifyStaticProperty(vm, key, value, thisObj); >+ reifyStaticProperty(vm, classInfo, key, value, thisObj); > } > } > >diff --git a/Source/JavaScriptCore/runtime/ProgramExecutable.cpp b/Source/JavaScriptCore/runtime/ProgramExecutable.cpp >index c4ae197654ad5b7e3f3ab519f24f91ed624eb965..3f5814aab923deb2508226c9696970a92e6ecdb8 100644 >--- a/Source/JavaScriptCore/runtime/ProgramExecutable.cpp >+++ b/Source/JavaScriptCore/runtime/ProgramExecutable.cpp >@@ -190,7 +190,7 @@ JSObject* ProgramExecutable::initializeGlobalProperties(VM& vm, CallFrame* callF > continue; > } > ScopeOffset offset = symbolTable->takeNextScopeOffset(locker); >- SymbolTableEntry newEntry(VarOffset(offset), entry.value.isConst() ? ReadOnly : 0); >+ SymbolTableEntry newEntry(VarOffset(offset), entry.value.isConst() ? ReadOnly : None); > newEntry.prepareToWatch(); > symbolTable->add(locker, entry.key.get(), newEntry); > >diff --git a/Source/JavaScriptCore/runtime/PropertyName.h b/Source/JavaScriptCore/runtime/PropertyName.h >index e44048880f1868ddf0ed72005bc9bff71babe2f2..432edfe8375d6987242e6518dd2fa975e95c1c23 100644 >--- a/Source/JavaScriptCore/runtime/PropertyName.h >+++ b/Source/JavaScriptCore/runtime/PropertyName.h >@@ -78,6 +78,7 @@ class PropertyName { > private: > UniquedStringImpl* m_impl; > }; >+static_assert(sizeof(PropertyName) == sizeof(UniquedStringImpl*), "UniquedStringImpl* and PropertyName should be compatible to invoke easily from JIT code."); > > inline bool operator==(PropertyName a, const Identifier& b) > { >diff --git a/Source/JavaScriptCore/runtime/PropertySlot.cpp b/Source/JavaScriptCore/runtime/PropertySlot.cpp >index e900a68bd97c84a6f63eedf48198301b9c33b8b7..0e09282f42f37eb5549906fd260fa2fd555a1c6f 100644 >--- a/Source/JavaScriptCore/runtime/PropertySlot.cpp >+++ b/Source/JavaScriptCore/runtime/PropertySlot.cpp >@@ -21,7 +21,9 @@ > #include "config.h" > #include "PropertySlot.h" > >+#include "DOMJITGetterSetter.h" > #include "GetterSetter.h" >+#include "HeapCellInlines.h" > #include "JSCJSValueInlines.h" > #include "JSObject.h" > >@@ -38,6 +40,13 @@ JSValue PropertySlot::customGetter(ExecState* exec, PropertyName propertyName) c > // FIXME: Remove this differences in custom values and custom accessors. > // https://bugs.webkit.org/show_bug.cgi?id=158014 > JSValue thisValue = m_attributes & CustomAccessor ? m_thisValue : JSValue(slotBase()); >+ if (auto domAttribute = this->domAttribute()) { >+ VM& vm = exec->vm(); >+ if (!thisValue.inherits(vm, domAttribute->classInfo)) { >+ auto scope = DECLARE_THROW_SCOPE(vm); >+ return throwDOMAttributeGetterTypeError(exec, scope, domAttribute->classInfo, propertyName); >+ } >+ } > return JSValue::decode(m_data.custom.getValue(exec, JSValue::encode(thisValue), propertyName)); > } > >@@ -45,6 +54,14 @@ JSValue PropertySlot::customAccessorGetter(ExecState* exec, PropertyName propert > { > if (!m_data.customAccessor.getterSetter->getter()) > return jsUndefined(); >+ >+ if (auto domAttribute = this->domAttribute()) { >+ VM& vm = exec->vm(); >+ if (!m_thisValue.inherits(vm, domAttribute->classInfo)) { >+ auto scope = DECLARE_THROW_SCOPE(vm); >+ return throwDOMAttributeGetterTypeError(exec, scope, domAttribute->classInfo, propertyName); >+ } >+ } > return JSValue::decode(m_data.customAccessor.getterSetter->getter()(exec, JSValue::encode(m_thisValue), propertyName)); > } > >diff --git a/Source/JavaScriptCore/runtime/PropertySlot.h b/Source/JavaScriptCore/runtime/PropertySlot.h >index a7f0a6084d9364bab5df92f454cb301cc2e21e2e..2cb3035feb38f0e3fba09e354fb52027ce242402 100644 >--- a/Source/JavaScriptCore/runtime/PropertySlot.h >+++ b/Source/JavaScriptCore/runtime/PropertySlot.h >@@ -20,6 +20,7 @@ > > #pragma once > >+#include "DOMAnnotation.h" > #include "JSCJSValue.h" > #include "PropertyName.h" > #include "PropertyOffset.h" >@@ -27,9 +28,6 @@ > #include <wtf/Assertions.h> > > namespace JSC { >-namespace DOMJIT { >-class GetterSetter; >-} > class ExecState; > class GetterSetter; > class JSObject; >@@ -37,7 +35,7 @@ class JSModuleEnvironment; > > // ECMA 262-3 8.6.1 > // Property attributes >-enum Attribute { >+enum Attribute : unsigned { > None = 0, > ReadOnly = 1 << 1, // property can be only read, not written > DontEnum = 1 << 2, // property doesn't appear in (for .. in ..) >@@ -52,8 +50,9 @@ enum Attribute { > CellProperty = 1 << 11, // property is a lazy property - only used by static hashtables > ClassStructure = 1 << 12, // property is a lazy class structure - only used by static hashtables > PropertyCallback = 1 << 13, // property that is a lazy property callback - only used by static hashtables >- DOMJITAttribute = 1 << 14, // property is a DOM JIT attribute - only used by static hashtables >- DOMJITFunction = 1 << 15, // property is a DOM JIT function - only used by static hashtables >+ DOMAttribute = 1 << 14, // property is a simple DOM attribute - only used by static hashtables >+ DOMJITAttribute = 1 << 15, // property is a DOM JIT attribute - only used by static hashtables >+ DOMJITFunction = 1 << 16, // property is a DOM JIT function - only used by static hashtables > BuiltinOrFunction = Builtin | Function, // helper only used by static hashtables > BuiltinOrFunctionOrLazyProperty = Builtin | Function | CellProperty | ClassStructure | PropertyCallback, // helper only used by static hashtables > BuiltinOrFunctionOrAccessorOrLazyProperty = Builtin | Function | Accessor | CellProperty | ClassStructure | PropertyCallback, // helper only used by static hashtables >@@ -90,7 +89,7 @@ class PropertySlot { > > enum class AdditionalDataType : uint8_t { > None, >- DOMJIT, // Annotated with DOMJIT information. >+ DOMAttribute, // Annotated with DOMAttribute information. > ModuleNamespace, // ModuleNamespaceObject's environment access. > }; > >@@ -170,11 +169,11 @@ class PropertySlot { > return m_watchpointSet; > } > >- DOMJIT::GetterSetter* domJIT() const >+ std::optional<DOMAttributeAnnotation> domAttribute() const > { >- if (m_additionalDataType == AdditionalDataType::DOMJIT) >- return m_additionalData.domJIT; >- return nullptr; >+ if (m_additionalDataType == AdditionalDataType::DOMAttribute) >+ return m_additionalData.domAttribute; >+ return std::nullopt; > } > > struct ModuleNamespaceSlot { >@@ -250,6 +249,13 @@ class PropertySlot { > m_propertyType = TypeCustom; > m_offset = invalidOffset; > } >+ >+ void setCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue, DOMAttributeAnnotation domAttribute) >+ { >+ setCustom(slotBase, attributes, getValue); >+ m_additionalDataType = AdditionalDataType::DOMAttribute; >+ m_additionalData.domAttribute = domAttribute; >+ } > > void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue) > { >@@ -265,13 +271,11 @@ class PropertySlot { > m_offset = !invalidOffset; > } > >- void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue, DOMJIT::GetterSetter* domJIT) >+ void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue, DOMAttributeAnnotation domAttribute) > { > setCacheableCustom(slotBase, attributes, getValue); >- if (domJIT) { >- m_additionalDataType = AdditionalDataType::DOMJIT; >- m_additionalData.domJIT = domJIT; >- } >+ m_additionalDataType = AdditionalDataType::DOMAttribute; >+ m_additionalData.domAttribute = domAttribute; > } > > void setCustomGetterSetter(JSObject* slotBase, unsigned attributes, CustomGetterSetter* getterSetter) >@@ -369,7 +373,7 @@ class PropertySlot { > InternalMethodType m_internalMethodType; > AdditionalDataType m_additionalDataType; > union { >- DOMJIT::GetterSetter* domJIT; >+ DOMAttributeAnnotation domAttribute; > ModuleNamespaceSlot moduleNamespaceSlot; > } m_additionalData; > bool m_isTaintedByOpaqueObject; >@@ -392,6 +396,8 @@ ALWAYS_INLINE JSValue PropertySlot::getValue(ExecState* exec, unsigned propertyN > return JSValue::decode(m_data.value); > if (m_propertyType == TypeGetter) > return functionGetter(exec); >+ if (m_propertyType == TypeCustomAccessor) >+ return customAccessorGetter(exec, Identifier::from(exec, propertyName)); > return customGetter(exec, Identifier::from(exec, propertyName)); > } > >diff --git a/Source/JavaScriptCore/runtime/VM.cpp b/Source/JavaScriptCore/runtime/VM.cpp >index 50208513fab1189a1e78d5301d3b60b202ed2d75..2e2b77291d9d25e4de9a652fbede931e6b1fd78e 100644 >--- a/Source/JavaScriptCore/runtime/VM.cpp >+++ b/Source/JavaScriptCore/runtime/VM.cpp >@@ -222,6 +222,7 @@ VM::VM(VMType vmType, HeapType heapType) > stringStructure.set(*this, JSString::createStructure(*this, 0, jsNull())); > propertyNameEnumeratorStructure.set(*this, JSPropertyNameEnumerator::createStructure(*this, 0, jsNull())); > customGetterSetterStructure.set(*this, CustomGetterSetter::createStructure(*this, 0, jsNull())); >+ domAttributeGetterSetterStructure.set(*this, DOMAttributeGetterSetter::createStructure(*this, 0, jsNull())); > scopedArgumentsTableStructure.set(*this, ScopedArgumentsTable::createStructure(*this, 0, jsNull())); > apiWrapperStructure.set(*this, JSAPIValueWrapper::createStructure(*this, 0, jsNull())); > JSScopeStructure.set(*this, JSScope::createStructure(*this, 0, jsNull())); >diff --git a/Source/JavaScriptCore/runtime/VM.h b/Source/JavaScriptCore/runtime/VM.h >index 6423188a1f9555ddb2f8aacc887132d9f1ab5b3a..40dc5f42ed5626770c335f612fa57061f0054adb 100644 >--- a/Source/JavaScriptCore/runtime/VM.h >+++ b/Source/JavaScriptCore/runtime/VM.h >@@ -96,6 +96,7 @@ class CodeBlock; > class CodeCache; > class CommonIdentifiers; > class CustomGetterSetter; >+class DOMAttributeGetterSetter; > class ExecState; > class Exception; > class ExceptionScope; >@@ -312,6 +313,7 @@ class VM : public ThreadSafeRefCounted<VM>, public DoublyLinkedListNode<VM> { > Strong<Structure> propertyNameIteratorStructure; > Strong<Structure> propertyNameEnumeratorStructure; > Strong<Structure> customGetterSetterStructure; >+ Strong<Structure> domAttributeGetterSetterStructure; > Strong<Structure> scopedArgumentsTableStructure; > Strong<Structure> apiWrapperStructure; > Strong<Structure> JSScopeStructure; >diff --git a/Source/WebCore/bindings/js/JSDOMAttribute.h b/Source/WebCore/bindings/js/JSDOMAttribute.h >index dff8d014c40a4a292d9dbd4f1e4764d8ea58ef31..cd05f342cd1769d1626a76badcf67ea92e2f4ca8 100644 >--- a/Source/WebCore/bindings/js/JSDOMAttribute.h >+++ b/Source/WebCore/bindings/js/JSDOMAttribute.h >@@ -53,6 +53,12 @@ class IDLAttribute { > { > auto throwScope = DECLARE_THROW_SCOPE(state.vm()); > >+ if (shouldThrow == CastedThisErrorBehavior::Assert) { >+ ASSERT(cast(state, thisValue)); >+ auto* thisObject = JSC::jsCast<JSClass*>(JSC::JSValue::decode(thisValue)); >+ return JSC::JSValue::encode(getter(state, *thisObject, throwScope)); >+ } >+ > auto* thisObject = cast(state, thisValue); > if (UNLIKELY(!thisObject)) { > if (shouldThrow == CastedThisErrorBehavior::Throw) >diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm >index 51b4d2f55e56b839691c0420c87c677893355ab2..ccf6da2ad7859c7c84a20348f6417b8c00641af1 100644 >--- a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm >+++ b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm >@@ -1402,6 +1402,28 @@ sub OperationShouldBeOnInstance > return 0; > } > >+sub IsAcceleratedDOMAttribute >+{ >+ my ($interface, $attribute) = @_; >+ >+ # If we use CustomGetterSetter in IDL code generator we cannot skip type check. >+ return 0 if NeedsRuntimeCheck($attribute) and AttributeShouldBeOnInstance($interface, $attribute); >+ return 0 if $attribute->extendedAttributes->{PrivateIdentifier} and AttributeShouldBeOnInstance($interface, $attribute); >+ >+ # If the interface has special logic for casting we cannot hoist type check to JSC. >+ return 0 if $interface->extendedAttributes->{ImplicitThis}; >+ return 0 if $interface->extendedAttributes->{CustomProxyToJSObject}; >+ >+ return 0 if $attribute->isStatic; >+ return 0 if $attribute->isMapLike; >+ return 0 if $codeGenerator->IsConstructorType($attribute->type); >+ return 0 if IsJSBuiltin($interface, $attribute); >+ return 0 if $attribute->extendedAttributes->{LenientThis}; >+ return 0 if $codeGenerator->IsPromiseType($attribute->type); >+ return 0 if $attribute->extendedAttributes->{DOMJIT}; >+ return 1; >+} >+ > sub GetJSCAttributesForAttribute > { > my $interface = shift; >@@ -1415,7 +1437,8 @@ sub GetJSCAttributesForAttribute > push(@specials, "DontEnum") if ($attribute->extendedAttributes->{NotEnumerable} || $isGlobalConstructor); > push(@specials, "ReadOnly") if IsReadonly($attribute); > push(@specials, "CustomAccessor") unless $isGlobalConstructor or IsJSBuiltin($interface, $attribute); >- push(@specials, "DOMJITAttribute") if $attribute->extendedAttributes->{"DOMJIT"}; >+ push(@specials, "DOMAttribute") if IsAcceleratedDOMAttribute($interface, $attribute); >+ push(@specials, "DOMJITAttribute") if $attribute->extendedAttributes->{DOMJIT}; > push(@specials, "Accessor | Builtin") if IsJSBuiltin($interface, $attribute); > return (@specials > 0) ? join(" | ", @specials) : "0"; > } >@@ -2378,8 +2401,7 @@ sub GenerateHeader > $numCachedAttributes++; > push(@headerContent, "#endif\n") if $conditionalString; > } >- $hasDOMJITAttributes = 1 if $attribute->extendedAttributes->{"DOMJIT"}; >- >+ $hasDOMJITAttributes = 1 if $attribute->extendedAttributes->{DOMJIT}; > $hasForwardDeclaringAttributes = 1 if $attribute->extendedAttributes->{ForwardDeclareInHeader}; > } > } >@@ -2618,24 +2640,19 @@ sub GenerateHeader > > if ($hasDOMJITAttributes) { > $headerIncludes{"<domjit/DOMJITGetterSetter.h>"} = 1; >- push(@headerContent,"// DOMJIT emitters for attributes\n\n"); >+ push(@headerContent,"// DOM JIT Attributes\n\n"); >+ > foreach my $attribute (@{$interface->attributes}) { >- next unless $attribute->extendedAttributes->{"DOMJIT"}; >+ next unless $attribute->extendedAttributes->{DOMJIT}; > assert("Only DOMJIT=Getter is supported for attributes") unless $codeGenerator->ExtendedAttributeContains($attribute->extendedAttributes->{DOMJIT}, "Getter"); > > my $interfaceName = $interface->type->name; > my $className = $interfaceName . $codeGenerator->WK_ucfirst($attribute->name); >- my $domJITClassName = $className . "DOMJIT"; >- >- push(@headerContent, "JSC::DOMJIT::GetterSetter* domJITGetterSetterFor$className(void);\n"); >+ my $domJITClassName = $className . "Attribute"; > >- push(@headerContent, "class ${domJITClassName} : public JSC::DOMJIT::GetterSetter {\n"); >- push(@headerContent, "public:\n"); >- push(@headerContent, " ${domJITClassName}();\n"); > push(@headerContent, "#if ENABLE(JIT)\n"); >- push(@headerContent, " Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override;\n"); >- push(@headerContent, "#endif\n"); >- push(@headerContent, "};\n\n"); >+ push(@headerContent, "Ref<JSC::DOMJIT::CallDOMGetterSnippet> compile${domJITClassName}();\n"); >+ push(@headerContent, "#endif\n\n"); > } > } > >@@ -2729,19 +2746,18 @@ sub GeneratePropertiesHashTable > my $special = GetJSCAttributesForAttribute($interface, $attribute); > push(@$hashSpecials, $special); > >- if ($attribute->extendedAttributes->{"DOMJIT"}) { >- push(@$hashValue1, "domJITGetterSetterFor" . $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name)); >- push(@$hashValue2, "0"); >+ if ($attribute->extendedAttributes->{DOMJIT}) { >+ push(@$hashValue1, "&DOMJITAttributeFor" . $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name)); > } else { > my $getter = GetAttributeGetterName($interface, $className, $attribute); > push(@$hashValue1, $getter); >+ } > >- if (IsReadonly($attribute)) { >- push(@$hashValue2, "0"); >- } else { >- my $setter = GetAttributeSetterName($interface, $className, $attribute); >- push(@$hashValue2, $setter); >- } >+ if (IsReadonly($attribute)) { >+ push(@$hashValue2, "0"); >+ } else { >+ my $setter = GetAttributeSetterName($interface, $className, $attribute); >+ push(@$hashValue2, $setter); > } > > my $conditional = $attribute->extendedAttributes->{Conditional}; >@@ -3565,6 +3581,35 @@ sub GenerateImplementation > } > } > >+ if ($numAttributes > 0 || NeedsConstructorProperty($interface)) { >+ foreach my $attribute (@attributes) { >+ next unless $attribute->extendedAttributes->{DOMJIT}; >+ assert("Only DOMJIT=Getter is supported for attributes") unless $codeGenerator->ExtendedAttributeContains($attribute->extendedAttributes->{DOMJIT}, "Getter"); >+ >+ my $conditionalString = $codeGenerator->GenerateConditionalString($attribute); >+ push(@implContent, "#if ${conditionalString}\n\n") if $conditionalString; >+ AddToImplIncludes("DOMJITIDLTypeFilter.h", $conditionalString); >+ my $interfaceName = $interface->type->name; >+ my $generatorName = $interfaceName . $codeGenerator->WK_ucfirst($attribute->name); >+ my $domJITClassName = $generatorName . "Attribute"; >+ my $getter = GetAttributeGetterName($interface, $generatorName, $attribute); >+ my $resultType = "JSC::SpecBytecodeTop"; >+ if ($attribute->extendedAttributes->{DOMJIT}) { >+ $resultType = GetResultTypeFilter($interface, $attribute->type); >+ } >+ push(@implContent, "static const JSC::DOMJIT::GetterSetter DOMJITAttributeFor${generatorName} {\n"); >+ push(@implContent, " $getter,\n"); >+ push(@implContent, "#if ENABLE(JIT)\n"); >+ push(@implContent, " &compile${domJITClassName},\n"); >+ push(@implContent, "#else\n"); >+ push(@implContent, " nullptr,\n"); >+ push(@implContent, "#endif\n"); >+ push(@implContent, " $resultType\n"); >+ push(@implContent, "};\n\n"); >+ push(@implContent, "#endif\n\n") if $conditionalString; >+ } >+ } >+ > GeneratePrototypeDeclaration(\@implContent, $className, $interface) if !HeaderNeedsPrototypeDeclaration($interface); > > GenerateConstructorDeclaration(\@implContent, $className, $interface) if NeedsConstructorProperty($interface); >@@ -3588,7 +3633,7 @@ sub GenerateImplementation > \@runtimeEnabledOperations, \@runtimeEnabledAttributes, > \@settingsEnabledOperations, \@settingsEnabledAttributes); > >- $object->GenerateHashTable($hashName, $numInstanceProperties, >+ $object->GenerateHashTable($className, $hashName, $numInstanceProperties, > \@hashKeys, \@hashSpecials, > \@hashValue1, \@hashValue2, > \%conditionals, 0) if $numInstanceProperties > 0; >@@ -3630,23 +3675,23 @@ sub GenerateImplementation > my @specials = (); > push(@specials, "DontDelete") if IsUnforgeable($interface, $attribute); > push(@specials, "ReadOnly") if IsReadonly($attribute); >- push(@specials, "DOMJITAttribute") if $attribute->extendedAttributes->{"DOMJIT"}; >+ push(@specials, "DOMAttribute") if IsAcceleratedDOMAttribute($interface, $attribute); >+ push(@specials, "DOMJITAttribute") if $attribute->extendedAttributes->{DOMJIT}; > my $special = (@specials > 0) ? join(" | ", @specials) : "0"; > push(@hashSpecials, $special); > >- if ($attribute->extendedAttributes->{"DOMJIT"}) { >- push(@hashValue1, "domJITGetterSetterFor" . $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name)); >- push(@hashValue2, "0"); >+ if ($attribute->extendedAttributes->{DOMJIT}) { >+ push(@hashValue1, "&DOMJITAttributeFor" . $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name)); > } else { > my $getter = GetAttributeGetterName($interface, $className, $attribute); > push(@hashValue1, $getter); >+ } > >- if (IsReadonly($attribute)) { >- push(@hashValue2, "0"); >- } else { >- my $setter = GetAttributeSetterName($interface, $className, $attribute); >- push(@hashValue2, $setter); >- } >+ if (IsReadonly($attribute)) { >+ push(@hashValue2, "0"); >+ } else { >+ my $setter = GetAttributeSetterName($interface, $className, $attribute); >+ push(@hashValue2, $setter); > } > > my $conditional = $attribute->extendedAttributes->{Conditional}; >@@ -3679,7 +3724,7 @@ sub GenerateImplementation > $hashSize++; > } > >- $object->GenerateHashTable($hashName, $hashSize, >+ $object->GenerateHashTable($className, $hashName, $hashSize, > \@hashKeys, \@hashSpecials, > \@hashValue1, \@hashValue2, > \%conditionals, 1) if $hashSize > 0; >@@ -3733,7 +3778,7 @@ sub GenerateImplementation > > my $justGenerateValueArray = !IsDOMGlobalObject($interface); > >- $object->GenerateHashTable($hashName, $hashSize, >+ $object->GenerateHashTable($className, $hashName, $hashSize, > \@hashKeys, \@hashSpecials, > \@hashValue1, \@hashValue2, > \%conditionals, $justGenerateValueArray); >@@ -3754,7 +3799,7 @@ sub GenerateImplementation > } > push(@implContent, "{\n"); > push(@implContent, " Base::finishCreation(vm);\n"); >- push(@implContent, " reifyStaticProperties(vm, ${className}PrototypeTableValues, *this);\n"); >+ push(@implContent, " reifyStaticProperties(vm, ${className}::info(), ${className}PrototypeTableValues, *this);\n"); > > my @runtimeEnabledProperties = @runtimeEnabledOperations; > push(@runtimeEnabledProperties, @runtimeEnabledAttributes); >@@ -4454,6 +4499,8 @@ sub GenerateAttributeGetterDefinition > push(@templateParameters, "CastedThisErrorBehavior::ReturnEarly") > } elsif ($codeGenerator->IsPromiseType($attribute->type)) { > push(@templateParameters, "CastedThisErrorBehavior::RejectPromise") >+ } elsif (IsAcceleratedDOMAttribute($interface, $attribute)) { >+ push(@templateParameters, "CastedThisErrorBehavior::Assert"); > } > > push(@implContent, "EncodedJSValue ${getFunctionName}(ExecState* state, EncodedJSValue thisValue, PropertyName)\n"); >@@ -4467,30 +4514,6 @@ sub GenerateAttributeGetterDefinition > push(@implContent, "}\n\n"); > } > >- if ($attribute->extendedAttributes->{"DOMJIT"}) { >- assert("Only DOMJIT=Getter is supported for attributes") unless $codeGenerator->ExtendedAttributeContains($attribute->extendedAttributes->{DOMJIT}, "Getter"); >- >- AddToImplIncludes("<wtf/NeverDestroyed.h>", $conditional); >- AddToImplIncludes("DOMJITIDLTypeFilter.h", $conditional); >- >- my $generatorName = $interface->type->name . $codeGenerator->WK_ucfirst($attribute->name); >- my $domJITClassName = $generatorName . "DOMJIT"; >- my $getter = GetAttributeGetterName($interface, $generatorName, $attribute); >- my $setter = IsReadonly($attribute) ? "nullptr" : GetAttributeSetterName($interface, $generatorName, $attribute); >- my $resultType = GetResultTypeFilter($interface, $attribute->type); >- >- push(@implContent, "${domJITClassName}::${domJITClassName}()\n"); >- push(@implContent, " : JSC::DOMJIT::GetterSetter($getter, $setter, ${className}::info(), $resultType)\n"); >- push(@implContent, "{\n"); >- push(@implContent, "}\n\n"); >- >- push(@implContent, "JSC::DOMJIT::GetterSetter* domJITGetterSetterFor" . $generatorName . "()\n"); >- push(@implContent, "{\n"); >- push(@implContent, " static NeverDestroyed<${domJITClassName}> compiler;\n"); >- push(@implContent, " return &compiler.get();\n"); >- push(@implContent, "}\n\n"); >- } >- > push(@implContent, "#endif\n\n") if $conditional; > } > >@@ -5606,7 +5629,7 @@ sub GenerateCallbackImplementationContent > > $hashSize++; > } >- $object->GenerateHashTable($hashName, $hashSize, \@hashKeys, \@hashSpecials, \@hashValue1, \@hashValue2, \%conditionals, 1) if $hashSize > 0; >+ $object->GenerateHashTable($className, $hashName, $hashSize, \@hashKeys, \@hashSpecials, \@hashValue1, \@hashValue2, \%conditionals, 1) if $hashSize > 0; > > push(@$contentRef, $codeGenerator->GenerateCompileTimeCheckForEnumsIfNeeded($interfaceOrCallback)); > >@@ -6246,7 +6269,7 @@ sub GenerateHashTableValueArray > } elsif ("@$specials[$i]" =~ m/ConstantInteger/) { > $firstTargetType = ""; > } elsif ("@$specials[$i]" =~ m/DOMJITAttribute/) { >- $firstTargetType = "static_cast<DOMJITGetterSetterGenerator>"; >+ $firstTargetType = "static_cast<const JSC::DOMJIT::GetterSetter*>"; > } else { > $firstTargetType = "static_cast<PropertySlot::GetValueFunc>"; > $secondTargetType = "static_cast<PutPropertySlot::PutValueFunc>"; >@@ -6273,16 +6296,7 @@ sub GenerateHashTableValueArray > > sub GenerateHashTable > { >- my $object = shift; >- >- my $name = shift; >- my $size = shift; >- my $keys = shift; >- my $specials = shift; >- my $value1 = shift; >- my $value2 = shift; >- my $conditionals = shift; >- my $justGenerateValueArray = shift; >+ my ($object, $className, $name, $size, $keys, $specials, $value1, $value2, $conditionals, $justGenerateValueArray) = @_; > > my $nameEntries = "${name}Values"; > $nameEntries =~ s/:/_/g; >@@ -6360,7 +6374,7 @@ sub GenerateHashTable > my $packedSize = scalar @{$keys}; > > my $compactSizeMask = $numEntries - 1; >- push(@implContent, "static const HashTable $name = { $packedSize, $compactSizeMask, $hasSetter, $nameEntries, $nameIndex };\n"); >+ push(@implContent, "static const HashTable $name = { $packedSize, $compactSizeMask, $hasSetter, ${className}::info(), $nameEntries, $nameIndex };\n"); > } > > sub WriteData >@@ -6719,7 +6733,12 @@ sub GenerateConstructorHelperMethods > > push(@$outputArray, " putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral(\"$visibleInterfaceName\"))), ReadOnly | DontEnum);\n"); > push(@$outputArray, " putDirect(vm, vm.propertyNames->length, jsNumber(${leastConstructorLength}), ReadOnly | DontEnum);\n") if defined $leastConstructorLength; >- push(@$outputArray, " reifyStaticProperties(vm, ${className}ConstructorTableValues, *this);\n") if ConstructorHasProperties($interface); >+ >+ my $classForThis = "${className}::info()"; >+ if ($interface->isCallback) { >+ $classForThis = "nullptr"; >+ } >+ push(@$outputArray, " reifyStaticProperties(vm, ${classForThis}, ${className}ConstructorTableValues, *this);\n") if ConstructorHasProperties($interface); > > push(@$outputArray, "}\n\n"); > >@@ -6808,7 +6827,7 @@ sub ComputeFunctionSpecial > } else { > push(@specials, "JSC::Function"); > } >- if ($operation->extendedAttributes->{"DOMJIT"}) { >+ if ($operation->extendedAttributes->{DOMJIT}) { > push(@specials, "DOMJITFunction") if $operation->extendedAttributes->{DOMJIT}; > } > return (@specials > 0) ? join(" | ", @specials) : "0"; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSInterfaceName.cpp b/Source/WebCore/bindings/scripts/test/JS/JSInterfaceName.cpp >index e1ceb2f02e2ed989356c5cf56e8df7baef120a4b..1142423273ca9bbec0a282078b4dad6724deb297 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSInterfaceName.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSInterfaceName.cpp >@@ -91,7 +91,7 @@ const ClassInfo JSInterfaceNamePrototype::s_info = { "InterfaceNamePrototype", & > void JSInterfaceNamePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSInterfaceNamePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSInterfaceName::info(), JSInterfaceNamePrototypeTableValues, *this); > } > > const ClassInfo JSInterfaceName::s_info = { "InterfaceName", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSInterfaceName) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSMapLike.cpp b/Source/WebCore/bindings/scripts/test/JS/JSMapLike.cpp >index e440ed1f1b80677172038808c4729ac8d8d08d18..04a93072fbb5baa5dc54f9c058ef1a217e490da8 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSMapLike.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSMapLike.cpp >@@ -119,7 +119,7 @@ const ClassInfo JSMapLikePrototype::s_info = { "MapLikePrototype", &Base::s_info > void JSMapLikePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSMapLikePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSMapLike::info(), JSMapLikePrototypeTableValues, *this); > putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), DontEnum); > } > >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSReadOnlyMapLike.cpp b/Source/WebCore/bindings/scripts/test/JS/JSReadOnlyMapLike.cpp >index 1b81ea49b3ca9423f3c250ca5be521a024fb9e88..3dc26b4b753cf3a70f1eabd9a396ee1efefc1a4f 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSReadOnlyMapLike.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSReadOnlyMapLike.cpp >@@ -113,7 +113,7 @@ const ClassInfo JSReadOnlyMapLikePrototype::s_info = { "ReadOnlyMapLikePrototype > void JSReadOnlyMapLikePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSReadOnlyMapLikePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSReadOnlyMapLike::info(), JSReadOnlyMapLikePrototypeTableValues, *this); > putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), DontEnum); > } > >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp >index 1bc8cd5cb99b318b341f92d8fa15fc336e89412c..ae92dee5b5b719fae47dda658b0fb81ae82d0b7e 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp >@@ -85,10 +85,10 @@ static const struct CompactHashIndex JSTestActiveDOMObjectTableIndex[2] = { > > static const HashTableValue JSTestActiveDOMObjectTableValues[] = > { >- { "excitingAttr", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestActiveDOMObjectExcitingAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "excitingAttr", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestActiveDOMObjectExcitingAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > }; > >-static const HashTable JSTestActiveDOMObjectTable = { 1, 1, true, JSTestActiveDOMObjectTableValues, JSTestActiveDOMObjectTableIndex }; >+static const HashTable JSTestActiveDOMObjectTable = { 1, 1, true, JSTestActiveDOMObject::info(), JSTestActiveDOMObjectTableValues, JSTestActiveDOMObjectTableIndex }; > template<> JSValue JSTestActiveDOMObjectConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject) > { > UNUSED_PARAM(vm); >@@ -118,7 +118,7 @@ const ClassInfo JSTestActiveDOMObjectPrototype::s_info = { "TestActiveDOMObjectP > void JSTestActiveDOMObjectPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestActiveDOMObjectPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestActiveDOMObject::info(), JSTestActiveDOMObjectPrototypeTableValues, *this); > } > > const ClassInfo JSTestActiveDOMObject::s_info = { "TestActiveDOMObject", &Base::s_info, &JSTestActiveDOMObjectTable, nullptr, CREATE_METHOD_TABLE(JSTestActiveDOMObject) }; >@@ -202,7 +202,7 @@ static inline JSValue jsTestActiveDOMObjectExcitingAttrGetter(ExecState& state, > > EncodedJSValue jsTestActiveDOMObjectExcitingAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestActiveDOMObject>::get<jsTestActiveDOMObjectExcitingAttrGetter>(*state, thisValue, "excitingAttr"); >+ return IDLAttribute<JSTestActiveDOMObject>::get<jsTestActiveDOMObjectExcitingAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "excitingAttr"); > } > > static inline JSC::EncodedJSValue jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionBody(JSC::ExecState* state, typename IDLOperation<JSTestActiveDOMObject>::ClassParameter castedThis, JSC::ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp >index fb767d16cc90bf99cdac09d0f87220c4193598bd..8f8bd96863e942cb36f4b26b0021c77ff50e36f6 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp >@@ -100,9 +100,9 @@ template<> const ClassInfo JSTestCEReactionsConstructor::s_info = { "TestCEReact > static const HashTableValue JSTestCEReactionsPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsConstructor) } }, >- { "attributeWithCEReactions", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsAttributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsAttributeWithCEReactions) } }, >- { "reflectAttributeWithCEReactions", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsReflectAttributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsReflectAttributeWithCEReactions) } }, >- { "stringifierAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifierAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifierAttribute) } }, >+ { "attributeWithCEReactions", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsAttributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsAttributeWithCEReactions) } }, >+ { "reflectAttributeWithCEReactions", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsReflectAttributeWithCEReactions), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsReflectAttributeWithCEReactions) } }, >+ { "stringifierAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifierAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifierAttribute) } }, > { "methodWithCEReactions", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestCEReactionsPrototypeFunctionMethodWithCEReactions), (intptr_t) (0) } }, > }; > >@@ -111,7 +111,7 @@ const ClassInfo JSTestCEReactionsPrototype::s_info = { "TestCEReactionsPrototype > void JSTestCEReactionsPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestCEReactionsPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestCEReactions::info(), JSTestCEReactionsPrototypeTableValues, *this); > } > > const ClassInfo JSTestCEReactions::s_info = { "TestCEReactions", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCEReactions) }; >@@ -193,7 +193,7 @@ static inline JSValue jsTestCEReactionsAttributeWithCEReactionsGetter(ExecState& > > EncodedJSValue jsTestCEReactionsAttributeWithCEReactions(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestCEReactions>::get<jsTestCEReactionsAttributeWithCEReactionsGetter>(*state, thisValue, "attributeWithCEReactions"); >+ return IDLAttribute<JSTestCEReactions>::get<jsTestCEReactionsAttributeWithCEReactionsGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attributeWithCEReactions"); > } > > static inline bool setJSTestCEReactionsAttributeWithCEReactionsSetter(ExecState& state, JSTestCEReactions& thisObject, JSValue value, ThrowScope& throwScope) >@@ -224,7 +224,7 @@ static inline JSValue jsTestCEReactionsReflectAttributeWithCEReactionsGetter(Exe > > EncodedJSValue jsTestCEReactionsReflectAttributeWithCEReactions(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestCEReactions>::get<jsTestCEReactionsReflectAttributeWithCEReactionsGetter>(*state, thisValue, "reflectAttributeWithCEReactions"); >+ return IDLAttribute<JSTestCEReactions>::get<jsTestCEReactionsReflectAttributeWithCEReactionsGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectAttributeWithCEReactions"); > } > > static inline bool setJSTestCEReactionsReflectAttributeWithCEReactionsSetter(ExecState& state, JSTestCEReactions& thisObject, JSValue value, ThrowScope& throwScope) >@@ -255,7 +255,7 @@ static inline JSValue jsTestCEReactionsStringifierAttributeGetter(ExecState& sta > > EncodedJSValue jsTestCEReactionsStringifierAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestCEReactions>::get<jsTestCEReactionsStringifierAttributeGetter>(*state, thisValue, "stringifierAttribute"); >+ return IDLAttribute<JSTestCEReactions>::get<jsTestCEReactionsStringifierAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringifierAttribute"); > } > > static inline bool setJSTestCEReactionsStringifierAttributeSetter(ExecState& state, JSTestCEReactions& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp >index 81a69047d9ef8def2e150922175f3c4ebde7d11c..2c18f35d36db7dafd5578525c598b7041d909650 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp >@@ -94,7 +94,7 @@ template<> const ClassInfo JSTestCEReactionsStringifierConstructor::s_info = { " > static const HashTableValue JSTestCEReactionsStringifierPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifierConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifierConstructor) } }, >- { "value", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifierValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifierValue) } }, >+ { "value", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestCEReactionsStringifierValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestCEReactionsStringifierValue) } }, > { "toString", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestCEReactionsStringifierPrototypeFunctionToString), (intptr_t) (0) } }, > }; > >@@ -103,7 +103,7 @@ const ClassInfo JSTestCEReactionsStringifierPrototype::s_info = { "TestCEReactio > void JSTestCEReactionsStringifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestCEReactionsStringifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestCEReactionsStringifier::info(), JSTestCEReactionsStringifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestCEReactionsStringifier::s_info = { "TestCEReactionsStringifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCEReactionsStringifier) }; >@@ -185,7 +185,7 @@ static inline JSValue jsTestCEReactionsStringifierValueGetter(ExecState& state, > > EncodedJSValue jsTestCEReactionsStringifierValue(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestCEReactionsStringifier>::get<jsTestCEReactionsStringifierValueGetter>(*state, thisValue, "value"); >+ return IDLAttribute<JSTestCEReactionsStringifier>::get<jsTestCEReactionsStringifierValueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "value"); > } > > static inline bool setJSTestCEReactionsStringifierValueSetter(ExecState& state, JSTestCEReactionsStringifier& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp >index 12c3d65f67f68f75a63f9a40a6b473c806b43468..e7cc05fb9f4180a8c3d6947a6dcab27dcfc40c2f 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp >@@ -142,7 +142,7 @@ template<> void JSTestCallbackInterfaceConstructor::initializeProperties(VM& vm, > UNUSED_PARAM(globalObject); > putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral("TestCallbackInterface"))), ReadOnly | DontEnum); > putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum); >- reifyStaticProperties(vm, JSTestCallbackInterfaceConstructorTableValues, *this); >+ reifyStaticProperties(vm, nullptr, JSTestCallbackInterfaceConstructorTableValues, *this); > } > > template<> const ClassInfo JSTestCallbackInterfaceConstructor::s_info = { "TestCallbackInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCallbackInterfaceConstructor) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp >index 2e1afb52589190351aa46ad62ea2c423cf765961..8e3a81c43d3f8eab3f58c92d91c283fdf8fdf930 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp >@@ -97,7 +97,7 @@ const ClassInfo JSTestClassWithJSBuiltinConstructorPrototype::s_info = { "TestCl > void JSTestClassWithJSBuiltinConstructorPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestClassWithJSBuiltinConstructorPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestClassWithJSBuiltinConstructor::info(), JSTestClassWithJSBuiltinConstructorPrototypeTableValues, *this); > } > > const ClassInfo JSTestClassWithJSBuiltinConstructor::s_info = { "TestClassWithJSBuiltinConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestClassWithJSBuiltinConstructor) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp >index 74b59fdae3b1342b08e18d54c5d510dd10cb525f..9d2119c382cfc8dfdd4efaa1274ddce74a9ea978 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp >@@ -97,7 +97,7 @@ const ClassInfo JSTestCustomConstructorWithNoInterfaceObjectPrototype::s_info = > void JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestCustomConstructorWithNoInterfaceObjectPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestCustomConstructorWithNoInterfaceObject::info(), JSTestCustomConstructorWithNoInterfaceObjectPrototypeTableValues, *this); > } > > const ClassInfo JSTestCustomConstructorWithNoInterfaceObject::s_info = { "TestCustomConstructorWithNoInterfaceObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCustomConstructorWithNoInterfaceObject) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp >index 4c07e848093bbf0c3476fda7d0305fdad9f8aad9..61d41b1721601fe2aa999b6ca418821024803df5 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp >@@ -98,7 +98,7 @@ const ClassInfo JSTestCustomNamedGetterPrototype::s_info = { "TestCustomNamedGet > void JSTestCustomNamedGetterPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestCustomNamedGetterPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestCustomNamedGetter::info(), JSTestCustomNamedGetterPrototypeTableValues, *this); > } > > const ClassInfo JSTestCustomNamedGetter::s_info = { "TestCustomNamedGetter", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestCustomNamedGetter) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp >index ba6faafeb52bc304667af69e792d920549e0e8f3..f0ab6ec71b067f41809dba9f8f64974a810fb5be 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp >@@ -36,7 +36,6 @@ > #include "JSNodeList.h" > #include <interpreter/FrameTracers.h> > #include <wtf/GetPtr.h> >-#include <wtf/NeverDestroyed.h> > > using namespace JSC; > >@@ -105,6 +104,356 @@ static const JSC::DOMJIT::Signature DOMJITSignatureForTestDOMJITGetElementById(( > > static const JSC::DOMJIT::Signature DOMJITSignatureForTestDOMJITGetElementsByName((uintptr_t)unsafeJsTestDOMJITPrototypeFunctionGetElementsByName, JSTestDOMJIT::info(), JSC::DOMJIT::Effect::forRead(DOMJIT::AbstractHeapRepository::DOM), DOMJIT::IDLResultTypeFilter<IDLInterface<NodeList>>::value, DOMJIT::IDLArgumentTypeFilter<IDLAtomicStringAdaptor<IDLDOMString>>::value); > >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITAnyAttr { >+ jsTestDOMJITAnyAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITAnyAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLAny>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITBooleanAttr { >+ jsTestDOMJITBooleanAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITBooleanAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLBoolean>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITByteAttr { >+ jsTestDOMJITByteAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITByteAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLByte>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITOctetAttr { >+ jsTestDOMJITOctetAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITOctetAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLOctet>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITShortAttr { >+ jsTestDOMJITShortAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITShortAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLShort>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnsignedShortAttr { >+ jsTestDOMJITUnsignedShortAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnsignedShortAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLUnsignedShort>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITLongAttr { >+ jsTestDOMJITLongAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITLongAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLLong>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnsignedLongAttr { >+ jsTestDOMJITUnsignedLongAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnsignedLongAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLUnsignedLong>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITLongLongAttr { >+ jsTestDOMJITLongLongAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITLongLongAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLLongLong>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnsignedLongLongAttr { >+ jsTestDOMJITUnsignedLongLongAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnsignedLongLongAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLUnsignedLongLong>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITFloatAttr { >+ jsTestDOMJITFloatAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITFloatAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLFloat>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnrestrictedFloatAttr { >+ jsTestDOMJITUnrestrictedFloatAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnrestrictedFloatAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLUnrestrictedFloat>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITDoubleAttr { >+ jsTestDOMJITDoubleAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITDoubleAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLDouble>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnrestrictedDoubleAttr { >+ jsTestDOMJITUnrestrictedDoubleAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnrestrictedDoubleAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLUnrestrictedDouble>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITDomStringAttr { >+ jsTestDOMJITDomStringAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITDomStringAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLDOMString>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITByteStringAttr { >+ jsTestDOMJITByteStringAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITByteStringAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLByteString>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUsvStringAttr { >+ jsTestDOMJITUsvStringAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUsvStringAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLUSVString>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITNodeAttr { >+ jsTestDOMJITNodeAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITNodeAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLInterface<Node>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITBooleanNullableAttr { >+ jsTestDOMJITBooleanNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITBooleanNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLBoolean>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITByteNullableAttr { >+ jsTestDOMJITByteNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITByteNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLByte>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITOctetNullableAttr { >+ jsTestDOMJITOctetNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITOctetNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLOctet>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITShortNullableAttr { >+ jsTestDOMJITShortNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITShortNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLShort>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnsignedShortNullableAttr { >+ jsTestDOMJITUnsignedShortNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnsignedShortNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnsignedShort>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITLongNullableAttr { >+ jsTestDOMJITLongNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITLongNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLLong>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnsignedLongNullableAttr { >+ jsTestDOMJITUnsignedLongNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnsignedLongNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnsignedLong>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITLongLongNullableAttr { >+ jsTestDOMJITLongLongNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITLongLongNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLLongLong>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnsignedLongLongNullableAttr { >+ jsTestDOMJITUnsignedLongLongNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnsignedLongLongNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnsignedLongLong>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITFloatNullableAttr { >+ jsTestDOMJITFloatNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITFloatNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLFloat>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnrestrictedFloatNullableAttr { >+ jsTestDOMJITUnrestrictedFloatNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnrestrictedFloatNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnrestrictedFloat>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITDoubleNullableAttr { >+ jsTestDOMJITDoubleNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITDoubleNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLDouble>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUnrestrictedDoubleNullableAttr { >+ jsTestDOMJITUnrestrictedDoubleNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUnrestrictedDoubleNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnrestrictedDouble>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITDomStringNullableAttr { >+ jsTestDOMJITDomStringNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITDomStringNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLDOMString>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITByteStringNullableAttr { >+ jsTestDOMJITByteStringNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITByteStringNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLByteString>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITUsvStringNullableAttr { >+ jsTestDOMJITUsvStringNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITUsvStringNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUSVString>>::value >+}; >+ >+static const JSC::DOMJIT::GetterSetter DOMJITAttributeForTestDOMJITNodeNullableAttr { >+ jsTestDOMJITNodeNullableAttr, >+#if ENABLE(JIT) >+ &compileTestDOMJITNodeNullableAttrAttribute, >+#else >+ nullptr, >+#endif >+ DOMJIT::IDLResultTypeFilter<IDLNullable<IDLInterface<Node>>>::value >+}; >+ > class JSTestDOMJITPrototype : public JSC::JSNonFinalObject { > public: > using Base = JSC::JSNonFinalObject; >@@ -151,41 +500,41 @@ template<> const ClassInfo JSTestDOMJITConstructor::s_info = { "TestDOMJIT", &Ba > static const HashTableValue JSTestDOMJITPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestDOMJITConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestDOMJITConstructor) } }, >- { "anyAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITAnyAttr), (intptr_t) (0) } }, >- { "booleanAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITBooleanAttr), (intptr_t) (0) } }, >- { "byteAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITByteAttr), (intptr_t) (0) } }, >- { "octetAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITOctetAttr), (intptr_t) (0) } }, >- { "shortAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITShortAttr), (intptr_t) (0) } }, >- { "unsignedShortAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnsignedShortAttr), (intptr_t) (0) } }, >- { "longAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITLongAttr), (intptr_t) (0) } }, >- { "unsignedLongAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnsignedLongAttr), (intptr_t) (0) } }, >- { "longLongAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITLongLongAttr), (intptr_t) (0) } }, >- { "unsignedLongLongAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnsignedLongLongAttr), (intptr_t) (0) } }, >- { "floatAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITFloatAttr), (intptr_t) (0) } }, >- { "unrestrictedFloatAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr), (intptr_t) (0) } }, >- { "doubleAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITDoubleAttr), (intptr_t) (0) } }, >- { "unrestrictedDoubleAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr), (intptr_t) (0) } }, >- { "domStringAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITDomStringAttr), (intptr_t) (0) } }, >- { "byteStringAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITByteStringAttr), (intptr_t) (0) } }, >- { "usvStringAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUsvStringAttr), (intptr_t) (0) } }, >- { "nodeAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITNodeAttr), (intptr_t) (0) } }, >- { "booleanNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITBooleanNullableAttr), (intptr_t) (0) } }, >- { "byteNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITByteNullableAttr), (intptr_t) (0) } }, >- { "octetNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITOctetNullableAttr), (intptr_t) (0) } }, >- { "shortNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITShortNullableAttr), (intptr_t) (0) } }, >- { "unsignedShortNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr), (intptr_t) (0) } }, >- { "longNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITLongNullableAttr), (intptr_t) (0) } }, >- { "unsignedLongNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr), (intptr_t) (0) } }, >- { "longLongNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITLongLongNullableAttr), (intptr_t) (0) } }, >- { "unsignedLongLongNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr), (intptr_t) (0) } }, >- { "floatNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITFloatNullableAttr), (intptr_t) (0) } }, >- { "unrestrictedFloatNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr), (intptr_t) (0) } }, >- { "doubleNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITDoubleNullableAttr), (intptr_t) (0) } }, >- { "unrestrictedDoubleNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr), (intptr_t) (0) } }, >- { "domStringNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITDomStringNullableAttr), (intptr_t) (0) } }, >- { "byteStringNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITByteStringNullableAttr), (intptr_t) (0) } }, >- { "usvStringNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITUsvStringNullableAttr), (intptr_t) (0) } }, >- { "nodeNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<DOMJITGetterSetterGenerator>(domJITGetterSetterForTestDOMJITNodeNullableAttr), (intptr_t) (0) } }, >+ { "anyAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITAnyAttr), (intptr_t) (0) } }, >+ { "booleanAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITBooleanAttr), (intptr_t) (0) } }, >+ { "byteAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteAttr), (intptr_t) (0) } }, >+ { "octetAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITOctetAttr), (intptr_t) (0) } }, >+ { "shortAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITShortAttr), (intptr_t) (0) } }, >+ { "unsignedShortAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedShortAttr), (intptr_t) (0) } }, >+ { "longAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongAttr), (intptr_t) (0) } }, >+ { "unsignedLongAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongAttr), (intptr_t) (0) } }, >+ { "longLongAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongLongAttr), (intptr_t) (0) } }, >+ { "unsignedLongLongAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongLongAttr), (intptr_t) (0) } }, >+ { "floatAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITFloatAttr), (intptr_t) (0) } }, >+ { "unrestrictedFloatAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedFloatAttr), (intptr_t) (0) } }, >+ { "doubleAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDoubleAttr), (intptr_t) (0) } }, >+ { "unrestrictedDoubleAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedDoubleAttr), (intptr_t) (0) } }, >+ { "domStringAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDomStringAttr), (intptr_t) (0) } }, >+ { "byteStringAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteStringAttr), (intptr_t) (0) } }, >+ { "usvStringAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUsvStringAttr), (intptr_t) (0) } }, >+ { "nodeAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITNodeAttr), (intptr_t) (0) } }, >+ { "booleanNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITBooleanNullableAttr), (intptr_t) (0) } }, >+ { "byteNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteNullableAttr), (intptr_t) (0) } }, >+ { "octetNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITOctetNullableAttr), (intptr_t) (0) } }, >+ { "shortNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITShortNullableAttr), (intptr_t) (0) } }, >+ { "unsignedShortNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedShortNullableAttr), (intptr_t) (0) } }, >+ { "longNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongNullableAttr), (intptr_t) (0) } }, >+ { "unsignedLongNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongNullableAttr), (intptr_t) (0) } }, >+ { "longLongNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITLongLongNullableAttr), (intptr_t) (0) } }, >+ { "unsignedLongLongNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnsignedLongLongNullableAttr), (intptr_t) (0) } }, >+ { "floatNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITFloatNullableAttr), (intptr_t) (0) } }, >+ { "unrestrictedFloatNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedFloatNullableAttr), (intptr_t) (0) } }, >+ { "doubleNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDoubleNullableAttr), (intptr_t) (0) } }, >+ { "unrestrictedDoubleNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUnrestrictedDoubleNullableAttr), (intptr_t) (0) } }, >+ { "domStringNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITDomStringNullableAttr), (intptr_t) (0) } }, >+ { "byteStringNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITByteStringNullableAttr), (intptr_t) (0) } }, >+ { "usvStringNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITUsvStringNullableAttr), (intptr_t) (0) } }, >+ { "nodeNullableAttr", ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast<const JSC::DOMJIT::GetterSetter*>(&DOMJITAttributeForTestDOMJITNodeNullableAttr), (intptr_t) (0) } }, > { "getAttribute", JSC::Function | DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestDOMJITPrototypeFunctionGetAttribute), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITGetAttribute) } }, > { "item", JSC::Function | DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestDOMJITPrototypeFunctionItem), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITItem) } }, > { "hasAttribute", JSC::Function | DOMJITFunction, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestDOMJITPrototypeFunctionHasAttribute), (intptr_t) static_cast<const JSC::DOMJIT::Signature*>(&DOMJITSignatureForTestDOMJITHasAttribute) } }, >@@ -198,7 +547,7 @@ const ClassInfo JSTestDOMJITPrototype::s_info = { "TestDOMJITPrototype", &Base:: > void JSTestDOMJITPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestDOMJITPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestDOMJIT::info(), JSTestDOMJITPrototypeTableValues, *this); > } > > const ClassInfo JSTestDOMJIT::s_info = { "TestDOMJIT", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestDOMJIT) }; >@@ -277,17 +626,6 @@ EncodedJSValue jsTestDOMJITAnyAttr(ExecState* state, EncodedJSValue thisValue, P > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITAnyAttrGetter>(*state, thisValue, "anyAttr"); > } > >-TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITAnyAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLAny>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITAnyAttr() >-{ >- static NeverDestroyed<TestDOMJITAnyAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITBooleanAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -302,17 +640,6 @@ EncodedJSValue jsTestDOMJITBooleanAttr(ExecState* state, EncodedJSValue thisValu > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITBooleanAttrGetter>(*state, thisValue, "booleanAttr"); > } > >-TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITBooleanAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLBoolean>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanAttr() >-{ >- static NeverDestroyed<TestDOMJITBooleanAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITByteAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -327,17 +654,6 @@ EncodedJSValue jsTestDOMJITByteAttr(ExecState* state, EncodedJSValue thisValue, > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITByteAttrGetter>(*state, thisValue, "byteAttr"); > } > >-TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLByte>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteAttr() >-{ >- static NeverDestroyed<TestDOMJITByteAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITOctetAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -352,17 +668,6 @@ EncodedJSValue jsTestDOMJITOctetAttr(ExecState* state, EncodedJSValue thisValue, > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITOctetAttrGetter>(*state, thisValue, "octetAttr"); > } > >-TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITOctetAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLOctet>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetAttr() >-{ >- static NeverDestroyed<TestDOMJITOctetAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITShortAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -377,17 +682,6 @@ EncodedJSValue jsTestDOMJITShortAttr(ExecState* state, EncodedJSValue thisValue, > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITShortAttrGetter>(*state, thisValue, "shortAttr"); > } > >-TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITShortAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLShort>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortAttr() >-{ >- static NeverDestroyed<TestDOMJITShortAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnsignedShortAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -402,17 +696,6 @@ EncodedJSValue jsTestDOMJITUnsignedShortAttr(ExecState* state, EncodedJSValue th > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnsignedShortAttrGetter>(*state, thisValue, "unsignedShortAttr"); > } > >-TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedShortAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLUnsignedShort>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortAttr() >-{ >- static NeverDestroyed<TestDOMJITUnsignedShortAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -427,17 +710,6 @@ EncodedJSValue jsTestDOMJITLongAttr(ExecState* state, EncodedJSValue thisValue, > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITLongAttrGetter>(*state, thisValue, "longAttr"); > } > >-TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLLong>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongAttr() >-{ >- static NeverDestroyed<TestDOMJITLongAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnsignedLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -452,17 +724,6 @@ EncodedJSValue jsTestDOMJITUnsignedLongAttr(ExecState* state, EncodedJSValue thi > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnsignedLongAttrGetter>(*state, thisValue, "unsignedLongAttr"); > } > >-TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLUnsignedLong>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongAttr() >-{ >- static NeverDestroyed<TestDOMJITUnsignedLongAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITLongLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -477,17 +738,6 @@ EncodedJSValue jsTestDOMJITLongLongAttr(ExecState* state, EncodedJSValue thisVal > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITLongLongAttrGetter>(*state, thisValue, "longLongAttr"); > } > >-TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongLongAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLLongLong>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongAttr() >-{ >- static NeverDestroyed<TestDOMJITLongLongAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnsignedLongLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -502,17 +752,6 @@ EncodedJSValue jsTestDOMJITUnsignedLongLongAttr(ExecState* state, EncodedJSValue > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnsignedLongLongAttrGetter>(*state, thisValue, "unsignedLongLongAttr"); > } > >-TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongLongAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLUnsignedLongLong>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongAttr() >-{ >- static NeverDestroyed<TestDOMJITUnsignedLongLongAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITFloatAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -527,17 +766,6 @@ EncodedJSValue jsTestDOMJITFloatAttr(ExecState* state, EncodedJSValue thisValue, > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITFloatAttrGetter>(*state, thisValue, "floatAttr"); > } > >-TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITFloatAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLFloat>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatAttr() >-{ >- static NeverDestroyed<TestDOMJITFloatAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnrestrictedFloatAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -552,17 +780,6 @@ EncodedJSValue jsTestDOMJITUnrestrictedFloatAttr(ExecState* state, EncodedJSValu > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnrestrictedFloatAttrGetter>(*state, thisValue, "unrestrictedFloatAttr"); > } > >-TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedFloatAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLUnrestrictedFloat>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr() >-{ >- static NeverDestroyed<TestDOMJITUnrestrictedFloatAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITDoubleAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -577,17 +794,6 @@ EncodedJSValue jsTestDOMJITDoubleAttr(ExecState* state, EncodedJSValue thisValue > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITDoubleAttrGetter>(*state, thisValue, "doubleAttr"); > } > >-TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITDoubleAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLDouble>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleAttr() >-{ >- static NeverDestroyed<TestDOMJITDoubleAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnrestrictedDoubleAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -602,17 +808,6 @@ EncodedJSValue jsTestDOMJITUnrestrictedDoubleAttr(ExecState* state, EncodedJSVal > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnrestrictedDoubleAttrGetter>(*state, thisValue, "unrestrictedDoubleAttr"); > } > >-TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedDoubleAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLUnrestrictedDouble>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr() >-{ >- static NeverDestroyed<TestDOMJITUnrestrictedDoubleAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITDomStringAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -627,17 +822,6 @@ EncodedJSValue jsTestDOMJITDomStringAttr(ExecState* state, EncodedJSValue thisVa > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITDomStringAttrGetter>(*state, thisValue, "domStringAttr"); > } > >-TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITDomStringAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLDOMString>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringAttr() >-{ >- static NeverDestroyed<TestDOMJITDomStringAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITByteStringAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -652,17 +836,6 @@ EncodedJSValue jsTestDOMJITByteStringAttr(ExecState* state, EncodedJSValue thisV > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITByteStringAttrGetter>(*state, thisValue, "byteStringAttr"); > } > >-TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteStringAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLByteString>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringAttr() >-{ >- static NeverDestroyed<TestDOMJITByteStringAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUsvStringAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -677,17 +850,6 @@ EncodedJSValue jsTestDOMJITUsvStringAttr(ExecState* state, EncodedJSValue thisVa > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUsvStringAttrGetter>(*state, thisValue, "usvStringAttr"); > } > >-TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUsvStringAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLUSVString>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringAttr() >-{ >- static NeverDestroyed<TestDOMJITUsvStringAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITNodeAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -702,17 +864,6 @@ EncodedJSValue jsTestDOMJITNodeAttr(ExecState* state, EncodedJSValue thisValue, > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITNodeAttrGetter>(*state, thisValue, "nodeAttr"); > } > >-TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITNodeAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLInterface<Node>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeAttr() >-{ >- static NeverDestroyed<TestDOMJITNodeAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITBooleanNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -727,17 +878,6 @@ EncodedJSValue jsTestDOMJITBooleanNullableAttr(ExecState* state, EncodedJSValue > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITBooleanNullableAttrGetter>(*state, thisValue, "booleanNullableAttr"); > } > >-TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITBooleanNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLBoolean>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITBooleanNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITByteNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -752,17 +892,6 @@ EncodedJSValue jsTestDOMJITByteNullableAttr(ExecState* state, EncodedJSValue thi > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITByteNullableAttrGetter>(*state, thisValue, "byteNullableAttr"); > } > >-TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLByte>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITByteNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITOctetNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -777,17 +906,6 @@ EncodedJSValue jsTestDOMJITOctetNullableAttr(ExecState* state, EncodedJSValue th > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITOctetNullableAttrGetter>(*state, thisValue, "octetNullableAttr"); > } > >-TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITOctetNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLOctet>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITOctetNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITShortNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -802,17 +920,6 @@ EncodedJSValue jsTestDOMJITShortNullableAttr(ExecState* state, EncodedJSValue th > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITShortNullableAttrGetter>(*state, thisValue, "shortNullableAttr"); > } > >-TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITShortNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLShort>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITShortNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnsignedShortNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -827,17 +934,6 @@ EncodedJSValue jsTestDOMJITUnsignedShortNullableAttr(ExecState* state, EncodedJS > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnsignedShortNullableAttrGetter>(*state, thisValue, "unsignedShortNullableAttr"); > } > >-TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedShortNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnsignedShort>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITUnsignedShortNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -852,17 +948,6 @@ EncodedJSValue jsTestDOMJITLongNullableAttr(ExecState* state, EncodedJSValue thi > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITLongNullableAttrGetter>(*state, thisValue, "longNullableAttr"); > } > >-TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLLong>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITLongNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnsignedLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -877,17 +962,6 @@ EncodedJSValue jsTestDOMJITUnsignedLongNullableAttr(ExecState* state, EncodedJSV > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnsignedLongNullableAttrGetter>(*state, thisValue, "unsignedLongNullableAttr"); > } > >-TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnsignedLong>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITUnsignedLongNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITLongLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -902,17 +976,6 @@ EncodedJSValue jsTestDOMJITLongLongNullableAttr(ExecState* state, EncodedJSValue > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITLongLongNullableAttrGetter>(*state, thisValue, "longLongNullableAttr"); > } > >-TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongLongNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLLongLong>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITLongLongNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnsignedLongLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -927,17 +990,6 @@ EncodedJSValue jsTestDOMJITUnsignedLongLongNullableAttr(ExecState* state, Encode > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnsignedLongLongNullableAttrGetter>(*state, thisValue, "unsignedLongLongNullableAttr"); > } > >-TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongLongNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnsignedLongLong>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITUnsignedLongLongNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITFloatNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -952,17 +1004,6 @@ EncodedJSValue jsTestDOMJITFloatNullableAttr(ExecState* state, EncodedJSValue th > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITFloatNullableAttrGetter>(*state, thisValue, "floatNullableAttr"); > } > >-TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITFloatNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLFloat>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITFloatNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnrestrictedFloatNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -977,17 +1018,6 @@ EncodedJSValue jsTestDOMJITUnrestrictedFloatNullableAttr(ExecState* state, Encod > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnrestrictedFloatNullableAttrGetter>(*state, thisValue, "unrestrictedFloatNullableAttr"); > } > >-TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedFloatNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnrestrictedFloat>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITUnrestrictedFloatNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITDoubleNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -1002,17 +1032,6 @@ EncodedJSValue jsTestDOMJITDoubleNullableAttr(ExecState* state, EncodedJSValue t > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITDoubleNullableAttrGetter>(*state, thisValue, "doubleNullableAttr"); > } > >-TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITDoubleNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLDouble>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITDoubleNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUnrestrictedDoubleNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -1027,17 +1046,6 @@ EncodedJSValue jsTestDOMJITUnrestrictedDoubleNullableAttr(ExecState* state, Enco > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUnrestrictedDoubleNullableAttrGetter>(*state, thisValue, "unrestrictedDoubleNullableAttr"); > } > >-TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedDoubleNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUnrestrictedDouble>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITDomStringNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -1052,17 +1060,6 @@ EncodedJSValue jsTestDOMJITDomStringNullableAttr(ExecState* state, EncodedJSValu > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITDomStringNullableAttrGetter>(*state, thisValue, "domStringNullableAttr"); > } > >-TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITDomStringNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLDOMString>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITDomStringNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITByteStringNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -1077,17 +1074,6 @@ EncodedJSValue jsTestDOMJITByteStringNullableAttr(ExecState* state, EncodedJSVal > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITByteStringNullableAttrGetter>(*state, thisValue, "byteStringNullableAttr"); > } > >-TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteStringNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLByteString>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITByteStringNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITUsvStringNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -1102,17 +1088,6 @@ EncodedJSValue jsTestDOMJITUsvStringNullableAttr(ExecState* state, EncodedJSValu > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITUsvStringNullableAttrGetter>(*state, thisValue, "usvStringNullableAttr"); > } > >-TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITUsvStringNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLUSVString>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITUsvStringNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSValue jsTestDOMJITNodeNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope) > { > UNUSED_PARAM(throwScope); >@@ -1127,17 +1102,6 @@ EncodedJSValue jsTestDOMJITNodeNullableAttr(ExecState* state, EncodedJSValue thi > return IDLAttribute<JSTestDOMJIT>::get<jsTestDOMJITNodeNullableAttrGetter>(*state, thisValue, "nodeNullableAttr"); > } > >-TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT() >- : JSC::DOMJIT::GetterSetter(jsTestDOMJITNodeNullableAttr, nullptr, JSTestDOMJIT::info(), DOMJIT::IDLResultTypeFilter<IDLNullable<IDLInterface<Node>>>::value) >-{ >-} >- >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeNullableAttr() >-{ >- static NeverDestroyed<TestDOMJITNodeNullableAttrDOMJIT> compiler; >- return &compiler.get(); >-} >- > static inline JSC::EncodedJSValue jsTestDOMJITPrototypeFunctionGetAttributeBody(JSC::ExecState* state, typename IDLOperation<JSTestDOMJIT>::ClassParameter castedThis, JSC::ThrowScope& throwScope) > { > UNUSED_PARAM(state); >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h b/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h >index dafc9fb6dcd4542a41194a3d5ce8ebf8a74cdf23..a4dfcbc209d33696bb22d0ccc1a43916d79c1766 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h >@@ -59,322 +59,147 @@ class JSTestDOMJIT : public JSNode { > }; > > >-// DOMJIT emitters for attributes >+// DOM JIT Attributes > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITAnyAttr(void); >-class TestDOMJITAnyAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITAnyAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITAnyAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanAttr(void); >-class TestDOMJITBooleanAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITBooleanAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITBooleanAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteAttr(void); >-class TestDOMJITByteAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITByteAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITByteAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetAttr(void); >-class TestDOMJITOctetAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITOctetAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITOctetAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortAttr(void); >-class TestDOMJITShortAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITShortAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITShortAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortAttr(void); >-class TestDOMJITUnsignedShortAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnsignedShortAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnsignedShortAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongAttr(void); >-class TestDOMJITLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITLongAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITLongAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongAttr(void); >-class TestDOMJITUnsignedLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnsignedLongAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnsignedLongAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongAttr(void); >-class TestDOMJITLongLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITLongLongAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITLongLongAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongAttr(void); >-class TestDOMJITUnsignedLongLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnsignedLongLongAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnsignedLongLongAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatAttr(void); >-class TestDOMJITFloatAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITFloatAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITFloatAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr(void); >-class TestDOMJITUnrestrictedFloatAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnrestrictedFloatAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnrestrictedFloatAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleAttr(void); >-class TestDOMJITDoubleAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITDoubleAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITDoubleAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr(void); >-class TestDOMJITUnrestrictedDoubleAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnrestrictedDoubleAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnrestrictedDoubleAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringAttr(void); >-class TestDOMJITDomStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITDomStringAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITDomStringAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringAttr(void); >-class TestDOMJITByteStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITByteStringAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITByteStringAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringAttr(void); >-class TestDOMJITUsvStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUsvStringAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUsvStringAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeAttr(void); >-class TestDOMJITNodeAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITNodeAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITNodeAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanNullableAttr(void); >-class TestDOMJITBooleanNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITBooleanNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITBooleanNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteNullableAttr(void); >-class TestDOMJITByteNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITByteNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITByteNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetNullableAttr(void); >-class TestDOMJITOctetNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITOctetNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITOctetNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortNullableAttr(void); >-class TestDOMJITShortNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITShortNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITShortNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr(void); >-class TestDOMJITUnsignedShortNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnsignedShortNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnsignedShortNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongNullableAttr(void); >-class TestDOMJITLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITLongNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITLongNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr(void); >-class TestDOMJITUnsignedLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnsignedLongNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnsignedLongNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongNullableAttr(void); >-class TestDOMJITLongLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITLongLongNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITLongLongNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr(void); >-class TestDOMJITUnsignedLongLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnsignedLongLongNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnsignedLongLongNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatNullableAttr(void); >-class TestDOMJITFloatNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITFloatNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITFloatNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr(void); >-class TestDOMJITUnrestrictedFloatNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnrestrictedFloatNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnrestrictedFloatNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleNullableAttr(void); >-class TestDOMJITDoubleNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITDoubleNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITDoubleNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr(void); >-class TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUnrestrictedDoubleNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringNullableAttr(void); >-class TestDOMJITDomStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITDomStringNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITDomStringNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringNullableAttr(void); >-class TestDOMJITByteStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITByteStringNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITByteStringNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringNullableAttr(void); >-class TestDOMJITUsvStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITUsvStringNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITUsvStringNullableAttrAttribute(); > #endif >-}; > >-JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeNullableAttr(void); >-class TestDOMJITNodeNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter { >-public: >- TestDOMJITNodeNullableAttrDOMJIT(); > #if ENABLE(JIT) >- Ref<JSC::DOMJIT::CallDOMGetterSnippet> callDOMGetter() override; >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileTestDOMJITNodeNullableAttrAttribute(); > #endif >-}; > > template<> struct JSDOMWrapperConverterTraits<TestDOMJIT> { > using WrapperClass = JSTestDOMJIT; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp >index b9462300b151e56eb630be1e72682a51b831f012..5a071c0337a09c2bf7347b77762e4a7eb0953dce 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp >@@ -154,10 +154,10 @@ template<> const ClassInfo JSTestEventConstructorConstructor::s_info = { "TestEv > static const HashTableValue JSTestEventConstructorPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestEventConstructorConstructor) } }, >- { "attr1", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "attr2", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "attr1", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "attr2", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > #if ENABLE(SPECIAL_EVENT) >- { "attr3", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "attr3", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif >@@ -168,7 +168,7 @@ const ClassInfo JSTestEventConstructorPrototype::s_info = { "TestEventConstructo > void JSTestEventConstructorPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestEventConstructorPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestEventConstructor::info(), JSTestEventConstructorPrototypeTableValues, *this); > } > > const ClassInfo JSTestEventConstructor::s_info = { "TestEventConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEventConstructor) }; >@@ -239,7 +239,7 @@ static inline JSValue jsTestEventConstructorAttr1Getter(ExecState& state, JSTest > > EncodedJSValue jsTestEventConstructorAttr1(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestEventConstructor>::get<jsTestEventConstructorAttr1Getter>(*state, thisValue, "attr1"); >+ return IDLAttribute<JSTestEventConstructor>::get<jsTestEventConstructorAttr1Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attr1"); > } > > static inline JSValue jsTestEventConstructorAttr2Getter(ExecState& state, JSTestEventConstructor& thisObject, ThrowScope& throwScope) >@@ -253,7 +253,7 @@ static inline JSValue jsTestEventConstructorAttr2Getter(ExecState& state, JSTest > > EncodedJSValue jsTestEventConstructorAttr2(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestEventConstructor>::get<jsTestEventConstructorAttr2Getter>(*state, thisValue, "attr2"); >+ return IDLAttribute<JSTestEventConstructor>::get<jsTestEventConstructorAttr2Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attr2"); > } > > #if ENABLE(SPECIAL_EVENT) >@@ -268,7 +268,7 @@ static inline JSValue jsTestEventConstructorAttr3Getter(ExecState& state, JSTest > > EncodedJSValue jsTestEventConstructorAttr3(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestEventConstructor>::get<jsTestEventConstructorAttr3Getter>(*state, thisValue, "attr3"); >+ return IDLAttribute<JSTestEventConstructor>::get<jsTestEventConstructorAttr3Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attr3"); > } > > #endif >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp >index b90bda81f2199d02d00626a5c706a2e2d775017b..d74d48c2d82d191917390d1d179a3e187b6d6e64 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp >@@ -98,7 +98,7 @@ const ClassInfo JSTestEventTargetPrototype::s_info = { "TestEventTargetPrototype > void JSTestEventTargetPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestEventTargetPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestEventTarget::info(), JSTestEventTargetPrototypeTableValues, *this); > } > > const ClassInfo JSTestEventTarget::s_info = { "TestEventTarget", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestEventTarget) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp >index d4c730a52b476c821989e12914e5cacd247abff4..d87d49d11ecd58d2d065391f849504871ffd3629 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp >@@ -77,10 +77,10 @@ static const struct CompactHashIndex JSTestExceptionTableIndex[2] = { > > static const HashTableValue JSTestExceptionTableValues[] = > { >- { "name", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestExceptionName), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "name", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestExceptionName), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > }; > >-static const HashTable JSTestExceptionTable = { 1, 1, true, JSTestExceptionTableValues, JSTestExceptionTableIndex }; >+static const HashTable JSTestExceptionTable = { 1, 1, true, JSTestException::info(), JSTestExceptionTableValues, JSTestExceptionTableIndex }; > template<> JSValue JSTestExceptionConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject) > { > UNUSED_PARAM(vm); >@@ -108,7 +108,7 @@ const ClassInfo JSTestExceptionPrototype::s_info = { "TestExceptionPrototype", & > void JSTestExceptionPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestExceptionPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestException::info(), JSTestExceptionPrototypeTableValues, *this); > } > > const ClassInfo JSTestException::s_info = { "TestException", &Base::s_info, &JSTestExceptionTable, nullptr, CREATE_METHOD_TABLE(JSTestException) }; >@@ -185,7 +185,7 @@ static inline JSValue jsTestExceptionNameGetter(ExecState& state, JSTestExceptio > > EncodedJSValue jsTestExceptionName(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestException>::get<jsTestExceptionNameGetter>(*state, thisValue, "name"); >+ return IDLAttribute<JSTestException>::get<jsTestExceptionNameGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "name"); > } > > bool JSTestExceptionOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp >index 2a7ba49ee2f6446d4e2cc2ac63ddbec8ee2bf833..2622d65c22907eebf31a18d9cc81135f3ce9033f 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp >@@ -91,7 +91,7 @@ const ClassInfo JSTestGenerateIsReachablePrototype::s_info = { "TestGenerateIsRe > void JSTestGenerateIsReachablePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestGenerateIsReachablePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestGenerateIsReachable::info(), JSTestGenerateIsReachablePrototypeTableValues, *this); > } > > const ClassInfo JSTestGenerateIsReachable::s_info = { "TestGenerateIsReachable", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestGenerateIsReachable) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp >index f38aa56ff8a5698bbf61f5c3235771f3cb4ed4fe..288300c437cc17082215f4af1c5736e6b7a9c368 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp >@@ -97,7 +97,7 @@ static const struct CompactHashIndex JSTestGlobalObjectTableIndex[16] = { > > static const HashTableValue JSTestGlobalObjectTableValues[] = > { >- { "regularAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObjectRegularAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestGlobalObjectRegularAttribute) } }, >+ { "regularAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObjectRegularAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestGlobalObjectRegularAttribute) } }, > { "publicAndPrivateAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObjectPublicAndPrivateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestGlobalObjectPublicAndPrivateAttribute) } }, > #if ENABLE(TEST_FEATURE) > { "publicAndPrivateConditionalAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObjectPublicAndPrivateConditionalAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestGlobalObjectPublicAndPrivateConditionalAttribute) } }, >@@ -107,7 +107,7 @@ static const HashTableValue JSTestGlobalObjectTableValues[] = > { "regularOperation", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestGlobalObjectInstanceFunctionRegularOperation), (intptr_t) (1) } }, > }; > >-static const HashTable JSTestGlobalObjectTable = { 4, 15, true, JSTestGlobalObjectTableValues, JSTestGlobalObjectTableIndex }; >+static const HashTable JSTestGlobalObjectTable = { 4, 15, true, JSTestGlobalObject::info(), JSTestGlobalObjectTableValues, JSTestGlobalObjectTableIndex }; > template<> JSValue JSTestGlobalObjectConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject) > { > UNUSED_PARAM(vm); >@@ -136,7 +136,7 @@ static const HashTableValue JSTestGlobalObjectPrototypeTableValues[] = > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGlobalObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestGlobalObjectConstructor) } }, > }; > >-static const HashTable JSTestGlobalObjectPrototypeTable = { 1, 1, true, JSTestGlobalObjectPrototypeTableValues, JSTestGlobalObjectPrototypeTableIndex }; >+static const HashTable JSTestGlobalObjectPrototypeTable = { 1, 1, true, JSTestGlobalObject::info(), JSTestGlobalObjectPrototypeTableValues, JSTestGlobalObjectPrototypeTableIndex }; > const ClassInfo JSTestGlobalObjectPrototype::s_info = { "TestGlobalObjectPrototype", &Base::s_info, &JSTestGlobalObjectPrototypeTable, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObjectPrototype) }; > > const ClassInfo JSTestGlobalObject::s_info = { "TestGlobalObject", &Base::s_info, &JSTestGlobalObjectTable, nullptr, CREATE_METHOD_TABLE(JSTestGlobalObject) }; >@@ -236,7 +236,7 @@ static inline JSValue jsTestGlobalObjectRegularAttributeGetter(ExecState& state, > > EncodedJSValue jsTestGlobalObjectRegularAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestGlobalObject>::get<jsTestGlobalObjectRegularAttributeGetter>(*state, thisValue, "regularAttribute"); >+ return IDLAttribute<JSTestGlobalObject>::get<jsTestGlobalObjectRegularAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "regularAttribute"); > } > > static inline bool setJSTestGlobalObjectRegularAttributeSetter(ExecState& state, JSTestGlobalObject& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp >index 6c8b1a4e8b762a497bd9d452d52361ed1df25146..a515a7249173fe1352ff9eec886469d18d7eb99a 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp >@@ -94,7 +94,7 @@ const ClassInfo JSTestIndexedSetterNoIdentifierPrototype::s_info = { "TestIndexe > void JSTestIndexedSetterNoIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestIndexedSetterNoIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestIndexedSetterNoIdentifier::info(), JSTestIndexedSetterNoIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestIndexedSetterNoIdentifier::s_info = { "TestIndexedSetterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterNoIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp >index aa7cde10faa523449c949ca838b54a44c3396dc7..c52d450c131cbf053fdedd286e2c415d91a09a3d 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp >@@ -94,7 +94,7 @@ const ClassInfo JSTestIndexedSetterThrowingExceptionPrototype::s_info = { "TestI > void JSTestIndexedSetterThrowingExceptionPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestIndexedSetterThrowingExceptionPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestIndexedSetterThrowingException::info(), JSTestIndexedSetterThrowingExceptionPrototypeTableValues, *this); > } > > const ClassInfo JSTestIndexedSetterThrowingException::s_info = { "TestIndexedSetterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterThrowingException) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp >index b503f6ba31e14d791deffbf2b5a4b6ce4889120e..a0e363180d04b0a0f8f9cec8b47385a0c78b82aa 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp >@@ -100,7 +100,7 @@ const ClassInfo JSTestIndexedSetterWithIdentifierPrototype::s_info = { "TestInde > void JSTestIndexedSetterWithIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestIndexedSetterWithIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestIndexedSetterWithIdentifier::info(), JSTestIndexedSetterWithIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestIndexedSetterWithIdentifier::s_info = { "TestIndexedSetterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestIndexedSetterWithIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp >index d9f28dac1364a4585dfe427ae08182f0b77ba029..ac1cab0c1a2938264dc111c7fcccaa8542e88fe6 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp >@@ -252,7 +252,7 @@ template<> void JSTestInterfaceConstructor::initializeProperties(VM& vm, JSDOMGl > putDirect(vm, vm.propertyNames->prototype, JSTestInterface::prototype(vm, globalObject), DontDelete | ReadOnly | DontEnum); > putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral("TestInterface"))), ReadOnly | DontEnum); > putDirect(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum); >- reifyStaticProperties(vm, JSTestInterfaceConstructorTableValues, *this); >+ reifyStaticProperties(vm, JSTestInterface::info(), JSTestInterfaceConstructorTableValues, *this); > } > > template<> const ClassInfo JSTestInterfaceConstructor::s_info = { "TestInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceConstructor) }; >@@ -263,42 +263,42 @@ static const HashTableValue JSTestInterfacePrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceConstructor) } }, > #if ENABLE(Condition22) || ENABLE(Condition23) >- { "implementsStr1", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "implementsStr1", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition22) || ENABLE(Condition23) >- { "implementsStr2", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsStr2) } }, >+ { "implementsStr2", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsStr2) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition22) || ENABLE(Condition23) >- { "implementsStr3", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsStr3) } }, >+ { "implementsStr3", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsStr3) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition22) || ENABLE(Condition23) >- { "implementsNode", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsNode) } }, >+ { "implementsNode", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsNode) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition11) || ENABLE(Condition12) >- { "supplementalStr1", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "supplementalStr1", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition11) || ENABLE(Condition12) >- { "supplementalStr2", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalStr2) } }, >+ { "supplementalStr2", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalStr2) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition11) || ENABLE(Condition12) >- { "supplementalStr3", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalStr3) } }, >+ { "supplementalStr3", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalStr3) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition11) || ENABLE(Condition12) >- { "supplementalNode", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalNode) } }, >+ { "supplementalNode", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalNode) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif >@@ -369,7 +369,7 @@ const ClassInfo JSTestInterfacePrototype::s_info = { "TestInterfacePrototype", & > void JSTestInterfacePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestInterfacePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestInterface::info(), JSTestInterfacePrototypeTableValues, *this); > } > > const ClassInfo JSTestInterface::s_info = { "TestInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterface) }; >@@ -523,7 +523,7 @@ static inline JSValue jsTestInterfaceImplementsStr1Getter(ExecState& state, JSTe > > EncodedJSValue jsTestInterfaceImplementsStr1(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsStr1Getter>(*state, thisValue, "implementsStr1"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsStr1Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "implementsStr1"); > } > > #endif >@@ -540,7 +540,7 @@ static inline JSValue jsTestInterfaceImplementsStr2Getter(ExecState& state, JSTe > > EncodedJSValue jsTestInterfaceImplementsStr2(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsStr2Getter>(*state, thisValue, "implementsStr2"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsStr2Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "implementsStr2"); > } > > #endif >@@ -574,7 +574,7 @@ static inline JSValue jsTestInterfaceImplementsStr3Getter(ExecState& state, JSTe > > EncodedJSValue jsTestInterfaceImplementsStr3(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsStr3Getter>(*state, thisValue, "implementsStr3"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsStr3Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "implementsStr3"); > } > > #endif >@@ -607,7 +607,7 @@ static inline JSValue jsTestInterfaceImplementsNodeGetter(ExecState& state, JSTe > > EncodedJSValue jsTestInterfaceImplementsNode(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsNodeGetter>(*state, thisValue, "implementsNode"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceImplementsNodeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "implementsNode"); > } > > #endif >@@ -688,7 +688,7 @@ static inline JSValue jsTestInterfaceSupplementalStr1Getter(ExecState& state, JS > > EncodedJSValue jsTestInterfaceSupplementalStr1(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalStr1Getter>(*state, thisValue, "supplementalStr1"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalStr1Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "supplementalStr1"); > } > > #endif >@@ -705,7 +705,7 @@ static inline JSValue jsTestInterfaceSupplementalStr2Getter(ExecState& state, JS > > EncodedJSValue jsTestInterfaceSupplementalStr2(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalStr2Getter>(*state, thisValue, "supplementalStr2"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalStr2Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "supplementalStr2"); > } > > #endif >@@ -739,7 +739,7 @@ static inline JSValue jsTestInterfaceSupplementalStr3Getter(ExecState& state, JS > > EncodedJSValue jsTestInterfaceSupplementalStr3(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalStr3Getter>(*state, thisValue, "supplementalStr3"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalStr3Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "supplementalStr3"); > } > > #endif >@@ -772,7 +772,7 @@ static inline JSValue jsTestInterfaceSupplementalNodeGetter(ExecState& state, JS > > EncodedJSValue jsTestInterfaceSupplementalNode(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalNodeGetter>(*state, thisValue, "supplementalNode"); >+ return IDLAttribute<JSTestInterface>::get<jsTestInterfaceSupplementalNodeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "supplementalNode"); > } > > #endif >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp >index a5862ccdd5b522c4cffa850d1808123216cfca59..4bfab52b387bfd63e81568fbaf23893567e8afd8 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp >@@ -87,7 +87,7 @@ template<> const ClassInfo JSTestInterfaceLeadingUnderscoreConstructor::s_info = > static const HashTableValue JSTestInterfaceLeadingUnderscorePrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceLeadingUnderscoreConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceLeadingUnderscoreConstructor) } }, >- { "readonly", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceLeadingUnderscoreReadonly), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "readonly", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceLeadingUnderscoreReadonly), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > }; > > const ClassInfo JSTestInterfaceLeadingUnderscorePrototype::s_info = { "TestInterfaceLeadingUnderscorePrototype", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscorePrototype) }; >@@ -95,7 +95,7 @@ const ClassInfo JSTestInterfaceLeadingUnderscorePrototype::s_info = { "TestInter > void JSTestInterfaceLeadingUnderscorePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestInterfaceLeadingUnderscorePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestInterfaceLeadingUnderscore::info(), JSTestInterfaceLeadingUnderscorePrototypeTableValues, *this); > } > > const ClassInfo JSTestInterfaceLeadingUnderscore::s_info = { "TestInterfaceLeadingUnderscore", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscore) }; >@@ -172,7 +172,7 @@ static inline JSValue jsTestInterfaceLeadingUnderscoreReadonlyGetter(ExecState& > > EncodedJSValue jsTestInterfaceLeadingUnderscoreReadonly(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestInterfaceLeadingUnderscore>::get<jsTestInterfaceLeadingUnderscoreReadonlyGetter>(*state, thisValue, "readonly"); >+ return IDLAttribute<JSTestInterfaceLeadingUnderscore>::get<jsTestInterfaceLeadingUnderscoreReadonlyGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "readonly"); > } > > bool JSTestInterfaceLeadingUnderscoreOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp >index 0fd8bad07a43ee66bf738b883cfca468a5458904..a6407009ed3868c014bed37ba82ef69c0d31aa11 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp >@@ -106,7 +106,7 @@ const ClassInfo JSTestIterablePrototype::s_info = { "TestIterablePrototype", &Ba > void JSTestIterablePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestIterablePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestIterable::info(), JSTestIterablePrototypeTableValues, *this); > putDirect(vm, vm.propertyNames->iteratorSymbol, getDirect(vm, vm.propertyNames->builtinNames().entriesPublicName()), DontEnum); > } > >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp >index 60cafac25faeff0261303d4acbce96282b5dd4c9..f6722c0d37572d86e5ea94317ccab13a5d8139c4 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp >@@ -100,8 +100,8 @@ static const HashTableValue JSTestJSBuiltinConstructorPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestJSBuiltinConstructorConstructor) } }, > { "testAttribute", Accessor | Builtin, NoIntrinsic, { (intptr_t)static_cast<BuiltinGenerator>(testJSBuiltinConstructorTestAttributeCodeGenerator), (intptr_t) (setTestJSBuiltinConstructorTestAttributeCodeGenerator) } }, >- { "testAttributeCustom", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructorTestAttributeCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "testAttributeRWCustom", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructorTestAttributeRWCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestJSBuiltinConstructorTestAttributeRWCustom) } }, >+ { "testAttributeCustom", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructorTestAttributeCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "testAttributeRWCustom", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestJSBuiltinConstructorTestAttributeRWCustom), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestJSBuiltinConstructorTestAttributeRWCustom) } }, > { "testFunction", JSC::Builtin, NoIntrinsic, { (intptr_t)static_cast<BuiltinGenerator>(testJSBuiltinConstructorTestFunctionCodeGenerator), (intptr_t) (0) } }, > { "testCustomFunction", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunction), (intptr_t) (0) } }, > }; >@@ -111,7 +111,7 @@ const ClassInfo JSTestJSBuiltinConstructorPrototype::s_info = { "TestJSBuiltinCo > void JSTestJSBuiltinConstructorPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestJSBuiltinConstructorPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestJSBuiltinConstructor::info(), JSTestJSBuiltinConstructorPrototypeTableValues, *this); > } > > const ClassInfo JSTestJSBuiltinConstructor::s_info = { "TestJSBuiltinConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestJSBuiltinConstructor) }; >@@ -189,7 +189,7 @@ static inline JSValue jsTestJSBuiltinConstructorTestAttributeCustomGetter(ExecSt > > EncodedJSValue jsTestJSBuiltinConstructorTestAttributeCustom(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestJSBuiltinConstructor>::get<jsTestJSBuiltinConstructorTestAttributeCustomGetter>(*state, thisValue, "testAttributeCustom"); >+ return IDLAttribute<JSTestJSBuiltinConstructor>::get<jsTestJSBuiltinConstructorTestAttributeCustomGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "testAttributeCustom"); > } > > static inline JSValue jsTestJSBuiltinConstructorTestAttributeRWCustomGetter(ExecState& state, JSTestJSBuiltinConstructor& thisObject, ThrowScope& throwScope) >@@ -201,7 +201,7 @@ static inline JSValue jsTestJSBuiltinConstructorTestAttributeRWCustomGetter(Exec > > EncodedJSValue jsTestJSBuiltinConstructorTestAttributeRWCustom(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestJSBuiltinConstructor>::get<jsTestJSBuiltinConstructorTestAttributeRWCustomGetter>(*state, thisValue, "testAttributeRWCustom"); >+ return IDLAttribute<JSTestJSBuiltinConstructor>::get<jsTestJSBuiltinConstructorTestAttributeRWCustomGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "testAttributeRWCustom"); > } > > static inline bool setJSTestJSBuiltinConstructorTestAttributeRWCustomSetter(ExecState& state, JSTestJSBuiltinConstructor& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp >index a089372fac46f7ef6c2157f9b3c02559a64d6eab..6523356fb86b86253c24724e27a07c3df51f49c9 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp >@@ -99,7 +99,7 @@ const ClassInfo JSTestMediaQueryListListenerPrototype::s_info = { "TestMediaQuer > void JSTestMediaQueryListListenerPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestMediaQueryListListenerPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestMediaQueryListListener::info(), JSTestMediaQueryListListenerPrototypeTableValues, *this); > } > > const ClassInfo JSTestMediaQueryListListener::s_info = { "TestMediaQueryListListener", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestMediaQueryListListener) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp >index 8c7ff007bf470811611f21a70ec5db9812b03bd7..3bd25499089f2cf38810bf896fa6f914ba011ed5 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp >@@ -94,7 +94,7 @@ const ClassInfo JSTestNamedAndIndexedSetterNoIdentifierPrototype::s_info = { "Te > void JSTestNamedAndIndexedSetterNoIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedAndIndexedSetterNoIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedAndIndexedSetterNoIdentifier::info(), JSTestNamedAndIndexedSetterNoIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedAndIndexedSetterNoIdentifier::s_info = { "TestNamedAndIndexedSetterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterNoIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp >index 4a5f94b641b8b7ca08aa4e097ff3b04828d2b1a8..3a6cf7ed602b2576775e6a157d6a55533c0476db 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp >@@ -94,7 +94,7 @@ const ClassInfo JSTestNamedAndIndexedSetterThrowingExceptionPrototype::s_info = > void JSTestNamedAndIndexedSetterThrowingExceptionPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedAndIndexedSetterThrowingException::info(), JSTestNamedAndIndexedSetterThrowingExceptionPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedAndIndexedSetterThrowingException::s_info = { "TestNamedAndIndexedSetterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterThrowingException) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp >index 8712e140ddf082e2f6c1c88c868e5d3915b256b7..fea22b2a7f995f12c76f2a8b86e31171d3c4b384 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp >@@ -102,7 +102,7 @@ const ClassInfo JSTestNamedAndIndexedSetterWithIdentifierPrototype::s_info = { " > void JSTestNamedAndIndexedSetterWithIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedAndIndexedSetterWithIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedAndIndexedSetterWithIdentifier::info(), JSTestNamedAndIndexedSetterWithIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedAndIndexedSetterWithIdentifier::s_info = { "TestNamedAndIndexedSetterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedAndIndexedSetterWithIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp >index ee58b19817da33311c1f7dac5bdf9eb35c2c1f67..6ce461bc3f439253185fc2050f0bff4c920325c0 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp >@@ -129,7 +129,7 @@ const ClassInfo JSTestNamedConstructorPrototype::s_info = { "TestNamedConstructo > void JSTestNamedConstructorPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedConstructorPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedConstructor::info(), JSTestNamedConstructorPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedConstructor::s_info = { "TestNamedConstructor", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedConstructor) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp >index 1f3461bbe21bb3166fdb06599a5c3c4976f200cb..911f7776004c150d178f04adeb333ba6fe0e1193 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp >@@ -93,7 +93,7 @@ const ClassInfo JSTestNamedDeleterNoIdentifierPrototype::s_info = { "TestNamedDe > void JSTestNamedDeleterNoIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedDeleterNoIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedDeleterNoIdentifier::info(), JSTestNamedDeleterNoIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedDeleterNoIdentifier::s_info = { "TestNamedDeleterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterNoIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp >index 6c9728b74f650f7bf0d12a571069dd5bf5388ed3..84202f54fbe0e23db7fdec3b92f9596c60dbc494 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp >@@ -93,7 +93,7 @@ const ClassInfo JSTestNamedDeleterThrowingExceptionPrototype::s_info = { "TestNa > void JSTestNamedDeleterThrowingExceptionPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedDeleterThrowingExceptionPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedDeleterThrowingException::info(), JSTestNamedDeleterThrowingExceptionPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedDeleterThrowingException::s_info = { "TestNamedDeleterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterThrowingException) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp >index 7d9c3be4690f2c6e3a719ca566152d0feefb94d8..e27d9ed8928549f68b6b33062ffafcfb1e5c1598 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp >@@ -99,7 +99,7 @@ const ClassInfo JSTestNamedDeleterWithIdentifierPrototype::s_info = { "TestNamed > void JSTestNamedDeleterWithIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedDeleterWithIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedDeleterWithIdentifier::info(), JSTestNamedDeleterWithIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedDeleterWithIdentifier::s_info = { "TestNamedDeleterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterWithIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp >index 1d63c10f1428b00db820709d37cbd98eb4474b93..10f55976467ac6d29621eeb7a229f1b2d40e11a7 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp >@@ -95,7 +95,7 @@ const ClassInfo JSTestNamedDeleterWithIndexedGetterPrototype::s_info = { "TestNa > void JSTestNamedDeleterWithIndexedGetterPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedDeleterWithIndexedGetterPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedDeleterWithIndexedGetter::info(), JSTestNamedDeleterWithIndexedGetterPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedDeleterWithIndexedGetter::s_info = { "TestNamedDeleterWithIndexedGetter", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedDeleterWithIndexedGetter) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp >index 5769869707e9c2e5cc62e18d9a9758afec0fda17..6e8ef1dfc8926e76d2c633e2209478bfa99af6c8 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp >@@ -92,7 +92,7 @@ const ClassInfo JSTestNamedSetterNoIdentifierPrototype::s_info = { "TestNamedSet > void JSTestNamedSetterNoIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedSetterNoIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedSetterNoIdentifier::info(), JSTestNamedSetterNoIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedSetterNoIdentifier::s_info = { "TestNamedSetterNoIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedSetterNoIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp >index 2609634989438f34db47d84bca4fe61033b20a3b..64465738b56ee7d484959b695cd20d5863f6575a 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp >@@ -92,7 +92,7 @@ const ClassInfo JSTestNamedSetterThrowingExceptionPrototype::s_info = { "TestNam > void JSTestNamedSetterThrowingExceptionPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedSetterThrowingExceptionPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedSetterThrowingException::info(), JSTestNamedSetterThrowingExceptionPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedSetterThrowingException::s_info = { "TestNamedSetterThrowingException", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedSetterThrowingException) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp >index e81bf37c34d39375538e37eb45f3a5b91c719de2..411255460f37b902f6ae05eee75f74bf19cf3342 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp >@@ -98,7 +98,7 @@ const ClassInfo JSTestNamedSetterWithIdentifierPrototype::s_info = { "TestNamedS > void JSTestNamedSetterWithIdentifierPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedSetterWithIdentifierPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedSetterWithIdentifier::info(), JSTestNamedSetterWithIdentifierPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedSetterWithIdentifier::s_info = { "TestNamedSetterWithIdentifier", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedSetterWithIdentifier) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp >index 53833e06aba6eb195001814d451538c954e38bac..ce72b5b4c59d0e6632cb8e4d72e7a0b4100c9fea 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp >@@ -92,7 +92,7 @@ const ClassInfo JSTestNamedSetterWithOverrideBuiltinsPrototype::s_info = { "Test > void JSTestNamedSetterWithOverrideBuiltinsPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedSetterWithOverrideBuiltinsPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedSetterWithOverrideBuiltins::info(), JSTestNamedSetterWithOverrideBuiltinsPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedSetterWithOverrideBuiltins::s_info = { "TestNamedSetterWithOverrideBuiltins", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestNamedSetterWithOverrideBuiltins) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp >index 4cf030c95d2e688d59de63aeb7722a0a8c93f218..18a0b984813e71621743fa60dcd916e24c3421b3 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp >@@ -84,11 +84,11 @@ static const struct CompactHashIndex JSTestNamedSetterWithUnforgablePropertiesTa > > static const HashTableValue JSTestNamedSetterWithUnforgablePropertiesTableValues[] = > { >- { "unforgeableAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "unforgeableAttribute", DontDelete | ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > { "unforgeableOperation", DontDelete | ReadOnly | JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestNamedSetterWithUnforgablePropertiesInstanceFunctionUnforgeableOperation), (intptr_t) (0) } }, > }; > >-static const HashTable JSTestNamedSetterWithUnforgablePropertiesTable = { 2, 3, true, JSTestNamedSetterWithUnforgablePropertiesTableValues, JSTestNamedSetterWithUnforgablePropertiesTableIndex }; >+static const HashTable JSTestNamedSetterWithUnforgablePropertiesTable = { 2, 3, true, JSTestNamedSetterWithUnforgableProperties::info(), JSTestNamedSetterWithUnforgablePropertiesTableValues, JSTestNamedSetterWithUnforgablePropertiesTableIndex }; > template<> JSValue JSTestNamedSetterWithUnforgablePropertiesConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject) > { > UNUSED_PARAM(vm); >@@ -116,7 +116,7 @@ const ClassInfo JSTestNamedSetterWithUnforgablePropertiesPrototype::s_info = { " > void JSTestNamedSetterWithUnforgablePropertiesPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedSetterWithUnforgablePropertiesPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedSetterWithUnforgableProperties::info(), JSTestNamedSetterWithUnforgablePropertiesPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedSetterWithUnforgableProperties::s_info = { "TestNamedSetterWithUnforgableProperties", &Base::s_info, &JSTestNamedSetterWithUnforgablePropertiesTable, nullptr, CREATE_METHOD_TABLE(JSTestNamedSetterWithUnforgableProperties) }; >@@ -311,7 +311,7 @@ static inline JSValue jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttrib > > EncodedJSValue jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestNamedSetterWithUnforgableProperties>::get<jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttributeGetter>(*state, thisValue, "unforgeableAttribute"); >+ return IDLAttribute<JSTestNamedSetterWithUnforgableProperties>::get<jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "unforgeableAttribute"); > } > > static inline JSC::EncodedJSValue jsTestNamedSetterWithUnforgablePropertiesInstanceFunctionUnforgeableOperationBody(JSC::ExecState* state, typename IDLOperation<JSTestNamedSetterWithUnforgableProperties>::ClassParameter castedThis, JSC::ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp >index 8f45d28845bc9a29ffd7cfdbb79fa1e42046add3..653797431a8b93bcfdd5f74f7e245f6ffb37b2cd 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp >@@ -84,11 +84,11 @@ static const struct CompactHashIndex JSTestNamedSetterWithUnforgablePropertiesAn > > static const HashTableValue JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTableValues[] = > { >- { "unforgeableAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "unforgeableAttribute", DontDelete | ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > { "unforgeableOperation", DontDelete | ReadOnly | JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsInstanceFunctionUnforgeableOperation), (intptr_t) (0) } }, > }; > >-static const HashTable JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTable = { 2, 3, true, JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTableValues, JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTableIndex }; >+static const HashTable JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTable = { 2, 3, true, JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::info(), JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTableValues, JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTableIndex }; > template<> JSValue JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject) > { > UNUSED_PARAM(vm); >@@ -116,7 +116,7 @@ const ClassInfo JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsProt > void JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::info(), JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsPrototypeTableValues, *this); > } > > const ClassInfo JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::s_info = { "TestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins", &Base::s_info, &JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsTable, nullptr, CREATE_METHOD_TABLE(JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins) }; >@@ -294,7 +294,7 @@ static inline JSValue jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuilti > > EncodedJSValue jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins>::get<jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttributeGetter>(*state, thisValue, "unforgeableAttribute"); >+ return IDLAttribute<JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins>::get<jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "unforgeableAttribute"); > } > > static inline JSC::EncodedJSValue jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsInstanceFunctionUnforgeableOperationBody(JSC::ExecState* state, typename IDLOperation<JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins>::ClassParameter castedThis, JSC::ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp >index 4288fd846032b5fd8cd7578540751090672bbbef..81b2335de697a262827c5b207a44e9a084ea1ba3 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp >@@ -114,7 +114,7 @@ template<> const ClassInfo JSTestNodeConstructor::s_info = { "TestNode", &Base:: > static const HashTableValue JSTestNodePrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNodeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestNodeConstructor) } }, >- { "name", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNodeName), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestNodeName) } }, >+ { "name", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNodeName), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestNodeName) } }, > { "testWorkerPromise", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestNodePrototypeFunctionTestWorkerPromise), (intptr_t) (0) } }, > { "entries", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestNodePrototypeFunctionEntries), (intptr_t) (0) } }, > { "keys", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestNodePrototypeFunctionKeys), (intptr_t) (0) } }, >@@ -128,7 +128,7 @@ const ClassInfo JSTestNodePrototype::s_info = { "TestNodePrototype", &Base::s_in > void JSTestNodePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestNodePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestNode::info(), JSTestNodePrototypeTableValues, *this); > if (!RuntimeEnabledFeatures::sharedFeatures().domIteratorEnabled()) { > Identifier propertyName = Identifier::fromString(&vm, reinterpret_cast<const LChar*>("entries"), strlen("entries")); > VM::DeletePropertyModeScope scope(vm, VM::DeletePropertyMode::IgnoreConfigurable); >@@ -225,7 +225,7 @@ static inline JSValue jsTestNodeNameGetter(ExecState& state, JSTestNode& thisObj > > EncodedJSValue jsTestNodeName(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestNode>::get<jsTestNodeNameGetter>(*state, thisValue, "name"); >+ return IDLAttribute<JSTestNode>::get<jsTestNodeNameGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "name"); > } > > static inline bool setJSTestNodeNameSetter(ExecState& state, JSTestNode& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp >index ea0e5e14131b127848853df0ad181252b7b6d55b..c3574fec205a24476a4ebafd726932436c89b435 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp >@@ -1417,7 +1417,7 @@ static const struct CompactHashIndex JSTestObjTableIndex[17] = { > static const HashTableValue JSTestObjTableValues[] = > { > { "TestSubObjEnabledBySetting", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestSubObjEnabledBySettingConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestSubObjEnabledBySettingConstructor) } }, >- { "unforgeableAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnforgeableAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "unforgeableAttr", DontDelete | ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnforgeableAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > #if ENABLE(Condition1) > { "conditionalAttr4", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr4Constructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr4Constructor) } }, > #else >@@ -1436,7 +1436,7 @@ static const HashTableValue JSTestObjTableValues[] = > { "unforgeableMethod", DontDelete | ReadOnly | JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestObjInstanceFunctionUnforgeableMethod), (intptr_t) (0) } }, > }; > >-static const HashTable JSTestObjTable = { 6, 15, true, JSTestObjTableValues, JSTestObjTableIndex }; >+static const HashTable JSTestObjTable = { 6, 15, true, JSTestObj::info(), JSTestObjTableValues, JSTestObjTableIndex }; > /* Hash table for constructor */ > > static const HashTableValue JSTestObjConstructorTableValues[] = >@@ -1526,7 +1526,7 @@ template<> void JSTestObjConstructor::initializeProperties(VM& vm, JSDOMGlobalOb > putDirect(vm, vm.propertyNames->prototype, JSTestObj::prototype(vm, globalObject), DontDelete | ReadOnly | DontEnum); > putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral("TestObject"))), ReadOnly | DontEnum); > putDirect(vm, vm.propertyNames->length, jsNumber(2), ReadOnly | DontEnum); >- reifyStaticProperties(vm, JSTestObjConstructorTableValues, *this); >+ reifyStaticProperties(vm, JSTestObj::info(), JSTestObjConstructorTableValues, *this); > } > > template<> const ClassInfo JSTestObjConstructor::s_info = { "TestObject", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestObjConstructor) }; >@@ -1536,66 +1536,66 @@ template<> const ClassInfo JSTestObjConstructor::s_info = { "TestObject", &Base: > static const HashTableValue JSTestObjPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConstructor) } }, >- { "readOnlyLongAttr", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "readOnlyStringAttr", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "readOnlyTestObjAttr", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "enumAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnumAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnumAttr) } }, >- { "byteAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjByteAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjByteAttr) } }, >- { "octetAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOctetAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOctetAttr) } }, >- { "shortAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjShortAttr) } }, >- { "clampedShortAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjClampedShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjClampedShortAttr) } }, >- { "enforceRangeShortAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnforceRangeShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnforceRangeShortAttr) } }, >- { "unsignedShortAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedShortAttr) } }, >- { "longAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongAttr) } }, >- { "longLongAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongLongAttr) } }, >- { "unsignedLongLongAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedLongLongAttr) } }, >- { "stringAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttr) } }, >- { "usvstringAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringAttr) } }, >- { "testObjAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestObjAttr) } }, >- { "testNullableObjAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestNullableObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestNullableObjAttr) } }, >+ { "readOnlyLongAttr", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "readOnlyStringAttr", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "readOnlyTestObjAttr", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "enumAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnumAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnumAttr) } }, >+ { "byteAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjByteAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjByteAttr) } }, >+ { "octetAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOctetAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOctetAttr) } }, >+ { "shortAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjShortAttr) } }, >+ { "clampedShortAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjClampedShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjClampedShortAttr) } }, >+ { "enforceRangeShortAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnforceRangeShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnforceRangeShortAttr) } }, >+ { "unsignedShortAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedShortAttr) } }, >+ { "longAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongAttr) } }, >+ { "longLongAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongLongAttr) } }, >+ { "unsignedLongLongAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedLongLongAttr) } }, >+ { "stringAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttr) } }, >+ { "usvstringAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringAttr) } }, >+ { "testObjAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestObjAttr) } }, >+ { "testNullableObjAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestNullableObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestNullableObjAttr) } }, > { "lenientTestObjAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLenientTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLenientTestObjAttr) } }, >- { "stringAttrTreatingNullAsEmptyString", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrTreatingNullAsEmptyString), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrTreatingNullAsEmptyString) } }, >- { "usvstringAttrTreatingNullAsEmptyString", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringAttrTreatingNullAsEmptyString), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringAttrTreatingNullAsEmptyString) } }, >- { "byteStringAttrTreatingNullAsEmptyString", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjByteStringAttrTreatingNullAsEmptyString), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjByteStringAttrTreatingNullAsEmptyString) } }, >- { "stringLongRecordAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringLongRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringLongRecordAttr) } }, >- { "usvstringLongRecordAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringLongRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringLongRecordAttr) } }, >- { "usvstringLongRecordAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringLongRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringLongRecordAttr) } }, >- { "stringObjRecordAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringObjRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringObjRecordAttr) } }, >- { "stringNullableObjRecordAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringNullableObjRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringNullableObjRecordAttr) } }, >- { "dictionaryAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjDictionaryAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjDictionaryAttr) } }, >- { "nullableDictionaryAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableDictionaryAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableDictionaryAttr) } }, >- { "annotatedTypeInUnionAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnnotatedTypeInUnionAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnnotatedTypeInUnionAttr) } }, >- { "annotatedTypeInSequenceAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnnotatedTypeInSequenceAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnnotatedTypeInSequenceAttr) } }, >- { "implementationEnumAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjImplementationEnumAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjImplementationEnumAttr) } }, >- { "XMLObjAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjXMLObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjXMLObjAttr) } }, >- { "create", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCreate), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCreate) } }, >- { "reflectedStringAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) } }, >- { "reflectedUSVStringAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUSVStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUSVStringAttr) } }, >- { "reflectedIntegralAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedIntegralAttr) } }, >- { "reflectedUnsignedIntegralAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUnsignedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUnsignedIntegralAttr) } }, >- { "reflectedBooleanAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedBooleanAttr) } }, >- { "reflectedURLAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedURLAttr) } }, >- { "reflectedUSVURLAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUSVURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUSVURLAttr) } }, >- { "reflectedStringAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) } }, >- { "reflectedCustomIntegralAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomIntegralAttr) } }, >- { "reflectedCustomBooleanAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomBooleanAttr) } }, >- { "reflectedCustomURLAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomURLAttr) } }, >+ { "stringAttrTreatingNullAsEmptyString", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrTreatingNullAsEmptyString), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrTreatingNullAsEmptyString) } }, >+ { "usvstringAttrTreatingNullAsEmptyString", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringAttrTreatingNullAsEmptyString), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringAttrTreatingNullAsEmptyString) } }, >+ { "byteStringAttrTreatingNullAsEmptyString", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjByteStringAttrTreatingNullAsEmptyString), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjByteStringAttrTreatingNullAsEmptyString) } }, >+ { "stringLongRecordAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringLongRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringLongRecordAttr) } }, >+ { "usvstringLongRecordAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringLongRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringLongRecordAttr) } }, >+ { "usvstringLongRecordAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUsvstringLongRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUsvstringLongRecordAttr) } }, >+ { "stringObjRecordAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringObjRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringObjRecordAttr) } }, >+ { "stringNullableObjRecordAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringNullableObjRecordAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringNullableObjRecordAttr) } }, >+ { "dictionaryAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjDictionaryAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjDictionaryAttr) } }, >+ { "nullableDictionaryAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableDictionaryAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableDictionaryAttr) } }, >+ { "annotatedTypeInUnionAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnnotatedTypeInUnionAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnnotatedTypeInUnionAttr) } }, >+ { "annotatedTypeInSequenceAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnnotatedTypeInSequenceAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnnotatedTypeInSequenceAttr) } }, >+ { "implementationEnumAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjImplementationEnumAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjImplementationEnumAttr) } }, >+ { "XMLObjAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjXMLObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjXMLObjAttr) } }, >+ { "create", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCreate), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCreate) } }, >+ { "reflectedStringAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) } }, >+ { "reflectedUSVStringAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUSVStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUSVStringAttr) } }, >+ { "reflectedIntegralAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedIntegralAttr) } }, >+ { "reflectedUnsignedIntegralAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUnsignedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUnsignedIntegralAttr) } }, >+ { "reflectedBooleanAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedBooleanAttr) } }, >+ { "reflectedURLAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedURLAttr) } }, >+ { "reflectedUSVURLAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUSVURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUSVURLAttr) } }, >+ { "reflectedStringAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) } }, >+ { "reflectedCustomIntegralAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomIntegralAttr) } }, >+ { "reflectedCustomBooleanAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomBooleanAttr) } }, >+ { "reflectedCustomURLAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomURLAttr) } }, > #if ENABLE(TEST_FEATURE) >- { "enabledAtRuntimeAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnabledAtRuntimeAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnabledAtRuntimeAttribute) } }, >+ { "enabledAtRuntimeAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnabledAtRuntimeAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnabledAtRuntimeAttribute) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(TEST_FEATURE) >- { "enabledBySettingAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnabledBySettingAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnabledBySettingAttribute) } }, >+ { "enabledBySettingAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnabledBySettingAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnabledBySettingAttribute) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif >- { "typedArrayAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTypedArrayAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTypedArrayAttr) } }, >- { "attributeWithGetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithGetterException) } }, >- { "attributeWithSetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithSetterException) } }, >- { "stringAttrWithGetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithGetterException) } }, >- { "stringAttrWithSetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithSetterException) } }, >- { "customAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCustomAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCustomAttr) } }, >+ { "typedArrayAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTypedArrayAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTypedArrayAttr) } }, >+ { "attributeWithGetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithGetterException) } }, >+ { "attributeWithSetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithSetterException) } }, >+ { "stringAttrWithGetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithGetterException) } }, >+ { "stringAttrWithSetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithSetterException) } }, >+ { "customAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCustomAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCustomAttr) } }, > #if ENABLE(Condition4) > { "jsBuiltinAttribute", Accessor | Builtin, NoIntrinsic, { (intptr_t)static_cast<BuiltinGenerator>(testObjJsBuiltinAttributeCodeGenerator), (intptr_t) (setTestObjJsBuiltinAttributeCodeGenerator) } }, > #else >@@ -1606,57 +1606,57 @@ static const HashTableValue JSTestObjPrototypeTableValues[] = > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif >- { "onfoo", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOnfoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOnfoo) } }, >- { "onwebkitfoo", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOnwebkitfoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOnwebkitfoo) } }, >- { "withScriptStateAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttribute) } }, >- { "withCallWithAndSetterCallWithAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithCallWithAndSetterCallWithAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithCallWithAndSetterCallWithAttribute) } }, >- { "withScriptExecutionContextAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttribute) } }, >- { "withScriptStateAttributeRaises", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttributeRaises) } }, >- { "withScriptExecutionContextAttributeRaises", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttributeRaises) } }, >- { "withScriptExecutionContextAndScriptStateAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttribute) } }, >- { "withScriptExecutionContextAndScriptStateAttributeRaises", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises) } }, >- { "withScriptExecutionContextAndScriptStateWithSpacesAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute) } }, >- { "withScriptArgumentsAndCallStackAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptArgumentsAndCallStackAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptArgumentsAndCallStackAttribute) } }, >+ { "onfoo", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOnfoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOnfoo) } }, >+ { "onwebkitfoo", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOnwebkitfoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOnwebkitfoo) } }, >+ { "withScriptStateAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttribute) } }, >+ { "withCallWithAndSetterCallWithAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithCallWithAndSetterCallWithAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithCallWithAndSetterCallWithAttribute) } }, >+ { "withScriptExecutionContextAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttribute) } }, >+ { "withScriptStateAttributeRaises", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttributeRaises) } }, >+ { "withScriptExecutionContextAttributeRaises", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttributeRaises) } }, >+ { "withScriptExecutionContextAndScriptStateAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttribute) } }, >+ { "withScriptExecutionContextAndScriptStateAttributeRaises", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises) } }, >+ { "withScriptExecutionContextAndScriptStateWithSpacesAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute) } }, >+ { "withScriptArgumentsAndCallStackAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptArgumentsAndCallStackAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptArgumentsAndCallStackAttribute) } }, > #if ENABLE(Condition1) >- { "conditionalAttr1", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr1) } }, >+ { "conditionalAttr1", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr1) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition1) && ENABLE(Condition2) >- { "conditionalAttr2", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr2) } }, >+ { "conditionalAttr2", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr2) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif > #if ENABLE(Condition1) || ENABLE(Condition2) >- { "conditionalAttr3", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr3) } }, >+ { "conditionalAttr3", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr3) } }, > #else > { 0, 0, NoIntrinsic, { 0, 0 } }, > #endif >- { "cachedAttribute1", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "cachedAttribute2", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "anyAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnyAttribute) } }, >- { "objectAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjObjectAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjObjectAttribute) } }, >- { "contentDocument", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjContentDocument), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "mutablePoint", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjMutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjMutablePoint) } }, >- { "strawberry", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrawberry), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrawberry) } }, >- { "description", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjDescription), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "id", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjId), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjId) } }, >- { "hash", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjHash), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "replaceableAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReplaceableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReplaceableAttribute) } }, >- { "nullableDoubleAttribute", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "nullableLongAttribute", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "nullableBooleanAttribute", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableBooleanAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "nullableStringAttribute", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "nullableLongSettableAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableLongSettableAttribute) } }, >- { "nullableStringSettableAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableStringSettableAttribute) } }, >- { "nullableUSVStringSettableAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableUSVStringSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableUSVStringSettableAttribute) } }, >- { "nullableByteStringSettableAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableByteStringSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableByteStringSettableAttribute) } }, >- { "nullableStringValue", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableStringValue) } }, >- { "attribute", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "attributeWithReservedEnumType", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithReservedEnumType), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithReservedEnumType) } }, >- { "putForwardsAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjPutForwardsAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjPutForwardsAttribute) } }, >- { "putForwardsNullableAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjPutForwardsNullableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjPutForwardsNullableAttribute) } }, >- { "stringifierAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringifierAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringifierAttribute) } }, >+ { "cachedAttribute1", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "cachedAttribute2", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "anyAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnyAttribute) } }, >+ { "objectAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjObjectAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjObjectAttribute) } }, >+ { "contentDocument", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjContentDocument), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "mutablePoint", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjMutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjMutablePoint) } }, >+ { "strawberry", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrawberry), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrawberry) } }, >+ { "description", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjDescription), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "id", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjId), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjId) } }, >+ { "hash", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjHash), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "replaceableAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReplaceableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReplaceableAttribute) } }, >+ { "nullableDoubleAttribute", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "nullableLongAttribute", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "nullableBooleanAttribute", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableBooleanAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "nullableStringAttribute", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "nullableLongSettableAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableLongSettableAttribute) } }, >+ { "nullableStringSettableAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableStringSettableAttribute) } }, >+ { "nullableUSVStringSettableAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableUSVStringSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableUSVStringSettableAttribute) } }, >+ { "nullableByteStringSettableAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableByteStringSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableByteStringSettableAttribute) } }, >+ { "nullableStringValue", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableStringValue) } }, >+ { "attribute", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "attributeWithReservedEnumType", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithReservedEnumType), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithReservedEnumType) } }, >+ { "putForwardsAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjPutForwardsAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjPutForwardsAttribute) } }, >+ { "putForwardsNullableAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjPutForwardsNullableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjPutForwardsNullableAttribute) } }, >+ { "stringifierAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringifierAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringifierAttribute) } }, > #if ENABLE(TEST_FEATURE) > { "enabledAtRuntimeOperation", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionEnabledAtRuntimeOperation), (intptr_t) (1) } }, > #else >@@ -1851,7 +1851,7 @@ const ClassInfo JSTestObjPrototype::s_info = { "TestObjectPrototype", &Base::s_i > void JSTestObjPrototype::finishCreation(VM& vm, JSDOMGlobalObject& globalObject) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestObjPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestObj::info(), JSTestObjPrototypeTableValues, *this); > #if ENABLE(TEST_FEATURE) > if (!RuntimeEnabledFeatures::sharedFeatures().testFeatureEnabled()) { > Identifier propertyName = Identifier::fromString(&vm, reinterpret_cast<const LChar*>("enabledAtRuntimeOperation"), strlen("enabledAtRuntimeOperation")); >@@ -2079,7 +2079,7 @@ static inline JSValue jsTestObjReadOnlyLongAttrGetter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjReadOnlyLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReadOnlyLongAttrGetter>(*state, thisValue, "readOnlyLongAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReadOnlyLongAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "readOnlyLongAttr"); > } > > static inline JSValue jsTestObjReadOnlyStringAttrGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -2093,7 +2093,7 @@ static inline JSValue jsTestObjReadOnlyStringAttrGetter(ExecState& state, JSTest > > EncodedJSValue jsTestObjReadOnlyStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReadOnlyStringAttrGetter>(*state, thisValue, "readOnlyStringAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReadOnlyStringAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "readOnlyStringAttr"); > } > > static inline JSValue jsTestObjReadOnlyTestObjAttrGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -2107,7 +2107,7 @@ static inline JSValue jsTestObjReadOnlyTestObjAttrGetter(ExecState& state, JSTes > > EncodedJSValue jsTestObjReadOnlyTestObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReadOnlyTestObjAttrGetter>(*state, thisValue, "readOnlyTestObjAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReadOnlyTestObjAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "readOnlyTestObjAttr"); > } > > static inline JSValue jsTestObjConstructorStaticReadOnlyLongAttrGetter(ExecState& state) >@@ -2199,7 +2199,7 @@ static inline JSValue jsTestObjEnumAttrGetter(ExecState& state, JSTestObj& thisO > > EncodedJSValue jsTestObjEnumAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjEnumAttrGetter>(*state, thisValue, "enumAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjEnumAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "enumAttr"); > } > > static inline bool setJSTestObjEnumAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2232,7 +2232,7 @@ static inline JSValue jsTestObjByteAttrGetter(ExecState& state, JSTestObj& thisO > > EncodedJSValue jsTestObjByteAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjByteAttrGetter>(*state, thisValue, "byteAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjByteAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "byteAttr"); > } > > static inline bool setJSTestObjByteAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2262,7 +2262,7 @@ static inline JSValue jsTestObjOctetAttrGetter(ExecState& state, JSTestObj& this > > EncodedJSValue jsTestObjOctetAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjOctetAttrGetter>(*state, thisValue, "octetAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjOctetAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "octetAttr"); > } > > static inline bool setJSTestObjOctetAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2292,7 +2292,7 @@ static inline JSValue jsTestObjShortAttrGetter(ExecState& state, JSTestObj& this > > EncodedJSValue jsTestObjShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjShortAttrGetter>(*state, thisValue, "shortAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjShortAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "shortAttr"); > } > > static inline bool setJSTestObjShortAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2322,7 +2322,7 @@ static inline JSValue jsTestObjClampedShortAttrGetter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjClampedShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjClampedShortAttrGetter>(*state, thisValue, "clampedShortAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjClampedShortAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "clampedShortAttr"); > } > > static inline bool setJSTestObjClampedShortAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2352,7 +2352,7 @@ static inline JSValue jsTestObjEnforceRangeShortAttrGetter(ExecState& state, JST > > EncodedJSValue jsTestObjEnforceRangeShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjEnforceRangeShortAttrGetter>(*state, thisValue, "enforceRangeShortAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjEnforceRangeShortAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "enforceRangeShortAttr"); > } > > static inline bool setJSTestObjEnforceRangeShortAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2382,7 +2382,7 @@ static inline JSValue jsTestObjUnsignedShortAttrGetter(ExecState& state, JSTestO > > EncodedJSValue jsTestObjUnsignedShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjUnsignedShortAttrGetter>(*state, thisValue, "unsignedShortAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjUnsignedShortAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "unsignedShortAttr"); > } > > static inline bool setJSTestObjUnsignedShortAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2412,7 +2412,7 @@ static inline JSValue jsTestObjLongAttrGetter(ExecState& state, JSTestObj& thisO > > EncodedJSValue jsTestObjLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjLongAttrGetter>(*state, thisValue, "longAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjLongAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "longAttr"); > } > > static inline bool setJSTestObjLongAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2442,7 +2442,7 @@ static inline JSValue jsTestObjLongLongAttrGetter(ExecState& state, JSTestObj& t > > EncodedJSValue jsTestObjLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjLongLongAttrGetter>(*state, thisValue, "longLongAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjLongLongAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "longLongAttr"); > } > > static inline bool setJSTestObjLongLongAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2472,7 +2472,7 @@ static inline JSValue jsTestObjUnsignedLongLongAttrGetter(ExecState& state, JSTe > > EncodedJSValue jsTestObjUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjUnsignedLongLongAttrGetter>(*state, thisValue, "unsignedLongLongAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjUnsignedLongLongAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "unsignedLongLongAttr"); > } > > static inline bool setJSTestObjUnsignedLongLongAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2502,7 +2502,7 @@ static inline JSValue jsTestObjStringAttrGetter(ExecState& state, JSTestObj& thi > > EncodedJSValue jsTestObjStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrGetter>(*state, thisValue, "stringAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringAttr"); > } > > static inline bool setJSTestObjStringAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2532,7 +2532,7 @@ static inline JSValue jsTestObjUsvstringAttrGetter(ExecState& state, JSTestObj& > > EncodedJSValue jsTestObjUsvstringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringAttrGetter>(*state, thisValue, "usvstringAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "usvstringAttr"); > } > > static inline bool setJSTestObjUsvstringAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2562,7 +2562,7 @@ static inline JSValue jsTestObjTestObjAttrGetter(ExecState& state, JSTestObj& th > > EncodedJSValue jsTestObjTestObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjTestObjAttrGetter>(*state, thisValue, "testObjAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjTestObjAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "testObjAttr"); > } > > static inline bool setJSTestObjTestObjAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2592,7 +2592,7 @@ static inline JSValue jsTestObjTestNullableObjAttrGetter(ExecState& state, JSTes > > EncodedJSValue jsTestObjTestNullableObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjTestNullableObjAttrGetter>(*state, thisValue, "testNullableObjAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjTestNullableObjAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "testNullableObjAttr"); > } > > static inline bool setJSTestObjTestNullableObjAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2652,7 +2652,7 @@ static inline JSValue jsTestObjUnforgeableAttrGetter(ExecState& state, JSTestObj > > EncodedJSValue jsTestObjUnforgeableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjUnforgeableAttrGetter>(*state, thisValue, "unforgeableAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjUnforgeableAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "unforgeableAttr"); > } > > static inline JSValue jsTestObjStringAttrTreatingNullAsEmptyStringGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -2666,7 +2666,7 @@ static inline JSValue jsTestObjStringAttrTreatingNullAsEmptyStringGetter(ExecSta > > EncodedJSValue jsTestObjStringAttrTreatingNullAsEmptyString(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrTreatingNullAsEmptyStringGetter>(*state, thisValue, "stringAttrTreatingNullAsEmptyString"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrTreatingNullAsEmptyStringGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringAttrTreatingNullAsEmptyString"); > } > > static inline bool setJSTestObjStringAttrTreatingNullAsEmptyStringSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2696,7 +2696,7 @@ static inline JSValue jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter(Exec > > EncodedJSValue jsTestObjUsvstringAttrTreatingNullAsEmptyString(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter>(*state, thisValue, "usvstringAttrTreatingNullAsEmptyString"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "usvstringAttrTreatingNullAsEmptyString"); > } > > static inline bool setJSTestObjUsvstringAttrTreatingNullAsEmptyStringSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2726,7 +2726,7 @@ static inline JSValue jsTestObjByteStringAttrTreatingNullAsEmptyStringGetter(Exe > > EncodedJSValue jsTestObjByteStringAttrTreatingNullAsEmptyString(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjByteStringAttrTreatingNullAsEmptyStringGetter>(*state, thisValue, "byteStringAttrTreatingNullAsEmptyString"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjByteStringAttrTreatingNullAsEmptyStringGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "byteStringAttrTreatingNullAsEmptyString"); > } > > static inline bool setJSTestObjByteStringAttrTreatingNullAsEmptyStringSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2756,7 +2756,7 @@ static inline JSValue jsTestObjStringLongRecordAttrGetter(ExecState& state, JSTe > > EncodedJSValue jsTestObjStringLongRecordAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringLongRecordAttrGetter>(*state, thisValue, "stringLongRecordAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringLongRecordAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringLongRecordAttr"); > } > > static inline bool setJSTestObjStringLongRecordAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2786,7 +2786,7 @@ static inline JSValue jsTestObjUsvstringLongRecordAttrGetter(ExecState& state, J > > EncodedJSValue jsTestObjUsvstringLongRecordAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringLongRecordAttrGetter>(*state, thisValue, "usvstringLongRecordAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringLongRecordAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "usvstringLongRecordAttr"); > } > > static inline bool setJSTestObjUsvstringLongRecordAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2816,7 +2816,7 @@ static inline JSValue jsTestObjUsvstringLongRecordAttrGetter(ExecState& state, J > > EncodedJSValue jsTestObjUsvstringLongRecordAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringLongRecordAttrGetter>(*state, thisValue, "usvstringLongRecordAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjUsvstringLongRecordAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "usvstringLongRecordAttr"); > } > > static inline bool setJSTestObjUsvstringLongRecordAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2846,7 +2846,7 @@ static inline JSValue jsTestObjStringObjRecordAttrGetter(ExecState& state, JSTes > > EncodedJSValue jsTestObjStringObjRecordAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringObjRecordAttrGetter>(*state, thisValue, "stringObjRecordAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringObjRecordAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringObjRecordAttr"); > } > > static inline bool setJSTestObjStringObjRecordAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2876,7 +2876,7 @@ static inline JSValue jsTestObjStringNullableObjRecordAttrGetter(ExecState& stat > > EncodedJSValue jsTestObjStringNullableObjRecordAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringNullableObjRecordAttrGetter>(*state, thisValue, "stringNullableObjRecordAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringNullableObjRecordAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringNullableObjRecordAttr"); > } > > static inline bool setJSTestObjStringNullableObjRecordAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2906,7 +2906,7 @@ static inline JSValue jsTestObjDictionaryAttrGetter(ExecState& state, JSTestObj& > > EncodedJSValue jsTestObjDictionaryAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjDictionaryAttrGetter>(*state, thisValue, "dictionaryAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjDictionaryAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "dictionaryAttr"); > } > > static inline bool setJSTestObjDictionaryAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2936,7 +2936,7 @@ static inline JSValue jsTestObjNullableDictionaryAttrGetter(ExecState& state, JS > > EncodedJSValue jsTestObjNullableDictionaryAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableDictionaryAttrGetter>(*state, thisValue, "nullableDictionaryAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableDictionaryAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableDictionaryAttr"); > } > > static inline bool setJSTestObjNullableDictionaryAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2966,7 +2966,7 @@ static inline JSValue jsTestObjAnnotatedTypeInUnionAttrGetter(ExecState& state, > > EncodedJSValue jsTestObjAnnotatedTypeInUnionAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjAnnotatedTypeInUnionAttrGetter>(*state, thisValue, "annotatedTypeInUnionAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjAnnotatedTypeInUnionAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "annotatedTypeInUnionAttr"); > } > > static inline bool setJSTestObjAnnotatedTypeInUnionAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -2996,7 +2996,7 @@ static inline JSValue jsTestObjAnnotatedTypeInSequenceAttrGetter(ExecState& stat > > EncodedJSValue jsTestObjAnnotatedTypeInSequenceAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjAnnotatedTypeInSequenceAttrGetter>(*state, thisValue, "annotatedTypeInSequenceAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjAnnotatedTypeInSequenceAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "annotatedTypeInSequenceAttr"); > } > > static inline bool setJSTestObjAnnotatedTypeInSequenceAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3026,7 +3026,7 @@ static inline JSValue jsTestObjImplementationEnumAttrGetter(ExecState& state, JS > > EncodedJSValue jsTestObjImplementationEnumAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjImplementationEnumAttrGetter>(*state, thisValue, "implementationEnumAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjImplementationEnumAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "implementationEnumAttr"); > } > > static inline bool setJSTestObjImplementationEnumAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3059,7 +3059,7 @@ static inline JSValue jsTestObjXMLObjAttrGetter(ExecState& state, JSTestObj& thi > > EncodedJSValue jsTestObjXMLObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjXMLObjAttrGetter>(*state, thisValue, "XMLObjAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjXMLObjAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "XMLObjAttr"); > } > > static inline bool setJSTestObjXMLObjAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3089,7 +3089,7 @@ static inline JSValue jsTestObjCreateGetter(ExecState& state, JSTestObj& thisObj > > EncodedJSValue jsTestObjCreate(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjCreateGetter>(*state, thisValue, "create"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjCreateGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "create"); > } > > static inline bool setJSTestObjCreateSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3119,7 +3119,7 @@ static inline JSValue jsTestObjReflectedStringAttrGetter(ExecState& state, JSTes > > EncodedJSValue jsTestObjReflectedStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedStringAttrGetter>(*state, thisValue, "reflectedStringAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedStringAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedStringAttr"); > } > > static inline bool setJSTestObjReflectedStringAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3149,7 +3149,7 @@ static inline JSValue jsTestObjReflectedUSVStringAttrGetter(ExecState& state, JS > > EncodedJSValue jsTestObjReflectedUSVStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedUSVStringAttrGetter>(*state, thisValue, "reflectedUSVStringAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedUSVStringAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedUSVStringAttr"); > } > > static inline bool setJSTestObjReflectedUSVStringAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3179,7 +3179,7 @@ static inline JSValue jsTestObjReflectedIntegralAttrGetter(ExecState& state, JST > > EncodedJSValue jsTestObjReflectedIntegralAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedIntegralAttrGetter>(*state, thisValue, "reflectedIntegralAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedIntegralAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedIntegralAttr"); > } > > static inline bool setJSTestObjReflectedIntegralAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3209,7 +3209,7 @@ static inline JSValue jsTestObjReflectedUnsignedIntegralAttrGetter(ExecState& st > > EncodedJSValue jsTestObjReflectedUnsignedIntegralAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedUnsignedIntegralAttrGetter>(*state, thisValue, "reflectedUnsignedIntegralAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedUnsignedIntegralAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedUnsignedIntegralAttr"); > } > > static inline bool setJSTestObjReflectedUnsignedIntegralAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3239,7 +3239,7 @@ static inline JSValue jsTestObjReflectedBooleanAttrGetter(ExecState& state, JSTe > > EncodedJSValue jsTestObjReflectedBooleanAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedBooleanAttrGetter>(*state, thisValue, "reflectedBooleanAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedBooleanAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedBooleanAttr"); > } > > static inline bool setJSTestObjReflectedBooleanAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3269,7 +3269,7 @@ static inline JSValue jsTestObjReflectedURLAttrGetter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjReflectedURLAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedURLAttrGetter>(*state, thisValue, "reflectedURLAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedURLAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedURLAttr"); > } > > static inline bool setJSTestObjReflectedURLAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3299,7 +3299,7 @@ static inline JSValue jsTestObjReflectedUSVURLAttrGetter(ExecState& state, JSTes > > EncodedJSValue jsTestObjReflectedUSVURLAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedUSVURLAttrGetter>(*state, thisValue, "reflectedUSVURLAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedUSVURLAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedUSVURLAttr"); > } > > static inline bool setJSTestObjReflectedUSVURLAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3329,7 +3329,7 @@ static inline JSValue jsTestObjReflectedStringAttrGetter(ExecState& state, JSTes > > EncodedJSValue jsTestObjReflectedStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedStringAttrGetter>(*state, thisValue, "reflectedStringAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedStringAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedStringAttr"); > } > > static inline bool setJSTestObjReflectedStringAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3359,7 +3359,7 @@ static inline JSValue jsTestObjReflectedCustomIntegralAttrGetter(ExecState& stat > > EncodedJSValue jsTestObjReflectedCustomIntegralAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedCustomIntegralAttrGetter>(*state, thisValue, "reflectedCustomIntegralAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedCustomIntegralAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedCustomIntegralAttr"); > } > > static inline bool setJSTestObjReflectedCustomIntegralAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3389,7 +3389,7 @@ static inline JSValue jsTestObjReflectedCustomBooleanAttrGetter(ExecState& state > > EncodedJSValue jsTestObjReflectedCustomBooleanAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedCustomBooleanAttrGetter>(*state, thisValue, "reflectedCustomBooleanAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedCustomBooleanAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedCustomBooleanAttr"); > } > > static inline bool setJSTestObjReflectedCustomBooleanAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3419,7 +3419,7 @@ static inline JSValue jsTestObjReflectedCustomURLAttrGetter(ExecState& state, JS > > EncodedJSValue jsTestObjReflectedCustomURLAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReflectedCustomURLAttrGetter>(*state, thisValue, "reflectedCustomURLAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReflectedCustomURLAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reflectedCustomURLAttr"); > } > > static inline bool setJSTestObjReflectedCustomURLAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3450,7 +3450,7 @@ static inline JSValue jsTestObjEnabledAtRuntimeAttributeGetter(ExecState& state, > > EncodedJSValue jsTestObjEnabledAtRuntimeAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjEnabledAtRuntimeAttributeGetter>(*state, thisValue, "enabledAtRuntimeAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjEnabledAtRuntimeAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "enabledAtRuntimeAttribute"); > } > > #endif >@@ -3486,7 +3486,7 @@ static inline JSValue jsTestObjEnabledBySettingAttributeGetter(ExecState& state, > > EncodedJSValue jsTestObjEnabledBySettingAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjEnabledBySettingAttributeGetter>(*state, thisValue, "enabledBySettingAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjEnabledBySettingAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "enabledBySettingAttribute"); > } > > #endif >@@ -3521,7 +3521,7 @@ static inline JSValue jsTestObjTypedArrayAttrGetter(ExecState& state, JSTestObj& > > EncodedJSValue jsTestObjTypedArrayAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjTypedArrayAttrGetter>(*state, thisValue, "typedArrayAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjTypedArrayAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "typedArrayAttr"); > } > > static inline bool setJSTestObjTypedArrayAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3551,7 +3551,7 @@ static inline JSValue jsTestObjAttributeWithGetterExceptionGetter(ExecState& sta > > EncodedJSValue jsTestObjAttributeWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjAttributeWithGetterExceptionGetter>(*state, thisValue, "attributeWithGetterException"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjAttributeWithGetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attributeWithGetterException"); > } > > static inline bool setJSTestObjAttributeWithGetterExceptionSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3581,7 +3581,7 @@ static inline JSValue jsTestObjAttributeWithSetterExceptionGetter(ExecState& sta > > EncodedJSValue jsTestObjAttributeWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjAttributeWithSetterExceptionGetter>(*state, thisValue, "attributeWithSetterException"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjAttributeWithSetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attributeWithSetterException"); > } > > static inline bool setJSTestObjAttributeWithSetterExceptionSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3611,7 +3611,7 @@ static inline JSValue jsTestObjStringAttrWithGetterExceptionGetter(ExecState& st > > EncodedJSValue jsTestObjStringAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrWithGetterExceptionGetter>(*state, thisValue, "stringAttrWithGetterException"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrWithGetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringAttrWithGetterException"); > } > > static inline bool setJSTestObjStringAttrWithGetterExceptionSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3641,7 +3641,7 @@ static inline JSValue jsTestObjStringAttrWithSetterExceptionGetter(ExecState& st > > EncodedJSValue jsTestObjStringAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrWithSetterExceptionGetter>(*state, thisValue, "stringAttrWithSetterException"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringAttrWithSetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringAttrWithSetterException"); > } > > static inline bool setJSTestObjStringAttrWithSetterExceptionSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3669,7 +3669,7 @@ static inline JSValue jsTestObjCustomAttrGetter(ExecState& state, JSTestObj& thi > > EncodedJSValue jsTestObjCustomAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjCustomAttrGetter>(*state, thisValue, "customAttr"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjCustomAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "customAttr"); > } > > static inline bool setJSTestObjCustomAttrSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3694,7 +3694,7 @@ static inline JSValue jsTestObjOnfooGetter(ExecState& state, JSTestObj& thisObje > > EncodedJSValue jsTestObjOnfoo(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjOnfooGetter>(*state, thisValue, "onfoo"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjOnfooGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "onfoo"); > } > > static inline bool setJSTestObjOnfooSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3719,7 +3719,7 @@ static inline JSValue jsTestObjOnwebkitfooGetter(ExecState& state, JSTestObj& th > > EncodedJSValue jsTestObjOnwebkitfoo(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjOnwebkitfooGetter>(*state, thisValue, "onwebkitfoo"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjOnwebkitfooGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "onwebkitfoo"); > } > > static inline bool setJSTestObjOnwebkitfooSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3746,7 +3746,7 @@ static inline JSValue jsTestObjWithScriptStateAttributeGetter(ExecState& state, > > EncodedJSValue jsTestObjWithScriptStateAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptStateAttributeGetter>(*state, thisValue, "withScriptStateAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptStateAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptStateAttribute"); > } > > static inline bool setJSTestObjWithScriptStateAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3776,7 +3776,7 @@ static inline JSValue jsTestObjWithCallWithAndSetterCallWithAttributeGetter(Exec > > EncodedJSValue jsTestObjWithCallWithAndSetterCallWithAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithCallWithAndSetterCallWithAttributeGetter>(*state, thisValue, "withCallWithAndSetterCallWithAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithCallWithAndSetterCallWithAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withCallWithAndSetterCallWithAttribute"); > } > > static inline bool setJSTestObjWithCallWithAndSetterCallWithAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3809,7 +3809,7 @@ static inline JSValue jsTestObjWithScriptExecutionContextAttributeGetter(ExecSta > > EncodedJSValue jsTestObjWithScriptExecutionContextAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAttributeGetter>(*state, thisValue, "withScriptExecutionContextAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptExecutionContextAttribute"); > } > > static inline bool setJSTestObjWithScriptExecutionContextAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3842,7 +3842,7 @@ static inline JSValue jsTestObjWithScriptStateAttributeRaisesGetter(ExecState& s > > EncodedJSValue jsTestObjWithScriptStateAttributeRaises(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptStateAttributeRaisesGetter>(*state, thisValue, "withScriptStateAttributeRaises"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptStateAttributeRaisesGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptStateAttributeRaises"); > } > > static inline bool setJSTestObjWithScriptStateAttributeRaisesSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3875,7 +3875,7 @@ static inline JSValue jsTestObjWithScriptExecutionContextAttributeRaisesGetter(E > > EncodedJSValue jsTestObjWithScriptExecutionContextAttributeRaises(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAttributeRaisesGetter>(*state, thisValue, "withScriptExecutionContextAttributeRaises"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAttributeRaisesGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptExecutionContextAttributeRaises"); > } > > static inline bool setJSTestObjWithScriptExecutionContextAttributeRaisesSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3911,7 +3911,7 @@ static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateAttribute > > EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAndScriptStateAttributeGetter>(*state, thisValue, "withScriptExecutionContextAndScriptStateAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAndScriptStateAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptExecutionContextAndScriptStateAttribute"); > } > > static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3947,7 +3947,7 @@ static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateAttribute > > EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesGetter>(*state, thisValue, "withScriptExecutionContextAndScriptStateAttributeRaises"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptExecutionContextAndScriptStateAttributeRaises"); > } > > static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -3983,7 +3983,7 @@ static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateWithSpace > > EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeGetter>(*state, thisValue, "withScriptExecutionContextAndScriptStateWithSpacesAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptExecutionContextAndScriptStateWithSpacesAttribute"); > } > > static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4016,7 +4016,7 @@ static inline JSValue jsTestObjWithScriptArgumentsAndCallStackAttributeGetter(Ex > > EncodedJSValue jsTestObjWithScriptArgumentsAndCallStackAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptArgumentsAndCallStackAttributeGetter>(*state, thisValue, "withScriptArgumentsAndCallStackAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjWithScriptArgumentsAndCallStackAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "withScriptArgumentsAndCallStackAttribute"); > } > > static inline bool setJSTestObjWithScriptArgumentsAndCallStackAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4047,7 +4047,7 @@ static inline JSValue jsTestObjConditionalAttr1Getter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjConditionalAttr1(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjConditionalAttr1Getter>(*state, thisValue, "conditionalAttr1"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjConditionalAttr1Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "conditionalAttr1"); > } > > #endif >@@ -4083,7 +4083,7 @@ static inline JSValue jsTestObjConditionalAttr2Getter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjConditionalAttr2(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjConditionalAttr2Getter>(*state, thisValue, "conditionalAttr2"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjConditionalAttr2Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "conditionalAttr2"); > } > > #endif >@@ -4119,7 +4119,7 @@ static inline JSValue jsTestObjConditionalAttr3Getter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjConditionalAttr3(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjConditionalAttr3Getter>(*state, thisValue, "conditionalAttr3"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjConditionalAttr3Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "conditionalAttr3"); > } > > #endif >@@ -4250,7 +4250,7 @@ static inline JSValue jsTestObjCachedAttribute1Getter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjCachedAttribute1(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjCachedAttribute1Getter>(*state, thisValue, "cachedAttribute1"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjCachedAttribute1Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "cachedAttribute1"); > } > > static inline JSValue jsTestObjCachedAttribute2Getter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4267,7 +4267,7 @@ static inline JSValue jsTestObjCachedAttribute2Getter(ExecState& state, JSTestOb > > EncodedJSValue jsTestObjCachedAttribute2(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjCachedAttribute2Getter>(*state, thisValue, "cachedAttribute2"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjCachedAttribute2Getter, CastedThisErrorBehavior::Assert>(*state, thisValue, "cachedAttribute2"); > } > > static inline JSValue jsTestObjAnyAttributeGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4281,7 +4281,7 @@ static inline JSValue jsTestObjAnyAttributeGetter(ExecState& state, JSTestObj& t > > EncodedJSValue jsTestObjAnyAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjAnyAttributeGetter>(*state, thisValue, "anyAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjAnyAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "anyAttribute"); > } > > static inline bool setJSTestObjAnyAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4311,7 +4311,7 @@ static inline JSValue jsTestObjObjectAttributeGetter(ExecState& state, JSTestObj > > EncodedJSValue jsTestObjObjectAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjObjectAttributeGetter>(*state, thisValue, "objectAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjObjectAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "objectAttribute"); > } > > static inline bool setJSTestObjObjectAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4341,7 +4341,7 @@ static inline JSValue jsTestObjContentDocumentGetter(ExecState& state, JSTestObj > > EncodedJSValue jsTestObjContentDocument(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjContentDocumentGetter>(*state, thisValue, "contentDocument"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjContentDocumentGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "contentDocument"); > } > > static inline JSValue jsTestObjMutablePointGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4355,7 +4355,7 @@ static inline JSValue jsTestObjMutablePointGetter(ExecState& state, JSTestObj& t > > EncodedJSValue jsTestObjMutablePoint(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjMutablePointGetter>(*state, thisValue, "mutablePoint"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjMutablePointGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "mutablePoint"); > } > > static inline bool setJSTestObjMutablePointSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4385,7 +4385,7 @@ static inline JSValue jsTestObjStrawberryGetter(ExecState& state, JSTestObj& thi > > EncodedJSValue jsTestObjStrawberry(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStrawberryGetter>(*state, thisValue, "strawberry"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStrawberryGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "strawberry"); > } > > static inline bool setJSTestObjStrawberrySetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4415,7 +4415,7 @@ static inline JSValue jsTestObjDescriptionGetter(ExecState& state, JSTestObj& th > > EncodedJSValue jsTestObjDescription(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjDescriptionGetter>(*state, thisValue, "description"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjDescriptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "description"); > } > > static inline JSValue jsTestObjIdGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4429,7 +4429,7 @@ static inline JSValue jsTestObjIdGetter(ExecState& state, JSTestObj& thisObject, > > EncodedJSValue jsTestObjId(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjIdGetter>(*state, thisValue, "id"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjIdGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "id"); > } > > static inline bool setJSTestObjIdSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4459,7 +4459,7 @@ static inline JSValue jsTestObjHashGetter(ExecState& state, JSTestObj& thisObjec > > EncodedJSValue jsTestObjHash(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjHashGetter>(*state, thisValue, "hash"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjHashGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "hash"); > } > > static inline JSValue jsTestObjReplaceableAttributeGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4473,7 +4473,7 @@ static inline JSValue jsTestObjReplaceableAttributeGetter(ExecState& state, JSTe > > EncodedJSValue jsTestObjReplaceableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjReplaceableAttributeGetter>(*state, thisValue, "replaceableAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjReplaceableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "replaceableAttribute"); > } > > static inline bool setJSTestObjReplaceableAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4500,7 +4500,7 @@ static inline JSValue jsTestObjNullableDoubleAttributeGetter(ExecState& state, J > > EncodedJSValue jsTestObjNullableDoubleAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableDoubleAttributeGetter>(*state, thisValue, "nullableDoubleAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableDoubleAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableDoubleAttribute"); > } > > static inline JSValue jsTestObjNullableLongAttributeGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4514,7 +4514,7 @@ static inline JSValue jsTestObjNullableLongAttributeGetter(ExecState& state, JST > > EncodedJSValue jsTestObjNullableLongAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableLongAttributeGetter>(*state, thisValue, "nullableLongAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableLongAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableLongAttribute"); > } > > static inline JSValue jsTestObjNullableBooleanAttributeGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4528,7 +4528,7 @@ static inline JSValue jsTestObjNullableBooleanAttributeGetter(ExecState& state, > > EncodedJSValue jsTestObjNullableBooleanAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableBooleanAttributeGetter>(*state, thisValue, "nullableBooleanAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableBooleanAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableBooleanAttribute"); > } > > static inline JSValue jsTestObjNullableStringAttributeGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4542,7 +4542,7 @@ static inline JSValue jsTestObjNullableStringAttributeGetter(ExecState& state, J > > EncodedJSValue jsTestObjNullableStringAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableStringAttributeGetter>(*state, thisValue, "nullableStringAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableStringAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableStringAttribute"); > } > > static inline JSValue jsTestObjNullableLongSettableAttributeGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4556,7 +4556,7 @@ static inline JSValue jsTestObjNullableLongSettableAttributeGetter(ExecState& st > > EncodedJSValue jsTestObjNullableLongSettableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableLongSettableAttributeGetter>(*state, thisValue, "nullableLongSettableAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableLongSettableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableLongSettableAttribute"); > } > > static inline bool setJSTestObjNullableLongSettableAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4586,7 +4586,7 @@ static inline JSValue jsTestObjNullableStringSettableAttributeGetter(ExecState& > > EncodedJSValue jsTestObjNullableStringSettableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableStringSettableAttributeGetter>(*state, thisValue, "nullableStringSettableAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableStringSettableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableStringSettableAttribute"); > } > > static inline bool setJSTestObjNullableStringSettableAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4616,7 +4616,7 @@ static inline JSValue jsTestObjNullableUSVStringSettableAttributeGetter(ExecStat > > EncodedJSValue jsTestObjNullableUSVStringSettableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableUSVStringSettableAttributeGetter>(*state, thisValue, "nullableUSVStringSettableAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableUSVStringSettableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableUSVStringSettableAttribute"); > } > > static inline bool setJSTestObjNullableUSVStringSettableAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4646,7 +4646,7 @@ static inline JSValue jsTestObjNullableByteStringSettableAttributeGetter(ExecSta > > EncodedJSValue jsTestObjNullableByteStringSettableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableByteStringSettableAttributeGetter>(*state, thisValue, "nullableByteStringSettableAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableByteStringSettableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableByteStringSettableAttribute"); > } > > static inline bool setJSTestObjNullableByteStringSettableAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4676,7 +4676,7 @@ static inline JSValue jsTestObjNullableStringValueGetter(ExecState& state, JSTes > > EncodedJSValue jsTestObjNullableStringValue(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjNullableStringValueGetter>(*state, thisValue, "nullableStringValue"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjNullableStringValueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "nullableStringValue"); > } > > static inline bool setJSTestObjNullableStringValueSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4706,7 +4706,7 @@ static inline JSValue jsTestObjAttributeGetter(ExecState& state, JSTestObj& this > > EncodedJSValue jsTestObjAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjAttributeGetter>(*state, thisValue, "attribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attribute"); > } > > static inline JSValue jsTestObjAttributeWithReservedEnumTypeGetter(ExecState& state, JSTestObj& thisObject, ThrowScope& throwScope) >@@ -4720,7 +4720,7 @@ static inline JSValue jsTestObjAttributeWithReservedEnumTypeGetter(ExecState& st > > EncodedJSValue jsTestObjAttributeWithReservedEnumType(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjAttributeWithReservedEnumTypeGetter>(*state, thisValue, "attributeWithReservedEnumType"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjAttributeWithReservedEnumTypeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attributeWithReservedEnumType"); > } > > static inline bool setJSTestObjAttributeWithReservedEnumTypeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4753,7 +4753,7 @@ static inline JSValue jsTestObjPutForwardsAttributeGetter(ExecState& state, JSTe > > EncodedJSValue jsTestObjPutForwardsAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjPutForwardsAttributeGetter>(*state, thisValue, "putForwardsAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjPutForwardsAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "putForwardsAttribute"); > } > > static inline bool setJSTestObjPutForwardsAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4784,7 +4784,7 @@ static inline JSValue jsTestObjPutForwardsNullableAttributeGetter(ExecState& sta > > EncodedJSValue jsTestObjPutForwardsNullableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjPutForwardsNullableAttributeGetter>(*state, thisValue, "putForwardsNullableAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjPutForwardsNullableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "putForwardsNullableAttribute"); > } > > static inline bool setJSTestObjPutForwardsNullableAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >@@ -4817,7 +4817,7 @@ static inline JSValue jsTestObjStringifierAttributeGetter(ExecState& state, JSTe > > EncodedJSValue jsTestObjStringifierAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestObj>::get<jsTestObjStringifierAttributeGetter>(*state, thisValue, "stringifierAttribute"); >+ return IDLAttribute<JSTestObj>::get<jsTestObjStringifierAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringifierAttribute"); > } > > static inline bool setJSTestObjStringifierAttributeSetter(ExecState& state, JSTestObj& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp >index c96e590e847f5e1f8cb3189f5ebe3640a0b1b622..93ee4904ded00523f7606fd2b2c1aae750614078 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp >@@ -184,7 +184,7 @@ const ClassInfo JSTestOverloadedConstructorsPrototype::s_info = { "TestOverloade > void JSTestOverloadedConstructorsPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestOverloadedConstructorsPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestOverloadedConstructors::info(), JSTestOverloadedConstructorsPrototypeTableValues, *this); > } > > const ClassInfo JSTestOverloadedConstructors::s_info = { "TestOverloadedConstructors", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestOverloadedConstructors) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp >index 89aa36527f3b740cb937cc807455df9628f3be44..b351ef49d4f005c18c05e1b140ccc510a430ab07 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp >@@ -141,7 +141,7 @@ const ClassInfo JSTestOverloadedConstructorsWithSequencePrototype::s_info = { "T > void JSTestOverloadedConstructorsWithSequencePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestOverloadedConstructorsWithSequencePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestOverloadedConstructorsWithSequence::info(), JSTestOverloadedConstructorsWithSequencePrototypeTableValues, *this); > } > > const ClassInfo JSTestOverloadedConstructorsWithSequence::s_info = { "TestOverloadedConstructorsWithSequence", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestOverloadedConstructorsWithSequence) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp >index a3fcf8032ed8191f8edf67435fceb2c639277f80..d447b9d0f21a755fd88db6e8454aedb2a7bbcef9 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp >@@ -99,7 +99,7 @@ const ClassInfo JSTestOverrideBuiltinsPrototype::s_info = { "TestOverrideBuiltin > void JSTestOverrideBuiltinsPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestOverrideBuiltinsPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestOverrideBuiltins::info(), JSTestOverrideBuiltinsPrototypeTableValues, *this); > } > > const ClassInfo JSTestOverrideBuiltins::s_info = { "TestOverrideBuiltins", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestOverrideBuiltins) }; >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp >index 649d139a6895773075814cb7912ad18b65a7484f..a9a7e0af8c350f199733f50808389783c9f5b9b6 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp >@@ -156,7 +156,7 @@ static const HashTableValue JSTestPromiseRejectionEventPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestPromiseRejectionEventConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestPromiseRejectionEventConstructor) } }, > { "promise", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestPromiseRejectionEventPromise), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "reason", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestPromiseRejectionEventReason), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "reason", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestPromiseRejectionEventReason), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > }; > > const ClassInfo JSTestPromiseRejectionEventPrototype::s_info = { "TestPromiseRejectionEventPrototype", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestPromiseRejectionEventPrototype) }; >@@ -164,7 +164,7 @@ const ClassInfo JSTestPromiseRejectionEventPrototype::s_info = { "TestPromiseRej > void JSTestPromiseRejectionEventPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestPromiseRejectionEventPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestPromiseRejectionEvent::info(), JSTestPromiseRejectionEventPrototypeTableValues, *this); > } > > const ClassInfo JSTestPromiseRejectionEvent::s_info = { "TestPromiseRejectionEvent", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestPromiseRejectionEvent) }; >@@ -249,7 +249,7 @@ static inline JSValue jsTestPromiseRejectionEventReasonGetter(ExecState& state, > > EncodedJSValue jsTestPromiseRejectionEventReason(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestPromiseRejectionEvent>::get<jsTestPromiseRejectionEventReasonGetter>(*state, thisValue, "reason"); >+ return IDLAttribute<JSTestPromiseRejectionEvent>::get<jsTestPromiseRejectionEventReasonGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "reason"); > } > > #if ENABLE(BINDING_INTEGRITY) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp >index 9c0b7be07611bd9bbcdf7f24623f9adc1606b18d..01a2bd354dfc7a206f69c7cb9bebcd50155c3e1e 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp >@@ -105,12 +105,12 @@ template<> const ClassInfo JSTestSerializationConstructor::s_info = { "TestSeria > static const HashTableValue JSTestSerializationPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationConstructor) } }, >- { "firstStringAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationFirstStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationFirstStringAttribute) } }, >- { "secondLongAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationSecondLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationSecondLongAttribute) } }, >- { "thirdUnserializableAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationThirdUnserializableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationThirdUnserializableAttribute) } }, >- { "fourthUnrestrictedDoubleAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationFourthUnrestrictedDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationFourthUnrestrictedDoubleAttribute) } }, >- { "fifthLongAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationFifthLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationFifthLongAttribute) } }, >- { "sixthTypedefAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationSixthTypedefAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationSixthTypedefAttribute) } }, >+ { "firstStringAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationFirstStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationFirstStringAttribute) } }, >+ { "secondLongAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationSecondLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationSecondLongAttribute) } }, >+ { "thirdUnserializableAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationThirdUnserializableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationThirdUnserializableAttribute) } }, >+ { "fourthUnrestrictedDoubleAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationFourthUnrestrictedDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationFourthUnrestrictedDoubleAttribute) } }, >+ { "fifthLongAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationFifthLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationFifthLongAttribute) } }, >+ { "sixthTypedefAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationSixthTypedefAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationSixthTypedefAttribute) } }, > { "toJSON", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestSerializationPrototypeFunctionToJSON), (intptr_t) (0) } }, > }; > >@@ -119,7 +119,7 @@ const ClassInfo JSTestSerializationPrototype::s_info = { "TestSerializationProto > void JSTestSerializationPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestSerializationPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestSerialization::info(), JSTestSerializationPrototypeTableValues, *this); > } > > const ClassInfo JSTestSerialization::s_info = { "TestSerialization", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestSerialization) }; >@@ -201,7 +201,7 @@ static inline JSValue jsTestSerializationFirstStringAttributeGetter(ExecState& s > > EncodedJSValue jsTestSerializationFirstStringAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerialization>::get<jsTestSerializationFirstStringAttributeGetter>(*state, thisValue, "firstStringAttribute"); >+ return IDLAttribute<JSTestSerialization>::get<jsTestSerializationFirstStringAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "firstStringAttribute"); > } > > static inline bool setJSTestSerializationFirstStringAttributeSetter(ExecState& state, JSTestSerialization& thisObject, JSValue value, ThrowScope& throwScope) >@@ -231,7 +231,7 @@ static inline JSValue jsTestSerializationSecondLongAttributeGetter(ExecState& st > > EncodedJSValue jsTestSerializationSecondLongAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerialization>::get<jsTestSerializationSecondLongAttributeGetter>(*state, thisValue, "secondLongAttribute"); >+ return IDLAttribute<JSTestSerialization>::get<jsTestSerializationSecondLongAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "secondLongAttribute"); > } > > static inline bool setJSTestSerializationSecondLongAttributeSetter(ExecState& state, JSTestSerialization& thisObject, JSValue value, ThrowScope& throwScope) >@@ -261,7 +261,7 @@ static inline JSValue jsTestSerializationThirdUnserializableAttributeGetter(Exec > > EncodedJSValue jsTestSerializationThirdUnserializableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerialization>::get<jsTestSerializationThirdUnserializableAttributeGetter>(*state, thisValue, "thirdUnserializableAttribute"); >+ return IDLAttribute<JSTestSerialization>::get<jsTestSerializationThirdUnserializableAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "thirdUnserializableAttribute"); > } > > static inline bool setJSTestSerializationThirdUnserializableAttributeSetter(ExecState& state, JSTestSerialization& thisObject, JSValue value, ThrowScope& throwScope) >@@ -291,7 +291,7 @@ static inline JSValue jsTestSerializationFourthUnrestrictedDoubleAttributeGetter > > EncodedJSValue jsTestSerializationFourthUnrestrictedDoubleAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerialization>::get<jsTestSerializationFourthUnrestrictedDoubleAttributeGetter>(*state, thisValue, "fourthUnrestrictedDoubleAttribute"); >+ return IDLAttribute<JSTestSerialization>::get<jsTestSerializationFourthUnrestrictedDoubleAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "fourthUnrestrictedDoubleAttribute"); > } > > static inline bool setJSTestSerializationFourthUnrestrictedDoubleAttributeSetter(ExecState& state, JSTestSerialization& thisObject, JSValue value, ThrowScope& throwScope) >@@ -321,7 +321,7 @@ static inline JSValue jsTestSerializationFifthLongAttributeGetter(ExecState& sta > > EncodedJSValue jsTestSerializationFifthLongAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerialization>::get<jsTestSerializationFifthLongAttributeGetter>(*state, thisValue, "fifthLongAttribute"); >+ return IDLAttribute<JSTestSerialization>::get<jsTestSerializationFifthLongAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "fifthLongAttribute"); > } > > static inline bool setJSTestSerializationFifthLongAttributeSetter(ExecState& state, JSTestSerialization& thisObject, JSValue value, ThrowScope& throwScope) >@@ -351,7 +351,7 @@ static inline JSValue jsTestSerializationSixthTypedefAttributeGetter(ExecState& > > EncodedJSValue jsTestSerializationSixthTypedefAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerialization>::get<jsTestSerializationSixthTypedefAttributeGetter>(*state, thisValue, "sixthTypedefAttribute"); >+ return IDLAttribute<JSTestSerialization>::get<jsTestSerializationSixthTypedefAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "sixthTypedefAttribute"); > } > > static inline bool setJSTestSerializationSixthTypedefAttributeSetter(ExecState& state, JSTestSerialization& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp >index 7c0bf0dd6956596b4ad58e520b2a7555972caa96..a0fade63153f49b831c210322fe708c196cf91f3 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp >@@ -92,7 +92,7 @@ template<> const ClassInfo JSTestSerializationInheritConstructor::s_info = { "Te > static const HashTableValue JSTestSerializationInheritPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritConstructor) } }, >- { "inheritLongAttribute", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritInheritLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritInheritLongAttribute) } }, >+ { "inheritLongAttribute", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritInheritLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritInheritLongAttribute) } }, > { "toJSON", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestSerializationInheritPrototypeFunctionToJSON), (intptr_t) (0) } }, > }; > >@@ -101,7 +101,7 @@ const ClassInfo JSTestSerializationInheritPrototype::s_info = { "TestSerializati > void JSTestSerializationInheritPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestSerializationInheritPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestSerializationInherit::info(), JSTestSerializationInheritPrototypeTableValues, *this); > } > > const ClassInfo JSTestSerializationInherit::s_info = { "TestSerializationInherit", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestSerializationInherit) }; >@@ -177,7 +177,7 @@ static inline JSValue jsTestSerializationInheritInheritLongAttributeGetter(ExecS > > EncodedJSValue jsTestSerializationInheritInheritLongAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializationInherit>::get<jsTestSerializationInheritInheritLongAttributeGetter>(*state, thisValue, "inheritLongAttribute"); >+ return IDLAttribute<JSTestSerializationInherit>::get<jsTestSerializationInheritInheritLongAttributeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "inheritLongAttribute"); > } > > static inline bool setJSTestSerializationInheritInheritLongAttributeSetter(ExecState& state, JSTestSerializationInherit& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp >index c77cc6ac7dfee7921f0a52ec435220cbcbfcac63..54882ddd8dee98a88eb4d13478785ab0bee6572c 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp >@@ -94,8 +94,8 @@ template<> const ClassInfo JSTestSerializationInheritFinalConstructor::s_info = > static const HashTableValue JSTestSerializationInheritFinalPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritFinalConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritFinalConstructor) } }, >- { "finalLongAttributeFoo", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritFinalFinalLongAttributeFoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritFinalFinalLongAttributeFoo) } }, >- { "finalLongAttributeBar", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritFinalFinalLongAttributeBar), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritFinalFinalLongAttributeBar) } }, >+ { "finalLongAttributeFoo", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritFinalFinalLongAttributeFoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritFinalFinalLongAttributeFoo) } }, >+ { "finalLongAttributeBar", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializationInheritFinalFinalLongAttributeBar), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializationInheritFinalFinalLongAttributeBar) } }, > { "toJSON", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestSerializationInheritFinalPrototypeFunctionToJSON), (intptr_t) (0) } }, > }; > >@@ -104,7 +104,7 @@ const ClassInfo JSTestSerializationInheritFinalPrototype::s_info = { "TestSerial > void JSTestSerializationInheritFinalPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestSerializationInheritFinalPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestSerializationInheritFinal::info(), JSTestSerializationInheritFinalPrototypeTableValues, *this); > } > > const ClassInfo JSTestSerializationInheritFinal::s_info = { "TestSerializationInheritFinal", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestSerializationInheritFinal) }; >@@ -180,7 +180,7 @@ static inline JSValue jsTestSerializationInheritFinalFinalLongAttributeFooGetter > > EncodedJSValue jsTestSerializationInheritFinalFinalLongAttributeFoo(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializationInheritFinal>::get<jsTestSerializationInheritFinalFinalLongAttributeFooGetter>(*state, thisValue, "finalLongAttributeFoo"); >+ return IDLAttribute<JSTestSerializationInheritFinal>::get<jsTestSerializationInheritFinalFinalLongAttributeFooGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "finalLongAttributeFoo"); > } > > static inline bool setJSTestSerializationInheritFinalFinalLongAttributeFooSetter(ExecState& state, JSTestSerializationInheritFinal& thisObject, JSValue value, ThrowScope& throwScope) >@@ -210,7 +210,7 @@ static inline JSValue jsTestSerializationInheritFinalFinalLongAttributeBarGetter > > EncodedJSValue jsTestSerializationInheritFinalFinalLongAttributeBar(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializationInheritFinal>::get<jsTestSerializationInheritFinalFinalLongAttributeBarGetter>(*state, thisValue, "finalLongAttributeBar"); >+ return IDLAttribute<JSTestSerializationInheritFinal>::get<jsTestSerializationInheritFinalFinalLongAttributeBarGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "finalLongAttributeBar"); > } > > static inline bool setJSTestSerializationInheritFinalFinalLongAttributeBarSetter(ExecState& state, JSTestSerializationInheritFinal& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp >index b87b2f8217280c771ba1321ee34e96586560e4e8..ff538f4240a247fef2a274c18c99d505bc0239c8 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp >@@ -105,11 +105,11 @@ template<> const ClassInfo JSTestSerializedScriptValueInterfaceConstructor::s_in > static const HashTableValue JSTestSerializedScriptValueInterfacePrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceConstructor) } }, >- { "value", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceValue) } }, >- { "readonlyValue", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "cachedValue", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceCachedValue) } }, >- { "ports", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfacePorts), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >- { "cachedReadonlyValue", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "value", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceValue) } }, >+ { "readonlyValue", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "cachedValue", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceCachedValue) } }, >+ { "ports", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfacePorts), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, >+ { "cachedReadonlyValue", ReadOnly | CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } }, > { "function", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestSerializedScriptValueInterfacePrototypeFunctionFunction), (intptr_t) (1) } }, > { "functionReturning", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionReturning), (intptr_t) (0) } }, > }; >@@ -119,7 +119,7 @@ const ClassInfo JSTestSerializedScriptValueInterfacePrototype::s_info = { "TestS > void JSTestSerializedScriptValueInterfacePrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestSerializedScriptValueInterfacePrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestSerializedScriptValueInterface::info(), JSTestSerializedScriptValueInterfacePrototypeTableValues, *this); > } > > const ClassInfo JSTestSerializedScriptValueInterface::s_info = { "TestSerializedScriptValueInterface", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterface) }; >@@ -201,7 +201,7 @@ static inline JSValue jsTestSerializedScriptValueInterfaceValueGetter(ExecState& > > EncodedJSValue jsTestSerializedScriptValueInterfaceValue(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceValueGetter>(*state, thisValue, "value"); >+ return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceValueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "value"); > } > > static inline bool setJSTestSerializedScriptValueInterfaceValueSetter(ExecState& state, JSTestSerializedScriptValueInterface& thisObject, JSValue value, ThrowScope& throwScope) >@@ -231,7 +231,7 @@ static inline JSValue jsTestSerializedScriptValueInterfaceReadonlyValueGetter(Ex > > EncodedJSValue jsTestSerializedScriptValueInterfaceReadonlyValue(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceReadonlyValueGetter>(*state, thisValue, "readonlyValue"); >+ return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceReadonlyValueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "readonlyValue"); > } > > static inline JSValue jsTestSerializedScriptValueInterfaceCachedValueGetter(ExecState& state, JSTestSerializedScriptValueInterface& thisObject, ThrowScope& throwScope) >@@ -248,7 +248,7 @@ static inline JSValue jsTestSerializedScriptValueInterfaceCachedValueGetter(Exec > > EncodedJSValue jsTestSerializedScriptValueInterfaceCachedValue(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceCachedValueGetter>(*state, thisValue, "cachedValue"); >+ return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceCachedValueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "cachedValue"); > } > > static inline bool setJSTestSerializedScriptValueInterfaceCachedValueSetter(ExecState& state, JSTestSerializedScriptValueInterface& thisObject, JSValue value, ThrowScope& throwScope) >@@ -278,7 +278,7 @@ static inline JSValue jsTestSerializedScriptValueInterfacePortsGetter(ExecState& > > EncodedJSValue jsTestSerializedScriptValueInterfacePorts(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfacePortsGetter>(*state, thisValue, "ports"); >+ return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfacePortsGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "ports"); > } > > static inline JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter(ExecState& state, JSTestSerializedScriptValueInterface& thisObject, ThrowScope& throwScope) >@@ -295,7 +295,7 @@ static inline JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValueGet > > EncodedJSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValue(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter>(*state, thisValue, "cachedReadonlyValue"); >+ return IDLAttribute<JSTestSerializedScriptValueInterface>::get<jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "cachedReadonlyValue"); > } > > static inline JSC::EncodedJSValue jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionBody(JSC::ExecState* state, typename IDLOperation<JSTestSerializedScriptValueInterface>::ClassParameter castedThis, JSC::ThrowScope& throwScope) >diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp >index 3d10796b62a46e69d22a733a22b336f804ad133c..fa74d379686896304f9a964bd31644281cc04dfa 100644 >--- a/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp >+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp >@@ -124,7 +124,7 @@ static const HashTableValue JSTestTypedefsTableValues[] = > { 0, 0, NoIntrinsic, { 0, 0 } } > }; > >-static const HashTable JSTestTypedefsTable = { 0, 1, false, JSTestTypedefsTableValues, JSTestTypedefsTableIndex }; >+static const HashTable JSTestTypedefsTable = { 0, 1, false, JSTestTypedefs::info(), JSTestTypedefsTableValues, JSTestTypedefsTableIndex }; > /* Hash table for constructor */ > > static const HashTableValue JSTestTypedefsConstructorTableValues[] = >@@ -162,7 +162,7 @@ template<> void JSTestTypedefsConstructor::initializeProperties(VM& vm, JSDOMGlo > putDirect(vm, vm.propertyNames->prototype, JSTestTypedefs::prototype(vm, globalObject), DontDelete | ReadOnly | DontEnum); > putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral("TestTypedefs"))), ReadOnly | DontEnum); > putDirect(vm, vm.propertyNames->length, jsNumber(3), ReadOnly | DontEnum); >- reifyStaticProperties(vm, JSTestTypedefsConstructorTableValues, *this); >+ reifyStaticProperties(vm, JSTestTypedefs::info(), JSTestTypedefsConstructorTableValues, *this); > } > > template<> const ClassInfo JSTestTypedefsConstructor::s_info = { "TestTypedefs", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSTestTypedefsConstructor) }; >@@ -172,14 +172,14 @@ template<> const ClassInfo JSTestTypedefsConstructor::s_info = { "TestTypedefs", > static const HashTableValue JSTestTypedefsPrototypeTableValues[] = > { > { "constructor", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsConstructor) } }, >- { "unsignedLongLongAttr", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsUnsignedLongLongAttr) } }, >- { "serializedScriptValue", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsSerializedScriptValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsSerializedScriptValue) } }, >- { "attributeWithClamp", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttributeWithClamp), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttributeWithClamp) } }, >- { "attributeWithClampInTypedef", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttributeWithClampInTypedef), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttributeWithClampInTypedef) } }, >- { "attrWithGetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithGetterException) } }, >- { "attrWithSetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithSetterException) } }, >- { "stringAttrWithGetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithGetterException) } }, >- { "stringAttrWithSetterException", CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithSetterException) } }, >+ { "unsignedLongLongAttr", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsUnsignedLongLongAttr) } }, >+ { "serializedScriptValue", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsSerializedScriptValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsSerializedScriptValue) } }, >+ { "attributeWithClamp", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttributeWithClamp), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttributeWithClamp) } }, >+ { "attributeWithClampInTypedef", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttributeWithClampInTypedef), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttributeWithClampInTypedef) } }, >+ { "attrWithGetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithGetterException) } }, >+ { "attrWithSetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithSetterException) } }, >+ { "stringAttrWithGetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithGetterException) } }, >+ { "stringAttrWithSetterException", CustomAccessor | DOMAttribute, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithSetterException) } }, > { "func", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestTypedefsPrototypeFunctionFunc), (intptr_t) (0) } }, > { "setShadow", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestTypedefsPrototypeFunctionSetShadow), (intptr_t) (3) } }, > { "methodWithSequenceArg", JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestTypedefsPrototypeFunctionMethodWithSequenceArg), (intptr_t) (1) } }, >@@ -202,7 +202,7 @@ const ClassInfo JSTestTypedefsPrototype::s_info = { "TestTypedefsPrototype", &Ba > void JSTestTypedefsPrototype::finishCreation(VM& vm) > { > Base::finishCreation(vm); >- reifyStaticProperties(vm, JSTestTypedefsPrototypeTableValues, *this); >+ reifyStaticProperties(vm, JSTestTypedefs::info(), JSTestTypedefsPrototypeTableValues, *this); > } > > const ClassInfo JSTestTypedefs::s_info = { "TestTypedefs", &Base::s_info, &JSTestTypedefsTable, nullptr, CREATE_METHOD_TABLE(JSTestTypedefs) }; >@@ -284,7 +284,7 @@ static inline JSValue jsTestTypedefsUnsignedLongLongAttrGetter(ExecState& state, > > EncodedJSValue jsTestTypedefsUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsUnsignedLongLongAttrGetter>(*state, thisValue, "unsignedLongLongAttr"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsUnsignedLongLongAttrGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "unsignedLongLongAttr"); > } > > static inline bool setJSTestTypedefsUnsignedLongLongAttrSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >@@ -314,7 +314,7 @@ static inline JSValue jsTestTypedefsSerializedScriptValueGetter(ExecState& state > > EncodedJSValue jsTestTypedefsSerializedScriptValue(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsSerializedScriptValueGetter>(*state, thisValue, "serializedScriptValue"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsSerializedScriptValueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "serializedScriptValue"); > } > > static inline bool setJSTestTypedefsSerializedScriptValueSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >@@ -356,7 +356,7 @@ static inline JSValue jsTestTypedefsAttributeWithClampGetter(ExecState& state, J > > EncodedJSValue jsTestTypedefsAttributeWithClamp(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttributeWithClampGetter>(*state, thisValue, "attributeWithClamp"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttributeWithClampGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attributeWithClamp"); > } > > static inline bool setJSTestTypedefsAttributeWithClampSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >@@ -386,7 +386,7 @@ static inline JSValue jsTestTypedefsAttributeWithClampInTypedefGetter(ExecState& > > EncodedJSValue jsTestTypedefsAttributeWithClampInTypedef(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttributeWithClampInTypedefGetter>(*state, thisValue, "attributeWithClampInTypedef"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttributeWithClampInTypedefGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attributeWithClampInTypedef"); > } > > static inline bool setJSTestTypedefsAttributeWithClampInTypedefSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >@@ -416,7 +416,7 @@ static inline JSValue jsTestTypedefsAttrWithGetterExceptionGetter(ExecState& sta > > EncodedJSValue jsTestTypedefsAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttrWithGetterExceptionGetter>(*state, thisValue, "attrWithGetterException"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttrWithGetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attrWithGetterException"); > } > > static inline bool setJSTestTypedefsAttrWithGetterExceptionSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >@@ -446,7 +446,7 @@ static inline JSValue jsTestTypedefsAttrWithSetterExceptionGetter(ExecState& sta > > EncodedJSValue jsTestTypedefsAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttrWithSetterExceptionGetter>(*state, thisValue, "attrWithSetterException"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsAttrWithSetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "attrWithSetterException"); > } > > static inline bool setJSTestTypedefsAttrWithSetterExceptionSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >@@ -476,7 +476,7 @@ static inline JSValue jsTestTypedefsStringAttrWithGetterExceptionGetter(ExecStat > > EncodedJSValue jsTestTypedefsStringAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsStringAttrWithGetterExceptionGetter>(*state, thisValue, "stringAttrWithGetterException"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsStringAttrWithGetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringAttrWithGetterException"); > } > > static inline bool setJSTestTypedefsStringAttrWithGetterExceptionSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >@@ -506,7 +506,7 @@ static inline JSValue jsTestTypedefsStringAttrWithSetterExceptionGetter(ExecStat > > EncodedJSValue jsTestTypedefsStringAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName) > { >- return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsStringAttrWithSetterExceptionGetter>(*state, thisValue, "stringAttrWithSetterException"); >+ return IDLAttribute<JSTestTypedefs>::get<jsTestTypedefsStringAttrWithSetterExceptionGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "stringAttrWithSetterException"); > } > > static inline bool setJSTestTypedefsStringAttrWithSetterExceptionSetter(ExecState& state, JSTestTypedefs& thisObject, JSValue value, ThrowScope& throwScope) >diff --git a/Source/WebCore/domjit/DOMJITIDLTypeFilter.h b/Source/WebCore/domjit/DOMJITIDLTypeFilter.h >index 7b71e5df2686c698410f66c020f45222154cc140..c18bfb3b5a881178f5c879412d087ec6c139ab3f 100644 >--- a/Source/WebCore/domjit/DOMJITIDLTypeFilter.h >+++ b/Source/WebCore/domjit/DOMJITIDLTypeFilter.h >@@ -25,6 +25,7 @@ > > #pragma once > >+#include "IDLTypes.h" > #include <bytecode/SpeculatedType.h> > > namespace WebCore { namespace DOMJIT { >diff --git a/Source/WebCore/domjit/JSDocumentDOMJIT.cpp b/Source/WebCore/domjit/JSDocumentDOMJIT.cpp >index 343460f703cf238d07b585c47d8b752d1490de07..7e88e09858df5d6e4e4dceb8abebb8b6a849608d 100644 >--- a/Source/WebCore/domjit/JSDocumentDOMJIT.cpp >+++ b/Source/WebCore/domjit/JSDocumentDOMJIT.cpp >@@ -47,7 +47,7 @@ Ref<JSC::Snippet> checkSubClassSnippetForJSDocument() > return DOMJIT::checkDOM<Document>(); > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> DocumentDocumentElementDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileDocumentDocumentElementAttribute() > { > Ref<JSC::DOMJIT::CallDOMGetterSnippet> snippet = JSC::DOMJIT::CallDOMGetterSnippet::create(); > snippet->numGPScratchRegisters = 1; >@@ -80,7 +80,7 @@ static void loadLocalName(CCallHelpers& jit, GPRReg htmlElement, GPRReg localNam > jit.loadPtr(CCallHelpers::Address(localNameImpl, QualifiedName::QualifiedNameImpl::localNameMemoryOffset()), localNameImpl); > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> DocumentBodyDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileDocumentBodyAttribute() > { > Ref<JSC::DOMJIT::CallDOMGetterSnippet> snippet = JSC::DOMJIT::CallDOMGetterSnippet::create(); > snippet->numGPScratchRegisters = 2; >diff --git a/Source/WebCore/domjit/JSNodeDOMJIT.cpp b/Source/WebCore/domjit/JSNodeDOMJIT.cpp >index 8aebb01485ff4f76e65d43cbb7b167f5089f4b9e..a1c77765405444f127e6ca296ff668d5659e6452 100644 >--- a/Source/WebCore/domjit/JSNodeDOMJIT.cpp >+++ b/Source/WebCore/domjit/JSNodeDOMJIT.cpp >@@ -81,42 +81,42 @@ static Ref<JSC::DOMJIT::CallDOMGetterSnippet> createCallDOMGetterForOffsetAccess > return snippet; > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodeFirstChildDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileNodeFirstChildAttribute() > { > auto snippet = createCallDOMGetterForOffsetAccess<Node>(CAST_OFFSET(Node*, ContainerNode*) + ContainerNode::firstChildMemoryOffset(), IsContainerGuardRequirement::Required); > snippet->effect = JSC::DOMJIT::Effect::forDef(DOMJIT::AbstractHeapRepository::Node_firstChild); > return snippet; > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodeLastChildDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileNodeLastChildAttribute() > { > auto snippet = createCallDOMGetterForOffsetAccess<Node>(CAST_OFFSET(Node*, ContainerNode*) + ContainerNode::lastChildMemoryOffset(), IsContainerGuardRequirement::Required); > snippet->effect = JSC::DOMJIT::Effect::forDef(DOMJIT::AbstractHeapRepository::Node_lastChild); > return snippet; > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodeNextSiblingDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileNodeNextSiblingAttribute() > { > auto snippet = createCallDOMGetterForOffsetAccess<Node>(Node::nextSiblingMemoryOffset(), IsContainerGuardRequirement::NotRequired); > snippet->effect = JSC::DOMJIT::Effect::forDef(DOMJIT::AbstractHeapRepository::Node_nextSibling); > return snippet; > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodePreviousSiblingDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileNodePreviousSiblingAttribute() > { > auto snippet = createCallDOMGetterForOffsetAccess<Node>(Node::previousSiblingMemoryOffset(), IsContainerGuardRequirement::NotRequired); > snippet->effect = JSC::DOMJIT::Effect::forDef(DOMJIT::AbstractHeapRepository::Node_previousSibling); > return snippet; > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodeParentNodeDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileNodeParentNodeAttribute() > { > auto snippet = createCallDOMGetterForOffsetAccess<ContainerNode>(Node::parentNodeMemoryOffset(), IsContainerGuardRequirement::NotRequired); > snippet->effect = JSC::DOMJIT::Effect::forDef(DOMJIT::AbstractHeapRepository::Node_parentNode); > return snippet; > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodeNodeTypeDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileNodeNodeTypeAttribute() > { > Ref<JSC::DOMJIT::CallDOMGetterSnippet> snippet = JSC::DOMJIT::CallDOMGetterSnippet::create(); > snippet->effect = JSC::DOMJIT::Effect::forPure(); >@@ -132,7 +132,7 @@ Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodeNodeTypeDOMJIT::callDOMGetter() > return snippet; > } > >-Ref<JSC::DOMJIT::CallDOMGetterSnippet> NodeOwnerDocumentDOMJIT::callDOMGetter() >+Ref<JSC::DOMJIT::CallDOMGetterSnippet> compileNodeOwnerDocumentAttribute() > { > Ref<JSC::DOMJIT::CallDOMGetterSnippet> snippet = JSC::DOMJIT::CallDOMGetterSnippet::create(); > snippet->numGPScratchRegisters = 2; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 7db242e7eefb51ffed011d19dfcc9ce238634623..75846345772dcda8779e136d676f82369df4c268 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2017-06-04 Yusuke Suzuki <utatane.tea@gmail.com> >+ >+ Hoist DOM binding attribute getter prologue into JavaScriptCore taking advantage of DOMJIT / CheckSubClass >+ https://bugs.webkit.org/show_bug.cgi?id=171637 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * js/dom/dom-getters-type-check-expected.txt: Added. >+ * js/dom/dom-getters-type-check.html: Added. >+ > 2017-06-04 Eric Carlson <eric.carlson@apple.com> > > [MediaStream] Page capture state not reported correctly >diff --git a/LayoutTests/js/dom/dom-getters-type-check-expected.txt b/LayoutTests/js/dom/dom-getters-type-check-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..d1df04fe166c41ea72cff4a2eeb9d98cd5d9b4c1 >--- /dev/null >+++ b/LayoutTests/js/dom/dom-getters-type-check-expected.txt >@@ -0,0 +1,7 @@ >+ >+PASS DOM getter should be a function >+PASS DOM getter throws an error with unrelated values >+PASS DOM getter works with element object >+PASS DOM getter access throws an error with unrelated object >+PASS DOM getter access through Element.prototype throws an error with unrelated object >+ >diff --git a/LayoutTests/js/dom/dom-getters-type-check.html b/LayoutTests/js/dom/dom-getters-type-check.html >new file mode 100644 >index 0000000000000000000000000000000000000000..7fe432468a6964830792e1b0181f591fc06f9ea1 >--- /dev/null >+++ b/LayoutTests/js/dom/dom-getters-type-check.html >@@ -0,0 +1,45 @@ >+<!DOCTYPE html> >+<html> >+<head> >+ <meta charset="utf-8"> >+ <title>DOM getters should perform type checks</title> >+ <script src="../../resources/testharness.js"></script> >+ <script src="../../resources/testharnessreport.js"></script> >+</head> >+<body> >+<script> >+ var div = document.createElement("div"); >+ var getter = Object.getOwnPropertyDescriptor(Element.prototype, "scrollTop").get; >+ >+ test(() => { >+ assert_equals(typeof getter, "function"); >+ }, "DOM getter should be a function"); >+ >+ test(() => { >+ assert_throws(new TypeError(), () => { getter(); }, "DOM getter throws an error with undefined"); >+ assert_throws(new TypeError(), () => { getter.call(null); }, "DOM getter throws an error with null"); >+ assert_throws(new TypeError(), () => { getter.call({}); }, "DOM getter throws an error with unrelated object"); >+ assert_throws(new TypeError(), () => { getter.call(document.createText("Hello")); }, "DOM getter throws an error with unrelated DOM object"); >+ }, "DOM getter throws an error with unrelated values"); >+ >+ test(() => { >+ assert_equals(typeof getter.call(div), "number"); >+ }, "DOM getter works with element object"); >+ >+ test(() => { >+ var object = { >+ }; >+ Object.defineProperty(object, "scrollTop", { >+ get: getter >+ }); >+ assert_throws(new TypeError(), () => { object.scrollTop; }); >+ }, "DOM getter access throws an error with unrelated object"); >+ >+ test(() => { >+ var object = { >+ __proto__: Element.prototype >+ }; >+ assert_throws(new TypeError(), () => { object.scrollTop; }); >+ }, "DOM getter access through Element.prototype throws an error with unrelated object"); >+</script> >+</body> >diff --git a/JSTests/ChangeLog b/JSTests/ChangeLog >index 22994efd4b95916c877c22bba50378eeaa10dbcb..a2d9186cc68a3754a8c543983008fb94fe4a731c 100644 >--- a/JSTests/ChangeLog >+++ b/JSTests/ChangeLog >@@ -1,3 +1,16 @@ >+2017-06-04 Yusuke Suzuki <utatane.tea@gmail.com> >+ >+ Hoist DOM binding attribute getter prologue into JavaScriptCore taking advantage of DOMJIT / CheckSubClass >+ https://bugs.webkit.org/show_bug.cgi?id=171637 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * stress/domjit-getter-complex-with-incorrect-object.js: >+ (i.shouldThrow): >+ * stress/domjit-getter-type-check.js: Copied from JSTests/stress/domjit-getter-complex-with-incorrect-object.js. >+ (shouldBe): >+ (i.shouldThrow): >+ > 2017-06-02 Yusuke Suzuki <utatane.tea@gmail.com> > > ASSERTION FAILED: "We should only declare a function as a lexically scoped variable in scopes where var declarations aren't allowed. ..." for function redeclaration with async function module export >diff --git a/JSTests/stress/domjit-getter-complex-with-incorrect-object.js b/JSTests/stress/domjit-getter-complex-with-incorrect-object.js >index b4b80ccd884ac38d043be6208cb98e7c20af6a30..9e6c5a6f49c4bd86ef431288d16cb90d42dda9b3 100644 >--- a/JSTests/stress/domjit-getter-complex-with-incorrect-object.js >+++ b/JSTests/stress/domjit-getter-complex-with-incorrect-object.js >@@ -24,5 +24,5 @@ function access(object) > for (var i = 0; i < 1e4; ++i) { > shouldThrow(() => { > access(object); >- }, `TypeError: Type error`); >+ }, `TypeError: The DOMJITGetterComplex.customGetter getter can only be used on instances of DOMJITGetterComplex`); > } >diff --git a/JSTests/stress/domjit-getter-type-check.js b/JSTests/stress/domjit-getter-type-check.js >new file mode 100644 >index 0000000000000000000000000000000000000000..d76433236766dbc16a57cddfa8e8097db9f1f36d >--- /dev/null >+++ b/JSTests/stress/domjit-getter-type-check.js >@@ -0,0 +1,26 @@ >+function shouldBe(actual, expected) { >+ if (actual !== expected) >+ throw new Error(`bad value: ${String(actual)}`); >+} >+ >+function shouldThrow(func, errorMessage) { >+ var errorThrown = false; >+ var error = null; >+ try { >+ func(); >+ } catch (e) { >+ errorThrown = true; >+ error = e; >+ } >+ if (!errorThrown) >+ throw new Error('not thrown'); >+ if (String(error) !== errorMessage) >+ throw new Error(`bad error: ${String(error)}`); >+} >+ >+var domjit = createDOMJITGetterObject(); >+for (var i = 0; i < 1e3; ++i) { >+ shouldThrow(() => { >+ Reflect.get(domjit, 'customGetter', { customGetter: 42 }); >+ }, `TypeError: The DOMJITNode.customGetter getter can only be used on instances of DOMJITNode`); >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 171637
:
309891
|
309893
|
309900
|
310021
|
310103
|
311424
|
311436
|
311437
|
311438
|
311439
|
311440
|
311441
|
311442
|
311443
|
311444
|
311445
|
311446
|
311448
|
311450
|
311468
|
311472
|
311473
|
311492
|
311495
|
311810
|
311958
|
311984
| 311999 |
316545