Title: [207869] trunk/Source
Revision
207869
Author
[email protected]
Date
2016-10-25 22:43:04 -0700 (Tue, 25 Oct 2016)

Log Message

[DOMJIT] Tell IDL result type to DFG to drop type checks in AI
https://bugs.webkit.org/show_bug.cgi?id=163900

Reviewed by Sam Weinig.

Source/_javascript_Core:

The IDL tells the conservative result type. While we use the heap prediction
for prediction propagation phase in DOMJIT getter (it is offered by get_by_id!),
we leverage the type told by IDL to produce the abstract value with the proven type
in AI. It effectively drops unnecessary type checks followed by CallDOM operations.

For example, when you write the code like,

    if (node.nodeType === 9) {
        // document.
    }

Previously, we inserted a Int32 check for the result of node.nodeType.
It is dropped now.

We annotate the DOMJIT getter in jsc.cpp to ensure that the unnecessary type checks
are correctly dropped when executing JSTests/stress/domjit-getter.js.

* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
* domjit/DOMJITGetterSetter.h:
(JSC::DOMJIT::GetterSetter::GetterSetter):
(JSC::DOMJIT::GetterSetter::resultType):
* jsc.cpp:
(WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
(WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):

Source/WebCore:

Add TestDOMJIT.idl for bindings generation tests.

* bindings/scripts/CodeGeneratorJS.pm:
(GetResultTypeFilter):
(GenerateImplementation):
* bindings/scripts/test/JS/JSTestDOMJIT.cpp: Added.
(WebCore::JSTestDOMJITPrototype::create):
(WebCore::JSTestDOMJITPrototype::createStructure):
(WebCore::JSTestDOMJITPrototype::JSTestDOMJITPrototype):
(WebCore::JSTestDOMJITConstructor::prototypeForStructure):
(WebCore::JSTestDOMJITConstructor::initializeProperties):
(WebCore::JSTestDOMJITPrototype::finishCreation):
(WebCore::JSTestDOMJIT::JSTestDOMJIT):
(WebCore::JSTestDOMJIT::createPrototype):
(WebCore::JSTestDOMJIT::prototype):
(WebCore::BindingCaller<JSTestDOMJIT>::castForAttribute):
(WebCore::jsTestDOMJITAnyAttr):
(WebCore::jsTestDOMJITAnyAttrGetter):
(WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITAnyAttr):
(WebCore::jsTestDOMJITBooleanAttr):
(WebCore::jsTestDOMJITBooleanAttrGetter):
(WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITBooleanAttr):
(WebCore::jsTestDOMJITByteAttr):
(WebCore::jsTestDOMJITByteAttrGetter):
(WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteAttr):
(WebCore::jsTestDOMJITOctetAttr):
(WebCore::jsTestDOMJITOctetAttrGetter):
(WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITOctetAttr):
(WebCore::jsTestDOMJITShortAttr):
(WebCore::jsTestDOMJITShortAttrGetter):
(WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITShortAttr):
(WebCore::jsTestDOMJITUnsignedShortAttr):
(WebCore::jsTestDOMJITUnsignedShortAttrGetter):
(WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr):
(WebCore::jsTestDOMJITLongAttr):
(WebCore::jsTestDOMJITLongAttrGetter):
(WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongAttr):
(WebCore::jsTestDOMJITUnsignedLongAttr):
(WebCore::jsTestDOMJITUnsignedLongAttrGetter):
(WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr):
(WebCore::jsTestDOMJITLongLongAttr):
(WebCore::jsTestDOMJITLongLongAttrGetter):
(WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongLongAttr):
(WebCore::jsTestDOMJITUnsignedLongLongAttr):
(WebCore::jsTestDOMJITUnsignedLongLongAttrGetter):
(WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr):
(WebCore::jsTestDOMJITFloatAttr):
(WebCore::jsTestDOMJITFloatAttrGetter):
(WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITFloatAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter):
(WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr):
(WebCore::jsTestDOMJITDoubleAttr):
(WebCore::jsTestDOMJITDoubleAttrGetter):
(WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDoubleAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter):
(WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr):
(WebCore::jsTestDOMJITDomStringAttr):
(WebCore::jsTestDOMJITDomStringAttrGetter):
(WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDomStringAttr):
(WebCore::jsTestDOMJITByteStringAttr):
(WebCore::jsTestDOMJITByteStringAttrGetter):
(WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteStringAttr):
(WebCore::jsTestDOMJITUsvStringAttr):
(WebCore::jsTestDOMJITUsvStringAttrGetter):
(WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr):
(WebCore::jsTestDOMJITNodeAttr):
(WebCore::jsTestDOMJITNodeAttrGetter):
(WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITNodeAttr):
(WebCore::jsTestDOMJITBooleanNullableAttr):
(WebCore::jsTestDOMJITBooleanNullableAttrGetter):
(WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr):
(WebCore::jsTestDOMJITByteNullableAttr):
(WebCore::jsTestDOMJITByteNullableAttrGetter):
(WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr):
(WebCore::jsTestDOMJITOctetNullableAttr):
(WebCore::jsTestDOMJITOctetNullableAttrGetter):
(WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr):
(WebCore::jsTestDOMJITShortNullableAttr):
(WebCore::jsTestDOMJITShortNullableAttrGetter):
(WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr):
(WebCore::jsTestDOMJITUnsignedShortNullableAttr):
(WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter):
(WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr):
(WebCore::jsTestDOMJITLongNullableAttr):
(WebCore::jsTestDOMJITLongNullableAttrGetter):
(WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter):
(WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr):
(WebCore::jsTestDOMJITLongLongNullableAttr):
(WebCore::jsTestDOMJITLongLongNullableAttrGetter):
(WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter):
(WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr):
(WebCore::jsTestDOMJITFloatNullableAttr):
(WebCore::jsTestDOMJITFloatNullableAttrGetter):
(WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter):
(WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr):
(WebCore::jsTestDOMJITDoubleNullableAttr):
(WebCore::jsTestDOMJITDoubleNullableAttrGetter):
(WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter):
(WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr):
(WebCore::jsTestDOMJITDomStringNullableAttr):
(WebCore::jsTestDOMJITDomStringNullableAttrGetter):
(WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr):
(WebCore::jsTestDOMJITByteStringNullableAttr):
(WebCore::jsTestDOMJITByteStringNullableAttrGetter):
(WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr):
(WebCore::jsTestDOMJITUsvStringNullableAttr):
(WebCore::jsTestDOMJITUsvStringNullableAttrGetter):
(WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr):
(WebCore::jsTestDOMJITNodeNullableAttr):
(WebCore::jsTestDOMJITNodeNullableAttrGetter):
(WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr):
(WebCore::jsTestDOMJITConstructor):
(WebCore::setJSTestDOMJITConstructor):
(WebCore::JSTestDOMJIT::getConstructor):
(WebCore::JSTestDOMJIT::visitChildren):
* bindings/scripts/test/JS/JSTestDOMJIT.h: Added.
(WebCore::JSTestDOMJIT::create):
(WebCore::JSTestDOMJIT::createStructure):
(WebCore::JSTestDOMJIT::wrapped):
(WebCore::JSTestDOMJIT::finishCreation):
* bindings/scripts/test/TestDOMJIT.idl: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (207868 => 207869)


--- trunk/Source/_javascript_Core/ChangeLog	2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-10-26 05:43:04 UTC (rev 207869)
@@ -1,3 +1,36 @@
+2016-10-25  Yusuke Suzuki  <[email protected]>
+
+        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
+        https://bugs.webkit.org/show_bug.cgi?id=163900
+
+        Reviewed by Sam Weinig.
+
+        The IDL tells the conservative result type. While we use the heap prediction
+        for prediction propagation phase in DOMJIT getter (it is offered by get_by_id!),
+        we leverage the type told by IDL to produce the abstract value with the proven type
+        in AI. It effectively drops unnecessary type checks followed by CallDOM operations.
+
+        For example, when you write the code like,
+
+            if (node.nodeType === 9) {
+                // document.
+            }
+
+        Previously, we inserted a Int32 check for the result of node.nodeType.
+        It is dropped now.
+
+        We annotate the DOMJIT getter in jsc.cpp to ensure that the unnecessary type checks
+        are correctly dropped when executing JSTests/stress/domjit-getter.js.
+
+        * dfg/DFGAbstractInterpreterInlines.h:
+        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
+        * domjit/DOMJITGetterSetter.h:
+        (JSC::DOMJIT::GetterSetter::GetterSetter):
+        (JSC::DOMJIT::GetterSetter::resultType):
+        * jsc.cpp:
+        (WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
+        (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
+
 2016-10-25  Mark Lam  <[email protected]>
 
         String.prototype.replace() should throw an OutOfMemoryError when using too much memory.

Modified: trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h (207868 => 207869)


--- trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2016-10-26 05:43:04 UTC (rev 207869)
@@ -2290,10 +2290,11 @@
         break;
     }
     case CallDOM: {
-        DOMJIT::CallDOMPatchpoint* patchpoint = node->callDOMData()->patchpoint;
+        CallDOMData* callDOMData = node->callDOMData();
+        DOMJIT::CallDOMPatchpoint* patchpoint = callDOMData->patchpoint;
         if (patchpoint->effect.writes)
             clobberWorld(node->origin.semantic, clobberLimit);
-        forNode(node).makeBytecodeTop();
+        forNode(node).setType(m_graph, callDOMData->domJIT->resultType());
         break;
     }
     case CheckArray: {

Modified: trunk/Source/_javascript_Core/domjit/DOMJITGetterSetter.h (207868 => 207869)


--- trunk/Source/_javascript_Core/domjit/DOMJITGetterSetter.h	2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/_javascript_Core/domjit/DOMJITGetterSetter.h	2016-10-26 05:43:04 UTC (rev 207869)
@@ -37,10 +37,11 @@
     typedef PropertySlot::GetValueFunc CustomGetter;
     typedef PutPropertySlot::PutValueFunc CustomSetter;
 
-    GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo)
+    GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo, SpeculatedType resultType)
         : m_getter(getter)
         , m_setter(setter)
         , m_thisClassInfo(classInfo)
+        , m_resultType(resultType)
     {
     }
 
@@ -49,6 +50,7 @@
     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<DOMJIT::CallDOMPatchpoint> callDOM() = 0;
@@ -59,6 +61,7 @@
     CustomGetter m_getter;
     CustomSetter m_setter;
     const ClassInfo* m_thisClassInfo;
+    SpeculatedType m_resultType;
 };
 
 } }

Modified: trunk/Source/_javascript_Core/jsc.cpp (207868 => 207869)


--- trunk/Source/_javascript_Core/jsc.cpp	2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/_javascript_Core/jsc.cpp	2016-10-26 05:43:04 UTC (rev 207869)
@@ -616,7 +616,7 @@
     class DOMJITNodeDOMJIT : public DOMJIT::GetterSetter {
     public:
         DOMJITNodeDOMJIT()
-            : DOMJIT::GetterSetter(DOMJITGetter::customGetter, nullptr, DOMJITNode::info())
+            : DOMJIT::GetterSetter(DOMJITGetter::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only)
         {
         }
 
@@ -701,7 +701,7 @@
     class DOMJITNodeDOMJIT : public DOMJIT::GetterSetter {
     public:
         DOMJITNodeDOMJIT()
-            : DOMJIT::GetterSetter(DOMJITGetterComplex::customGetter, nullptr, DOMJITNode::info())
+            : DOMJIT::GetterSetter(DOMJITGetterComplex::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only)
         {
         }
 

Modified: trunk/Source/WebCore/ChangeLog (207868 => 207869)


--- trunk/Source/WebCore/ChangeLog	2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/WebCore/ChangeLog	2016-10-26 05:43:04 UTC (rev 207869)
@@ -1,3 +1,177 @@
+2016-10-25  Yusuke Suzuki  <[email protected]>
+
+        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
+        https://bugs.webkit.org/show_bug.cgi?id=163900
+
+        Reviewed by Sam Weinig.
+
+        Add TestDOMJIT.idl for bindings generation tests.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GetResultTypeFilter):
+        (GenerateImplementation):
+        * bindings/scripts/test/JS/JSTestDOMJIT.cpp: Added.
+        (WebCore::JSTestDOMJITPrototype::create):
+        (WebCore::JSTestDOMJITPrototype::createStructure):
+        (WebCore::JSTestDOMJITPrototype::JSTestDOMJITPrototype):
+        (WebCore::JSTestDOMJITConstructor::prototypeForStructure):
+        (WebCore::JSTestDOMJITConstructor::initializeProperties):
+        (WebCore::JSTestDOMJITPrototype::finishCreation):
+        (WebCore::JSTestDOMJIT::JSTestDOMJIT):
+        (WebCore::JSTestDOMJIT::createPrototype):
+        (WebCore::JSTestDOMJIT::prototype):
+        (WebCore::BindingCaller<JSTestDOMJIT>::castForAttribute):
+        (WebCore::jsTestDOMJITAnyAttr):
+        (WebCore::jsTestDOMJITAnyAttrGetter):
+        (WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITAnyAttr):
+        (WebCore::jsTestDOMJITBooleanAttr):
+        (WebCore::jsTestDOMJITBooleanAttrGetter):
+        (WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITBooleanAttr):
+        (WebCore::jsTestDOMJITByteAttr):
+        (WebCore::jsTestDOMJITByteAttrGetter):
+        (WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteAttr):
+        (WebCore::jsTestDOMJITOctetAttr):
+        (WebCore::jsTestDOMJITOctetAttrGetter):
+        (WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITOctetAttr):
+        (WebCore::jsTestDOMJITShortAttr):
+        (WebCore::jsTestDOMJITShortAttrGetter):
+        (WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITShortAttr):
+        (WebCore::jsTestDOMJITUnsignedShortAttr):
+        (WebCore::jsTestDOMJITUnsignedShortAttrGetter):
+        (WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr):
+        (WebCore::jsTestDOMJITLongAttr):
+        (WebCore::jsTestDOMJITLongAttrGetter):
+        (WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr):
+        (WebCore::jsTestDOMJITLongLongAttr):
+        (WebCore::jsTestDOMJITLongLongAttrGetter):
+        (WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr):
+        (WebCore::jsTestDOMJITFloatAttr):
+        (WebCore::jsTestDOMJITFloatAttrGetter):
+        (WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITFloatAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr):
+        (WebCore::jsTestDOMJITDoubleAttr):
+        (WebCore::jsTestDOMJITDoubleAttrGetter):
+        (WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDoubleAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr):
+        (WebCore::jsTestDOMJITDomStringAttr):
+        (WebCore::jsTestDOMJITDomStringAttrGetter):
+        (WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDomStringAttr):
+        (WebCore::jsTestDOMJITByteStringAttr):
+        (WebCore::jsTestDOMJITByteStringAttrGetter):
+        (WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteStringAttr):
+        (WebCore::jsTestDOMJITUsvStringAttr):
+        (WebCore::jsTestDOMJITUsvStringAttrGetter):
+        (WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr):
+        (WebCore::jsTestDOMJITNodeAttr):
+        (WebCore::jsTestDOMJITNodeAttrGetter):
+        (WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITNodeAttr):
+        (WebCore::jsTestDOMJITBooleanNullableAttr):
+        (WebCore::jsTestDOMJITBooleanNullableAttrGetter):
+        (WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr):
+        (WebCore::jsTestDOMJITByteNullableAttr):
+        (WebCore::jsTestDOMJITByteNullableAttrGetter):
+        (WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr):
+        (WebCore::jsTestDOMJITOctetNullableAttr):
+        (WebCore::jsTestDOMJITOctetNullableAttrGetter):
+        (WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr):
+        (WebCore::jsTestDOMJITShortNullableAttr):
+        (WebCore::jsTestDOMJITShortNullableAttrGetter):
+        (WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedShortNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter):
+        (WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr):
+        (WebCore::jsTestDOMJITLongNullableAttr):
+        (WebCore::jsTestDOMJITLongNullableAttrGetter):
+        (WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr):
+        (WebCore::jsTestDOMJITLongLongNullableAttr):
+        (WebCore::jsTestDOMJITLongLongNullableAttrGetter):
+        (WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr):
+        (WebCore::jsTestDOMJITFloatNullableAttr):
+        (WebCore::jsTestDOMJITFloatNullableAttrGetter):
+        (WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr):
+        (WebCore::jsTestDOMJITDoubleNullableAttr):
+        (WebCore::jsTestDOMJITDoubleNullableAttrGetter):
+        (WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr):
+        (WebCore::jsTestDOMJITDomStringNullableAttr):
+        (WebCore::jsTestDOMJITDomStringNullableAttrGetter):
+        (WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr):
+        (WebCore::jsTestDOMJITByteStringNullableAttr):
+        (WebCore::jsTestDOMJITByteStringNullableAttrGetter):
+        (WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr):
+        (WebCore::jsTestDOMJITUsvStringNullableAttr):
+        (WebCore::jsTestDOMJITUsvStringNullableAttrGetter):
+        (WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr):
+        (WebCore::jsTestDOMJITNodeNullableAttr):
+        (WebCore::jsTestDOMJITNodeNullableAttrGetter):
+        (WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr):
+        (WebCore::jsTestDOMJITConstructor):
+        (WebCore::setJSTestDOMJITConstructor):
+        (WebCore::JSTestDOMJIT::getConstructor):
+        (WebCore::JSTestDOMJIT::visitChildren):
+        * bindings/scripts/test/JS/JSTestDOMJIT.h: Added.
+        (WebCore::JSTestDOMJIT::create):
+        (WebCore::JSTestDOMJIT::createStructure):
+        (WebCore::JSTestDOMJIT::wrapped):
+        (WebCore::JSTestDOMJIT::finishCreation):
+        * bindings/scripts/test/TestDOMJIT.idl: Added.
+
 2016-10-25  Brent Fulgham  <[email protected]>
 
         [Win] Unreviewed build fix.

Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (207868 => 207869)


--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	2016-10-26 05:43:04 UTC (rev 207869)
@@ -2491,6 +2491,42 @@
     push(@implContent, "    putDirectWithoutTransition(vm, vm.propertyNames->unscopablesSymbol, &unscopables, DontEnum | ReadOnly);\n");
 }
 
+sub GetResultTypeFilter
+{
+    my ($signature) = @_;
+    my $idlType = $signature->idlType;
+
+    my %TypeFilters = (
+        "any" => "SpecHeapTop",
+        "boolean" => "SpecBoolean",
+        "byte" => "SpecInt32Only",
+        "octet" => "SpecInt32Only",
+        "short" => "SpecInt32Only",
+        "unsigned short" => "SpecInt32Only",
+        "long" => "SpecInt32Only",
+        "unsigned long" => "SpecBytecodeNumber",
+        "long long" => "SpecBytecodeNumber",
+        "unsigned long long" => "SpecBytecodeNumber",
+        "float" => "SpecBytecodeNumber",
+        "unrestricted float" => "SpecBytecodeNumber",
+        "double" => "SpecBytecodeNumber",
+        "unrestricted double" => "SpecBytecodeNumber",
+        "DOMString" => "SpecString",
+        "ByteString" => "SpecString",
+        "USVString" => "SpecString",
+    );
+
+    if (exists $TypeFilters{$idlType->name}) {
+        my $resultType = "JSC::$TypeFilters{$idlType->name}";
+        if ($idlType->isNullable) {
+            die "\"any\" type must not become nullable." if $idlType->name eq "any";
+            $resultType = "($resultType | JSC::SpecOther)";
+        }
+        return $resultType;
+    }
+    return "SpecHeapTop";
+}
+
 sub GenerateImplementation
 {
     my ($object, $interface, $enumerations, $dictionaries) = @_;
@@ -3268,8 +3304,9 @@
                 my $domJITClassName = $generatorName . "DOMJIT";
                 my $getter = GetAttributeGetterName($interface, $generatorName, $attribute);
                 my $setter = IsReadonly($attribute) ? "nullptr" : GetAttributeSetterName($interface, $generatorName, $attribute);
+                my $resultType = GetResultTypeFilter($attribute->signature);
                 push(@implContent, "$domJITClassName::$domJITClassName()\n");
-                push(@implContent, "    : JSC::DOMJIT::GetterSetter($getter, $setter, ${className}::info())\n");
+                push(@implContent, "    : JSC::DOMJIT::GetterSetter($getter, $setter, ${className}::info(), $resultType)\n");
                 push(@implContent, "{\n");
                 push(@implContent, "}\n\n");
 

Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp (0 => 207869)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp	                        (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp	2016-10-26 05:43:04 UTC (rev 207869)
@@ -0,0 +1,1171 @@
+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "config.h"
+#include "JSTestDOMJIT.h"
+
+#include "JSByteString.h"
+#include "JSDOMBinding.h"
+#include "JSDOMConstructor.h"
+#include "JSDOMConvert.h"
+#include <wtf/GetPtr.h>
+#include <wtf/NeverDestroyed.h>
+
+using namespace JSC;
+
+namespace WebCore {
+
+// Attributes
+
+JSC::EncodedJSValue jsTestDOMJITAnyAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITBooleanAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITOctetAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITShortAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedShortAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITFloatAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedFloatAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDoubleAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedDoubleAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDomStringAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteStringAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUsvStringAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITNodeAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITBooleanNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITOctetNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITShortNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedShortNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITFloatNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedFloatNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDoubleNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedDoubleNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDomStringNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteStringNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUsvStringNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITNodeNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestDOMJITConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+
+class JSTestDOMJITPrototype : public JSC::JSNonFinalObject {
+public:
+    using Base = JSC::JSNonFinalObject;
+    static JSTestDOMJITPrototype* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
+    {
+        JSTestDOMJITPrototype* ptr = new (NotNull, JSC::allocateCell<JSTestDOMJITPrototype>(vm.heap)) JSTestDOMJITPrototype(vm, globalObject, structure);
+        ptr->finishCreation(vm);
+        return ptr;
+    }
+
+    DECLARE_INFO;
+    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+private:
+    JSTestDOMJITPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
+        : JSC::JSNonFinalObject(vm, structure)
+    {
+    }
+
+    void finishCreation(JSC::VM&);
+};
+
+using JSTestDOMJITConstructor = JSDOMConstructorNotConstructable<JSTestDOMJIT>;
+
+template<> JSValue JSTestDOMJITConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
+{
+    return JSNode::getConstructor(vm, &globalObject);
+}
+
+template<> void JSTestDOMJITConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
+{
+    putDirect(vm, vm.propertyNames->prototype, JSTestDOMJIT::prototype(vm, &globalObject), DontDelete | ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral("TestDOMJIT"))), ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames->length, jsNumber(0), ReadOnly | DontEnum);
+}
+
+template<> const ClassInfo JSTestDOMJITConstructor::s_info = { "TestDOMJIT", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestDOMJITConstructor) };
+
+/* Hash table for prototype */
+
+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) } },
+};
+
+const ClassInfo JSTestDOMJITPrototype::s_info = { "TestDOMJITPrototype", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestDOMJITPrototype) };
+
+void JSTestDOMJITPrototype::finishCreation(VM& vm)
+{
+    Base::finishCreation(vm);
+    reifyStaticProperties(vm, JSTestDOMJITPrototypeTableValues, *this);
+}
+
+const ClassInfo JSTestDOMJIT::s_info = { "TestDOMJIT", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestDOMJIT) };
+
+JSTestDOMJIT::JSTestDOMJIT(Structure* structure, JSDOMGlobalObject& globalObject, Ref<TestDOMJIT>&& impl)
+    : JSNode(structure, globalObject, WTFMove(impl))
+{
+}
+
+JSObject* JSTestDOMJIT::createPrototype(VM& vm, JSGlobalObject* globalObject)
+{
+    return JSTestDOMJITPrototype::create(vm, globalObject, JSTestDOMJITPrototype::createStructure(vm, globalObject, JSNode::prototype(vm, globalObject)));
+}
+
+JSObject* JSTestDOMJIT::prototype(VM& vm, JSGlobalObject* globalObject)
+{
+    return getDOMPrototype<JSTestDOMJIT>(vm, globalObject);
+}
+
+template<> inline JSTestDOMJIT* BindingCaller<JSTestDOMJIT>::castForAttribute(ExecState&, EncodedJSValue thisValue)
+{
+    return jsDynamicCast<JSTestDOMJIT*>(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestDOMJITAnyAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITAnyAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITAnyAttrGetter>(state, thisValue, "anyAttr");
+}
+
+static inline JSValue jsTestDOMJITAnyAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLAny>(impl.anyAttr());
+    return result;
+}
+
+TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITAnyAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecHeapTop)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITAnyAttr()
+{
+    static NeverDestroyed<TestDOMJITAnyAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITBooleanAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITBooleanAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITBooleanAttrGetter>(state, thisValue, "booleanAttr");
+}
+
+static inline JSValue jsTestDOMJITBooleanAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLBoolean>(impl.booleanAttr());
+    return result;
+}
+
+TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITBooleanAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBoolean)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanAttr()
+{
+    static NeverDestroyed<TestDOMJITBooleanAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITByteAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITByteAttrGetter>(state, thisValue, "byteAttr");
+}
+
+static inline JSValue jsTestDOMJITByteAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLByte>(impl.byteAttr());
+    return result;
+}
+
+TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteAttr()
+{
+    static NeverDestroyed<TestDOMJITByteAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITOctetAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITOctetAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITOctetAttrGetter>(state, thisValue, "octetAttr");
+}
+
+static inline JSValue jsTestDOMJITOctetAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLOctet>(impl.octetAttr());
+    return result;
+}
+
+TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITOctetAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetAttr()
+{
+    static NeverDestroyed<TestDOMJITOctetAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITShortAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITShortAttrGetter>(state, thisValue, "shortAttr");
+}
+
+static inline JSValue jsTestDOMJITShortAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLShort>(impl.shortAttr());
+    return result;
+}
+
+TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITShortAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortAttr()
+{
+    static NeverDestroyed<TestDOMJITShortAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnsignedShortAttrGetter>(state, thisValue, "unsignedShortAttr");
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLUnsignedShort>(impl.unsignedShortAttr());
+    return result;
+}
+
+TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedShortAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortAttr()
+{
+    static NeverDestroyed<TestDOMJITUnsignedShortAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITLongAttrGetter>(state, thisValue, "longAttr");
+}
+
+static inline JSValue jsTestDOMJITLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLLong>(impl.longAttr());
+    return result;
+}
+
+TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongAttr()
+{
+    static NeverDestroyed<TestDOMJITLongAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnsignedLongAttrGetter>(state, thisValue, "unsignedLongAttr");
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLUnsignedLong>(impl.unsignedLongAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongAttr()
+{
+    static NeverDestroyed<TestDOMJITUnsignedLongAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongLongAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITLongLongAttrGetter>(state, thisValue, "longLongAttr");
+}
+
+static inline JSValue jsTestDOMJITLongLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLLongLong>(impl.longLongAttr());
+    return result;
+}
+
+TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongAttr()
+{
+    static NeverDestroyed<TestDOMJITLongLongAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnsignedLongLongAttrGetter>(state, thisValue, "unsignedLongLongAttr");
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLUnsignedLongLong>(impl.unsignedLongLongAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongAttr()
+{
+    static NeverDestroyed<TestDOMJITUnsignedLongLongAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITFloatAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITFloatAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITFloatAttrGetter>(state, thisValue, "floatAttr");
+}
+
+static inline JSValue jsTestDOMJITFloatAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLFloat>(impl.floatAttr());
+    return result;
+}
+
+TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITFloatAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatAttr()
+{
+    static NeverDestroyed<TestDOMJITFloatAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedFloatAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnrestrictedFloatAttrGetter>(state, thisValue, "unrestrictedFloatAttr");
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLUnrestrictedFloat>(impl.unrestrictedFloatAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedFloatAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr()
+{
+    static NeverDestroyed<TestDOMJITUnrestrictedFloatAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDoubleAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITDoubleAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITDoubleAttrGetter>(state, thisValue, "doubleAttr");
+}
+
+static inline JSValue jsTestDOMJITDoubleAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLDouble>(impl.doubleAttr());
+    return result;
+}
+
+TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDoubleAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleAttr()
+{
+    static NeverDestroyed<TestDOMJITDoubleAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedDoubleAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnrestrictedDoubleAttrGetter>(state, thisValue, "unrestrictedDoubleAttr");
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLUnrestrictedDouble>(impl.unrestrictedDoubleAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedDoubleAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr()
+{
+    static NeverDestroyed<TestDOMJITUnrestrictedDoubleAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDomStringAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITDomStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITDomStringAttrGetter>(state, thisValue, "domStringAttr");
+}
+
+static inline JSValue jsTestDOMJITDomStringAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLDOMString>(state, impl.domStringAttr());
+    return result;
+}
+
+TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDomStringAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecString)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringAttr()
+{
+    static NeverDestroyed<TestDOMJITDomStringAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteStringAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITByteStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITByteStringAttrGetter>(state, thisValue, "byteStringAttr");
+}
+
+static inline JSValue jsTestDOMJITByteStringAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS(&state, thisObject.globalObject(), impl.byteStringAttr());
+    return result;
+}
+
+TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteStringAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecString)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringAttr()
+{
+    static NeverDestroyed<TestDOMJITByteStringAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUsvStringAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUsvStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUsvStringAttrGetter>(state, thisValue, "usvStringAttr");
+}
+
+static inline JSValue jsTestDOMJITUsvStringAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLUSVString>(state, impl.usvStringAttr());
+    return result;
+}
+
+TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUsvStringAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecString)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringAttr()
+{
+    static NeverDestroyed<TestDOMJITUsvStringAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITNodeAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITNodeAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITNodeAttrGetter>(state, thisValue, "nodeAttr");
+}
+
+static inline JSValue jsTestDOMJITNodeAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS(&state, thisObject.globalObject(), impl.nodeAttr());
+    return result;
+}
+
+TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITNodeAttr, nullptr, JSTestDOMJIT::info(), SpecHeapTop)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeAttr()
+{
+    static NeverDestroyed<TestDOMJITNodeAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITBooleanNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITBooleanNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITBooleanNullableAttrGetter>(state, thisValue, "booleanNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITBooleanNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLBoolean>>(impl.booleanNullableAttr());
+    return result;
+}
+
+TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITBooleanNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBoolean | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITBooleanNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITByteNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITByteNullableAttrGetter>(state, thisValue, "byteNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITByteNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLByte>>(impl.byteNullableAttr());
+    return result;
+}
+
+TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITByteNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITOctetNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITOctetNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITOctetNullableAttrGetter>(state, thisValue, "octetNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITOctetNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLOctet>>(impl.octetNullableAttr());
+    return result;
+}
+
+TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITOctetNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITOctetNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITShortNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITShortNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITShortNullableAttrGetter>(state, thisValue, "shortNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITShortNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLShort>>(impl.shortNullableAttr());
+    return result;
+}
+
+TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITShortNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITShortNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedShortNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnsignedShortNullableAttrGetter>(state, thisValue, "unsignedShortNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLUnsignedShort>>(impl.unsignedShortNullableAttr());
+    return result;
+}
+
+TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedShortNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITUnsignedShortNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITLongNullableAttrGetter>(state, thisValue, "longNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLLong>>(impl.longNullableAttr());
+    return result;
+}
+
+TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITLongNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnsignedLongNullableAttrGetter>(state, thisValue, "unsignedLongNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLUnsignedLong>>(impl.unsignedLongNullableAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITUnsignedLongNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongLongNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITLongLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITLongLongNullableAttrGetter>(state, thisValue, "longLongNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITLongLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLLongLong>>(impl.longLongNullableAttr());
+    return result;
+}
+
+TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITLongLongNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnsignedLongLongNullableAttrGetter>(state, thisValue, "unsignedLongLongNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLUnsignedLongLong>>(impl.unsignedLongLongNullableAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITUnsignedLongLongNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITFloatNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITFloatNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITFloatNullableAttrGetter>(state, thisValue, "floatNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITFloatNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLFloat>>(impl.floatNullableAttr());
+    return result;
+}
+
+TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITFloatNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITFloatNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedFloatNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnrestrictedFloatNullableAttrGetter>(state, thisValue, "unrestrictedFloatNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLUnrestrictedFloat>>(impl.unrestrictedFloatNullableAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedFloatNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITUnrestrictedFloatNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDoubleNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITDoubleNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITDoubleNullableAttrGetter>(state, thisValue, "doubleNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITDoubleNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLDouble>>(impl.doubleNullableAttr());
+    return result;
+}
+
+TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDoubleNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITDoubleNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedDoubleNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUnrestrictedDoubleNullableAttrGetter>(state, thisValue, "unrestrictedDoubleNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLUnrestrictedDouble>>(impl.unrestrictedDoubleNullableAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedDoubleNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDomStringNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITDomStringNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITDomStringNullableAttrGetter>(state, thisValue, "domStringNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITDomStringNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLDOMString>>(state, impl.domStringNullableAttr());
+    return result;
+}
+
+TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDomStringNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecString | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITDomStringNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteStringNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITByteStringNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITByteStringNullableAttrGetter>(state, thisValue, "byteStringNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITByteStringNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS(&state, thisObject.globalObject(), impl.byteStringNullableAttr());
+    return result;
+}
+
+TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteStringNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecString | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITByteStringNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUsvStringNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITUsvStringNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITUsvStringNullableAttrGetter>(state, thisValue, "usvStringNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITUsvStringNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS<IDLNullable<IDLUSVString>>(state, impl.usvStringNullableAttr());
+    return result;
+}
+
+TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUsvStringNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecString | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITUsvStringNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+static inline JSValue jsTestDOMJITNodeNullableAttrGetter(ExecState&, JSTestDOMJIT&, ThrowScope& throwScope);
+
+EncodedJSValue jsTestDOMJITNodeNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller<JSTestDOMJIT>::attribute<jsTestDOMJITNodeNullableAttrGetter>(state, thisValue, "nodeNullableAttr");
+}
+
+static inline JSValue jsTestDOMJITNodeNullableAttrGetter(ExecState& state, JSTestDOMJIT& thisObject, ThrowScope& throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto& impl = thisObject.wrapped();
+    JSValue result = toJS(&state, thisObject.globalObject(), impl.nodeNullableAttr());
+    return result;
+}
+
+TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITNodeNullableAttr, nullptr, JSTestDOMJIT::info(), SpecHeapTop)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeNullableAttr()
+{
+    static NeverDestroyed<TestDOMJITNodeNullableAttrDOMJIT> compiler;
+    return &compiler.get();
+}
+
+EncodedJSValue jsTestDOMJITConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    VM& vm = state->vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSTestDOMJITPrototype* domObject = jsDynamicCast<JSTestDOMJITPrototype*>(JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject))
+        return throwVMTypeError(state, throwScope);
+    return JSValue::encode(JSTestDOMJIT::getConstructor(state->vm(), domObject->globalObject()));
+}
+
+bool setJSTestDOMJITConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    VM& vm = state->vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestDOMJITPrototype* domObject = jsDynamicCast<JSTestDOMJITPrototype*>(JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject)) {
+        throwVMTypeError(state, throwScope);
+        return false;
+    }
+    // Shadowing a built-in constructor
+    return domObject->putDirect(state->vm(), state->propertyNames().constructor, value);
+}
+
+JSValue JSTestDOMJIT::getConstructor(VM& vm, const JSGlobalObject* globalObject)
+{
+    return getDOMConstructor<JSTestDOMJITConstructor>(vm, *jsCast<const JSDOMGlobalObject*>(globalObject));
+}
+
+void JSTestDOMJIT::visitChildren(JSCell* cell, SlotVisitor& visitor)
+{
+    auto* thisObject = jsCast<JSTestDOMJIT*>(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+    Base::visitChildren(thisObject, visitor);
+    thisObject->wrapped().visitJSEventListeners(visitor);
+}
+
+
+}

Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h (0 => 207869)


--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h	                        (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h	2016-10-26 05:43:04 UTC (rev 207869)
@@ -0,0 +1,426 @@
+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#pragma once
+
+#include "JSNode.h"
+#include "TestDOMJIT.h"
+#include <domjit/DOMJITGetterSetter.h>
+
+namespace WebCore {
+
+class JSTestDOMJIT : public JSNode {
+public:
+    using Base = JSNode;
+    using DOMWrapped = TestDOMJIT;
+    static JSTestDOMJIT* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref<TestDOMJIT>&& impl)
+    {
+        JSTestDOMJIT* ptr = new (NotNull, JSC::allocateCell<JSTestDOMJIT>(globalObject->vm().heap)) JSTestDOMJIT(structure, *globalObject, WTFMove(impl));
+        ptr->finishCreation(globalObject->vm());
+        return ptr;
+    }
+
+    static JSC::JSObject* createPrototype(JSC::VM&, JSC::JSGlobalObject*);
+    static JSC::JSObject* prototype(JSC::VM&, JSC::JSGlobalObject*);
+
+    DECLARE_INFO;
+
+    static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::JSType(JSNodeType), StructureFlags), info());
+    }
+
+    static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
+    static void visitChildren(JSCell*, JSC::SlotVisitor&);
+
+    TestDOMJIT& wrapped() const
+    {
+        return static_cast<TestDOMJIT&>(Base::wrapped());
+    }
+protected:
+    JSTestDOMJIT(JSC::Structure*, JSDOMGlobalObject&, Ref<TestDOMJIT>&&);
+
+    void finishCreation(JSC::VM& vm)
+    {
+        Base::finishCreation(vm);
+        ASSERT(inherits(info()));
+    }
+
+};
+
+
+// DOMJIT emitters for attributes
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITAnyAttr(void);
+class TestDOMJITAnyAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITAnyAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanAttr(void);
+class TestDOMJITBooleanAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITBooleanAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteAttr(void);
+class TestDOMJITByteAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetAttr(void);
+class TestDOMJITOctetAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITOctetAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortAttr(void);
+class TestDOMJITShortAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITShortAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortAttr(void);
+class TestDOMJITUnsignedShortAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedShortAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongAttr(void);
+class TestDOMJITLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongAttr(void);
+class TestDOMJITUnsignedLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongAttr(void);
+class TestDOMJITLongLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongAttr(void);
+class TestDOMJITUnsignedLongLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatAttr(void);
+class TestDOMJITFloatAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITFloatAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr(void);
+class TestDOMJITUnrestrictedFloatAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedFloatAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleAttr(void);
+class TestDOMJITDoubleAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDoubleAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr(void);
+class TestDOMJITUnrestrictedDoubleAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedDoubleAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringAttr(void);
+class TestDOMJITDomStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDomStringAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringAttr(void);
+class TestDOMJITByteStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteStringAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringAttr(void);
+class TestDOMJITUsvStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUsvStringAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeAttr(void);
+class TestDOMJITNodeAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITNodeAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanNullableAttr(void);
+class TestDOMJITBooleanNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITBooleanNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteNullableAttr(void);
+class TestDOMJITByteNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetNullableAttr(void);
+class TestDOMJITOctetNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITOctetNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortNullableAttr(void);
+class TestDOMJITShortNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITShortNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr(void);
+class TestDOMJITUnsignedShortNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedShortNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongNullableAttr(void);
+class TestDOMJITLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr(void);
+class TestDOMJITUnsignedLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongNullableAttr(void);
+class TestDOMJITLongLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr(void);
+class TestDOMJITUnsignedLongLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatNullableAttr(void);
+class TestDOMJITFloatNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITFloatNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr(void);
+class TestDOMJITUnrestrictedFloatNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedFloatNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleNullableAttr(void);
+class TestDOMJITDoubleNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDoubleNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr(void);
+class TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringNullableAttr(void);
+class TestDOMJITDomStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDomStringNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringNullableAttr(void);
+class TestDOMJITByteStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteStringNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringNullableAttr(void);
+class TestDOMJITUsvStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUsvStringNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeNullableAttr(void);
+class TestDOMJITNodeNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITNodeNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref<JSC::DOMJIT::Patchpoint> checkDOM() override;
+    Ref<JSC::DOMJIT::CallDOMPatchpoint> callDOM() override;
+#endif
+};
+
+template<> struct JSDOMWrapperConverterTraits<TestDOMJIT> {
+    using WrapperClass = JSTestDOMJIT;
+    using ToWrappedReturnType = TestDOMJIT*;
+};
+
+} // namespace WebCore

Added: trunk/Source/WebCore/bindings/scripts/test/TestDOMJIT.idl (0 => 207869)


--- trunk/Source/WebCore/bindings/scripts/test/TestDOMJIT.idl	                        (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/TestDOMJIT.idl	2016-10-26 05:43:04 UTC (rev 207869)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary form, 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.
+ * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE 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 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.
+ */
+
+interface TestDOMJIT : Node {
+    [DOMJIT] readonly attribute any anyAttr;
+    [DOMJIT] readonly attribute boolean booleanAttr;
+    [DOMJIT] readonly attribute byte byteAttr;
+    [DOMJIT] readonly attribute octet octetAttr;
+    [DOMJIT] readonly attribute short shortAttr;
+    [DOMJIT] readonly attribute unsigned short unsignedShortAttr;
+    [DOMJIT] readonly attribute long longAttr;
+    [DOMJIT] readonly attribute unsigned long unsignedLongAttr;
+    [DOMJIT] readonly attribute long long longLongAttr;
+    [DOMJIT] readonly attribute unsigned long long unsignedLongLongAttr;
+    [DOMJIT] readonly attribute float floatAttr;
+    [DOMJIT] readonly attribute unrestricted float unrestrictedFloatAttr;
+    [DOMJIT] readonly attribute double doubleAttr;
+    [DOMJIT] readonly attribute unrestricted double unrestrictedDoubleAttr;
+    [DOMJIT] readonly attribute DOMString domStringAttr;
+    [DOMJIT] readonly attribute ByteString byteStringAttr;
+    [DOMJIT] readonly attribute USVString usvStringAttr;
+    [DOMJIT] readonly attribute Node nodeAttr;
+
+    [DOMJIT] readonly attribute boolean? booleanNullableAttr;
+    [DOMJIT] readonly attribute byte? byteNullableAttr;
+    [DOMJIT] readonly attribute octet? octetNullableAttr;
+    [DOMJIT] readonly attribute short? shortNullableAttr;
+    [DOMJIT] readonly attribute unsigned short? unsignedShortNullableAttr;
+    [DOMJIT] readonly attribute long? longNullableAttr;
+    [DOMJIT] readonly attribute unsigned long? unsignedLongNullableAttr;
+    [DOMJIT] readonly attribute long long? longLongNullableAttr;
+    [DOMJIT] readonly attribute unsigned long long? unsignedLongLongNullableAttr;
+    [DOMJIT] readonly attribute float? floatNullableAttr;
+    [DOMJIT] readonly attribute unrestricted float? unrestrictedFloatNullableAttr;
+    [DOMJIT] readonly attribute double? doubleNullableAttr;
+    [DOMJIT] readonly attribute unrestricted double? unrestrictedDoubleNullableAttr;
+    [DOMJIT] readonly attribute DOMString? domStringNullableAttr;
+    [DOMJIT] readonly attribute ByteString? byteStringNullableAttr;
+    [DOMJIT] readonly attribute USVString? usvStringNullableAttr;
+    [DOMJIT] readonly attribute Node? nodeNullableAttr;
+};
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to