Changeset 207869 in webkit


Ignore:
Timestamp:
Oct 25, 2016 10:43:04 PM (7 years ago)
Author:
Yusuke Suzuki
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/JavaScriptCore:

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.
Location:
trunk/Source
Files:
3 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r207861 r207869  
     12016-10-25  Yusuke Suzuki  <utatane.tea@gmail.com>
     2
     3        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
     4        https://bugs.webkit.org/show_bug.cgi?id=163900
     5
     6        Reviewed by Sam Weinig.
     7
     8        The IDL tells the conservative result type. While we use the heap prediction
     9        for prediction propagation phase in DOMJIT getter (it is offered by get_by_id!),
     10        we leverage the type told by IDL to produce the abstract value with the proven type
     11        in AI. It effectively drops unnecessary type checks followed by CallDOM operations.
     12
     13        For example, when you write the code like,
     14
     15            if (node.nodeType === 9) {
     16                // document.
     17            }
     18
     19        Previously, we inserted a Int32 check for the result of node.nodeType.
     20        It is dropped now.
     21
     22        We annotate the DOMJIT getter in jsc.cpp to ensure that the unnecessary type checks
     23        are correctly dropped when executing JSTests/stress/domjit-getter.js.
     24
     25        * dfg/DFGAbstractInterpreterInlines.h:
     26        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
     27        * domjit/DOMJITGetterSetter.h:
     28        (JSC::DOMJIT::GetterSetter::GetterSetter):
     29        (JSC::DOMJIT::GetterSetter::resultType):
     30        * jsc.cpp:
     31        (WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
     32        (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
     33
    1342016-10-25  Mark Lam  <mark.lam@apple.com>
    235
  • trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h

    r207787 r207869  
    22912291    }
    22922292    case CallDOM: {
    2293         DOMJIT::CallDOMPatchpoint* patchpoint = node->callDOMData()->patchpoint;
     2293        CallDOMData* callDOMData = node->callDOMData();
     2294        DOMJIT::CallDOMPatchpoint* patchpoint = callDOMData->patchpoint;
    22942295        if (patchpoint->effect.writes)
    22952296            clobberWorld(node->origin.semantic, clobberLimit);
    2296         forNode(node).makeBytecodeTop();
     2297        forNode(node).setType(m_graph, callDOMData->domJIT->resultType());
    22972298        break;
    22982299    }
  • trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h

    r207239 r207869  
    3838    typedef PutPropertySlot::PutValueFunc CustomSetter;
    3939
    40     GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo)
     40    GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo, SpeculatedType resultType)
    4141        : m_getter(getter)
    4242        , m_setter(setter)
    4343        , m_thisClassInfo(classInfo)
     44        , m_resultType(resultType)
    4445    {
    4546    }
     
    5051    CustomSetter setter() const { return m_setter; }
    5152    const ClassInfo* thisClassInfo() const { return m_thisClassInfo; }
     53    SpeculatedType resultType() const { return m_resultType; }
    5254
    5355#if ENABLE(JIT)
     
    6062    CustomSetter m_setter;
    6163    const ClassInfo* m_thisClassInfo;
     64    SpeculatedType m_resultType;
    6265};
    6366
  • trunk/Source/JavaScriptCore/jsc.cpp

    r207842 r207869  
    617617    public:
    618618        DOMJITNodeDOMJIT()
    619             : DOMJIT::GetterSetter(DOMJITGetter::customGetter, nullptr, DOMJITNode::info())
     619            : DOMJIT::GetterSetter(DOMJITGetter::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only)
    620620        {
    621621        }
     
    702702    public:
    703703        DOMJITNodeDOMJIT()
    704             : DOMJIT::GetterSetter(DOMJITGetterComplex::customGetter, nullptr, DOMJITNode::info())
     704            : DOMJIT::GetterSetter(DOMJITGetterComplex::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only)
    705705        {
    706706        }
  • trunk/Source/WebCore/ChangeLog

    r207868 r207869  
     12016-10-25  Yusuke Suzuki  <utatane.tea@gmail.com>
     2
     3        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
     4        https://bugs.webkit.org/show_bug.cgi?id=163900
     5
     6        Reviewed by Sam Weinig.
     7
     8        Add TestDOMJIT.idl for bindings generation tests.
     9
     10        * bindings/scripts/CodeGeneratorJS.pm:
     11        (GetResultTypeFilter):
     12        (GenerateImplementation):
     13        * bindings/scripts/test/JS/JSTestDOMJIT.cpp: Added.
     14        (WebCore::JSTestDOMJITPrototype::create):
     15        (WebCore::JSTestDOMJITPrototype::createStructure):
     16        (WebCore::JSTestDOMJITPrototype::JSTestDOMJITPrototype):
     17        (WebCore::JSTestDOMJITConstructor::prototypeForStructure):
     18        (WebCore::JSTestDOMJITConstructor::initializeProperties):
     19        (WebCore::JSTestDOMJITPrototype::finishCreation):
     20        (WebCore::JSTestDOMJIT::JSTestDOMJIT):
     21        (WebCore::JSTestDOMJIT::createPrototype):
     22        (WebCore::JSTestDOMJIT::prototype):
     23        (WebCore::BindingCaller<JSTestDOMJIT>::castForAttribute):
     24        (WebCore::jsTestDOMJITAnyAttr):
     25        (WebCore::jsTestDOMJITAnyAttrGetter):
     26        (WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT):
     27        (WebCore::domJITGetterSetterForTestDOMJITAnyAttr):
     28        (WebCore::jsTestDOMJITBooleanAttr):
     29        (WebCore::jsTestDOMJITBooleanAttrGetter):
     30        (WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT):
     31        (WebCore::domJITGetterSetterForTestDOMJITBooleanAttr):
     32        (WebCore::jsTestDOMJITByteAttr):
     33        (WebCore::jsTestDOMJITByteAttrGetter):
     34        (WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT):
     35        (WebCore::domJITGetterSetterForTestDOMJITByteAttr):
     36        (WebCore::jsTestDOMJITOctetAttr):
     37        (WebCore::jsTestDOMJITOctetAttrGetter):
     38        (WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT):
     39        (WebCore::domJITGetterSetterForTestDOMJITOctetAttr):
     40        (WebCore::jsTestDOMJITShortAttr):
     41        (WebCore::jsTestDOMJITShortAttrGetter):
     42        (WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT):
     43        (WebCore::domJITGetterSetterForTestDOMJITShortAttr):
     44        (WebCore::jsTestDOMJITUnsignedShortAttr):
     45        (WebCore::jsTestDOMJITUnsignedShortAttrGetter):
     46        (WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT):
     47        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr):
     48        (WebCore::jsTestDOMJITLongAttr):
     49        (WebCore::jsTestDOMJITLongAttrGetter):
     50        (WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT):
     51        (WebCore::domJITGetterSetterForTestDOMJITLongAttr):
     52        (WebCore::jsTestDOMJITUnsignedLongAttr):
     53        (WebCore::jsTestDOMJITUnsignedLongAttrGetter):
     54        (WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT):
     55        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr):
     56        (WebCore::jsTestDOMJITLongLongAttr):
     57        (WebCore::jsTestDOMJITLongLongAttrGetter):
     58        (WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT):
     59        (WebCore::domJITGetterSetterForTestDOMJITLongLongAttr):
     60        (WebCore::jsTestDOMJITUnsignedLongLongAttr):
     61        (WebCore::jsTestDOMJITUnsignedLongLongAttrGetter):
     62        (WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT):
     63        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr):
     64        (WebCore::jsTestDOMJITFloatAttr):
     65        (WebCore::jsTestDOMJITFloatAttrGetter):
     66        (WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT):
     67        (WebCore::domJITGetterSetterForTestDOMJITFloatAttr):
     68        (WebCore::jsTestDOMJITUnrestrictedFloatAttr):
     69        (WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter):
     70        (WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT):
     71        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr):
     72        (WebCore::jsTestDOMJITDoubleAttr):
     73        (WebCore::jsTestDOMJITDoubleAttrGetter):
     74        (WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT):
     75        (WebCore::domJITGetterSetterForTestDOMJITDoubleAttr):
     76        (WebCore::jsTestDOMJITUnrestrictedDoubleAttr):
     77        (WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter):
     78        (WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT):
     79        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr):
     80        (WebCore::jsTestDOMJITDomStringAttr):
     81        (WebCore::jsTestDOMJITDomStringAttrGetter):
     82        (WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT):
     83        (WebCore::domJITGetterSetterForTestDOMJITDomStringAttr):
     84        (WebCore::jsTestDOMJITByteStringAttr):
     85        (WebCore::jsTestDOMJITByteStringAttrGetter):
     86        (WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT):
     87        (WebCore::domJITGetterSetterForTestDOMJITByteStringAttr):
     88        (WebCore::jsTestDOMJITUsvStringAttr):
     89        (WebCore::jsTestDOMJITUsvStringAttrGetter):
     90        (WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT):
     91        (WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr):
     92        (WebCore::jsTestDOMJITNodeAttr):
     93        (WebCore::jsTestDOMJITNodeAttrGetter):
     94        (WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT):
     95        (WebCore::domJITGetterSetterForTestDOMJITNodeAttr):
     96        (WebCore::jsTestDOMJITBooleanNullableAttr):
     97        (WebCore::jsTestDOMJITBooleanNullableAttrGetter):
     98        (WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT):
     99        (WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr):
     100        (WebCore::jsTestDOMJITByteNullableAttr):
     101        (WebCore::jsTestDOMJITByteNullableAttrGetter):
     102        (WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT):
     103        (WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr):
     104        (WebCore::jsTestDOMJITOctetNullableAttr):
     105        (WebCore::jsTestDOMJITOctetNullableAttrGetter):
     106        (WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT):
     107        (WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr):
     108        (WebCore::jsTestDOMJITShortNullableAttr):
     109        (WebCore::jsTestDOMJITShortNullableAttrGetter):
     110        (WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT):
     111        (WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr):
     112        (WebCore::jsTestDOMJITUnsignedShortNullableAttr):
     113        (WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter):
     114        (WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT):
     115        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr):
     116        (WebCore::jsTestDOMJITLongNullableAttr):
     117        (WebCore::jsTestDOMJITLongNullableAttrGetter):
     118        (WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT):
     119        (WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr):
     120        (WebCore::jsTestDOMJITUnsignedLongNullableAttr):
     121        (WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter):
     122        (WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT):
     123        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr):
     124        (WebCore::jsTestDOMJITLongLongNullableAttr):
     125        (WebCore::jsTestDOMJITLongLongNullableAttrGetter):
     126        (WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT):
     127        (WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr):
     128        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttr):
     129        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter):
     130        (WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT):
     131        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr):
     132        (WebCore::jsTestDOMJITFloatNullableAttr):
     133        (WebCore::jsTestDOMJITFloatNullableAttrGetter):
     134        (WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT):
     135        (WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr):
     136        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttr):
     137        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter):
     138        (WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT):
     139        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr):
     140        (WebCore::jsTestDOMJITDoubleNullableAttr):
     141        (WebCore::jsTestDOMJITDoubleNullableAttrGetter):
     142        (WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT):
     143        (WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr):
     144        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttr):
     145        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter):
     146        (WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT):
     147        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr):
     148        (WebCore::jsTestDOMJITDomStringNullableAttr):
     149        (WebCore::jsTestDOMJITDomStringNullableAttrGetter):
     150        (WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT):
     151        (WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr):
     152        (WebCore::jsTestDOMJITByteStringNullableAttr):
     153        (WebCore::jsTestDOMJITByteStringNullableAttrGetter):
     154        (WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT):
     155        (WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr):
     156        (WebCore::jsTestDOMJITUsvStringNullableAttr):
     157        (WebCore::jsTestDOMJITUsvStringNullableAttrGetter):
     158        (WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT):
     159        (WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr):
     160        (WebCore::jsTestDOMJITNodeNullableAttr):
     161        (WebCore::jsTestDOMJITNodeNullableAttrGetter):
     162        (WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT):
     163        (WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr):
     164        (WebCore::jsTestDOMJITConstructor):
     165        (WebCore::setJSTestDOMJITConstructor):
     166        (WebCore::JSTestDOMJIT::getConstructor):
     167        (WebCore::JSTestDOMJIT::visitChildren):
     168        * bindings/scripts/test/JS/JSTestDOMJIT.h: Added.
     169        (WebCore::JSTestDOMJIT::create):
     170        (WebCore::JSTestDOMJIT::createStructure):
     171        (WebCore::JSTestDOMJIT::wrapped):
     172        (WebCore::JSTestDOMJIT::finishCreation):
     173        * bindings/scripts/test/TestDOMJIT.idl: Added.
     174
    11752016-10-25  Brent Fulgham  <bfulgham@apple.com>
    2176
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r207829 r207869  
    24922492}
    24932493
     2494sub GetResultTypeFilter
     2495{
     2496    my ($signature) = @_;
     2497    my $idlType = $signature->idlType;
     2498
     2499    my %TypeFilters = (
     2500        "any" => "SpecHeapTop",
     2501        "boolean" => "SpecBoolean",
     2502        "byte" => "SpecInt32Only",
     2503        "octet" => "SpecInt32Only",
     2504        "short" => "SpecInt32Only",
     2505        "unsigned short" => "SpecInt32Only",
     2506        "long" => "SpecInt32Only",
     2507        "unsigned long" => "SpecBytecodeNumber",
     2508        "long long" => "SpecBytecodeNumber",
     2509        "unsigned long long" => "SpecBytecodeNumber",
     2510        "float" => "SpecBytecodeNumber",
     2511        "unrestricted float" => "SpecBytecodeNumber",
     2512        "double" => "SpecBytecodeNumber",
     2513        "unrestricted double" => "SpecBytecodeNumber",
     2514        "DOMString" => "SpecString",
     2515        "ByteString" => "SpecString",
     2516        "USVString" => "SpecString",
     2517    );
     2518
     2519    if (exists $TypeFilters{$idlType->name}) {
     2520        my $resultType = "JSC::$TypeFilters{$idlType->name}";
     2521        if ($idlType->isNullable) {
     2522            die "\"any\" type must not become nullable." if $idlType->name eq "any";
     2523            $resultType = "($resultType | JSC::SpecOther)";
     2524        }
     2525        return $resultType;
     2526    }
     2527    return "SpecHeapTop";
     2528}
     2529
    24942530sub GenerateImplementation
    24952531{
     
    32693305                my $getter = GetAttributeGetterName($interface, $generatorName, $attribute);
    32703306                my $setter = IsReadonly($attribute) ? "nullptr" : GetAttributeSetterName($interface, $generatorName, $attribute);
     3307                my $resultType = GetResultTypeFilter($attribute->signature);
    32713308                push(@implContent, "$domJITClassName::$domJITClassName()\n");
    3272                 push(@implContent, "    : JSC::DOMJIT::GetterSetter($getter, $setter, ${className}::info())\n");
     3309                push(@implContent, "    : JSC::DOMJIT::GetterSetter($getter, $setter, ${className}::info(), $resultType)\n");
    32733310                push(@implContent, "{\n");
    32743311                push(@implContent, "}\n\n");
Note: See TracChangeset for help on using the changeset viewer.