Changeset 95849 in webkit


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

Add static version of JSCell::visitChildren
https://bugs.webkit.org/show_bug.cgi?id=68404

Reviewed by Darin Adler.

.:

In this patch we just extract the bodies of the virtual visitChildren methods
throughout the JSCell inheritance hierarchy out into static methods, which are
now called from the virtual methods. This is an intermediate step in trying to
move the virtual-ness of visitChildren into our own custom vtable stored in
ClassInfo. We need to convert the methods to static methods in order to be
able to more easily store and refer to them in our custom vtable since normal
member methods store some implicit information in their types, making it
impossible to store them generically in ClassInfo.

  • Source/autotools/symbols.filter:

Source/JavaScriptCore:

In this patch we just extract the bodies of the virtual visitChildren methods
throughout the JSCell inheritance hierarchy out into static methods, which are
now called from the virtual methods. This is an intermediate step in trying to
move the virtual-ness of visitChildren into our own custom vtable stored in
ClassInfo. We need to convert the methods to static methods in order to be
able to more easily store and refer to them in our custom vtable since normal
member methods store some implicit information in their types, making it
impossible to store them generically in ClassInfo.

  • API/JSCallbackObject.h:

(JSC::JSCallbackObject::visitChildrenVirtual):
(JSC::JSCallbackObject::visitChildren):

(JSC::DebuggerActivation::visitChildrenVirtual):
(JSC::DebuggerActivation::visitChildren):

  • debugger/DebuggerActivation.h:
  • heap/MarkStack.cpp:

(JSC::SlotVisitor::visitChildren):
(JSC::SlotVisitor::drain):

  • runtime/Arguments.cpp:

(JSC::Arguments::visitChildrenVirtual):
(JSC::Arguments::visitChildren):

  • runtime/Arguments.h:
  • runtime/Executable.cpp:

(JSC::EvalExecutable::visitChildrenVirtual):
(JSC::EvalExecutable::visitChildren):
(JSC::ProgramExecutable::visitChildrenVirtual):
(JSC::ProgramExecutable::visitChildren):
(JSC::FunctionExecutable::visitChildrenVirtual):
(JSC::FunctionExecutable::visitChildren):

  • runtime/Executable.h:
  • runtime/GetterSetter.cpp:

(JSC::GetterSetter::visitChildrenVirtual):
(JSC::GetterSetter::visitChildren):

  • runtime/GetterSetter.h:
  • runtime/JSActivation.cpp:

(JSC::JSActivation::visitChildrenVirtual):
(JSC::JSActivation::visitChildren):

  • runtime/JSActivation.h:
  • runtime/JSArray.cpp:

(JSC::JSArray::visitChildrenVirtual):
(JSC::JSArray::visitChildren):

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

(JSC::JSBoundFunction::visitChildrenVirtual):
(JSC::JSBoundFunction::visitChildren):

  • runtime/JSBoundFunction.h:
  • runtime/JSCell.h:

(JSC::JSCell::visitChildrenVirtual):
(JSC::JSCell::visitChildren):

  • runtime/JSFunction.cpp:

(JSC::JSFunction::visitChildrenVirtual):
(JSC::JSFunction::visitChildren):

  • runtime/JSFunction.h:
  • runtime/JSGlobalObject.cpp:

(JSC::JSGlobalObject::visitChildrenVirtual):
(JSC::JSGlobalObject::visitChildren):

  • runtime/JSGlobalObject.h:
  • runtime/JSObject.cpp:

(JSC::JSObject::visitChildrenVirtual):
(JSC::JSObject::visitChildren):

  • runtime/JSObject.h:

(JSC::JSObject::visitChildrenDirect):

  • runtime/JSPropertyNameIterator.cpp:

(JSC::JSPropertyNameIterator::visitChildrenVirtual):
(JSC::JSPropertyNameIterator::visitChildren):

  • runtime/JSPropertyNameIterator.h:
  • runtime/JSStaticScopeObject.cpp:

(JSC::JSStaticScopeObject::visitChildrenVirtual):
(JSC::JSStaticScopeObject::visitChildren):

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

(JSC::JSWrapperObject::visitChildrenVirtual):
(JSC::JSWrapperObject::visitChildren):

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

(JSC::NativeErrorConstructor::visitChildrenVirtual):
(JSC::NativeErrorConstructor::visitChildren):

  • runtime/NativeErrorConstructor.h:
  • runtime/RegExpObject.cpp:

(JSC::RegExpObject::visitChildrenVirtual):
(JSC::RegExpObject::visitChildren):

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

(JSC::ScopeChainNode::visitChildrenVirtual):
(JSC::ScopeChainNode::visitChildren):

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

(JSC::Structure::visitChildrenVirtual):
(JSC::Structure::visitChildren):

  • runtime/Structure.h:
  • runtime/StructureChain.cpp:

(JSC::StructureChain::visitChildrenVirtual):
(JSC::StructureChain::visitChildren):

  • runtime/StructureChain.h:

Source/JavaScriptGlue:

In this patch we just extract the bodies of the virtual visitChildren methods
throughout the JSCell inheritance hierarchy out into static methods, which are
now called from the virtual methods. This is an intermediate step in trying to
move the virtual-ness of visitChildren into our own custom vtable stored in
ClassInfo. We need to convert the methods to static methods in order to be
able to more easily store and refer to them in our custom vtable since normal
member methods store some implicit information in their types, making it
impossible to store them generically in ClassInfo.

  • UserObjectImp.cpp:

(UserObjectImp::visitChildrenVirtual):
(UserObjectImp::visitChildren):

  • UserObjectImp.h:

Source/WebCore:

No new tests.

In this patch we just extract the bodies of the virtual visitChildren methods
throughout the JSCell inheritance hierarchy out into static methods, which are
now called from the virtual methods. This is an intermediate step in trying to
move the virtual-ness of visitChildren into our own custom vtable stored in
ClassInfo. We need to convert the methods to static methods in order to be
able to more easily store and refer to them in our custom vtable since normal
member methods store some implicit information in their types, making it
impossible to store them generically in ClassInfo.

  • WebCore.exp.in:
  • bindings/js/JSAttrCustom.cpp:

(WebCore::JSAttr::visitChildrenVirtual):
(WebCore::JSAttr::visitChildren):

  • bindings/js/JSAudioContextCustom.cpp:

(WebCore::JSAudioContext::visitChildrenVirtual):
(WebCore::JSAudioContext::visitChildren):

  • bindings/js/JSCSSRuleCustom.cpp:

(WebCore::JSCSSRule::visitChildrenVirtual):
(WebCore::JSCSSRule::visitChildren):

  • bindings/js/JSCSSStyleDeclarationCustom.cpp:

(WebCore::JSCSSStyleDeclaration::visitChildrenVirtual):
(WebCore::JSCSSStyleDeclaration::visitChildren):

  • bindings/js/JSCanvasRenderingContextCustom.cpp:

(WebCore::JSCanvasRenderingContext::visitChildrenVirtual):
(WebCore::JSCanvasRenderingContext::visitChildren):

  • bindings/js/JSDOMGlobalObject.cpp:

(WebCore::JSDOMGlobalObject::visitChildrenVirtual):
(WebCore::JSDOMGlobalObject::visitChildren):

  • bindings/js/JSDOMGlobalObject.h:
  • bindings/js/JSDOMWindowCustom.cpp:

(WebCore::JSDOMWindow::visitChildrenVirtual):
(WebCore::JSDOMWindow::visitChildren):

  • bindings/js/JSDOMWindowShell.cpp:

(WebCore::JSDOMWindowShell::visitChildrenVirtual):
(WebCore::JSDOMWindowShell::visitChildren):

  • bindings/js/JSDOMWindowShell.h:
  • bindings/js/JSJavaScriptAudioNodeCustom.cpp:

(WebCore::JSJavaScriptAudioNode::visitChildrenVirtual):
(WebCore::JSJavaScriptAudioNode::visitChildren):

  • bindings/js/JSMessageChannelCustom.cpp:

(WebCore::JSMessageChannel::visitChildrenVirtual):
(WebCore::JSMessageChannel::visitChildren):

  • bindings/js/JSMessagePortCustom.cpp:

(WebCore::JSMessagePort::visitChildrenVirtual):
(WebCore::JSMessagePort::visitChildren):

  • bindings/js/JSNamedNodeMapCustom.cpp:

(WebCore::JSNamedNodeMap::visitChildrenVirtual):
(WebCore::JSNamedNodeMap::visitChildren):

  • bindings/js/JSNodeCustom.cpp:

(WebCore::JSNode::visitChildrenVirtual):
(WebCore::JSNode::visitChildren):

  • bindings/js/JSNodeFilterCustom.cpp:

(WebCore::JSNodeFilter::visitChildrenVirtual):
(WebCore::JSNodeFilter::visitChildren):

  • bindings/js/JSNodeIteratorCustom.cpp:

(WebCore::JSNodeIterator::visitChildrenVirtual):
(WebCore::JSNodeIterator::visitChildren):

  • bindings/js/JSSVGElementInstanceCustom.cpp:

(WebCore::JSSVGElementInstance::visitChildrenVirtual):
(WebCore::JSSVGElementInstance::visitChildren):

  • bindings/js/JSSharedWorkerCustom.cpp:

(WebCore::JSSharedWorker::visitChildrenVirtual):
(WebCore::JSSharedWorker::visitChildren):

  • bindings/js/JSStyleSheetCustom.cpp:

(WebCore::JSStyleSheet::visitChildrenVirtual):
(WebCore::JSStyleSheet::visitChildren):

  • bindings/js/JSTreeWalkerCustom.cpp:

(WebCore::JSTreeWalker::visitChildrenVirtual):
(WebCore::JSTreeWalker::visitChildren):

  • bindings/js/JSWebGLRenderingContextCustom.cpp:

(WebCore::JSWebGLRenderingContext::visitChildrenVirtual):
(WebCore::JSWebGLRenderingContext::visitChildren):

  • bindings/js/JSWorkerContextCustom.cpp:

(WebCore::JSWorkerContext::visitChildrenVirtual):
(WebCore::JSWorkerContext::visitChildren):

  • bindings/js/JSXMLHttpRequestCustom.cpp:

(WebCore::JSXMLHttpRequest::visitChildrenVirtual):
(WebCore::JSXMLHttpRequest::visitChildren):

  • bindings/js/JSXPathResultCustom.cpp:

(WebCore::JSXPathResult::visitChildrenVirtual):
(WebCore::JSXPathResult::visitChildren):

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateHeader):
(GenerateImplementation):

  • bindings/scripts/test/JS/JSTestObj.cpp:

(WebCore::JSTestObj::visitChildrenVirtual):
(WebCore::JSTestObj::visitChildren):

  • bindings/scripts/test/JS/JSTestObj.h:
  • bridge/qt/qt_instance.cpp:

(JSC::Bindings::QtRuntimeObject::visitChildrenVirtual):
(JSC::Bindings::QtRuntimeObject::visitChildren):

  • bridge/qt/qt_runtime.cpp:

(JSC::Bindings::QtRuntimeMetaMethod::visitChildrenVirtual):
(JSC::Bindings::QtRuntimeMetaMethod::visitChildren):

  • bridge/qt/qt_runtime.h:
  • workers/WorkerContext.h:
Location:
trunk
Files:
81 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r95685 r95849  
     12011-09-23  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        Add static version of JSCell::visitChildren
     4        https://bugs.webkit.org/show_bug.cgi?id=68404
     5
     6        Reviewed by Darin Adler.
     7
     8        In this patch we just extract the bodies of the virtual visitChildren methods
     9        throughout the JSCell inheritance hierarchy out into static methods, which are
     10        now called from the virtual methods.  This is an intermediate step in trying to
     11        move the virtual-ness of visitChildren into our own custom vtable stored in
     12        ClassInfo.  We need to convert the methods to static methods in order to be
     13        able to more easily store and refer to them in our custom vtable since normal
     14        member methods store some implicit information in their types, making it
     15        impossible to store them generically in ClassInfo.
     16
     17        * Source/autotools/symbols.filter:
     18
    1192011-09-21  Julien Chaffraix  <jchaffraix@webkit.org>
    220
  • trunk/Source/JavaScriptCore/API/JSCallbackObject.h

    r95250 r95849  
    197197    virtual CallType getCallData(CallData&);
    198198
    199     virtual void visitChildren(SlotVisitor& visitor)
    200     {
    201         ASSERT_GC_OBJECT_INHERITS((static_cast<Parent*>(this)), &JSCallbackObject<Parent>::s_info);
     199    virtual void visitChildrenVirtual(SlotVisitor& visitor)
     200    {
     201        visitChildren(this, visitor);
     202    }
     203
     204    static void visitChildren(JSCell* cell, SlotVisitor& visitor)
     205    {
     206        JSCallbackObject* thisObject = static_cast<JSCallbackObject*>(cell);
     207        ASSERT_GC_OBJECT_INHERITS((static_cast<Parent*>(thisObject)), &JSCallbackObject<Parent>::s_info);
    202208        COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    203         ASSERT(Parent::structure()->typeInfo().overridesVisitChildren());
    204         Parent::visitChildren(visitor);
    205         m_callbackObjectData->visitChildren(visitor);
     209        ASSERT(thisObject->Parent::structure()->typeInfo().overridesVisitChildren());
     210        Parent::visitChildren(thisObject, visitor);
     211        thisObject->m_callbackObjectData->visitChildren(visitor);
    206212    }
    207213
  • trunk/Source/JavaScriptCore/ChangeLog

    r95846 r95849  
     12011-09-23  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        Add static version of JSCell::visitChildren
     4        https://bugs.webkit.org/show_bug.cgi?id=68404
     5
     6        Reviewed by Darin Adler.
     7
     8        In this patch we just extract the bodies of the virtual visitChildren methods
     9        throughout the JSCell inheritance hierarchy out into static methods, which are
     10        now called from the virtual methods.  This is an intermediate step in trying to
     11        move the virtual-ness of visitChildren into our own custom vtable stored in
     12        ClassInfo.  We need to convert the methods to static methods in order to be
     13        able to more easily store and refer to them in our custom vtable since normal
     14        member methods store some implicit information in their types, making it
     15        impossible to store them generically in ClassInfo.
     16
     17        * API/JSCallbackObject.h:
     18        (JSC::JSCallbackObject::visitChildrenVirtual):
     19        (JSC::JSCallbackObject::visitChildren):
     20        * JavaScriptCore.exp:
     21        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
     22        * debugger/DebuggerActivation.cpp:
     23        (JSC::DebuggerActivation::visitChildrenVirtual):
     24        (JSC::DebuggerActivation::visitChildren):
     25        * debugger/DebuggerActivation.h:
     26        * heap/MarkStack.cpp:
     27        (JSC::SlotVisitor::visitChildren):
     28        (JSC::SlotVisitor::drain):
     29        * runtime/Arguments.cpp:
     30        (JSC::Arguments::visitChildrenVirtual):
     31        (JSC::Arguments::visitChildren):
     32        * runtime/Arguments.h:
     33        * runtime/Executable.cpp:
     34        (JSC::EvalExecutable::visitChildrenVirtual):
     35        (JSC::EvalExecutable::visitChildren):
     36        (JSC::ProgramExecutable::visitChildrenVirtual):
     37        (JSC::ProgramExecutable::visitChildren):
     38        (JSC::FunctionExecutable::visitChildrenVirtual):
     39        (JSC::FunctionExecutable::visitChildren):
     40        * runtime/Executable.h:
     41        * runtime/GetterSetter.cpp:
     42        (JSC::GetterSetter::visitChildrenVirtual):
     43        (JSC::GetterSetter::visitChildren):
     44        * runtime/GetterSetter.h:
     45        * runtime/JSActivation.cpp:
     46        (JSC::JSActivation::visitChildrenVirtual):
     47        (JSC::JSActivation::visitChildren):
     48        * runtime/JSActivation.h:
     49        * runtime/JSArray.cpp:
     50        (JSC::JSArray::visitChildrenVirtual):
     51        (JSC::JSArray::visitChildren):
     52        * runtime/JSArray.h:
     53        * runtime/JSBoundFunction.cpp:
     54        (JSC::JSBoundFunction::visitChildrenVirtual):
     55        (JSC::JSBoundFunction::visitChildren):
     56        * runtime/JSBoundFunction.h:
     57        * runtime/JSCell.h:
     58        (JSC::JSCell::visitChildrenVirtual):
     59        (JSC::JSCell::visitChildren):
     60        * runtime/JSFunction.cpp:
     61        (JSC::JSFunction::visitChildrenVirtual):
     62        (JSC::JSFunction::visitChildren):
     63        * runtime/JSFunction.h:
     64        * runtime/JSGlobalObject.cpp:
     65        (JSC::JSGlobalObject::visitChildrenVirtual):
     66        (JSC::JSGlobalObject::visitChildren):
     67        * runtime/JSGlobalObject.h:
     68        * runtime/JSObject.cpp:
     69        (JSC::JSObject::visitChildrenVirtual):
     70        (JSC::JSObject::visitChildren):
     71        * runtime/JSObject.h:
     72        (JSC::JSObject::visitChildrenDirect):
     73        * runtime/JSPropertyNameIterator.cpp:
     74        (JSC::JSPropertyNameIterator::visitChildrenVirtual):
     75        (JSC::JSPropertyNameIterator::visitChildren):
     76        * runtime/JSPropertyNameIterator.h:
     77        * runtime/JSStaticScopeObject.cpp:
     78        (JSC::JSStaticScopeObject::visitChildrenVirtual):
     79        (JSC::JSStaticScopeObject::visitChildren):
     80        * runtime/JSStaticScopeObject.h:
     81        * runtime/JSWrapperObject.cpp:
     82        (JSC::JSWrapperObject::visitChildrenVirtual):
     83        (JSC::JSWrapperObject::visitChildren):
     84        * runtime/JSWrapperObject.h:
     85        * runtime/NativeErrorConstructor.cpp:
     86        (JSC::NativeErrorConstructor::visitChildrenVirtual):
     87        (JSC::NativeErrorConstructor::visitChildren):
     88        * runtime/NativeErrorConstructor.h:
     89        * runtime/RegExpObject.cpp:
     90        (JSC::RegExpObject::visitChildrenVirtual):
     91        (JSC::RegExpObject::visitChildren):
     92        * runtime/RegExpObject.h:
     93        * runtime/ScopeChain.cpp:
     94        (JSC::ScopeChainNode::visitChildrenVirtual):
     95        (JSC::ScopeChainNode::visitChildren):
     96        * runtime/ScopeChain.h:
     97        * runtime/Structure.cpp:
     98        (JSC::Structure::visitChildrenVirtual):
     99        (JSC::Structure::visitChildren):
     100        * runtime/Structure.h:
     101        * runtime/StructureChain.cpp:
     102        (JSC::StructureChain::visitChildrenVirtual):
     103        (JSC::StructureChain::visitChildren):
     104        * runtime/StructureChain.h:
     105
    11062011-09-23  Oliver Hunt  <oliver@apple.com>
    2107
  • trunk/Source/JavaScriptCore/JavaScriptCore.exp

    r95751 r95849  
    163163__ZN3JSC14JSGlobalObject12defineGetterEPNS_9ExecStateERKNS_10IdentifierEPNS_8JSObjectEj
    164164__ZN3JSC14JSGlobalObject12defineSetterEPNS_9ExecStateERKNS_10IdentifierEPNS_8JSObjectEj
    165 __ZN3JSC14JSGlobalObject13visitChildrenERNS_11SlotVisitorE
     165__ZN3JSC14JSGlobalObject13visitChildrenEPNS_6JSCellERNS_11SlotVisitorE
    166166__ZN3JSC14JSGlobalObject16addStaticGlobalsEPNS0_18GlobalPropertyInfoEi
    167167__ZN3JSC14JSGlobalObject17putWithAttributesEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueEj
    168168__ZN3JSC14JSGlobalObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE
     169__ZN3JSC14JSGlobalObject20visitChildrenVirtualERNS_11SlotVisitorE
    169170__ZN3JSC14JSGlobalObject24getOwnPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
    170171__ZN3JSC14JSGlobalObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE 
     
    180181__ZN3JSC14VTableSpectrum5countEPNS_6JSCellE
    181182__ZN3JSC14throwTypeErrorEPNS_9ExecStateE
    182 __ZN3JSC15JSWrapperObject13visitChildrenERNS_11SlotVisitorE
    183183__ZN3JSC15WeakHandleOwner26isReachableFromOpaqueRootsENS_6HandleINS_7UnknownEEEPvRNS_11SlotVisitorE
    184184__ZN3JSC15WeakHandleOwner8finalizeENS_6HandleINS_7UnknownEEEPv
     
    276276__ZN3JSC6RegExp6createERNS_12JSGlobalDataERKNS_7UStringENS_11RegExpFlagsE
    277277__ZN3JSC6RegExpD1Ev
    278 __ZN3JSC7JSArray13visitChildrenERNS_11SlotVisitorE
    279278__ZN3JSC7JSArray14finishCreationERNS_12JSGlobalDataE
    280279__ZN3JSC7JSArray14finishCreationERNS_12JSGlobalDataERKNS_7ArgListE
    281280__ZN3JSC7JSArray15setSubclassDataEPv
    282281__ZN3JSC7JSArray18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE
     282__ZN3JSC7JSArray20visitChildrenVirtualERNS_11SlotVisitorE
    283283__ZN3JSC7JSArray6s_infoE
    284284__ZN3JSC7JSArray9setLengthEj
     
    309309__ZN3JSC8JSObject12lookupGetterEPNS_9ExecStateERKNS_10IdentifierE
    310310__ZN3JSC8JSObject12lookupSetterEPNS_9ExecStateERKNS_10IdentifierE
    311 __ZN3JSC8JSObject13visitChildrenERNS_11SlotVisitorE
     311__ZN3JSC8JSObject13visitChildrenEPNS_6JSCellERNS_11SlotVisitorE
    312312__ZN3JSC8JSObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE
    313313__ZN3JSC8JSObject14deletePropertyEPNS_9ExecStateEj
     
    325325__ZN3JSC8JSObject18getPrimitiveNumberEPNS_9ExecStateERdRNS_7JSValueE
    326326__ZN3JSC8JSObject19getOwnPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayENS_15EnumerationModeE
     327__ZN3JSC8JSObject20visitChildrenVirtualERNS_11SlotVisitorE
    327328__ZN3JSC8JSObject21getPropertyDescriptorEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorE
    328329__ZN3JSC8JSObject22fillGetterPropertySlotERNS_12PropertySlotEPNS_16WriteBarrierBaseINS_7UnknownEEE
  • trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def

    r95762 r95849  
    377377    ?utf8@UString@JSC@@QBE?AVCString@WTF@@_N@Z
    378378    ?validateValue@MarkStack@JSC@@KAXVJSValue@2@@Z
    379     ?visitChildren@JSGlobalObject@JSC@@UAEXAAVSlotVisitor@2@@Z
    380     ?visitChildren@JSObject@JSC@@UAEXAAVSlotVisitor@2@@Z
    381     ?visitChildren@JSWrapperObject@JSC@@EAEXAAVSlotVisitor@2@@Z
    382     ?visitChildren@ScopeChainNode@JSC@@UAEXAAVSlotVisitor@2@@Z
    383379    ?vtableAnchor@InternalFunction@JSC@@EAEXXZ
     380    ?visitChildren@JSGlobalObject@JSC@@SAXPAVJSCell@2@AAVSlotVisitor@2@@Z
     381    ?visitChildren@JSObject@JSC@@SAXPAVJSCell@2@AAVSlotVisitor@2@@Z
     382    ?visitChildrenVirtual@JSGlobalObject@JSC@@UAEXAAVSlotVisitor@2@@Z
     383    ?visitChildrenVirtual@JSObject@JSC@@UAEXAAVSlotVisitor@2@@Z
     384    ?visitChildrenVirtual@ScopeChainNode@JSC@@UAEXAAVSlotVisitor@2@@Z
    384385    ?wait@ThreadCondition@WTF@@QAEXAAVMutex@2@@Z
    385386    ?waitForThreadCompletion@WTF@@YAHIPAPAX@Z
  • trunk/Source/JavaScriptCore/debugger/DebuggerActivation.cpp

    r94875 r95849  
    4444}
    4545
    46 void DebuggerActivation::visitChildren(SlotVisitor& visitor)
     46void DebuggerActivation::visitChildrenVirtual(SlotVisitor& visitor)
    4747{
    48     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     48    visitChildren(this, visitor);
     49}
     50
     51void DebuggerActivation::visitChildren(JSCell* cell, SlotVisitor& visitor)
     52{
     53    DebuggerActivation* thisObject = static_cast<DebuggerActivation*>(cell);
     54    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4955    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    50     ASSERT(structure()->typeInfo().overridesVisitChildren());
    51     JSObject::visitChildren(visitor);
     56    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     57    JSObject::visitChildren(thisObject, visitor);
    5258
    53     if (m_activation)
    54         visitor.append(&m_activation);
     59    if (thisObject->m_activation)
     60        visitor.append(&thisObject->m_activation);
    5561}
    5662
  • trunk/Source/JavaScriptCore/debugger/DebuggerActivation.h

    r94929 r95849  
    4242        }
    4343
    44         virtual void visitChildren(SlotVisitor&);
     44        virtual void visitChildrenVirtual(SlotVisitor&);
     45        static void visitChildren(JSCell*, SlotVisitor&);
    4546        virtual UString className() const;
    4647        virtual bool getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot&);
  • trunk/Source/JavaScriptCore/heap/MarkStack.cpp

    r94929 r95849  
    6060    ASSERT(Heap::isMarked(cell));
    6161    if (cell->structure()->typeInfo().type() < CompoundType) {
    62         cell->JSCell::visitChildren(*this);
     62        JSCell::visitChildren(cell, *this);
    6363        return;
    6464    }
     
    7171        ASSERT(!m_isCheckingForDefaultMarkViolation);
    7272        m_isCheckingForDefaultMarkViolation = true;
    73         cell->visitChildren(*this);
     73        cell->visitChildrenVirtual(*this);
    7474        ASSERT(m_isCheckingForDefaultMarkViolation);
    7575        m_isCheckingForDefaultMarkViolation = false;
     
    8181        return;
    8282    }
    83     cell->visitChildren(*this);
     83    cell->visitChildrenVirtual(*this);
    8484}
    8585
     
    116116                m_visitedTypeCounts.count(cell);
    117117#endif
    118                 cell->JSCell::visitChildren(*this);
     118                JSCell::visitChildren(cell, *this);
    119119                if (current.m_values == end) {
    120120                    m_markSets.removeLast();
  • trunk/Source/JavaScriptCore/runtime/Arguments.cpp

    r86499 r95849  
    4444}
    4545
    46 void Arguments::visitChildren(SlotVisitor& visitor)
    47 {
    48     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     46void Arguments::visitChildrenVirtual(SlotVisitor& visitor)
     47{
     48    visitChildren(this, visitor);
     49}
     50
     51void Arguments::visitChildren(JSCell* cell, SlotVisitor& visitor)
     52{
     53    Arguments* thisObject = static_cast<Arguments*>(cell);
     54    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4955    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    50     ASSERT(structure()->typeInfo().overridesVisitChildren());
    51     JSObject::visitChildren(visitor);
    52 
    53     if (d->registerArray)
    54         visitor.appendValues(d->registerArray.get(), d->numParameters);
    55 
    56     if (d->extraArguments) {
    57         unsigned numExtraArguments = d->numArguments - d->numParameters;
    58         visitor.appendValues(d->extraArguments, numExtraArguments);
    59     }
    60 
    61     visitor.append(&d->callee);
    62 
    63     if (d->activation)
    64         visitor.append(&d->activation);
     56    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     57    JSObject::visitChildren(thisObject, visitor);
     58
     59    if (thisObject->d->registerArray)
     60        visitor.appendValues(thisObject->d->registerArray.get(), thisObject->d->numParameters);
     61
     62    if (thisObject->d->extraArguments) {
     63        unsigned numExtraArguments = thisObject->d->numArguments - thisObject->d->numParameters;
     64        visitor.appendValues(thisObject->d->extraArguments, numExtraArguments);
     65    }
     66
     67    visitor.append(&thisObject->d->callee);
     68
     69    if (thisObject->d->activation)
     70        visitor.append(&thisObject->d->activation);
    6571}
    6672
  • trunk/Source/JavaScriptCore/runtime/Arguments.h

    r94929 r95849  
    9191        static const ClassInfo s_info;
    9292
    93         virtual void visitChildren(SlotVisitor&);
     93        virtual void visitChildrenVirtual(SlotVisitor&);
     94        static void visitChildren(JSCell*, SlotVisitor&);
    9495
    9596        void fillArgList(ExecState*, MarkedArgumentBuffer&);
  • trunk/Source/JavaScriptCore/runtime/Executable.cpp

    r95779 r95849  
    235235#endif
    236236
    237 void EvalExecutable::visitChildren(SlotVisitor& visitor)
    238 {
    239     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     237void EvalExecutable::visitChildrenVirtual(SlotVisitor& visitor)
     238{
     239    visitChildren(this, visitor);
     240}
     241
     242void EvalExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor)
     243{
     244    EvalExecutable* thisObject = static_cast<EvalExecutable*>(cell);
     245    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    240246    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    241     ASSERT(structure()->typeInfo().overridesVisitChildren());
    242     ScriptExecutable::visitChildren(visitor);
    243     if (m_evalCodeBlock)
    244         m_evalCodeBlock->visitAggregate(visitor);
     247    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     248    ScriptExecutable::visitChildren(thisObject, visitor);
     249    if (thisObject->m_evalCodeBlock)
     250        thisObject->m_evalCodeBlock->visitAggregate(visitor);
    245251}
    246252
     
    373379}
    374380
    375 void ProgramExecutable::visitChildren(SlotVisitor& visitor)
    376 {
    377     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     381void ProgramExecutable::visitChildrenVirtual(SlotVisitor& visitor)
     382{
     383    visitChildren(this, visitor);
     384}
     385
     386void ProgramExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor)
     387{
     388    ProgramExecutable* thisObject = static_cast<ProgramExecutable*>(cell);
     389    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    378390    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    379     ASSERT(structure()->typeInfo().overridesVisitChildren());
    380     ScriptExecutable::visitChildren(visitor);
    381     if (m_programCodeBlock)
    382         m_programCodeBlock->visitAggregate(visitor);
     391    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     392    ScriptExecutable::visitChildren(thisObject, visitor);
     393    if (thisObject->m_programCodeBlock)
     394        thisObject->m_programCodeBlock->visitAggregate(visitor);
    383395}
    384396
     
    585597#endif
    586598
    587 void FunctionExecutable::visitChildren(SlotVisitor& visitor)
    588 {
    589     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     599void FunctionExecutable::visitChildrenVirtual(SlotVisitor& visitor)
     600{
     601    visitChildren(this, visitor);
     602}
     603
     604void FunctionExecutable::visitChildren(JSCell* cell, SlotVisitor& visitor)
     605{
     606    FunctionExecutable* thisObject = static_cast<FunctionExecutable*>(cell);
     607    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    590608    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    591     ASSERT(structure()->typeInfo().overridesVisitChildren());
    592     ScriptExecutable::visitChildren(visitor);
    593     if (m_nameValue)
    594         visitor.append(&m_nameValue);
    595     if (m_codeBlockForCall)
    596         m_codeBlockForCall->visitAggregate(visitor);
    597     if (m_codeBlockForConstruct)
    598         m_codeBlockForConstruct->visitAggregate(visitor);
     609    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     610    ScriptExecutable::visitChildren(thisObject, visitor);
     611    if (thisObject->m_nameValue)
     612        visitor.append(&thisObject->m_nameValue);
     613    if (thisObject->m_codeBlockForCall)
     614        thisObject->m_codeBlockForCall->visitAggregate(visitor);
     615    if (thisObject->m_codeBlockForConstruct)
     616        thisObject->m_codeBlockForConstruct->visitAggregate(visitor);
    599617}
    600618
  • trunk/Source/JavaScriptCore/runtime/Executable.h

    r95772 r95849  
    357357
    358358        JSObject* compileInternal(ExecState*, ScopeChainNode*, JITCode::JITType);
    359         virtual void visitChildren(SlotVisitor&);
     359        virtual void visitChildrenVirtual(SlotVisitor&);
     360        static void visitChildren(JSCell*, SlotVisitor&);
    360361        void unlinkCalls();
    361362
     
    422423
    423424        JSObject* compileInternal(ExecState*, ScopeChainNode*, JITCode::JITType);
    424         virtual void visitChildren(SlotVisitor&);
     425        virtual void visitChildrenVirtual(SlotVisitor&);
     426        static void visitChildren(JSCell*, SlotVisitor&);
    425427        void unlinkCalls();
    426428
     
    581583
    582584        void discardCode();
    583         void visitChildren(SlotVisitor&);
     585        void visitChildrenVirtual(SlotVisitor&);
     586        static void visitChildren(JSCell*, SlotVisitor&);
    584587        static FunctionExecutable* fromGlobalCode(const Identifier&, ExecState*, Debugger*, const SourceCode&, JSObject** exception);
    585588        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue proto)
  • trunk/Source/JavaScriptCore/runtime/GetterSetter.cpp

    r94930 r95849  
    3131const ClassInfo GetterSetter::s_info = { "GetterSetter", 0, 0, 0 };
    3232
    33 void GetterSetter::visitChildren(SlotVisitor& visitor)
     33void GetterSetter::visitChildrenVirtual(SlotVisitor& visitor)
    3434{
    35     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
    36     ASSERT(structure()->typeInfo().overridesVisitChildren());
    37     JSCell::visitChildren(visitor);
     35    visitChildren(this, visitor);
     36}
    3837
    39     if (m_getter)
    40         visitor.append(&m_getter);
    41     if (m_setter)
    42         visitor.append(&m_setter);
     38void GetterSetter::visitChildren(JSCell* cell, SlotVisitor& visitor)
     39{
     40    GetterSetter* thisObject = static_cast<GetterSetter*>(cell);
     41    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
     42    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     43    JSCell::visitChildren(thisObject, visitor);
     44
     45    if (thisObject->m_getter)
     46        visitor.append(&thisObject->m_getter);
     47    if (thisObject->m_setter)
     48        visitor.append(&thisObject->m_setter);
    4349}
    4450
  • trunk/Source/JavaScriptCore/runtime/GetterSetter.h

    r94930 r95849  
    5454        }
    5555
    56         virtual void visitChildren(SlotVisitor&);
     56        virtual void visitChildrenVirtual(SlotVisitor&);
     57        static void visitChildren(JSCell*, SlotVisitor&);
    5758
    5859        JSObject* getter() const { return m_getter.get(); }
  • trunk/Source/JavaScriptCore/runtime/JSActivation.cpp

    r94875 r95849  
    6464}
    6565
    66 void JSActivation::visitChildren(SlotVisitor& visitor)
    67 {
    68     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     66void JSActivation::visitChildrenVirtual(SlotVisitor& visitor)
     67{
     68    visitChildren(this, visitor);
     69}
     70
     71void JSActivation::visitChildren(JSCell* cell, SlotVisitor& visitor)
     72{
     73    JSActivation* thisObject = static_cast<JSActivation*>(cell);
     74    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    6975    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    70     ASSERT(structure()->typeInfo().overridesVisitChildren());
    71     Base::visitChildren(visitor);
     76    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     77    Base::visitChildren(thisObject, visitor);
    7278
    7379    // No need to mark our registers if they're still in the RegisterFile.
    74     WriteBarrier<Unknown>* registerArray = m_registerArray.get();
     80    WriteBarrier<Unknown>* registerArray = thisObject->m_registerArray.get();
    7581    if (!registerArray)
    7682        return;
    7783
    78     visitor.appendValues(registerArray, m_numParametersMinusThis);
     84    visitor.appendValues(registerArray, thisObject->m_numParametersMinusThis);
    7985
    8086    // Skip the call frame, which sits between the parameters and vars.
    81     visitor.appendValues(registerArray + m_numParametersMinusThis + RegisterFile::CallFrameHeaderSize, m_numCapturedVars);
     87    visitor.appendValues(registerArray + thisObject->m_numParametersMinusThis + RegisterFile::CallFrameHeaderSize, thisObject->m_numCapturedVars);
    8288}
    8389
  • trunk/Source/JavaScriptCore/runtime/JSActivation.h

    r94929 r95849  
    5656        virtual ~JSActivation();
    5757
    58         virtual void visitChildren(SlotVisitor&);
     58        virtual void visitChildrenVirtual(SlotVisitor&);
     59        static void visitChildren(JSCell*, SlotVisitor&);
    5960
    6061        virtual bool isDynamicScope(bool& requiresDynamicChecks) const;
  • trunk/Source/JavaScriptCore/runtime/JSArray.cpp

    r95787 r95849  
    872872}
    873873
    874 void JSArray::visitChildren(SlotVisitor& visitor)
    875 {
    876     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     874void JSArray::visitChildrenVirtual(SlotVisitor& visitor)
     875{
     876    visitChildren(this, visitor);
     877}
     878
     879void JSArray::visitChildren(JSCell* cell, SlotVisitor& visitor)
     880{
     881    JSArray* thisObject = static_cast<JSArray*>(cell);
     882    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    877883    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    878     ASSERT(structure()->typeInfo().overridesVisitChildren());
    879     visitChildrenDirect(visitor);
     884    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     885    thisObject->visitChildrenDirect(visitor);
    880886}
    881887
  • trunk/Source/JavaScriptCore/runtime/JSArray.h

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

    r95751 r95849  
    141141}
    142142
    143 void JSBoundFunction::visitChildren(SlotVisitor& visitor)
     143void JSBoundFunction::visitChildrenVirtual(SlotVisitor& visitor)
    144144{
    145     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     145    visitChildren(this, visitor);
     146}
     147
     148void JSBoundFunction::visitChildren(JSCell* cell, SlotVisitor& visitor)
     149{
     150    JSBoundFunction* thisObject = static_cast<JSBoundFunction*>(cell);
     151    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    146152    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    147     ASSERT(structure()->typeInfo().overridesVisitChildren());
    148     Base::visitChildren(visitor);
     153    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     154    Base::visitChildren(thisObject, visitor);
    149155
    150     visitor.append(&m_targetFunction);
    151     visitor.append(&m_boundThis);
    152     visitor.append(&m_boundArgs);
     156    visitor.append(&thisObject->m_targetFunction);
     157    visitor.append(&thisObject->m_boundThis);
     158    visitor.append(&thisObject->m_boundArgs);
    153159}
    154160
  • trunk/Source/JavaScriptCore/runtime/JSBoundFunction.h

    r95751 r95849  
    5858    const static unsigned StructureFlags = OverridesHasInstance | Base::StructureFlags;
    5959
    60     virtual void visitChildren(SlotVisitor&);
     60    virtual void visitChildrenVirtual(SlotVisitor&);
     61    static void visitChildren(JSCell*, SlotVisitor&);
    6162
    6263private:
  • trunk/Source/JavaScriptCore/runtime/JSCell.h

    r95516 r95849  
    8585        virtual JSObject* toObject(ExecState*, JSGlobalObject*) const;
    8686
    87         virtual void visitChildren(SlotVisitor&);
     87        virtual void visitChildrenVirtual(SlotVisitor&);
     88        static void visitChildren(JSCell*, SlotVisitor&);
    8889
    8990        // Object operations, with the toObject operation included.
     
    177178    }
    178179
    179     inline void JSCell::visitChildren(SlotVisitor& visitor)
    180     {
    181         visitor.append(&m_structure);
     180    inline void JSCell::visitChildrenVirtual(SlotVisitor& visitor)
     181    {
     182        visitChildren(this, visitor);
     183    }
     184
     185    inline void JSCell::visitChildren(JSCell* cell, SlotVisitor& visitor)
     186    {
     187        JSCell* thisObject = static_cast<JSCell*>(cell);
     188        visitor.append(&thisObject->m_structure);
    182189    }
    183190
  • trunk/Source/JavaScriptCore/runtime/JSFunction.cpp

    r95751 r95849  
    152152}
    153153
    154 void JSFunction::visitChildren(SlotVisitor& visitor)
    155 {
    156     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     154void JSFunction::visitChildrenVirtual(SlotVisitor& visitor)
     155{
     156    visitChildren(this, visitor);
     157}
     158
     159void JSFunction::visitChildren(JSCell* cell, SlotVisitor& visitor)
     160{
     161    JSFunction* thisObject = static_cast<JSFunction*>(cell);
     162    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    157163    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    158     ASSERT(structure()->typeInfo().overridesVisitChildren());
    159     Base::visitChildren(visitor);
    160 
    161     visitor.append(&m_scopeChain);
    162     if (m_executable)
    163         visitor.append(&m_executable);
     164    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     165    Base::visitChildren(thisObject, visitor);
     166
     167    visitor.append(&thisObject->m_scopeChain);
     168    if (thisObject->m_executable)
     169        visitor.append(&thisObject->m_executable);
    164170}
    165171
  • trunk/Source/JavaScriptCore/runtime/JSFunction.h

    r95751 r95849  
    135135        virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode = ExcludeDontEnumProperties);
    136136
    137         virtual void visitChildren(SlotVisitor&);
     137        virtual void visitChildrenVirtual(SlotVisitor&);
     138        static void visitChildren(JSCell*, SlotVisitor&);
    138139
    139140    private:
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp

    r95751 r95849  
    309309}
    310310
    311 void JSGlobalObject::visitChildren(SlotVisitor& visitor)
    312 {
    313     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     311void JSGlobalObject::visitChildrenVirtual(SlotVisitor& visitor)
     312{
     313    visitChildren(this, visitor);
     314}
     315
     316void JSGlobalObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
     317{
     318    JSGlobalObject* thisObject = static_cast<JSGlobalObject*>(cell);
     319    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    314320    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    315     ASSERT(structure()->typeInfo().overridesVisitChildren());
    316     JSVariableObject::visitChildren(visitor);
    317 
    318     visitIfNeeded(visitor, &m_globalScopeChain);
    319     visitIfNeeded(visitor, &m_methodCallDummy);
    320 
    321     visitIfNeeded(visitor, &m_regExpConstructor);
    322     visitIfNeeded(visitor, &m_errorConstructor);
    323     visitIfNeeded(visitor, &m_evalErrorConstructor);
    324     visitIfNeeded(visitor, &m_rangeErrorConstructor);
    325     visitIfNeeded(visitor, &m_referenceErrorConstructor);
    326     visitIfNeeded(visitor, &m_syntaxErrorConstructor);
    327     visitIfNeeded(visitor, &m_typeErrorConstructor);
    328     visitIfNeeded(visitor, &m_URIErrorConstructor);
    329 
    330     visitIfNeeded(visitor, &m_evalFunction);
    331     visitIfNeeded(visitor, &m_callFunction);
    332     visitIfNeeded(visitor, &m_applyFunction);
    333 
    334     visitIfNeeded(visitor, &m_objectPrototype);
    335     visitIfNeeded(visitor, &m_functionPrototype);
    336     visitIfNeeded(visitor, &m_arrayPrototype);
    337     visitIfNeeded(visitor, &m_booleanPrototype);
    338     visitIfNeeded(visitor, &m_stringPrototype);
    339     visitIfNeeded(visitor, &m_numberPrototype);
    340     visitIfNeeded(visitor, &m_datePrototype);
    341     visitIfNeeded(visitor, &m_regExpPrototype);
    342 
    343     visitIfNeeded(visitor, &m_argumentsStructure);
    344     visitIfNeeded(visitor, &m_arrayStructure);
    345     visitIfNeeded(visitor, &m_booleanObjectStructure);
    346     visitIfNeeded(visitor, &m_callbackConstructorStructure);
    347     visitIfNeeded(visitor, &m_callbackFunctionStructure);
    348     visitIfNeeded(visitor, &m_callbackObjectStructure);
    349     visitIfNeeded(visitor, &m_dateStructure);
    350     visitIfNeeded(visitor, &m_emptyObjectStructure);
    351     visitIfNeeded(visitor, &m_nullPrototypeObjectStructure);
    352     visitIfNeeded(visitor, &m_errorStructure);
    353     visitIfNeeded(visitor, &m_functionStructure);
    354     visitIfNeeded(visitor, &m_boundFunctionStructure);
    355     visitIfNeeded(visitor, &m_namedFunctionStructure);
    356     visitIfNeeded(visitor, &m_numberObjectStructure);
    357     visitIfNeeded(visitor, &m_regExpMatchesArrayStructure);
    358     visitIfNeeded(visitor, &m_regExpStructure);
    359     visitIfNeeded(visitor, &m_stringObjectStructure);
    360     visitIfNeeded(visitor, &m_internalFunctionStructure);
    361 
    362     if (m_registerArray) {
     321    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     322    JSVariableObject::visitChildren(thisObject, visitor);
     323
     324    visitIfNeeded(visitor, &thisObject->m_globalScopeChain);
     325    visitIfNeeded(visitor, &thisObject->m_methodCallDummy);
     326
     327    visitIfNeeded(visitor, &thisObject->m_regExpConstructor);
     328    visitIfNeeded(visitor, &thisObject->m_errorConstructor);
     329    visitIfNeeded(visitor, &thisObject->m_evalErrorConstructor);
     330    visitIfNeeded(visitor, &thisObject->m_rangeErrorConstructor);
     331    visitIfNeeded(visitor, &thisObject->m_referenceErrorConstructor);
     332    visitIfNeeded(visitor, &thisObject->m_syntaxErrorConstructor);
     333    visitIfNeeded(visitor, &thisObject->m_typeErrorConstructor);
     334    visitIfNeeded(visitor, &thisObject->m_URIErrorConstructor);
     335
     336    visitIfNeeded(visitor, &thisObject->m_evalFunction);
     337    visitIfNeeded(visitor, &thisObject->m_callFunction);
     338    visitIfNeeded(visitor, &thisObject->m_applyFunction);
     339
     340    visitIfNeeded(visitor, &thisObject->m_objectPrototype);
     341    visitIfNeeded(visitor, &thisObject->m_functionPrototype);
     342    visitIfNeeded(visitor, &thisObject->m_arrayPrototype);
     343    visitIfNeeded(visitor, &thisObject->m_booleanPrototype);
     344    visitIfNeeded(visitor, &thisObject->m_stringPrototype);
     345    visitIfNeeded(visitor, &thisObject->m_numberPrototype);
     346    visitIfNeeded(visitor, &thisObject->m_datePrototype);
     347    visitIfNeeded(visitor, &thisObject->m_regExpPrototype);
     348
     349    visitIfNeeded(visitor, &thisObject->m_argumentsStructure);
     350    visitIfNeeded(visitor, &thisObject->m_arrayStructure);
     351    visitIfNeeded(visitor, &thisObject->m_booleanObjectStructure);
     352    visitIfNeeded(visitor, &thisObject->m_callbackConstructorStructure);
     353    visitIfNeeded(visitor, &thisObject->m_callbackFunctionStructure);
     354    visitIfNeeded(visitor, &thisObject->m_callbackObjectStructure);
     355    visitIfNeeded(visitor, &thisObject->m_dateStructure);
     356    visitIfNeeded(visitor, &thisObject->m_emptyObjectStructure);
     357    visitIfNeeded(visitor, &thisObject->m_nullPrototypeObjectStructure);
     358    visitIfNeeded(visitor, &thisObject->m_errorStructure);
     359    visitIfNeeded(visitor, &thisObject->m_functionStructure);
     360    visitIfNeeded(visitor, &thisObject->m_boundFunctionStructure);
     361    visitIfNeeded(visitor, &thisObject->m_namedFunctionStructure);
     362    visitIfNeeded(visitor, &thisObject->m_numberObjectStructure);
     363    visitIfNeeded(visitor, &thisObject->m_regExpMatchesArrayStructure);
     364    visitIfNeeded(visitor, &thisObject->m_regExpStructure);
     365    visitIfNeeded(visitor, &thisObject->m_stringObjectStructure);
     366    visitIfNeeded(visitor, &thisObject->m_internalFunctionStructure);
     367
     368    if (thisObject->m_registerArray) {
    363369        // Outside the execution of global code, when our variables are torn off,
    364370        // we can mark the torn-off array.
    365         visitor.appendValues(m_registerArray.get(), m_registerArraySize);
    366     } else if (m_registers) {
     371        visitor.appendValues(thisObject->m_registerArray.get(), thisObject->m_registerArraySize);
     372    } else if (thisObject->m_registers) {
    367373        // During execution of global code, when our variables are in the register file,
    368374        // the symbol table tells us how many variables there are, and registers
    369375        // points to where they end, and the registers used for execution begin.
    370         visitor.appendValues(m_registers - symbolTable().size(), symbolTable().size());
     376        visitor.appendValues(thisObject->m_registers - thisObject->symbolTable().size(), thisObject->symbolTable().size());
    371377    }
    372378}
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h

    r95751 r95849  
    176176        virtual ~JSGlobalObject();
    177177
    178         virtual void visitChildren(SlotVisitor&);
     178        virtual void visitChildrenVirtual(SlotVisitor&);
     179        static void visitChildren(JSCell*, SlotVisitor&);
    179180
    180181        virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
  • trunk/Source/JavaScriptCore/runtime/JSObject.cpp

    r95666 r95849  
    6969}
    7070
    71 void JSObject::visitChildren(SlotVisitor& visitor)
    72 {
    73     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     71void JSObject::visitChildrenVirtual(SlotVisitor& visitor)
     72{
     73    visitChildren(this, visitor);
     74}
     75
     76void JSObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
     77{
     78    JSObject* thisObject = static_cast<JSObject*>(cell);
     79    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    7480#ifndef NDEBUG
    7581    bool wasCheckingForDefaultMarkViolation = visitor.m_isCheckingForDefaultMarkViolation;
     
    7783#endif
    7884
    79     visitChildrenDirect(visitor);
     85    thisObject->visitChildrenDirect(visitor);
    8086
    8187#ifndef NDEBUG
  • trunk/Source/JavaScriptCore/runtime/JSObject.h

    r95666 r95849  
    8080        typedef JSCell Base;
    8181
    82         virtual void visitChildren(SlotVisitor&);
     82        virtual void visitChildrenVirtual(SlotVisitor&);
    8383        ALWAYS_INLINE void visitChildrenDirect(SlotVisitor&);
     84        static void visitChildren(JSCell*, SlotVisitor&);
    8485
    8586        // The inline virtual destructor cannot be the first virtual function declared
     
    817818ALWAYS_INLINE void JSObject::visitChildrenDirect(SlotVisitor& visitor)
    818819{
    819     JSCell::visitChildren(visitor);
     820    JSCell::visitChildren(this, visitor);
    820821
    821822    PropertyStorage storage = propertyStorage();
  • trunk/Source/JavaScriptCore/runtime/JSPropertyNameIterator.cpp

    r94929 r95849  
    9393}
    9494
    95 void JSPropertyNameIterator::visitChildren(SlotVisitor& visitor)
     95void JSPropertyNameIterator::visitChildrenVirtual(SlotVisitor& visitor)
    9696{
    97     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
    98     ASSERT(structure()->typeInfo().overridesVisitChildren());
    99     visitor.appendValues(m_jsStrings.get(), m_jsStringsSize);
    100     if (m_cachedPrototypeChain)
    101         visitor.append(&m_cachedPrototypeChain);
     97    visitChildren(this, visitor);
     98}
     99
     100void JSPropertyNameIterator::visitChildren(JSCell* cell, SlotVisitor& visitor)
     101{
     102    JSPropertyNameIterator* thisObject = static_cast<JSPropertyNameIterator*>(cell);
     103    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
     104    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     105    visitor.appendValues(thisObject->m_jsStrings.get(), thisObject->m_jsStringsSize);
     106    if (thisObject->m_cachedPrototypeChain)
     107        visitor.append(&thisObject->m_cachedPrototypeChain);
    102108}
    103109
  • trunk/Source/JavaScriptCore/runtime/JSPropertyNameIterator.h

    r94932 r95849  
    5959        }
    6060
    61         virtual void visitChildren(SlotVisitor&);
     61        virtual void visitChildrenVirtual(SlotVisitor&);
     62        static void visitChildren(JSCell*, SlotVisitor&);
    6263
    6364        bool getOffset(size_t i, int& offset)
  • trunk/Source/JavaScriptCore/runtime/JSStaticScopeObject.cpp

    r86499 r95849  
    3333ASSERT_CLASS_FITS_IN_CELL(JSStaticScopeObject);
    3434
    35 void JSStaticScopeObject::visitChildren(SlotVisitor& visitor)
     35void JSStaticScopeObject::visitChildrenVirtual(SlotVisitor& visitor)
    3636{
    37     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     37    visitChildren(this, visitor);
     38}
     39
     40void JSStaticScopeObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
     41{
     42    JSStaticScopeObject* thisObject = static_cast<JSStaticScopeObject*>(cell);
     43    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    3844    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    39     ASSERT(structure()->typeInfo().overridesVisitChildren());
    40     JSVariableObject::visitChildren(visitor);
    41     visitor.append(&m_registerStore);
     45    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     46    JSVariableObject::visitChildren(thisObject, visitor);
     47    visitor.append(&thisObject->m_registerStore);
    4248}
    4349
  • trunk/Source/JavaScriptCore/runtime/JSStaticScopeObject.h

    r94929 r95849  
    4242        }
    4343
    44         virtual void visitChildren(SlotVisitor&);
     44        virtual void visitChildrenVirtual(SlotVisitor&);
     45        static void visitChildren(JSCell*, SlotVisitor&);
    4546        bool isDynamicScope(bool& requiresDynamicChecks) const;
    4647        virtual JSObject* toThisObject(ExecState*) const;
  • trunk/Source/JavaScriptCore/runtime/JSWrapperObject.cpp

    r86499 r95849  
    2727ASSERT_CLASS_FITS_IN_CELL(JSWrapperObject);
    2828
    29 void JSWrapperObject::visitChildren(SlotVisitor& visitor)
     29void JSWrapperObject::visitChildrenVirtual(SlotVisitor& visitor)
    3030{
    31     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     31    visitChildren(this, visitor);
     32}
     33
     34void JSWrapperObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
     35{
     36    JSWrapperObject* thisObject = static_cast<JSWrapperObject*>(cell);
     37    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    3238    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    33     ASSERT(structure()->typeInfo().overridesVisitChildren());
    34     JSObject::visitChildren(visitor);
    35     if (m_internalValue)
    36         visitor.append(&m_internalValue);
     39    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     40    JSObject::visitChildren(thisObject, visitor);
     41    if (thisObject->m_internalValue)
     42        visitor.append(&thisObject->m_internalValue);
    3743}
    3844
  • trunk/Source/JavaScriptCore/runtime/JSWrapperObject.h

    r94929 r95849  
    4646
    4747    private:
    48         virtual void visitChildren(SlotVisitor&);
     48        virtual void visitChildrenVirtual(SlotVisitor&);
     49        static void visitChildren(JSCell*, SlotVisitor&);
    4950       
    5051        WriteBarrier<Unknown> m_internalValue;
  • trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.cpp

    r95108 r95849  
    3838}
    3939
    40 void NativeErrorConstructor::visitChildren(SlotVisitor& visitor)
     40void NativeErrorConstructor::visitChildrenVirtual(SlotVisitor& visitor)
    4141{
    42     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     42    visitChildren(this, visitor);
     43}
     44
     45void NativeErrorConstructor::visitChildren(JSCell* cell, SlotVisitor& visitor)
     46{
     47    NativeErrorConstructor* thisObject = static_cast<NativeErrorConstructor*>(cell);
     48    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4349    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    44     ASSERT(structure()->typeInfo().overridesVisitChildren());
    45     InternalFunction::visitChildren(visitor);
    46     if (m_errorStructure)
    47         visitor.append(&m_errorStructure);
     50    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     51    InternalFunction::visitChildren(thisObject, visitor);
     52    if (thisObject->m_errorStructure)
     53        visitor.append(&thisObject->m_errorStructure);
    4854}
    4955
  • trunk/Source/JavaScriptCore/runtime/NativeErrorConstructor.h

    r95326 r95849  
    7171        virtual ConstructType getConstructData(ConstructData&);
    7272        virtual CallType getCallData(CallData&);
    73         virtual void visitChildren(SlotVisitor&);
     73        virtual void visitChildrenVirtual(SlotVisitor&);
     74        static void visitChildren(JSCell*, SlotVisitor&);
    7475
    7576        WriteBarrier<Structure> m_errorStructure;
  • trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp

    r94875 r95849  
    7979}
    8080
    81 void RegExpObject::visitChildren(SlotVisitor& visitor)
    82 {
    83     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     81void RegExpObject::visitChildrenVirtual(SlotVisitor& visitor)
     82{
     83    visitChildren(this, visitor);
     84}
     85
     86void RegExpObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
     87{
     88    RegExpObject* thisObject = static_cast<RegExpObject*>(cell);
     89    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    8490    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    85     ASSERT(structure()->typeInfo().overridesVisitChildren());
    86     Base::visitChildren(visitor);
    87     if (d->regExp)
    88         visitor.append(&d->regExp);
    89     if (UNLIKELY(!d->lastIndex.get().isInt32()))
    90         visitor.append(&d->lastIndex);
     91    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     92    Base::visitChildren(thisObject, visitor);
     93    if (thisObject->d->regExp)
     94        visitor.append(&thisObject->d->regExp);
     95    if (UNLIKELY(!thisObject->d->lastIndex.get().isInt32()))
     96        visitor.append(&thisObject->d->lastIndex);
    9197}
    9298
  • trunk/Source/JavaScriptCore/runtime/RegExpObject.h

    r94929 r95849  
    8383
    8484    private:
    85         virtual void visitChildren(SlotVisitor&);
     85        virtual void visitChildrenVirtual(SlotVisitor&);
     86        static void visitChildren(JSCell*, SlotVisitor&);
    8687
    8788        bool match(ExecState*);
  • trunk/Source/JavaScriptCore/runtime/ScopeChain.cpp

    r86499 r95849  
    6868}
    6969
    70 void ScopeChainNode::visitChildren(SlotVisitor& visitor)
     70void ScopeChainNode::visitChildrenVirtual(SlotVisitor& visitor)
    7171{
    72     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     72    visitChildren(this, visitor);
     73}
     74
     75void ScopeChainNode::visitChildren(JSCell* cell, SlotVisitor& visitor)
     76{
     77    ScopeChainNode* thisObject = static_cast<ScopeChainNode*>(cell);
     78    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    7379    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    74     ASSERT(structure()->typeInfo().overridesVisitChildren());
    75     if (next)
    76         visitor.append(&next);
    77     visitor.append(&object);
    78     visitor.append(&globalObject);
    79     visitor.append(&globalThis);
     80    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     81    if (thisObject->next)
     82        visitor.append(&thisObject->next);
     83    visitor.append(&thisObject->object);
     84    visitor.append(&thisObject->globalObject);
     85    visitor.append(&thisObject->globalThis);
    8086}
    8187
  • trunk/Source/JavaScriptCore/runtime/ScopeChain.h

    r94929 r95849  
    8888       
    8989        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue proto) { return Structure::create(globalData, globalObject, proto, TypeInfo(CompoundType, StructureFlags), &s_info); }
    90         virtual void visitChildren(SlotVisitor&);
     90        virtual void visitChildrenVirtual(SlotVisitor&);
     91        static void visitChildren(JSCell*, SlotVisitor&);
    9192        static JS_EXPORTDATA const ClassInfo s_info;
    9293
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r95510 r95849  
    725725}
    726726
    727 void Structure::visitChildren(SlotVisitor& visitor)
    728 {
    729     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
    730     ASSERT(structure()->typeInfo().overridesVisitChildren());
    731     JSCell::visitChildren(visitor);
    732     if (m_globalObject)
    733         visitor.append(&m_globalObject);
    734     if (m_prototype)
    735         visitor.append(&m_prototype);
    736     if (m_cachedPrototypeChain)
    737         visitor.append(&m_cachedPrototypeChain);
    738     if (m_previous)
    739         visitor.append(&m_previous);
    740     if (m_specificValueInPrevious)
    741         visitor.append(&m_specificValueInPrevious);
    742     if (m_enumerationCache)
    743         visitor.append(&m_enumerationCache);
    744     if (m_propertyTable) {
    745         PropertyTable::iterator end = m_propertyTable->end();
    746         for (PropertyTable::iterator ptr = m_propertyTable->begin(); ptr != end; ++ptr) {
     727void Structure::visitChildrenVirtual(SlotVisitor& visitor)
     728{
     729    visitChildren(this, visitor);
     730}
     731
     732void Structure::visitChildren(JSCell* cell, SlotVisitor& visitor)
     733{
     734    Structure* thisObject = static_cast<Structure*>(cell);
     735    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
     736    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     737    JSCell::visitChildren(thisObject, visitor);
     738    if (thisObject->m_globalObject)
     739        visitor.append(&thisObject->m_globalObject);
     740    if (thisObject->m_prototype)
     741        visitor.append(&thisObject->m_prototype);
     742    if (thisObject->m_cachedPrototypeChain)
     743        visitor.append(&thisObject->m_cachedPrototypeChain);
     744    if (thisObject->m_previous)
     745        visitor.append(&thisObject->m_previous);
     746    if (thisObject->m_specificValueInPrevious)
     747        visitor.append(&thisObject->m_specificValueInPrevious);
     748    if (thisObject->m_enumerationCache)
     749        visitor.append(&thisObject->m_enumerationCache);
     750    if (thisObject->m_propertyTable) {
     751        PropertyTable::iterator end = thisObject->m_propertyTable->end();
     752        for (PropertyTable::iterator ptr = thisObject->m_propertyTable->begin(); ptr != end; ++ptr) {
    747753            if (ptr->specificValue)
    748754                visitor.append(&ptr->specificValue);
  • trunk/Source/JavaScriptCore/runtime/Structure.h

    r95503 r95849  
    131131        JSValue prototypeForLookup(ExecState*) const;
    132132        StructureChain* prototypeChain(ExecState*) const;
    133         void visitChildren(SlotVisitor&);
     133        void visitChildrenVirtual(SlotVisitor&);
     134        static void visitChildren(JSCell*, SlotVisitor&);
    134135
    135136        Structure* previousID() const { ASSERT(structure()->classInfo() == &s_info); return m_previous.get(); }
  • trunk/Source/JavaScriptCore/runtime/StructureChain.cpp

    r93920 r95849  
    4444}
    4545
    46 void StructureChain::visitChildren(SlotVisitor& visitor)
     46void StructureChain::visitChildrenVirtual(SlotVisitor& visitor)
    4747{
    48     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
    49     ASSERT(structure()->typeInfo().overridesVisitChildren());
     48    visitChildren(this, visitor);
     49}
     50
     51void StructureChain::visitChildren(JSCell* cell, SlotVisitor& visitor)
     52{
     53    StructureChain* thisObject = static_cast<StructureChain*>(cell);
     54    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
     55    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    5056    size_t i = 0;
    51     while (m_vector[i])
    52         visitor.append(&m_vector[i++]);
     57    while (thisObject->m_vector[i])
     58        visitor.append(&thisObject->m_vector[i++]);
    5359}
    5460
  • trunk/Source/JavaScriptCore/runtime/StructureChain.h

    r94929 r95849  
    5353        }
    5454        WriteBarrier<Structure>* head() { return m_vector.get(); }
    55         void visitChildren(SlotVisitor&);
     55        void visitChildrenVirtual(SlotVisitor&);
     56        static void visitChildren(JSCell*, SlotVisitor&);
    5657
    5758        static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) { return Structure::create(globalData, globalObject, prototype, TypeInfo(CompoundType, OverridesVisitChildren), &s_info); }
  • trunk/Source/JavaScriptGlue/ChangeLog

    r95108 r95849  
     12011-09-23  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        Add static version of JSCell::visitChildren
     4        https://bugs.webkit.org/show_bug.cgi?id=68404
     5
     6        Reviewed by Darin Adler.
     7
     8        In this patch we just extract the bodies of the virtual visitChildren methods
     9        throughout the JSCell inheritance hierarchy out into static methods, which are
     10        now called from the virtual methods.  This is an intermediate step in trying to
     11        move the virtual-ness of visitChildren into our own custom vtable stored in
     12        ClassInfo.  We need to convert the methods to static methods in order to be
     13        able to more easily store and refer to them in our custom vtable since normal
     14        member methods store some implicit information in their types, making it
     15        impossible to store them generically in ClassInfo.
     16
     17        * UserObjectImp.cpp:
     18        (UserObjectImp::visitChildrenVirtual):
     19        (UserObjectImp::visitChildren):
     20        * UserObjectImp.h:
     21
    1222011-09-14  Mark Hahnenberg  <mhahnenberg@apple.com>
    223
  • trunk/Source/JavaScriptGlue/UserObjectImp.cpp

    r94364 r95849  
    405405}
    406406
    407 void UserObjectImp::visitChildren(SlotVisitor& visitor)
    408 {
    409     JSObject::visitChildren(visitor);
    410     if (fJSUserObject)
    411         fJSUserObject->Mark();
    412 }
     407void UserObjectImp::visitChildrenVirtual(SlotVisitor& visitor)
     408{
     409    visitChildren(this, visitor);
     410}
     411
     412void UserObjectImp::visitChildren(JSCell* cell, SlotVisitor& visitor)
     413{
     414    UserObjectImp* thisObject = static_cast<UserObjectImp*>(cell);
     415    JSObject::visitChildren(thisObject, visitor);
     416    if (thisObject->fJSUserObject)
     417        thisObject->fJSUserObject->Mark();
     418}
  • trunk/Source/JavaScriptGlue/UserObjectImp.h

    r94929 r95849  
    6363    virtual UString toString(ExecState *exec) const;
    6464
    65     virtual void visitChildren(SlotVisitor&);
     65    virtual void visitChildrenVirtual(SlotVisitor&);
     66    static void visitChildren(JSCell*, SlotVisitor&);
    6667
    6768    JSUserObject *GetJSUserObject() const;
  • trunk/Source/WebCore/ChangeLog

    r95839 r95849  
     12011-09-23  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        Add static version of JSCell::visitChildren
     4        https://bugs.webkit.org/show_bug.cgi?id=68404
     5
     6        Reviewed by Darin Adler.
     7
     8        No new tests.
     9
     10        In this patch we just extract the bodies of the virtual visitChildren methods
     11        throughout the JSCell inheritance hierarchy out into static methods, which are
     12        now called from the virtual methods.  This is an intermediate step in trying to
     13        move the virtual-ness of visitChildren into our own custom vtable stored in
     14        ClassInfo.  We need to convert the methods to static methods in order to be
     15        able to more easily store and refer to them in our custom vtable since normal
     16        member methods store some implicit information in their types, making it
     17        impossible to store them generically in ClassInfo.
     18
     19        * WebCore.exp.in:
     20        * bindings/js/JSAttrCustom.cpp:
     21        (WebCore::JSAttr::visitChildrenVirtual):
     22        (WebCore::JSAttr::visitChildren):
     23        * bindings/js/JSAudioContextCustom.cpp:
     24        (WebCore::JSAudioContext::visitChildrenVirtual):
     25        (WebCore::JSAudioContext::visitChildren):
     26        * bindings/js/JSCSSRuleCustom.cpp:
     27        (WebCore::JSCSSRule::visitChildrenVirtual):
     28        (WebCore::JSCSSRule::visitChildren):
     29        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
     30        (WebCore::JSCSSStyleDeclaration::visitChildrenVirtual):
     31        (WebCore::JSCSSStyleDeclaration::visitChildren):
     32        * bindings/js/JSCanvasRenderingContextCustom.cpp:
     33        (WebCore::JSCanvasRenderingContext::visitChildrenVirtual):
     34        (WebCore::JSCanvasRenderingContext::visitChildren):
     35        * bindings/js/JSDOMGlobalObject.cpp:
     36        (WebCore::JSDOMGlobalObject::visitChildrenVirtual):
     37        (WebCore::JSDOMGlobalObject::visitChildren):
     38        * bindings/js/JSDOMGlobalObject.h:
     39        * bindings/js/JSDOMWindowCustom.cpp:
     40        (WebCore::JSDOMWindow::visitChildrenVirtual):
     41        (WebCore::JSDOMWindow::visitChildren):
     42        * bindings/js/JSDOMWindowShell.cpp:
     43        (WebCore::JSDOMWindowShell::visitChildrenVirtual):
     44        (WebCore::JSDOMWindowShell::visitChildren):
     45        * bindings/js/JSDOMWindowShell.h:
     46        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
     47        (WebCore::JSJavaScriptAudioNode::visitChildrenVirtual):
     48        (WebCore::JSJavaScriptAudioNode::visitChildren):
     49        * bindings/js/JSMessageChannelCustom.cpp:
     50        (WebCore::JSMessageChannel::visitChildrenVirtual):
     51        (WebCore::JSMessageChannel::visitChildren):
     52        * bindings/js/JSMessagePortCustom.cpp:
     53        (WebCore::JSMessagePort::visitChildrenVirtual):
     54        (WebCore::JSMessagePort::visitChildren):
     55        * bindings/js/JSNamedNodeMapCustom.cpp:
     56        (WebCore::JSNamedNodeMap::visitChildrenVirtual):
     57        (WebCore::JSNamedNodeMap::visitChildren):
     58        * bindings/js/JSNodeCustom.cpp:
     59        (WebCore::JSNode::visitChildrenVirtual):
     60        (WebCore::JSNode::visitChildren):
     61        * bindings/js/JSNodeFilterCustom.cpp:
     62        (WebCore::JSNodeFilter::visitChildrenVirtual):
     63        (WebCore::JSNodeFilter::visitChildren):
     64        * bindings/js/JSNodeIteratorCustom.cpp:
     65        (WebCore::JSNodeIterator::visitChildrenVirtual):
     66        (WebCore::JSNodeIterator::visitChildren):
     67        * bindings/js/JSSVGElementInstanceCustom.cpp:
     68        (WebCore::JSSVGElementInstance::visitChildrenVirtual):
     69        (WebCore::JSSVGElementInstance::visitChildren):
     70        * bindings/js/JSSharedWorkerCustom.cpp:
     71        (WebCore::JSSharedWorker::visitChildrenVirtual):
     72        (WebCore::JSSharedWorker::visitChildren):
     73        * bindings/js/JSStyleSheetCustom.cpp:
     74        (WebCore::JSStyleSheet::visitChildrenVirtual):
     75        (WebCore::JSStyleSheet::visitChildren):
     76        * bindings/js/JSTreeWalkerCustom.cpp:
     77        (WebCore::JSTreeWalker::visitChildrenVirtual):
     78        (WebCore::JSTreeWalker::visitChildren):
     79        * bindings/js/JSWebGLRenderingContextCustom.cpp:
     80        (WebCore::JSWebGLRenderingContext::visitChildrenVirtual):
     81        (WebCore::JSWebGLRenderingContext::visitChildren):
     82        * bindings/js/JSWorkerContextCustom.cpp:
     83        (WebCore::JSWorkerContext::visitChildrenVirtual):
     84        (WebCore::JSWorkerContext::visitChildren):
     85        * bindings/js/JSXMLHttpRequestCustom.cpp:
     86        (WebCore::JSXMLHttpRequest::visitChildrenVirtual):
     87        (WebCore::JSXMLHttpRequest::visitChildren):
     88        * bindings/js/JSXPathResultCustom.cpp:
     89        (WebCore::JSXPathResult::visitChildrenVirtual):
     90        (WebCore::JSXPathResult::visitChildren):
     91        * bindings/scripts/CodeGeneratorJS.pm:
     92        (GenerateHeader):
     93        (GenerateImplementation):
     94        * bindings/scripts/test/JS/JSTestObj.cpp:
     95        (WebCore::JSTestObj::visitChildrenVirtual):
     96        (WebCore::JSTestObj::visitChildren):
     97        * bindings/scripts/test/JS/JSTestObj.h:
     98        * bridge/qt/qt_instance.cpp:
     99        (JSC::Bindings::QtRuntimeObject::visitChildrenVirtual):
     100        (JSC::Bindings::QtRuntimeObject::visitChildren):
     101        * bridge/qt/qt_runtime.cpp:
     102        (JSC::Bindings::QtRuntimeMetaMethod::visitChildrenVirtual):
     103        (JSC::Bindings::QtRuntimeMetaMethod::visitChildren):
     104        * bridge/qt/qt_runtime.h:
     105        * workers/WorkerContext.h:
     106
    11072011-09-23  Mario Sanchez Prada  <msanchez@igalia.com>
    2108
  • trunk/Source/WebCore/WebCore.exp.in

    r95725 r95849  
    816816__ZN7WebCore6Editor7commandERKN3WTF6StringE
    817817__ZN7WebCore6Editor7outdentEv
    818 __ZN7WebCore6JSNode13visitChildrenERN3JSC11SlotVisitorE
     818__ZN7WebCore6JSNode20visitChildrenVirtualERN3JSC11SlotVisitorE
    819819__ZN7WebCore6JSNode3putEPN3JSC9ExecStateERKNS1_10IdentifierENS1_7JSValueERNS1_15PutPropertySlotE
    820820__ZN7WebCore6JSNode6s_infoE
  • trunk/Source/WebCore/bindings/js/JSAttrCustom.cpp

    r86499 r95849  
    4040using namespace HTMLNames;
    4141
    42 void JSAttr::visitChildren(SlotVisitor& visitor)
     42void JSAttr::visitChildrenVirtual(SlotVisitor& visitor)
    4343{
    44     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     44    visitChildren(this, visitor);
     45}
     46
     47void JSAttr::visitChildren(JSCell* cell, SlotVisitor& visitor)
     48{
     49    JSAttr* thisObject = static_cast<JSAttr*>(cell);
     50    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4551    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    46     ASSERT(structure()->typeInfo().overridesVisitChildren());
    47     Base::visitChildren(visitor);
     52    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     53    Base::visitChildren(thisObject, visitor);
    4854
    49     Element* element = impl()->ownerElement();
     55    Element* element = thisObject->impl()->ownerElement();
    5056    if (!element)
    5157        return;
  • trunk/Source/WebCore/bindings/js/JSAudioContextCustom.cpp

    r91319 r95849  
    4040namespace WebCore {
    4141
    42 void JSAudioContext::visitChildren(SlotVisitor& visitor)
     42void JSAudioContext::visitChildrenVirtual(SlotVisitor& visitor)
    4343{
    44     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     44    visitChildren(this, visitor);
     45}
     46
     47void JSAudioContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
     48{
     49    JSAudioContext* thisObject = static_cast<JSAudioContext*>(cell);
     50    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4551    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    46     ASSERT(structure()->typeInfo().overridesVisitChildren());
    47     Base::visitChildren(visitor);
    48     m_impl->visitJSEventListeners(visitor);
     52    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     53    Base::visitChildren(thisObject, visitor);
     54    thisObject->m_impl->visitJSEventListeners(visitor);
    4955}
    5056
  • trunk/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp

    r86499 r95849  
    4949namespace WebCore {
    5050
    51 void JSCSSRule::visitChildren(SlotVisitor& visitor)
     51void JSCSSRule::visitChildrenVirtual(SlotVisitor& visitor)
    5252{
    53     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     53    visitChildren(this, visitor);
     54}
     55
     56void JSCSSRule::visitChildren(JSCell* cell, SlotVisitor& visitor)
     57{
     58    JSCSSRule* thisObject = static_cast<JSCSSRule*>(cell);
     59    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    5460    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    55     ASSERT(structure()->typeInfo().overridesVisitChildren());
    56     Base::visitChildren(visitor);
    57     visitor.addOpaqueRoot(root(impl()));
     61    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     62    Base::visitChildren(thisObject, visitor);
     63    visitor.addOpaqueRoot(root(thisObject->impl()));
    5864}
    5965
  • trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp

    r95331 r95849  
    4444namespace WebCore {
    4545
    46 void JSCSSStyleDeclaration::visitChildren(SlotVisitor& visitor)
    47 {
    48     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     46void JSCSSStyleDeclaration::visitChildrenVirtual(SlotVisitor& visitor)
     47{
     48    visitChildren(this, visitor);
     49}
     50
     51void JSCSSStyleDeclaration::visitChildren(JSCell* cell, SlotVisitor& visitor)
     52{
     53    JSCSSStyleDeclaration* thisObject = static_cast<JSCSSStyleDeclaration*>(cell);
     54    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4955    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    50     ASSERT(structure()->typeInfo().overridesVisitChildren());
    51     Base::visitChildren(visitor);
    52     visitor.addOpaqueRoot(root(impl()));
     56    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     57    Base::visitChildren(thisObject, visitor);
     58    visitor.addOpaqueRoot(root(thisObject->impl()));
    5359}
    5460
  • trunk/Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp

    r86499 r95849  
    4040namespace WebCore {
    4141
    42 void JSCanvasRenderingContext::visitChildren(SlotVisitor& visitor)
     42void JSCanvasRenderingContext::visitChildrenVirtual(SlotVisitor& visitor)
    4343{
    44     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     44    visitChildren(this, visitor);
     45}
     46
     47void JSCanvasRenderingContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
     48{
     49    JSCanvasRenderingContext* thisObject = static_cast<JSCanvasRenderingContext*>(cell);
     50    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4551    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    46     ASSERT(structure()->typeInfo().overridesVisitChildren());
    47     Base::visitChildren(visitor);
     52    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     53    Base::visitChildren(thisObject, visitor);
    4854
    49     visitor.addOpaqueRoot(root(impl()->canvas()));
     55    visitor.addOpaqueRoot(root(thisObject->impl()->canvas()));
    5056}
    5157
  • trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp

    r95108 r95849  
    5656}
    5757
    58 void JSDOMGlobalObject::visitChildren(SlotVisitor& visitor)
     58void JSDOMGlobalObject::visitChildrenVirtual(JSC::SlotVisitor& visitor)
    5959{
    60     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     60    visitChildren(this, visitor);
     61}
     62
     63void JSDOMGlobalObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
     64{
     65    JSDOMGlobalObject* thisObject = static_cast<JSDOMGlobalObject*>(cell);
     66    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    6167    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    62     ASSERT(structure()->typeInfo().overridesVisitChildren());
    63     Base::visitChildren(visitor);
     68    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     69    Base::visitChildren(thisObject, visitor);
    6470
    65     JSDOMStructureMap::iterator end = structures().end();
    66     for (JSDOMStructureMap::iterator it = structures().begin(); it != end; ++it)
     71    JSDOMStructureMap::iterator end = thisObject->structures().end();
     72    for (JSDOMStructureMap::iterator it = thisObject->structures().begin(); it != end; ++it)
    6773        visitor.append(&it->second);
    6874
    69     JSDOMConstructorMap::iterator end2 = constructors().end();
    70     for (JSDOMConstructorMap::iterator it2 = constructors().begin(); it2 != end2; ++it2)
     75    JSDOMConstructorMap::iterator end2 = thisObject->constructors().end();
     76    for (JSDOMConstructorMap::iterator it2 = thisObject->constructors().begin(); it2 != end2; ++it2)
    7177        visitor.append(&it2->second);
    7278
    73     if (m_injectedScript)
    74         visitor.append(&m_injectedScript);
     79    if (thisObject->m_injectedScript)
     80        visitor.append(&thisObject->m_injectedScript);
    7581}
    7682
  • trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.h

    r95108 r95849  
    6565        JSObject* injectedScript() const;
    6666
    67         virtual void visitChildren(JSC::SlotVisitor&);
     67        virtual void visitChildrenVirtual(JSC::SlotVisitor&);
     68        static void visitChildren(JSC::JSCell*, JSC::SlotVisitor&);
    6869
    6970        DOMWrapperWorld* world() { return m_world.get(); }
  • trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp

    r95751 r95849  
    7878namespace WebCore {
    7979
    80 void JSDOMWindow::visitChildren(SlotVisitor& visitor)
    81 {
    82     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     80void JSDOMWindow::visitChildrenVirtual(SlotVisitor& visitor)
     81{
     82    visitChildren(this, visitor);
     83}
     84
     85void JSDOMWindow::visitChildren(JSCell* cell, SlotVisitor& visitor)
     86{
     87    JSDOMWindow* thisObject = static_cast<JSDOMWindow*>(cell);
     88    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    8389    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    84     ASSERT(structure()->typeInfo().overridesVisitChildren());
    85     Base::visitChildren(visitor);
    86 
    87     impl()->visitJSEventListeners(visitor);
    88     if (Frame* frame = impl()->frame())
     90    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     91    Base::visitChildren(thisObject, visitor);
     92
     93    thisObject->impl()->visitJSEventListeners(visitor);
     94    if (Frame* frame = thisObject->impl()->frame())
    8995        visitor.addOpaqueRoot(frame);
    9096}
  • trunk/Source/WebCore/bindings/js/JSDOMWindowShell.cpp

    r94875 r95849  
    8484// ----
    8585
    86 void JSDOMWindowShell::visitChildren(SlotVisitor& visitor)
    87 {
    88     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     86void JSDOMWindowShell::visitChildrenVirtual(JSC::SlotVisitor& visitor)
     87{
     88    visitChildren(this, visitor);
     89}
     90
     91void JSDOMWindowShell::visitChildren(JSCell* cell, SlotVisitor& visitor)
     92{
     93    JSDOMWindowShell* thisObject = static_cast<JSDOMWindowShell*>(cell);
     94    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    8995    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    90     ASSERT(structure()->typeInfo().overridesVisitChildren());
    91     Base::visitChildren(visitor);
    92     if (m_window)
    93         visitor.append(&m_window);
     96    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     97    Base::visitChildren(thisObject, visitor);
     98    if (thisObject->m_window)
     99        visitor.append(&thisObject->m_window);
    94100}
    95101
  • trunk/Source/WebCore/bindings/js/JSDOMWindowShell.h

    r94929 r95849  
    7878        static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesVisitChildren | JSC::OverridesGetPropertyNames | Base::StructureFlags;
    7979
    80         virtual void visitChildren(JSC::SlotVisitor&);
     80        virtual void visitChildrenVirtual(JSC::SlotVisitor&);
     81        static void visitChildren(JSC::JSCell*, JSC::SlotVisitor&);
    8182        virtual JSC::UString className() const;
    8283        virtual bool getOwnPropertySlot(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertySlot&);
  • trunk/Source/WebCore/bindings/js/JSJavaScriptAudioNodeCustom.cpp

    r86499 r95849  
    3535namespace WebCore {
    3636
    37 void JSJavaScriptAudioNode::visitChildren(SlotVisitor& visitor)
     37void JSJavaScriptAudioNode::visitChildrenVirtual(SlotVisitor& visitor)
    3838{
    39     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     39    visitChildren(this, visitor);
     40}
     41
     42void JSJavaScriptAudioNode::visitChildren(JSCell* cell, SlotVisitor& visitor)
     43{
     44    JSJavaScriptAudioNode* thisObject = static_cast<JSJavaScriptAudioNode*>(cell);
     45    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4046    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    41     ASSERT(structure()->typeInfo().overridesVisitChildren());
    42     Base::visitChildren(visitor);
    43     static_cast<JavaScriptAudioNode*>(impl())->visitJSEventListeners(visitor);
     47    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     48    Base::visitChildren(thisObject, visitor);
     49    static_cast<JavaScriptAudioNode*>(thisObject->impl())->visitJSEventListeners(visitor);
    4450}
    4551
  • trunk/Source/WebCore/bindings/js/JSMessageChannelCustom.cpp

    r86499 r95849  
    3333
    3434namespace WebCore {
    35    
    36 void JSMessageChannel::visitChildren(SlotVisitor& visitor)
     35
     36void JSMessageChannel::visitChildrenVirtual(SlotVisitor& visitor)
    3737{
    38     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     38    visitChildren(this, visitor);
     39}
     40
     41void JSMessageChannel::visitChildren(JSCell* cell, SlotVisitor& visitor)
     42{
     43    JSMessageChannel* thisObject = static_cast<JSMessageChannel*>(cell);
     44    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    3945    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    40     ASSERT(structure()->typeInfo().overridesVisitChildren());
    41     Base::visitChildren(visitor);
     46    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     47    Base::visitChildren(thisObject, visitor);
    4248
    43     if (MessagePort* port = m_impl->port1())
     49    if (MessagePort* port = thisObject->m_impl->port1())
    4450        visitor.addOpaqueRoot(port);
    4551
    46     if (MessagePort* port = m_impl->port2())
     52    if (MessagePort* port = thisObject->m_impl->port2())
    4753        visitor.addOpaqueRoot(port);
    4854}
  • trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp

    r95362 r95849  
    4343namespace WebCore {
    4444
    45 void JSMessagePort::visitChildren(SlotVisitor& visitor)
     45void JSMessagePort::visitChildrenVirtual(SlotVisitor& visitor)
    4646{
    47     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     47    visitChildren(this, visitor);
     48}
     49
     50void JSMessagePort::visitChildren(JSCell* cell, SlotVisitor& visitor)
     51{
     52    JSMessagePort* thisObject = static_cast<JSMessagePort*>(cell);
     53    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4854    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    49     ASSERT(structure()->typeInfo().overridesVisitChildren());
    50     Base::visitChildren(visitor);
     55    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     56    Base::visitChildren(thisObject, visitor);
    5157
    5258    // If we have a locally entangled port, we can directly mark it as reachable. Ports that are remotely entangled are marked in-use by markActiveObjectsForContext().
    53     if (MessagePort* port = m_impl->locallyEntangledPort())
     59    if (MessagePort* port = thisObject->m_impl->locallyEntangledPort())
    5460        visitor.addOpaqueRoot(port);
    5561
    56     m_impl->visitJSEventListeners(visitor);
     62    thisObject->m_impl->visitJSEventListeners(visitor);
    5763}
    5864
  • trunk/Source/WebCore/bindings/js/JSNamedNodeMapCustom.cpp

    r86499 r95849  
    3636namespace WebCore {
    3737
     38void JSNamedNodeMap::visitChildrenVirtual(SlotVisitor& visitor)
     39{
     40    visitChildren(this, visitor);
     41}
     42
    3843bool JSNamedNodeMap::canGetItemsForName(ExecState*, NamedNodeMap* impl, const Identifier& propertyName)
    3944{
     
    4752}
    4853
    49 void JSNamedNodeMap::visitChildren(SlotVisitor& visitor)
     54void JSNamedNodeMap::visitChildren(JSCell* cell, SlotVisitor& visitor)
    5055{
    51     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     56    JSNamedNodeMap* thisObject = static_cast<JSNamedNodeMap*>(cell);
     57    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    5258    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    53     ASSERT(structure()->typeInfo().overridesVisitChildren());
    54     Base::visitChildren(visitor);
     59    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     60    Base::visitChildren(thisObject, visitor);
    5561
    5662    // We need to keep the wrapper for our underlying NamedNodeMap's element
     
    5864    // don't know how to keep it alive correctly.
    5965    // FIXME: Fix this lifetime issue in the DOM, and remove this.
    60     Element* element = impl()->element();
     66    Element* element = thisObject->impl()->element();
    6167    if (!element)
    6268        return;
  • trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp

    r86499 r95849  
    193193}
    194194
    195 void JSNode::visitChildren(SlotVisitor& visitor)
    196 {
    197     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     195void JSNode::visitChildrenVirtual(SlotVisitor& visitor)
     196{
     197    visitChildren(this, visitor);
     198}
     199
     200void JSNode::visitChildren(JSCell* cell, SlotVisitor& visitor)
     201{
     202    JSNode* thisObject = static_cast<JSNode*>(cell);
     203    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    198204    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    199     ASSERT(structure()->typeInfo().overridesVisitChildren());
    200     Base::visitChildren(visitor);
    201 
    202     Node* node = m_impl.get();
     205    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     206    Base::visitChildren(thisObject, visitor);
     207
     208    Node* node = thisObject->m_impl.get();
    203209    node->visitJSEventListeners(visitor);
    204210
  • trunk/Source/WebCore/bindings/js/JSNodeFilterCustom.cpp

    r86499 r95849  
    3737namespace WebCore {
    3838
    39 void JSNodeFilter::visitChildren(SlotVisitor& visitor)
     39void JSNodeFilter::visitChildrenVirtual(SlotVisitor& visitor)
    4040{
    41     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     41    visitChildren(this, visitor);
     42}
     43
     44void JSNodeFilter::visitChildren(JSCell* cell, SlotVisitor& visitor)
     45{
     46    JSNodeFilter* thisObject = static_cast<JSNodeFilter*>(cell);
     47    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4248    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(visitor);
    45     visitor.addOpaqueRoot(impl());
     49    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     50    Base::visitChildren(thisObject, visitor);
     51    visitor.addOpaqueRoot(thisObject->impl());
    4652}
    4753
  • trunk/Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp

    r86499 r95849  
    3030namespace WebCore {
    3131
    32 void JSNodeIterator::visitChildren(SlotVisitor& visitor)
     32void JSNodeIterator::visitChildrenVirtual(SlotVisitor& visitor)
    3333{
    34     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     34    visitChildren(this, visitor);
     35}
     36
     37void JSNodeIterator::visitChildren(JSCell* cell, SlotVisitor& visitor)
     38{
     39    JSNodeIterator* thisObject = static_cast<JSNodeIterator*>(cell);
     40    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    3541    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    36     ASSERT(structure()->typeInfo().overridesVisitChildren());
    37     Base::visitChildren(visitor);
     42    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     43    Base::visitChildren(thisObject, visitor);
    3844
    39     if (NodeFilter* filter = m_impl->filter())
     45    if (NodeFilter* filter = thisObject->m_impl->filter())
    4046        visitor.addOpaqueRoot(filter);
    4147}
  • trunk/Source/WebCore/bindings/js/JSSVGElementInstanceCustom.cpp

    r90124 r95849  
    3636namespace WebCore {
    3737
    38 void JSSVGElementInstance::visitChildren(JSC::SlotVisitor& visitor)
     38void JSSVGElementInstance::visitChildrenVirtual(JSC::SlotVisitor& visitor)
    3939{
    40     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     40    visitChildren(this, visitor);
     41}
     42
     43void JSSVGElementInstance::visitChildren(JSC::JSCell* cell, JSC::SlotVisitor& visitor)
     44{
     45    JSSVGElementInstance* thisObject = static_cast<JSSVGElementInstance*>(cell);
     46    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4147    COMPILE_ASSERT(StructureFlags & JSC::OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    42     ASSERT(structure()->typeInfo().overridesVisitChildren());
    43     Base::visitChildren(visitor);
    44     visitor.addOpaqueRoot(root(impl()->correspondingElement()));
     48    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     49    Base::visitChildren(thisObject, visitor);
     50    visitor.addOpaqueRoot(root(thisObject->impl()->correspondingElement()));
    4551}
    4652
  • trunk/Source/WebCore/bindings/js/JSSharedWorkerCustom.cpp

    r93339 r95849  
    4444namespace WebCore {
    4545
    46 void JSSharedWorker::visitChildren(SlotVisitor& visitor)
     46void JSSharedWorker::visitChildrenVirtual(SlotVisitor& visitor)
    4747{
    48     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     48    visitChildren(this, visitor);
     49}
     50
     51void JSSharedWorker::visitChildren(JSCell* cell, SlotVisitor& visitor)
     52{
     53    JSSharedWorker* thisObject = static_cast<JSSharedWorker*>(cell);
     54    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4955    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    50     ASSERT(structure()->typeInfo().overridesVisitChildren());
    51     Base::visitChildren(visitor);
     56    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     57    Base::visitChildren(thisObject, visitor);
    5258
    53     if (MessagePort* port = impl()->port())
     59    if (MessagePort* port = thisObject->impl()->port())
    5460        visitor.addOpaqueRoot(port);
    5561}
  • trunk/Source/WebCore/bindings/js/JSStyleSheetCustom.cpp

    r86499 r95849  
    3636namespace WebCore {
    3737
    38 void JSStyleSheet::visitChildren(SlotVisitor& visitor)
     38void JSStyleSheet::visitChildrenVirtual(SlotVisitor& visitor)
    3939{
    40     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     40    visitChildren(this, visitor);
     41}
     42
     43void JSStyleSheet::visitChildren(JSCell* cell, SlotVisitor& visitor)
     44{
     45    JSStyleSheet* thisObject = static_cast<JSStyleSheet*>(cell);
     46    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4147    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    42     ASSERT(structure()->typeInfo().overridesVisitChildren());
    43     Base::visitChildren(visitor);
    44     visitor.addOpaqueRoot(root(impl()));
     48    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     49    Base::visitChildren(thisObject, visitor);
     50    visitor.addOpaqueRoot(root(thisObject->impl()));
    4551}
    4652
  • trunk/Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp

    r86499 r95849  
    2929
    3030namespace WebCore {
    31    
    32 void JSTreeWalker::visitChildren(SlotVisitor& visitor)
     31
     32void JSTreeWalker::visitChildrenVirtual(SlotVisitor& visitor)
    3333{
    34     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     34    visitChildren(this, visitor);
     35}
     36
     37void JSTreeWalker::visitChildren(JSCell* cell, SlotVisitor& visitor)
     38{
     39    JSTreeWalker* thisObject = static_cast<JSTreeWalker*>(cell);
     40    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    3541    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    36     ASSERT(structure()->typeInfo().overridesVisitChildren());
    37     Base::visitChildren(visitor);
     42    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     43    Base::visitChildren(thisObject, visitor);
    3844
    39     if (NodeFilter* filter = m_impl->filter())
     45    if (NodeFilter* filter = thisObject->m_impl->filter())
    4046        visitor.addOpaqueRoot(filter);
    4147}
  • trunk/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp

    r95728 r95849  
    193193}
    194194
    195 void JSWebGLRenderingContext::visitChildren(SlotVisitor& visitor)
    196 {
    197     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     195void JSWebGLRenderingContext::visitChildrenVirtual(SlotVisitor& visitor)
     196{
     197    visitChildren(this, visitor);
     198}
     199
     200void JSWebGLRenderingContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
     201{
     202    JSWebGLRenderingContext* thisObject = static_cast<JSWebGLRenderingContext*>(cell);
     203    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    198204    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    199     ASSERT(structure()->typeInfo().overridesVisitChildren());
    200     Base::visitChildren(visitor);
    201     visitor.addOpaqueRoot(impl());
     205    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     206    Base::visitChildren(thisObject, visitor);
     207    visitor.addOpaqueRoot(thisObject->impl());
    202208}
    203209
  • trunk/Source/WebCore/bindings/js/JSWorkerContextCustom.cpp

    r95501 r95849  
    5454namespace WebCore {
    5555
    56 void JSWorkerContext::visitChildren(SlotVisitor& visitor)
     56void JSWorkerContext::visitChildrenVirtual(SlotVisitor& visitor)
    5757{
    58     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     58    visitChildren(this, visitor);
     59}
     60
     61void JSWorkerContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
     62{
     63    JSWorkerContext* thisObject = static_cast<JSWorkerContext*>(cell);
     64    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    5965    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    60     ASSERT(structure()->typeInfo().overridesVisitChildren());
    61     Base::visitChildren(visitor);
     66    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     67    Base::visitChildren(thisObject, visitor);
    6268
    63     if (WorkerLocation* location = impl()->optionalLocation())
     69    if (WorkerLocation* location = thisObject->impl()->optionalLocation())
    6470        visitor.addOpaqueRoot(location);
    65     if (WorkerNavigator* navigator = impl()->optionalNavigator())
     71    if (WorkerNavigator* navigator = thisObject->impl()->optionalNavigator())
    6672        visitor.addOpaqueRoot(navigator);
    6773
    68     impl()->visitJSEventListeners(visitor);
     74    thisObject->impl()->visitJSEventListeners(visitor);
    6975}
    7076
  • trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp

    r86499 r95849  
    5555namespace WebCore {
    5656
    57 void JSXMLHttpRequest::visitChildren(SlotVisitor& visitor)
    58 {
    59     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     57void JSXMLHttpRequest::visitChildrenVirtual(SlotVisitor& visitor)
     58{
     59    visitChildren(this, visitor);
     60}
     61
     62void JSXMLHttpRequest::visitChildren(JSCell* cell, SlotVisitor& visitor)
     63{
     64    JSXMLHttpRequest* thisObject = static_cast<JSXMLHttpRequest*>(cell);
     65    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    6066    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    61     ASSERT(structure()->typeInfo().overridesVisitChildren());
    62     Base::visitChildren(visitor);
    63 
    64     if (XMLHttpRequestUpload* upload = m_impl->optionalUpload())
     67    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     68    Base::visitChildren(thisObject, visitor);
     69
     70    if (XMLHttpRequestUpload* upload = thisObject->m_impl->optionalUpload())
    6571        visitor.addOpaqueRoot(upload);
    6672
    67     if (Document* responseDocument = m_impl->optionalResponseXML())
     73    if (Document* responseDocument = thisObject->m_impl->optionalResponseXML())
    6874        visitor.addOpaqueRoot(responseDocument);
    6975
    70     if (ArrayBuffer* responseArrayBuffer = m_impl->optionalResponseArrayBuffer())
     76    if (ArrayBuffer* responseArrayBuffer = thisObject->m_impl->optionalResponseArrayBuffer())
    7177        visitor.addOpaqueRoot(responseArrayBuffer);
    7278
    7379#if ENABLE(XHR_RESPONSE_BLOB)
    74     if (Blob* responseBlob = m_impl->optionalResponseBlob())
     80    if (Blob* responseBlob = thisObject->m_impl->optionalResponseBlob())
    7581        visitor.addOpaqueRoot(responseBlob);
    7682#endif
    7783
    78     m_impl->visitJSEventListeners(visitor);
     84    thisObject->m_impl->visitJSEventListeners(visitor);
    7985}
    8086
  • trunk/Source/WebCore/bindings/js/JSXPathResultCustom.cpp

    r90124 r95849  
    3838namespace WebCore {
    3939
    40 void JSXPathResult::visitChildren(SlotVisitor& visitor)
     40void JSXPathResult::visitChildrenVirtual(SlotVisitor& visitor)
    4141{
    42     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     42    visitChildren(this, visitor);
     43}
     44
     45void JSXPathResult::visitChildren(JSCell* cell, SlotVisitor& visitor)
     46{
     47    JSXPathResult* thisObject = static_cast<JSXPathResult*>(cell);
     48    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    4349    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    44     ASSERT(structure()->typeInfo().overridesVisitChildren());
    45     Base::visitChildren(visitor);
     50    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     51    Base::visitChildren(thisObject, visitor);
    4652
    47     const XPath::Value& xpathValue = impl()->value();
     53    const XPath::Value& xpathValue = thisObject->impl()->value();
    4854    if (xpathValue.isNodeSet()) {
    4955        const XPath::NodeSet& nodesToMark = xpathValue.toNodeSet();
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r95310 r95849  
    878878    # visit function
    879879    if ($needsMarkChildren) {
    880         push(@headerContent, "    virtual void visitChildren(JSC::SlotVisitor&);\n\n");
     880        push(@headerContent, "    virtual void visitChildrenVirtual(JSC::SlotVisitor&);\n");
     881        push(@headerContent, "    static void visitChildren(JSCell*, JSC::SlotVisitor&);\n\n");
    881882        $structureFlags{"JSC::OverridesVisitChildren"} = 1;
    882883    }
     
    22012202       
    22022203        if ($needsMarkChildren && !$dataNode->extendedAttributes->{"CustomMarkFunction"}) {
    2203             push(@implContent, "void ${className}::visitChildren(SlotVisitor& visitor)\n");
     2204            push(@implContent, "void ${className}::visitChildrenVirtual(SlotVisitor& visitor)\n");
    22042205            push(@implContent, "{\n");
    2205             push(@implContent, "    ASSERT_GC_OBJECT_INHERITS(this, &s_info);\n");
     2206            push(@implContent, "    visitChildren(this, visitor);\n");
     2207            push(@implContent, "}\n\n");
     2208
     2209            push(@implContent, "void ${className}::visitChildren(JSCell* cell, SlotVisitor& visitor)\n");
     2210            push(@implContent, "{\n");
     2211            push(@implContent, "    ${className}* thisObject = static_cast<${className}*>(cell);\n");
     2212            push(@implContent, "    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);\n");
    22062213            push(@implContent, "    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);\n");
    2207             push(@implContent, "    ASSERT(structure()->typeInfo().overridesVisitChildren());\n");
    2208             push(@implContent, "    Base::visitChildren(visitor);\n");
     2214            push(@implContent, "    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());\n");
     2215            push(@implContent, "    Base::visitChildren(thisObject, visitor);\n");
    22092216            if ($dataNode->extendedAttributes->{"EventTarget"}) {
    2210                 push(@implContent, "    impl()->visitJSEventListeners(visitor);\n");
     2217                push(@implContent, "    thisObject->impl()->visitJSEventListeners(visitor);\n");
    22112218            }
    22122219            if ($numCachedAttributes > 0) {
     
    22142221                    my $attribute = $_;
    22152222                    if ($attribute->signature->extendedAttributes->{"CachedAttribute"}) {
    2216                         push(@implContent, "    if (m_" . $attribute->signature->name . ")\n");
    2217                         push(@implContent, "        visitor.append(&m_" . $attribute->signature->name . ");\n");
     2223                        push(@implContent, "    if (thisObject->m_" . $attribute->signature->name . ")\n");
     2224                        push(@implContent, "        visitor.append(&thisObject->m_" . $attribute->signature->name . ");\n");
    22182225                    }
    22192226                }
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp

    r95327 r95849  
    18711871}
    18721872
    1873 void JSTestObj::visitChildren(SlotVisitor& visitor)
    1874 {
    1875     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
     1873void JSTestObj::visitChildrenVirtual(SlotVisitor& visitor)
     1874{
     1875    visitChildren(this, visitor);
     1876}
     1877
     1878void JSTestObj::visitChildren(JSCell* cell, SlotVisitor& visitor)
     1879{
     1880    JSTestObj* thisObject = static_cast<JSTestObj*>(cell);
     1881    ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
    18761882    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    1877     ASSERT(structure()->typeInfo().overridesVisitChildren());
    1878     Base::visitChildren(visitor);
    1879     if (m_cachedAttribute1)
    1880         visitor.append(&m_cachedAttribute1);
    1881     if (m_cachedAttribute2)
    1882         visitor.append(&m_cachedAttribute2);
     1883    ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
     1884    Base::visitChildren(thisObject, visitor);
     1885    if (thisObject->m_cachedAttribute1)
     1886        visitor.append(&thisObject->m_cachedAttribute1);
     1887    if (thisObject->m_cachedAttribute2)
     1888        visitor.append(&thisObject->m_cachedAttribute2);
    18831889}
    18841890
  • trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h

    r95108 r95849  
    5454    JSC::WriteBarrier<JSC::Unknown> m_cachedAttribute1;
    5555    JSC::WriteBarrier<JSC::Unknown> m_cachedAttribute2;
    56     virtual void visitChildren(JSC::SlotVisitor&);
     56    virtual void visitChildrenVirtual(JSC::SlotVisitor&);
     57    static void visitChildren(JSCell*, JSC::SlotVisitor&);
    5758
    5859
  • trunk/Source/WebCore/bridge/qt/qt_instance.cpp

    r95108 r95849  
    6363    static const ClassInfo s_info;
    6464
    65     virtual void visitChildren(SlotVisitor& visitor)
     65    virtual void visitChildrenVirtual(SlotVisitor& visitor)
    6666    {
    67         RuntimeObject::visitChildren(visitor);
    68         QtInstance* instance = static_cast<QtInstance*>(getInternalInstance());
     67        visitChildren(this, visitor);
     68    }
     69
     70    static void visitChildren(JSCell* cell, SlotVisitor& visitor)
     71    {
     72        QtRuntimeObject* thisObject = static_cast<QtRuntimeObject*>(cell);
     73        RuntimeObject::visitChildren(thisObject, visitor);
     74        QtInstance* instance = static_cast<QtInstance*>(thisObject->getInternalInstance());
    6975        if (instance)
    7076            instance->visitAggregate(visitor);
  • trunk/Source/WebCore/bridge/qt/qt_runtime.cpp

    r95250 r95849  
    14401440}
    14411441
    1442 void QtRuntimeMetaMethod::visitChildren(SlotVisitor& visitor)
    1443 {
    1444     QtRuntimeMethod::visitChildren(visitor);
    1445     QW_D(QtRuntimeMetaMethod);
     1442void QtRuntimeMetaMethod::visitChildrenVirtual(SlotVisitor& visitor)
     1443{
     1444    visitChildren(this, visitor);
     1445}
     1446
     1447void QtRuntimeMetaMethod::visitChildren(JSCell* cell, SlotVisitor& visitor)
     1448{
     1449    QtRuntimeMetaMethod* thisObject = static_cast<QtRuntimeMetaMethod*>(cell);
     1450    QtRuntimeMethod::visitChildren(thisObject, visitor);
     1451    QtRuntimeMetaMethodData* d = thisObject->d_func();
    14461452    if (d->m_connect)
    14471453        visitor.append(&d->m_connect);
  • trunk/Source/WebCore/bridge/qt/qt_runtime.h

    r95250 r95849  
    169169    virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
    170170
    171     virtual void visitChildren(SlotVisitor&);
     171    virtual void visitChildrenVirtual(SlotVisitor&);
     172    static void visitChildren(JSCell*, SlotVisitor&);
    172173
    173174protected:
  • trunk/Source/WebCore/workers/WorkerContext.h

    r95271 r95849  
    145145        WorkerInspectorController* workerInspectorController() { return m_workerInspectorController.get(); }
    146146#endif
    147         // These methods are used for GC marking. See JSWorkerContext::visitChildren(SlotVisitor&) in
     147        // These methods are used for GC marking. See JSWorkerContext::visitChildrenVirtual(SlotVisitor&) in
    148148        // JSWorkerContextCustom.cpp.
    149149        WorkerNavigator* optionalNavigator() const { return m_navigator.get(); }
  • trunk/Source/autotools/symbols.filter

    r95685 r95849  
    5757_ZN7WebCore22externalRepresentationEPNS_7ElementEj;
    5858_ZN7WebCore24DocumentMarkerController10markersForEPNS_4NodeE;
    59 _ZN7WebCore6JSNode13visitChildrenERN3JSC11SlotVisitorE;
     59_ZN7WebCore6JSNode20visitChildrenVirtualERN3JSC11SlotVisitorE;
    6060_ZN7WebCore6JSNode3putEPN3JSC9ExecStateERKNS1_10IdentifierENS1_7JSValueERNS1_15PutPropertySlotE;
    6161_ZN7WebCore6JSNode6s_infoE;
Note: See TracChangeset for help on using the changeset viewer.