Changeset 96346 in webkit


Ignore:
Timestamp:
Sep 29, 2011 12:37:09 PM (13 years ago)
Author:
mhahnenberg@apple.com
Message:

De-virtualize JSCell::visitChildrenVirtual and remove all other visitChildrenVirtual methods
https://bugs.webkit.org/show_bug.cgi?id=68839

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Removed the remaining visitChildrenVirtual methods. This patch completes the process of
de-virtualizing visitChildren.

  • API/JSCallbackObject.h:
  • JavaScriptCore.exp:
  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
  • debugger/DebuggerActivation.cpp:
  • debugger/DebuggerActivation.h:
  • runtime/Arguments.cpp:
  • runtime/Arguments.h:
  • runtime/Executable.cpp:
  • runtime/Executable.h:
  • runtime/GetterSetter.cpp:
  • runtime/GetterSetter.h:
  • runtime/JSActivation.cpp:
  • runtime/JSActivation.h:
  • runtime/JSArray.cpp:
  • runtime/JSArray.h:
  • runtime/JSFunction.cpp:
  • runtime/JSFunction.h:
  • runtime/JSGlobalObject.cpp:
  • runtime/JSGlobalObject.h:
  • runtime/JSObject.cpp:
  • runtime/JSPropertyNameIterator.cpp:
  • runtime/JSPropertyNameIterator.h:
  • runtime/JSStaticScopeObject.cpp:
  • runtime/JSStaticScopeObject.h:
  • runtime/JSValue.h:
  • runtime/NativeErrorConstructor.cpp:
  • runtime/NativeErrorConstructor.h:
  • runtime/RegExpObject.cpp:
  • runtime/RegExpObject.h:
  • runtime/Structure.cpp:
  • runtime/Structure.h:
  • runtime/StructureChain.cpp:
  • runtime/StructureChain.h:

Inlined the method table access and call to the visitChildren function (the only call sites
to visitChildren are here).

  • heap/MarkStack.cpp:

(JSC::SlotVisitor::visitChildren):

Changed the field name for the visitChildren function pointer to visitChildren (from
visitChildrenFunctionPtr) to make call sites less verbose.

  • runtime/ClassInfo.h:

Discovered JSBoundFunction doesn't have its own ClassInfo (it used JSFunction's ClassInfo) but
overrides visitChildren, so it needs to have its own ClassInfo.

  • runtime/JSBoundFunction.cpp:
  • runtime/JSBoundFunction.h:

Had to move className up to make sure that the virtual destructor in JSObject wasn't
the first non-inline virtual method in JSObject (as per the comment in the file).
Also moved JSCell::visitChildrenVirtual into JSObject.h in order for it be inline-able
to mitigate the cost of an extra method call.

Also added a convenience accessor function methodTable() to JSCell to return the MethodTable to make
call sites more concise. Implementation is inline in JSObject.h.

  • runtime/JSObject.h:

(JSC::JSCell::methodTable):

  • runtime/JSCell.h:

Added an out of line virtual destructor to JSWrapperObject and ScopeChainNode to
appease the vtable gods. It refused to compile if there were no virtual methods in
both of these classes due to the presence of a weak vtable pointer.

  • runtime/JSWrapperObject.cpp:

(JSC::JSWrapperObject::~JSWrapperObject):

  • runtime/JSWrapperObject.h:
  • runtime/ScopeChain.cpp:

(JSC::ScopeChainNode::~ScopeChainNode):

  • runtime/ScopeChain.h:

Source/JavaScriptGlue:

Removed the remaining visitChildrenVirtual methods. This patch completes the process of
de-virtualizing visitChildren.

  • UserObjectImp.cpp:
  • UserObjectImp.h:

Source/WebCore:

No new tests.

Removed the remaining visitChildrenVirtual methods. This patch completes the process of
de-virtualizing visitChildren.

  • WebCore.exp.in:
  • bindings/js/JSAttrCustom.cpp:
  • bindings/js/JSAudioContextCustom.cpp:
  • bindings/js/JSCSSRuleCustom.cpp:
  • bindings/js/JSCSSStyleDeclarationCustom.cpp:
  • bindings/js/JSCanvasRenderingContextCustom.cpp:
  • bindings/js/JSDOMGlobalObject.cpp:

(WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
(WebCore::JSDOMGlobalObject::finishCreation):

  • bindings/js/JSDOMGlobalObject.h:
  • bindings/js/JSDOMWindowCustom.cpp:
  • bindings/js/JSDOMWindowShell.cpp:
  • bindings/js/JSDOMWindowShell.h:
  • bindings/js/JSJavaScriptAudioNodeCustom.cpp:
  • bindings/js/JSMessageChannelCustom.cpp:
  • bindings/js/JSMessagePortCustom.cpp:
  • bindings/js/JSNamedNodeMapCustom.cpp:
  • bindings/js/JSNodeCustom.cpp:
  • bindings/js/JSNodeFilterCustom.cpp:
  • bindings/js/JSNodeIteratorCustom.cpp:
  • bindings/js/JSSVGElementInstanceCustom.cpp:
  • bindings/js/JSSharedWorkerCustom.cpp:
  • bindings/js/JSStyleSheetCustom.cpp:
  • bindings/js/JSTreeWalkerCustom.cpp:
  • bindings/js/JSWebGLRenderingContextCustom.cpp:
  • bindings/js/JSWorkerContextCustom.cpp:
  • bindings/js/JSXMLHttpRequestCustom.cpp:
  • bindings/js/JSXPathResultCustom.cpp:
  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateHeader):
(GenerateImplementation):

  • bridge/qt/qt_instance.cpp:
  • bridge/qt/qt_runtime.cpp:
  • bridge/qt/qt_runtime.h:
Location:
trunk/Source
Files:
78 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSCallbackObject.h

    r96164 r96346  
    198198    static CallType getCallData(JSCell*, CallData&);
    199199
    200     virtual void visitChildrenVirtual(SlotVisitor& visitor)
    201     {
    202         visitChildren(this, visitor);
    203     }
    204 
    205200    static void visitChildren(JSCell* cell, SlotVisitor& visitor)
    206201    {
  • trunk/Source/JavaScriptCore/ChangeLog

    r96344 r96346  
     12011-09-29  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        De-virtualize JSCell::visitChildrenVirtual and remove all other visitChildrenVirtual methods
     4        https://bugs.webkit.org/show_bug.cgi?id=68839
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Removed the remaining visitChildrenVirtual methods.  This patch completes the process of
     9        de-virtualizing visitChildren.
     10
     11        * API/JSCallbackObject.h:
     12        * JavaScriptCore.exp:
     13        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
     14        * debugger/DebuggerActivation.cpp:
     15        * debugger/DebuggerActivation.h:
     16        * runtime/Arguments.cpp:
     17        * runtime/Arguments.h:
     18        * runtime/Executable.cpp:
     19        * runtime/Executable.h:
     20        * runtime/GetterSetter.cpp:
     21        * runtime/GetterSetter.h:
     22        * runtime/JSActivation.cpp:
     23        * runtime/JSActivation.h:
     24        * runtime/JSArray.cpp:
     25        * runtime/JSArray.h:
     26        * runtime/JSFunction.cpp:
     27        * runtime/JSFunction.h:
     28        * runtime/JSGlobalObject.cpp:
     29        * runtime/JSGlobalObject.h:
     30        * runtime/JSObject.cpp:
     31        * runtime/JSPropertyNameIterator.cpp:
     32        * runtime/JSPropertyNameIterator.h:
     33        * runtime/JSStaticScopeObject.cpp:
     34        * runtime/JSStaticScopeObject.h:
     35        * runtime/JSValue.h:
     36        * runtime/NativeErrorConstructor.cpp:
     37        * runtime/NativeErrorConstructor.h:
     38        * runtime/RegExpObject.cpp:
     39        * runtime/RegExpObject.h:
     40        * runtime/Structure.cpp:
     41        * runtime/Structure.h:
     42        * runtime/StructureChain.cpp:
     43        * runtime/StructureChain.h:
     44
     45        Inlined the method table access and call to the visitChildren function (the only call sites
     46        to visitChildren are here).
     47        * heap/MarkStack.cpp:
     48        (JSC::SlotVisitor::visitChildren):
     49
     50        Changed the field name for the visitChildren function pointer to visitChildren (from
     51        visitChildrenFunctionPtr) to make call sites less verbose.
     52        * runtime/ClassInfo.h:
     53
     54        Discovered JSBoundFunction doesn't have its own ClassInfo (it used JSFunction's ClassInfo) but
     55        overrides visitChildren, so it needs to have its own ClassInfo.
     56        * runtime/JSBoundFunction.cpp:
     57        * runtime/JSBoundFunction.h:
     58
     59        Had to move className up to make sure that the virtual destructor in JSObject wasn't
     60        the first non-inline virtual method in JSObject (as per the comment in the file).
     61        Also moved JSCell::visitChildrenVirtual into JSObject.h in order for it be inline-able
     62        to mitigate the cost of an extra method call.
     63
     64        Also added a convenience accessor function methodTable() to JSCell to return the MethodTable to make
     65        call sites more concise.  Implementation is inline in JSObject.h.
     66        * runtime/JSObject.h:
     67        (JSC::JSCell::methodTable):
     68        * runtime/JSCell.h:
     69
     70        Added an out of line virtual destructor to JSWrapperObject and ScopeChainNode to
     71        appease the vtable gods.  It refused to compile if there were no virtual methods in
     72        both of these classes due to the presence of a weak vtable pointer.
     73        * runtime/JSWrapperObject.cpp:
     74        (JSC::JSWrapperObject::~JSWrapperObject):
     75        * runtime/JSWrapperObject.h:
     76        * runtime/ScopeChain.cpp:
     77        (JSC::ScopeChainNode::~ScopeChainNode):
     78        * runtime/ScopeChain.h:
     79
    1802011-09-29  Yuqiang Xian  <yuqiang.xian@intel.com>
    281
  • trunk/Source/JavaScriptCore/JavaScriptCore.exp

    r96164 r96346  
    167167__ZN3JSC14JSGlobalObject17putWithAttributesEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueEj
    168168__ZN3JSC14JSGlobalObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
    169 __ZN3JSC14JSGlobalObject20visitChildrenVirtualERNS_11SlotVisitorE
    170169__ZN3JSC14JSGlobalObject24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
    171170__ZN3JSC14JSGlobalObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE 
     
    278277__ZN3JSC7JSArray15setSubclassDataEPv
    279278__ZN3JSC7JSArray18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
    280 __ZN3JSC7JSArray20visitChildrenVirtualERNS_11SlotVisitorE
    281279__ZN3JSC7JSArray6s_infoE
    282280__ZN3JSC7JSArray9setLengthEj
     
    322320__ZN3JSC8JSObject18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
    323321__ZN3JSC8JSObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE
    324 __ZN3JSC8JSObject20visitChildrenVirtualERNS_11SlotVisitorE
    325322__ZN3JSC8JSObject21getPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
    326323__ZN3JSC8JSObject22fillGetterPropertySlotERNS_12PropertySlotEPNS_16WriteBarrierBaseINS_7UnknownEEE
  • trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def

    r96164 r96346  
    3434    ??1Mutex@WTF@@QAE@XZ
    3535    ??1RefCountedLeakCounter@WTF@@QAE@XZ
     36    ??1ScopeChainNode@JSC@@EAE@XZ
    3637    ??1SourceProviderCache@JSC@@QAE@XZ
    3738    ??1ThreadCondition@WTF@@QAE@XZ
     
    373374    ?visitChildren@JSGlobalObject@JSC@@SAXPAVJSCell@2@AAVSlotVisitor@2@@Z
    374375    ?visitChildren@JSObject@JSC@@SAXPAVJSCell@2@AAVSlotVisitor@2@@Z
    375     ?visitChildrenVirtual@JSGlobalObject@JSC@@UAEXAAVSlotVisitor@2@@Z
    376     ?visitChildrenVirtual@JSObject@JSC@@UAEXAAVSlotVisitor@2@@Z
    377     ?visitChildrenVirtual@ScopeChainNode@JSC@@UAEXAAVSlotVisitor@2@@Z
    378376    ?wait@ThreadCondition@WTF@@QAEXAAVMutex@2@@Z
    379377    ?waitForThreadCompletion@WTF@@YAHIPAPAX@Z
  • trunk/Source/JavaScriptCore/debugger/DebuggerActivation.cpp

    r95901 r96346  
    4242    ASSERT(activation->isActivationObject());
    4343    m_activation.set(globalData, this, static_cast<JSActivation*>(activation));
    44 }
    45 
    46 void DebuggerActivation::visitChildrenVirtual(SlotVisitor& visitor)
    47 {
    48     visitChildren(this, visitor);
    4944}
    5045
  • trunk/Source/JavaScriptCore/debugger/DebuggerActivation.h

    r95901 r96346  
    4242        }
    4343
    44         virtual void visitChildrenVirtual(SlotVisitor&);
    4544        static void visitChildren(JSCell*, SlotVisitor&);
    4645        virtual UString className() const;
  • trunk/Source/JavaScriptCore/heap/MarkStack.cpp

    r95849 r96346  
    7171        ASSERT(!m_isCheckingForDefaultMarkViolation);
    7272        m_isCheckingForDefaultMarkViolation = true;
    73         cell->visitChildrenVirtual(*this);
     73        cell->methodTable()->visitChildren(cell, *this);
    7474        ASSERT(m_isCheckingForDefaultMarkViolation);
    7575        m_isCheckingForDefaultMarkViolation = false;
     
    8181        return;
    8282    }
    83     cell->visitChildrenVirtual(*this);
     83    cell->methodTable()->visitChildren(cell, *this);
    8484}
    8585
  • trunk/Source/JavaScriptCore/runtime/Arguments.cpp

    r95936 r96346  
    4444}
    4545
    46 void Arguments::visitChildrenVirtual(SlotVisitor& visitor)
    47 {
    48     visitChildren(this, visitor);
    49 }
    50 
    5146void Arguments::visitChildren(JSCell* cell, SlotVisitor& visitor)
    5247{
  • trunk/Source/JavaScriptCore/runtime/Arguments.h

    r95849 r96346  
    9191        static const ClassInfo s_info;
    9292
    93         virtual void visitChildrenVirtual(SlotVisitor&);
    9493        static void visitChildren(JSCell*, SlotVisitor&);
    9594
  • trunk/Source/JavaScriptCore/runtime/ClassInfo.h

    r95936 r96346  
    3333    struct MethodTable {
    3434        typedef void (*VisitChildrenFunctionPtr)(JSCell*, SlotVisitor&);
    35         VisitChildrenFunctionPtr visitChildrenFunctionPtr;
     35        VisitChildrenFunctionPtr visitChildren;
    3636    };
    3737
  • trunk/Source/JavaScriptCore/runtime/Executable.cpp

    r95936 r96346  
    235235#endif
    236236
    237 void EvalExecutable::visitChildrenVirtual(SlotVisitor& visitor)
    238 {
    239     visitChildren(this, visitor);
    240 }
    241 
    242237void EvalExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor)
    243238{
     
    377372    m_programCodeBlock->unlinkCalls();
    378373#endif
    379 }
    380 
    381 void ProgramExecutable::visitChildrenVirtual(SlotVisitor& visitor)
    382 {
    383     visitChildren(this, visitor);
    384374}
    385375
     
    597587#endif
    598588
    599 void FunctionExecutable::visitChildrenVirtual(SlotVisitor& visitor)
    600 {
    601     visitChildren(this, visitor);
    602 }
    603 
    604589void FunctionExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor)
    605590{
  • trunk/Source/JavaScriptCore/runtime/Executable.h

    r95901 r96346  
    357357
    358358        JSObject* compileInternal(ExecState*, ScopeChainNode*, JITCode::JITType);
    359         virtual void visitChildrenVirtual(SlotVisitor&);
    360359        static void visitChildren(JSCell*, SlotVisitor&);
    361360        void unlinkCalls();
     
    423422
    424423        JSObject* compileInternal(ExecState*, ScopeChainNode*, JITCode::JITType);
    425         virtual void visitChildrenVirtual(SlotVisitor&);
    426424        static void visitChildren(JSCell*, SlotVisitor&);
    427425        void unlinkCalls();
     
    583581
    584582        void discardCode();
    585         void visitChildrenVirtual(SlotVisitor&);
    586583        static void visitChildren(JSCell*, SlotVisitor&);
    587584        static FunctionExecutable* fromGlobalCode(const Identifier&, ExecState*, Debugger*, const SourceCode&, JSObject** exception);
  • trunk/Source/JavaScriptCore/runtime/GetterSetter.cpp

    r95936 r96346  
    3131const ClassInfo GetterSetter::s_info = { "GetterSetter", 0, 0, 0, CREATE_METHOD_TABLE(GetterSetter) };
    3232
    33 void GetterSetter::visitChildrenVirtual(SlotVisitor& visitor)
    34 {
    35     visitChildren(this, visitor);
    36 }
    37 
    3833void GetterSetter::visitChildren(JSCell* cell, SlotVisitor& visitor)
    3934{
  • trunk/Source/JavaScriptCore/runtime/GetterSetter.h

    r95849 r96346  
    5454        }
    5555
    56         virtual void visitChildrenVirtual(SlotVisitor&);
    5756        static void visitChildren(JSCell*, SlotVisitor&);
    5857
  • trunk/Source/JavaScriptCore/runtime/JSActivation.cpp

    r95936 r96346  
    6464}
    6565
    66 void JSActivation::visitChildrenVirtual(SlotVisitor& visitor)
    67 {
    68     visitChildren(this, visitor);
    69 }
    70 
    7166void JSActivation::visitChildren(JSCell* cell, SlotVisitor& visitor)
    7267{
  • trunk/Source/JavaScriptCore/runtime/JSActivation.h

    r95901 r96346  
    5656        virtual ~JSActivation();
    5757
    58         virtual void visitChildrenVirtual(SlotVisitor&);
    5958        static void visitChildren(JSCell*, SlotVisitor&);
    6059
  • trunk/Source/JavaScriptCore/runtime/JSArray.cpp

    r95936 r96346  
    872872}
    873873
    874 void JSArray::visitChildrenVirtual(SlotVisitor& visitor)
    875 {
    876     visitChildren(this, visitor);
    877 }
    878 
    879874void JSArray::visitChildren(JSCell* cell, SlotVisitor& visitor)
    880875{
  • trunk/Source/JavaScriptCore/runtime/JSArray.h

    r95849 r96346  
    173173        virtual bool deleteProperty(ExecState*, unsigned propertyName);
    174174        virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
    175         virtual void visitChildrenVirtual(SlotVisitor&);
    176175        static void visitChildren(JSCell*, SlotVisitor&);
    177176
  • trunk/Source/JavaScriptCore/runtime/JSBoundFunction.cpp

    r95901 r96346  
    3232
    3333ASSERT_CLASS_FITS_IN_CELL(JSBoundFunction);
     34
     35const ClassInfo JSBoundFunction::s_info = { "Function", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(JSBoundFunction) };
    3436
    3537EncodedJSValue JSC_HOST_CALL boundFunctionCall(ExecState* exec)
     
    141143}
    142144
    143 void JSBoundFunction::visitChildrenVirtual(SlotVisitor& visitor)
    144 {
    145     visitChildren(this, visitor);
    146 }
    147 
    148145void JSBoundFunction::visitChildren(JSCell* cell, SlotVisitor& visitor)
    149146{
  • trunk/Source/JavaScriptCore/runtime/JSBoundFunction.h

    r95901 r96346  
    5555    }
    5656
     57    static JS_EXPORTDATA const ClassInfo s_info;
     58
    5759protected:
    58     const static unsigned StructureFlags = OverridesHasInstance | Base::StructureFlags;
     60    const static unsigned StructureFlags = OverridesHasInstance | OverridesVisitChildren | Base::StructureFlags;
    5961
    60     virtual void visitChildrenVirtual(SlotVisitor&);
    6162    static void visitChildren(JSCell*, SlotVisitor&);
    6263
  • trunk/Source/JavaScriptCore/runtime/JSCell.h

    r96164 r96346  
    8686        virtual JSObject* toObject(ExecState*, JSGlobalObject*) const;
    8787
    88         virtual void visitChildrenVirtual(SlotVisitor&);
    8988        static void visitChildren(JSCell*, SlotVisitor&);
    9089
    9190        // Object operations, with the toObject operation included.
    9291        const ClassInfo* classInfo() const;
     92        const MethodTable* methodTable() const;
    9393        virtual void put(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&);
    9494        virtual void put(ExecState*, unsigned propertyName, JSValue);
     
    182182    }
    183183
    184     inline void JSCell::visitChildrenVirtual(SlotVisitor& visitor)
    185     {
    186         visitChildren(this, visitor);
    187     }
    188 
    189184    inline void JSCell::visitChildren(JSCell* cell, SlotVisitor& visitor)
    190185    {
  • trunk/Source/JavaScriptCore/runtime/JSFunction.cpp

    r96164 r96346  
    152152}
    153153
    154 void JSFunction::visitChildrenVirtual(SlotVisitor& visitor)
    155 {
    156     visitChildren(this, visitor);
    157 }
    158 
    159154void JSFunction::visitChildren(JSCell* cell, SlotVisitor& visitor)
    160155{
  • trunk/Source/JavaScriptCore/runtime/JSFunction.h

    r96164 r96346  
    136136        virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode = ExcludeDontEnumProperties);
    137137
    138         virtual void visitChildrenVirtual(SlotVisitor&);
    139138        static void visitChildren(JSCell*, SlotVisitor&);
    140139
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp

    r95936 r96346  
    309309}
    310310
    311 void JSGlobalObject::visitChildrenVirtual(SlotVisitor& visitor)
    312 {
    313     visitChildren(this, visitor);
    314 }
    315 
    316311void JSGlobalObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
    317312{
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h

    r95849 r96346  
    176176        virtual ~JSGlobalObject();
    177177
    178         virtual void visitChildrenVirtual(SlotVisitor&);
    179178        static void visitChildren(JSCell*, SlotVisitor&);
    180179
  • trunk/Source/JavaScriptCore/runtime/JSObject.cpp

    r96164 r96346  
    6767        }
    6868    }
    69 }
    70 
    71 void JSObject::visitChildrenVirtual(SlotVisitor& visitor)
    72 {
    73     visitChildren(this, visitor);
    7469}
    7570
  • trunk/Source/JavaScriptCore/runtime/JSObject.h

    r96143 r96346  
    8080        typedef JSCell Base;
    8181
    82         virtual void visitChildrenVirtual(SlotVisitor&);
    8382        ALWAYS_INLINE void visitChildrenDirect(SlotVisitor&);
    8483        static void visitChildren(JSCell*, SlotVisitor&);
     84
     85        virtual UString className() const;
    8586
    8687        // The inline virtual destructor cannot be the first virtual function declared
     
    9394       
    9495        Structure* inheritorID(JSGlobalData&);
    95 
    96         virtual UString className() const;
    9796
    9897        JSValue get(ExecState*, const Identifier& propertyName) const;
     
    484483{
    485484    return classInfo()->isSubClassOf(info);
     485}
     486
     487inline const MethodTable* JSCell::methodTable() const
     488{
     489    return &classInfo()->methodTable;
    486490}
    487491
  • trunk/Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp

    r95936 r96346  
    9393}
    9494
    95 void JSPropertyNameIterator::visitChildrenVirtual(SlotVisitor& visitor)
    96 {
    97     visitChildren(this, visitor);
    98 }
    99 
    10095void JSPropertyNameIterator::visitChildren(JSCell* cell, SlotVisitor& visitor)
    10196{
  • trunk/Source/JavaScriptCore/runtime/JSPropertyNameIterator.h

    r95901 r96346  
    5959        }
    6060
    61         virtual void visitChildrenVirtual(SlotVisitor&);
    6261        static void visitChildren(JSCell*, SlotVisitor&);
    6362
  • trunk/Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp

    r95901 r96346  
    3232namespace JSC {
    3333ASSERT_CLASS_FITS_IN_CELL(JSStaticScopeObject);
    34 
    35 void JSStaticScopeObject::visitChildrenVirtual(SlotVisitor& visitor)
    36 {
    37     visitChildren(this, visitor);
    38 }
    3934
    4035void JSStaticScopeObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
  • trunk/Source/JavaScriptCore/runtime/JSStaticScopeObject.h

    r95901 r96346  
    4242        }
    4343
    44         virtual void visitChildrenVirtual(SlotVisitor&);
    4544        static void visitChildren(JSCell*, SlotVisitor&);
    4645        bool isDynamicScope(bool& requiresDynamicChecks) const;
  • trunk/Source/JavaScriptCore/runtime/JSValue.h

    r95902 r96346  
    5555    struct ClassInfo;
    5656    struct Instruction;
     57    struct MethodTable;
    5758
    5859    template <class T> class WriteBarrierBase;
  • trunk/Source/JavaScriptCore/runtime/JSWrapperObject.cpp

    r95849 r96346  
    2727ASSERT_CLASS_FITS_IN_CELL(JSWrapperObject);
    2828
    29 void JSWrapperObject::visitChildrenVirtual(SlotVisitor& visitor)
     29JSWrapperObject::~JSWrapperObject()
    3030{
    31     visitChildren(this, visitor);
    3231}
    3332
  • trunk/Source/JavaScriptCore/runtime/JSWrapperObject.h

    r95936 r96346  
    4545        static const unsigned StructureFlags = OverridesVisitChildren | JSNonFinalObject::StructureFlags;
    4646
    47         virtual void visitChildrenVirtual(SlotVisitor&);
    4847        static void visitChildren(JSCell*, SlotVisitor&);
     48
     49        virtual ~JSWrapperObject();
    4950       
    5051    private:
  • trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp

    r96164 r96346  
    3636    : InternalFunction(globalObject, structure)
    3737{
    38 }
    39 
    40 void NativeErrorConstructor::visitChildrenVirtual(SlotVisitor& visitor)
    41 {
    42     visitChildren(this, visitor);
    4338}
    4439
  • trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.h

    r96164 r96346  
    7272        virtual CallType getCallDataVirtual(CallData&);
    7373        static CallType getCallData(JSCell*, CallData&);
    74         virtual void visitChildrenVirtual(SlotVisitor&);
    7574        static void visitChildren(JSCell*, SlotVisitor&);
    7675
  • trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp

    r95936 r96346  
    7777RegExpObject::~RegExpObject()
    7878{
    79 }
    80 
    81 void RegExpObject::visitChildrenVirtual(SlotVisitor& visitor)
    82 {
    83     visitChildren(this, visitor);
    8479}
    8580
  • trunk/Source/JavaScriptCore/runtime/RegExpObject.h

    r95936 r96346  
    8282        static const unsigned StructureFlags = OverridesVisitChildren | OverridesGetOwnPropertySlot | Base::StructureFlags;
    8383
    84         virtual void visitChildrenVirtual(SlotVisitor&);
    8584        static void visitChildren(JSCell*, SlotVisitor&);
    8685
  • trunk/Source/JavaScriptCore/runtime/ScopeChain.cpp

    r95936 r96346  
    2929
    3030namespace JSC {
     31
     32ScopeChainNode::~ScopeChainNode()
     33{
     34}
    3135
    3236#ifndef NDEBUG
     
    6872}
    6973
    70 void ScopeChainNode::visitChildrenVirtual(SlotVisitor& visitor)
    71 {
    72     visitChildren(this, visitor);
    73 }
    74 
    7574void ScopeChainNode::visitChildren(JSCell* cell, SlotVisitor& visitor)
    7675{
  • trunk/Source/JavaScriptCore/runtime/ScopeChain.h

    r95849 r96346  
    4646        }
    4747
     48        virtual ~ScopeChainNode();
     49
    4850    protected:
    4951        void finishCreation(JSGlobalData* globalData, JSGlobalObject* globalObject)
     
    8890       
    8991        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue proto) { return Structure::create(globalData, globalObject, proto, TypeInfo(CompoundType, StructureFlags), &s_info); }
    90         virtual void visitChildrenVirtual(SlotVisitor&);
    9192        static void visitChildren(JSCell*, SlotVisitor&);
    9293        static JS_EXPORTDATA const ClassInfo s_info;
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r95936 r96346  
    725725}
    726726
    727 void Structure::visitChildrenVirtual(SlotVisitor& visitor)
    728 {
    729     visitChildren(this, visitor);
    730 }
    731 
    732727void Structure::visitChildren(JSCell* cell, SlotVisitor& visitor)
    733728{
  • trunk/Source/JavaScriptCore/runtime/Structure.h

    r95901 r96346  
    131131        JSValue prototypeForLookup(ExecState*) const;
    132132        StructureChain* prototypeChain(ExecState*) const;
    133         void visitChildrenVirtual(SlotVisitor&);
    134133        static void visitChildren(JSCell*, SlotVisitor&);
    135134
  • trunk/Source/JavaScriptCore/runtime/StructureChain.cpp

    r95936 r96346  
    4444}
    4545
    46 void StructureChain::visitChildrenVirtual(SlotVisitor& visitor)
    47 {
    48     visitChildren(this, visitor);
    49 }
    50 
    5146void StructureChain::visitChildren(JSCell* cell, SlotVisitor& visitor)
    5247{
  • trunk/Source/JavaScriptCore/runtime/StructureChain.h

    r95901 r96346  
    5353        }
    5454        WriteBarrier<Structure>* head() { return m_vector.get(); }
    55         void visitChildrenVirtual(SlotVisitor&);
    5655        static void visitChildren(JSCell*, SlotVisitor&);
    5756
  • trunk/Source/JavaScriptGlue/ChangeLog

    r96164 r96346  
     12011-09-29  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        De-virtualize JSCell::visitChildrenVirtual and remove all other visitChildrenVirtual methods
     4        https://bugs.webkit.org/show_bug.cgi?id=68839
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Removed the remaining visitChildrenVirtual methods.  This patch completes the process of
     9        de-virtualizing visitChildren.
     10
     11        * UserObjectImp.cpp:
     12        * UserObjectImp.h:
     13
    1142011-09-27  Mark Hahnenberg  <mhahnenberg@apple.com>
    215
  • trunk/Source/JavaScriptGlue/UserObjectImp.cpp

    r96164 r96346  
    411411}
    412412
    413 void UserObjectImp::visitChildrenVirtual(SlotVisitor& visitor)
    414 {
    415     visitChildren(this, visitor);
    416 }
    417 
    418413void UserObjectImp::visitChildren(JSCell* cell, SlotVisitor& visitor)
    419414{
  • trunk/Source/JavaScriptGlue/UserObjectImp.h

    r96164 r96346  
    6464    virtual UString toString(ExecState *exec) const;
    6565
    66     virtual void visitChildrenVirtual(SlotVisitor&);
    6766    static void visitChildren(JSCell*, SlotVisitor&);
    6867
  • trunk/Source/WebCore/ChangeLog

    r96345 r96346  
     12011-09-29  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        De-virtualize JSCell::visitChildrenVirtual and remove all other visitChildrenVirtual methods
     4        https://bugs.webkit.org/show_bug.cgi?id=68839
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        No new tests.
     9
     10        Removed the remaining visitChildrenVirtual methods.  This patch completes the process of
     11        de-virtualizing visitChildren.
     12
     13        * WebCore.exp.in:
     14        * bindings/js/JSAttrCustom.cpp:
     15        * bindings/js/JSAudioContextCustom.cpp:
     16        * bindings/js/JSCSSRuleCustom.cpp:
     17        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
     18        * bindings/js/JSCanvasRenderingContextCustom.cpp:
     19        * bindings/js/JSDOMGlobalObject.cpp:
     20        (WebCore::JSDOMGlobalObject::~JSDOMGlobalObject):
     21        (WebCore::JSDOMGlobalObject::finishCreation):
     22        * bindings/js/JSDOMGlobalObject.h:
     23        * bindings/js/JSDOMWindowCustom.cpp:
     24        * bindings/js/JSDOMWindowShell.cpp:
     25        * bindings/js/JSDOMWindowShell.h:
     26        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
     27        * bindings/js/JSMessageChannelCustom.cpp:
     28        * bindings/js/JSMessagePortCustom.cpp:
     29        * bindings/js/JSNamedNodeMapCustom.cpp:
     30        * bindings/js/JSNodeCustom.cpp:
     31        * bindings/js/JSNodeFilterCustom.cpp:
     32        * bindings/js/JSNodeIteratorCustom.cpp:
     33        * bindings/js/JSSVGElementInstanceCustom.cpp:
     34        * bindings/js/JSSharedWorkerCustom.cpp:
     35        * bindings/js/JSStyleSheetCustom.cpp:
     36        * bindings/js/JSTreeWalkerCustom.cpp:
     37        * bindings/js/JSWebGLRenderingContextCustom.cpp:
     38        * bindings/js/JSWorkerContextCustom.cpp:
     39        * bindings/js/JSXMLHttpRequestCustom.cpp:
     40        * bindings/js/JSXPathResultCustom.cpp:
     41        * bindings/scripts/CodeGeneratorJS.pm:
     42        (GenerateHeader):
     43        (GenerateImplementation):
     44        * bridge/qt/qt_instance.cpp:
     45        * bridge/qt/qt_runtime.cpp:
     46        * bridge/qt/qt_runtime.h:
     47
    1482011-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
    249
  • trunk/Source/WebCore/WebCore.exp.in

    r96205 r96346  
    815815__ZN7WebCore6Editor7commandERKN3WTF6StringE
    816816__ZN7WebCore6Editor7outdentEv
    817 __ZN7WebCore6JSNode20visitChildrenVirtualERN3JSC11SlotVisitorE
    818817__ZN7WebCore6JSNode3putEPN3JSC9ExecStateERKNS1_10IdentifierENS1_7JSValueERNS1_15PutPropertySlotE
    819818__ZN7WebCore6JSNode6s_infoE
  • trunk/Source/WebCore/bindings/js/JSAttrCustom.cpp

    r95849 r96346  
    4040using namespace HTMLNames;
    4141
    42 void JSAttr::visitChildrenVirtual(SlotVisitor& visitor)
    43 {
    44     visitChildren(this, visitor);
    45 }
    46 
    4742void JSAttr::visitChildren(JSCell* cell, SlotVisitor& visitor)
    4843{
  • trunk/Source/WebCore/bindings/js/JSAudioContextCustom.cpp

    r95901 r96346  
    3939
    4040namespace WebCore {
    41 
    42 void JSAudioContext::visitChildrenVirtual(SlotVisitor& visitor)
    43 {
    44     visitChildren(this, visitor);
    45 }
    4641
    4742void JSAudioContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
  • trunk/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp

    r95849 r96346  
    4848
    4949namespace WebCore {
    50 
    51 void JSCSSRule::visitChildrenVirtual(SlotVisitor& visitor)
    52 {
    53     visitChildren(this, visitor);
    54 }
    5550
    5651void JSCSSRule::visitChildren(JSCell* cell, SlotVisitor& visitor)
  • trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp

    r95849 r96346  
    4343
    4444namespace WebCore {
    45 
    46 void JSCSSStyleDeclaration::visitChildrenVirtual(SlotVisitor& visitor)
    47 {
    48     visitChildren(this, visitor);
    49 }
    5045
    5146void JSCSSStyleDeclaration::visitChildren(JSCell* cell, SlotVisitor& visitor)
  • trunk/Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp

    r95901 r96346  
    4040namespace WebCore {
    4141
    42 void JSCanvasRenderingContext::visitChildrenVirtual(SlotVisitor& visitor)
    43 {
    44     visitChildren(this, visitor);
    45 }
    46 
    4742void JSCanvasRenderingContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
    4843{
  • trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp

    r95936 r96346  
    5050}
    5151
     52JSDOMGlobalObject::~JSDOMGlobalObject()
     53{
     54}
     55
    5256void JSDOMGlobalObject::finishCreation(JSGlobalData& globalData, JSObject* thisValue)
    5357{
    5458    Base::finishCreation(globalData, thisValue);
    5559    ASSERT(inherits(&s_info));
    56 }
    57 
    58 void JSDOMGlobalObject::visitChildrenVirtual(JSC::SlotVisitor& visitor)
    59 {
    60     visitChildren(this, visitor);
    6160}
    6261
  • trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.h

    r95849 r96346  
    4848
    4949        JSDOMGlobalObject(JSC::JSGlobalData&, JSC::Structure*, PassRefPtr<DOMWrapperWorld>);
     50        virtual ~JSDOMGlobalObject();
    5051        void finishCreation(JSC::JSGlobalData&, JSC::JSObject* thisValue);
    5152
     
    6566        JSObject* injectedScript() const;
    6667
    67         virtual void visitChildrenVirtual(JSC::SlotVisitor&);
    6868        static void visitChildren(JSC::JSCell*, JSC::SlotVisitor&);
    6969
  • trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp

    r95849 r96346  
    7878namespace WebCore {
    7979
    80 void JSDOMWindow::visitChildrenVirtual(SlotVisitor& visitor)
    81 {
    82     visitChildren(this, visitor);
    83 }
    84 
    8580void JSDOMWindow::visitChildren(JSCell* cell, SlotVisitor& visitor)
    8681{
  • trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp

    r95936 r96346  
    8484// ----
    8585
    86 void JSDOMWindowShell::visitChildrenVirtual(JSC::SlotVisitor& visitor)
    87 {
    88     visitChildren(this, visitor);
    89 }
    90 
    9186void JSDOMWindowShell::visitChildren(JSCell* cell, SlotVisitor& visitor)
    9287{
  • trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h

    r95901 r96346  
    7878        static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesVisitChildren | JSC::OverridesGetPropertyNames | Base::StructureFlags;
    7979
    80         virtual void visitChildrenVirtual(JSC::SlotVisitor&);
    8180        static void visitChildren(JSC::JSCell*, JSC::SlotVisitor&);
    8281        virtual JSC::UString className() const;
  • trunk/Source/WebCore/bindings/js/JSJavaScriptAudioNodeCustom.cpp

    r95901 r96346  
    3535namespace WebCore {
    3636
    37 void JSJavaScriptAudioNode::visitChildrenVirtual(SlotVisitor& visitor)
    38 {
    39     visitChildren(this, visitor);
    40 }
    41 
    4237void JSJavaScriptAudioNode::visitChildren(JSCell* cell, SlotVisitor& visitor)
    4338{
  • trunk/Source/WebCore/bindings/js/JSMessageChannelCustom.cpp

    r95849 r96346  
    3434namespace WebCore {
    3535
    36 void JSMessageChannel::visitChildrenVirtual(SlotVisitor& visitor)
    37 {
    38     visitChildren(this, visitor);
    39 }
    40 
    4136void JSMessageChannel::visitChildren(JSCell* cell, SlotVisitor& visitor)
    4237{
  • trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp

    r95849 r96346  
    4242
    4343namespace WebCore {
    44 
    45 void JSMessagePort::visitChildrenVirtual(SlotVisitor& visitor)
    46 {
    47     visitChildren(this, visitor);
    48 }
    4944
    5045void JSMessagePort::visitChildren(JSCell* cell, SlotVisitor& visitor)
  • trunk/Source/WebCore/bindings/js/JSNamedNodeMapCustom.cpp

    r95849 r96346  
    3636namespace WebCore {
    3737
    38 void JSNamedNodeMap::visitChildrenVirtual(SlotVisitor& visitor)
    39 {
    40     visitChildren(this, visitor);
    41 }
    42 
    4338bool JSNamedNodeMap::canGetItemsForName(ExecState*, NamedNodeMap* impl, const Identifier& propertyName)
    4439{
  • trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp

    r95849 r96346  
    193193}
    194194
    195 void JSNode::visitChildrenVirtual(SlotVisitor& visitor)
    196 {
    197     visitChildren(this, visitor);
    198 }
    199 
    200195void JSNode::visitChildren(JSCell* cell, SlotVisitor& visitor)
    201196{
  • trunk/Source/WebCore/bindings/js/JSNodeFilterCustom.cpp

    r95849 r96346  
    3737namespace WebCore {
    3838
    39 void JSNodeFilter::visitChildrenVirtual(SlotVisitor& visitor)
    40 {
    41     visitChildren(this, visitor);
    42 }
    43 
    4439void JSNodeFilter::visitChildren(JSCell* cell, SlotVisitor& visitor)
    4540{
  • trunk/Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp

    r95849 r96346  
    3030namespace WebCore {
    3131
    32 void JSNodeIterator::visitChildrenVirtual(SlotVisitor& visitor)
    33 {
    34     visitChildren(this, visitor);
    35 }
    36 
    3732void JSNodeIterator::visitChildren(JSCell* cell, SlotVisitor& visitor)
    3833{
  • trunk/Source/WebCore/bindings/js/JSSVGElementInstanceCustom.cpp

    r95901 r96346  
    3636namespace WebCore {
    3737
    38 void JSSVGElementInstance::visitChildrenVirtual(JSC::SlotVisitor& visitor)
    39 {
    40     visitChildren(this, visitor);
    41 }
    42 
    4338void JSSVGElementInstance::visitChildren(JSC::JSCell* cell, JSC::SlotVisitor& visitor)
    4439{
  • trunk/Source/WebCore/bindings/js/JSSharedWorkerCustom.cpp

    r95901 r96346  
    4444namespace WebCore {
    4545
    46 void JSSharedWorker::visitChildrenVirtual(SlotVisitor& visitor)
    47 {
    48     visitChildren(this, visitor);
    49 }
    50 
    5146void JSSharedWorker::visitChildren(JSCell* cell, SlotVisitor& visitor)
    5247{
  • trunk/Source/WebCore/bindings/js/JSStyleSheetCustom.cpp

    r95849 r96346  
    3636namespace WebCore {
    3737
    38 void JSStyleSheet::visitChildrenVirtual(SlotVisitor& visitor)
    39 {
    40     visitChildren(this, visitor);
    41 }
    42 
    4338void JSStyleSheet::visitChildren(JSCell* cell, SlotVisitor& visitor)
    4439{
  • trunk/Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp

    r95849 r96346  
    3030namespace WebCore {
    3131
    32 void JSTreeWalker::visitChildrenVirtual(SlotVisitor& visitor)
    33 {
    34     visitChildren(this, visitor);
    35 }
    36 
    3732void JSTreeWalker::visitChildren(JSCell* cell, SlotVisitor& visitor)
    3833{
  • trunk/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp

    r95901 r96346  
    193193}
    194194
    195 void JSWebGLRenderingContext::visitChildrenVirtual(SlotVisitor& visitor)
    196 {
    197     visitChildren(this, visitor);
    198 }
    199 
    200195void JSWebGLRenderingContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
    201196{
  • trunk/Source/WebCore/bindings/js/JSWorkerContextCustom.cpp

    r95849 r96346  
    5353
    5454namespace WebCore {
    55 
    56 void JSWorkerContext::visitChildrenVirtual(SlotVisitor& visitor)
    57 {
    58     visitChildren(this, visitor);
    59 }
    6055
    6156void JSWorkerContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
  • trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp

    r95901 r96346  
    5555namespace WebCore {
    5656
    57 void JSXMLHttpRequest::visitChildrenVirtual(SlotVisitor& visitor)
    58 {
    59     visitChildren(this, visitor);
    60 }
    61 
    6257void JSXMLHttpRequest::visitChildren(JSCell* cell, SlotVisitor& visitor)
    6358{
  • trunk/Source/WebCore/bindings/js/JSXPathResultCustom.cpp

    r95901 r96346  
    3838namespace WebCore {
    3939
    40 void JSXPathResult::visitChildrenVirtual(SlotVisitor& visitor)
    41 {
    42     visitChildren(this, visitor);
    43 }
    44 
    4540void JSXPathResult::visitChildren(JSCell* cell, SlotVisitor& visitor)
    4641{
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r96164 r96346  
    879879    # visit function
    880880    if ($needsMarkChildren) {
    881         push(@headerContent, "    virtual void visitChildrenVirtual(JSC::SlotVisitor&);\n");
    882881        push(@headerContent, "    static void visitChildren(JSCell*, JSC::SlotVisitor&);\n\n");
    883882        $structureFlags{"JSC::OverridesVisitChildren"} = 1;
     
    22032202       
    22042203        if ($needsMarkChildren && !$dataNode->extendedAttributes->{"CustomMarkFunction"}) {
    2205             push(@implContent, "void ${className}::visitChildrenVirtual(SlotVisitor& visitor)\n");
    2206             push(@implContent, "{\n");
    2207             push(@implContent, "    visitChildren(this, visitor);\n");
    2208             push(@implContent, "}\n\n");
    2209 
    22102204            push(@implContent, "void ${className}::visitChildren(JSCell* cell, SlotVisitor& visitor)\n");
    22112205            push(@implContent, "{\n");
  • trunk/Source/WebCore/bridge/qt/qt_instance.cpp

    r95936 r96346  
    6363    static const ClassInfo s_info;
    6464
    65     virtual void visitChildrenVirtual(SlotVisitor& visitor)
    66     {
    67         visitChildren(this, visitor);
    68     }
    69 
    7065    static void visitChildren(JSCell* cell, SlotVisitor& visitor)
    7166    {
  • trunk/Source/WebCore/bridge/qt/qt_runtime.cpp

    r96164 r96346  
    14401440}
    14411441
    1442 void QtRuntimeMetaMethod::visitChildrenVirtual(SlotVisitor& visitor)
    1443 {
    1444     visitChildren(this, visitor);
    1445 }
    1446 
    14471442void QtRuntimeMetaMethod::visitChildren(JSCell* cell, SlotVisitor& visitor)
    14481443{
  • trunk/Source/WebCore/bridge/qt/qt_runtime.h

    r96164 r96346  
    169169    virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
    170170
    171     virtual void visitChildrenVirtual(SlotVisitor&);
    172171    static void visitChildren(JSCell*, SlotVisitor&);
    173172
Note: See TracChangeset for help on using the changeset viewer.