Changeset 167794 in webkit


Ignore:
Timestamp:
Apr 25, 2014 12:55:19 AM (10 years ago)
Author:
Darin Adler
Message:
ASSERTION FAILED: "!m_isolatedWorld->isNormal()
m_wrapper !m_jsFunction" in svg/custom/use-instanceRoot-event-listeners.xhtml

https://bugs.webkit.org/show_bug.cgi?id=132148

Reviewed by Andreas Kling.

Changed how JSCustomMarkFunction generation works. Instead of leaving out
the generated visitChildren function, just generate a call to visitAdditionalChildren.
This eliminates the need to repeat boilerplate.

The fix for the above bug was to correct mistaken logic where JSSVGElementInstance
had a visitChildren that did not properly mark event listeners because it explicitly
did not call through to the base class visitChildren. The new arrangement makes that
mistake impossible.

  • bindings/js/JSAttrCustom.cpp:

(WebCore::JSAttr::visitAdditionalChildren): Use this instead of visitChildren.

  • bindings/js/JSAudioTrackCustom.cpp:

(WebCore::JSAudioTrack::visitAdditionalChildren): Ditto.

  • bindings/js/JSAudioTrackListCustom.cpp:

(WebCore::JSAudioTrackList::visitAdditionalChildren): Ditto.

  • bindings/js/JSCSSRuleCustom.cpp:

(WebCore::JSCSSRule::visitAdditionalChildren): Ditto.

  • bindings/js/JSCSSStyleDeclarationCustom.cpp:

(WebCore::JSCSSStyleDeclaration::visitAdditionalChildren): Ditto.

  • bindings/js/JSCanvasRenderingContextCustom.cpp:

(WebCore::JSCanvasRenderingContext::visitAdditionalChildren): Ditto.

  • bindings/js/JSCryptoKeyPairCustom.cpp:

(WebCore::JSCryptoKeyPair::visitAdditionalChildren): Ditto.

  • bindings/js/JSDOMWindowCustom.cpp:

(WebCore::JSDOMWindow::visitAdditionalChildren): Ditto.

  • bindings/js/JSMessageChannelCustom.cpp:

(WebCore::JSMessageChannel::visitAdditionalChildren): Ditto.

  • bindings/js/JSMessagePortCustom.cpp:

(WebCore::JSMessagePort::visitAdditionalChildren): Ditto.

  • bindings/js/JSNodeCustom.cpp:

(WebCore::JSNode::visitAdditionalChildren): Ditto.

  • bindings/js/JSNodeFilterCustom.cpp:

(WebCore::JSNodeFilter::visitAdditionalChildren): Ditto.

  • bindings/js/JSNodeIteratorCustom.cpp:

(WebCore::JSNodeIterator::visitAdditionalChildren): Ditto.

  • bindings/js/JSSVGElementInstanceCustom.cpp:

(WebCore::JSSVGElementInstance::visitAdditionalChildren): Ditto.

  • bindings/js/JSSharedWorkerCustom.cpp:

(WebCore::JSSharedWorker::visitAdditionalChildren): Ditto.

  • bindings/js/JSStyleSheetCustom.cpp:

(WebCore::JSStyleSheet::visitAdditionalChildren): Ditto.

  • bindings/js/JSTextTrackCueCustom.cpp:

(WebCore::JSTextTrackCue::visitAdditionalChildren): Ditto.

  • bindings/js/JSTextTrackCustom.cpp:

(WebCore::JSTextTrack::visitAdditionalChildren): Ditto.

  • bindings/js/JSTextTrackListCustom.cpp:

(WebCore::JSTextTrackList::visitAdditionalChildren): Ditto.

  • bindings/js/JSTreeWalkerCustom.cpp:

(WebCore::JSTreeWalker::visitAdditionalChildren): Ditto.

  • bindings/js/JSVideoTrackCustom.cpp:

(WebCore::JSVideoTrack::visitAdditionalChildren): Ditto.

  • bindings/js/JSVideoTrackListCustom.cpp:

(WebCore::JSVideoTrackList::visitAdditionalChildren): Ditto.

  • bindings/js/JSWebGLRenderingContextCustom.cpp:

(WebCore::JSWebGLRenderingContext::visitAdditionalChildren): Ditto.

  • bindings/js/JSWorkerGlobalScopeCustom.cpp:

(WebCore::JSWorkerGlobalScope::visitAdditionalChildren): Ditto.

  • bindings/js/JSXMLHttpRequestCustom.cpp:

(WebCore::JSXMLHttpRequest::visitAdditionalChildren): Ditto.

  • bindings/js/JSXPathResultCustom.cpp:

(WebCore::JSXPathResult::visitAdditionalChildren): Ditto.

  • bindings/js/JSDOMGlobalObject.cpp:

(WebCore::JSDOMGlobalObject::visitChildren): Rewrote to use modern for loops.

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateHeader): Generate declaration of visitAdditionalChildren.
(GenerateImplementation): Generate call to visitAdditionalChildren.

Location:
trunk/Source/WebCore
Files:
29 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r167793 r167794  
     12014-04-25  Darin Adler  <darin@apple.com>
     2
     3        ASSERTION FAILED: "!m_isolatedWorld->isNormal() || m_wrapper || !m_jsFunction" in svg/custom/use-instanceRoot-event-listeners.xhtml
     4        https://bugs.webkit.org/show_bug.cgi?id=132148
     5
     6        Reviewed by Andreas Kling.
     7
     8        Changed how JSCustomMarkFunction generation works. Instead of leaving out
     9        the generated visitChildren function, just generate a call to visitAdditionalChildren.
     10        This eliminates the need to repeat boilerplate.
     11
     12        The fix for the above bug was to correct mistaken logic where JSSVGElementInstance
     13        had a visitChildren that did not properly mark event listeners because it explicitly
     14        did not call through to the base class visitChildren. The new arrangement makes that
     15        mistake impossible.
     16
     17        * bindings/js/JSAttrCustom.cpp:
     18        (WebCore::JSAttr::visitAdditionalChildren): Use this instead of visitChildren.
     19        * bindings/js/JSAudioTrackCustom.cpp:
     20        (WebCore::JSAudioTrack::visitAdditionalChildren): Ditto.
     21        * bindings/js/JSAudioTrackListCustom.cpp:
     22        (WebCore::JSAudioTrackList::visitAdditionalChildren): Ditto.
     23        * bindings/js/JSCSSRuleCustom.cpp:
     24        (WebCore::JSCSSRule::visitAdditionalChildren): Ditto.
     25        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
     26        (WebCore::JSCSSStyleDeclaration::visitAdditionalChildren): Ditto.
     27        * bindings/js/JSCanvasRenderingContextCustom.cpp:
     28        (WebCore::JSCanvasRenderingContext::visitAdditionalChildren): Ditto.
     29        * bindings/js/JSCryptoKeyPairCustom.cpp:
     30        (WebCore::JSCryptoKeyPair::visitAdditionalChildren): Ditto.
     31        * bindings/js/JSDOMWindowCustom.cpp:
     32        (WebCore::JSDOMWindow::visitAdditionalChildren): Ditto.
     33        * bindings/js/JSMessageChannelCustom.cpp:
     34        (WebCore::JSMessageChannel::visitAdditionalChildren): Ditto.
     35        * bindings/js/JSMessagePortCustom.cpp:
     36        (WebCore::JSMessagePort::visitAdditionalChildren): Ditto.
     37        * bindings/js/JSNodeCustom.cpp:
     38        (WebCore::JSNode::visitAdditionalChildren): Ditto.
     39        * bindings/js/JSNodeFilterCustom.cpp:
     40        (WebCore::JSNodeFilter::visitAdditionalChildren): Ditto.
     41        * bindings/js/JSNodeIteratorCustom.cpp:
     42        (WebCore::JSNodeIterator::visitAdditionalChildren): Ditto.
     43        * bindings/js/JSSVGElementInstanceCustom.cpp:
     44        (WebCore::JSSVGElementInstance::visitAdditionalChildren): Ditto.
     45        * bindings/js/JSSharedWorkerCustom.cpp:
     46        (WebCore::JSSharedWorker::visitAdditionalChildren): Ditto.
     47        * bindings/js/JSStyleSheetCustom.cpp:
     48        (WebCore::JSStyleSheet::visitAdditionalChildren): Ditto.
     49        * bindings/js/JSTextTrackCueCustom.cpp:
     50        (WebCore::JSTextTrackCue::visitAdditionalChildren): Ditto.
     51        * bindings/js/JSTextTrackCustom.cpp:
     52        (WebCore::JSTextTrack::visitAdditionalChildren): Ditto.
     53        * bindings/js/JSTextTrackListCustom.cpp:
     54        (WebCore::JSTextTrackList::visitAdditionalChildren): Ditto.
     55        * bindings/js/JSTreeWalkerCustom.cpp:
     56        (WebCore::JSTreeWalker::visitAdditionalChildren): Ditto.
     57        * bindings/js/JSVideoTrackCustom.cpp:
     58        (WebCore::JSVideoTrack::visitAdditionalChildren): Ditto.
     59        * bindings/js/JSVideoTrackListCustom.cpp:
     60        (WebCore::JSVideoTrackList::visitAdditionalChildren): Ditto.
     61        * bindings/js/JSWebGLRenderingContextCustom.cpp:
     62        (WebCore::JSWebGLRenderingContext::visitAdditionalChildren): Ditto.
     63        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
     64        (WebCore::JSWorkerGlobalScope::visitAdditionalChildren): Ditto.
     65        * bindings/js/JSXMLHttpRequestCustom.cpp:
     66        (WebCore::JSXMLHttpRequest::visitAdditionalChildren): Ditto.
     67        * bindings/js/JSXPathResultCustom.cpp:
     68        (WebCore::JSXPathResult::visitAdditionalChildren): Ditto.
     69
     70        * bindings/js/JSDOMGlobalObject.cpp:
     71        (WebCore::JSDOMGlobalObject::visitChildren): Rewrote to use modern for loops.
     72
     73        * bindings/scripts/CodeGeneratorJS.pm:
     74        (GenerateHeader): Generate declaration of visitAdditionalChildren.
     75        (GenerateImplementation): Generate call to visitAdditionalChildren.
     76
    1772014-04-24  Andreas Kling  <akling@apple.com>
    278
  • trunk/Source/WebCore/bindings/js/JSAttrCustom.cpp

    r165676 r167794  
    3030#include "JSAttr.h"
    3131
    32 #include "Document.h"
    3332#include "Element.h"
    34 #include "HTMLNames.h"
    35 
    36 using namespace JSC;
    3733
    3834namespace WebCore {
    3935
    40 using namespace HTMLNames;
    41 
    42 void JSAttr::visitChildren(JSCell* cell, SlotVisitor& visitor)
     36void JSAttr::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    4337{
    44     JSAttr* thisObject = jsCast<JSAttr*>(cell);
    45     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    46     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    47     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    48 
    49     Base::visitChildren(thisObject, visitor);
    50     Element* element = thisObject->impl().ownerElement();
    51     if (!element)
    52         return;
    53     visitor.addOpaqueRoot(root(element));
     38    if (Element* element = impl().ownerElement())
     39        visitor.addOpaqueRoot(root(element));
    5440}
    5541
  • trunk/Source/WebCore/bindings/js/JSAudioTrackCustom.cpp

    r165676 r167794  
    3636namespace WebCore {
    3737
    38 void JSAudioTrack::visitChildren(JSCell* cell, SlotVisitor& visitor)
     38void JSAudioTrack::visitAdditionalChildren(SlotVisitor& visitor)
    3939{
    40     JSAudioTrack* jsAudioTrack = jsCast<JSAudioTrack*>(cell);
    41     ASSERT_GC_OBJECT_INHERITS(jsAudioTrack, info());
    42     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(jsAudioTrack->structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(jsAudioTrack, visitor);
    45 
    46     AudioTrack& audioTrack = jsAudioTrack->impl();
    47     visitor.addOpaqueRoot(root(&audioTrack));
     40    visitor.addOpaqueRoot(root(&impl()));
    4841}
    4942
    5043void JSAudioTrack::setKind(ExecState* exec, JSValue value)
    5144{
    52     UNUSED_PARAM(exec);
    5345#if ENABLE(MEDIA_SOURCE)
    5446    const String& nativeValue(value.isEmpty() ? String() : value.toString(exec)->value(exec));
     
    5749    impl().setKind(nativeValue);
    5850#else
     51    UNUSED_PARAM(exec);
    5952    UNUSED_PARAM(value);
    60     return;
    6153#endif
    6254}
     
    6456void JSAudioTrack::setLanguage(ExecState* exec, JSValue value)
    6557{
    66     UNUSED_PARAM(exec);
    6758#if ENABLE(MEDIA_SOURCE)
    6859    const String& nativeValue(value.isEmpty() ? String() : value.toString(exec)->value(exec));
     
    7162    impl().setLanguage(nativeValue);
    7263#else
     64    UNUSED_PARAM(exec);
    7365    UNUSED_PARAM(value);
    74     return;
    7566#endif
    7667}
  • trunk/Source/WebCore/bindings/js/JSAudioTrackListCustom.cpp

    r165676 r167794  
    2727
    2828#if ENABLE(VIDEO_TRACK)
     29
    2930#include "JSAudioTrackList.h"
    3031
     
    3637namespace WebCore {
    3738
    38 void JSAudioTrackList::visitChildren(JSCell* cell, SlotVisitor& visitor)
     39void JSAudioTrackList::visitAdditionalChildren(SlotVisitor& visitor)
    3940{
    40     JSAudioTrackList* jsAudioTrackList = jsCast<JSAudioTrackList*>(cell);
    41     ASSERT_GC_OBJECT_INHERITS(jsAudioTrackList, info());
    42     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(jsAudioTrackList->structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(jsAudioTrackList, visitor);
    45 
    46     AudioTrackList& audioTrackList = jsAudioTrackList->impl();
    47     visitor.addOpaqueRoot(root(audioTrackList.element()));
    48     audioTrackList.visitJSEventListeners(visitor);
     41    visitor.addOpaqueRoot(root(impl().element()));
    4942}
    5043
  • trunk/Source/WebCore/bindings/js/JSCSSRuleCustom.cpp

    r166128 r167794  
    5656namespace WebCore {
    5757
    58 void JSCSSRule::visitChildren(JSCell* cell, SlotVisitor& visitor)
     58void JSCSSRule::visitAdditionalChildren(SlotVisitor& visitor)
    5959{
    60     JSCSSRule* thisObject = jsCast<JSCSSRule*>(cell);
    61     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    62     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    63     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    64     Base::visitChildren(thisObject, visitor);
    65     visitor.addOpaqueRoot(root(&thisObject->impl()));
     60    visitor.addOpaqueRoot(root(&impl()));
    6661}
    6762
  • trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp

    r167240 r167794  
    4646
    4747using namespace JSC;
    48 using namespace WTF;
    4948
    5049namespace WebCore {
    5150
    52 void JSCSSStyleDeclaration::visitChildren(JSCell* cell, SlotVisitor& visitor)
    53 {
    54     JSCSSStyleDeclaration* thisObject = jsCast<JSCSSStyleDeclaration*>(cell);
    55     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    56     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    57     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    58     Base::visitChildren(thisObject, visitor);
    59     visitor.addOpaqueRoot(root(&thisObject->impl()));
     51void JSCSSStyleDeclaration::visitAdditionalChildren(SlotVisitor& visitor)
     52{
     53    visitor.addOpaqueRoot(root(&impl()));
    6054}
    6155
     
    6660};
    6761
    68 enum PropertyNamePrefix
    69 {
     62enum PropertyNamePrefix {
    7063    PropertyNamePrefixNone,
    7164    PropertyNamePrefixCSS,
  • trunk/Source/WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp

    r166128 r167794  
    3131#include "JSCanvasRenderingContext2D.h"
    3232#include "JSNode.h"
     33
    3334#if ENABLE(WEBGL)
     35#include "JSWebGLRenderingContext.h"
    3436#include "WebGLRenderingContext.h"
    35 #include "JSWebGLRenderingContext.h"
    3637#endif
    3738
     
    4041namespace WebCore {
    4142
    42 void JSCanvasRenderingContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
     43void JSCanvasRenderingContext::visitAdditionalChildren(SlotVisitor& visitor)
    4344{
    44     JSCanvasRenderingContext* thisObject = jsCast<JSCanvasRenderingContext*>(cell);
    45     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    46     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    47     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    48     Base::visitChildren(thisObject, visitor);
    49 
    50     visitor.addOpaqueRoot(root(thisObject->impl().canvas()));
     45    visitor.addOpaqueRoot(root(impl().canvas()));
    5146}
    5247
  • trunk/Source/WebCore/bindings/js/JSCryptoKeyPairCustom.cpp

    r159068 r167794  
    2929#if ENABLE(SUBTLE_CRYPTO)
    3030
    31 using namespace JSC;
    32 
    3331namespace WebCore {
    3432
    35 void JSCryptoKeyPair::visitChildren(JSCell* cell, SlotVisitor& visitor)
     33void JSCryptoKeyPair::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    3634{
    37     JSCryptoKeyPair* thisObject = jsCast<JSCryptoKeyPair*>(cell);
    38     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    39     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    40     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    41     Base::visitChildren(thisObject, visitor);
    42 
    43     visitor.addOpaqueRoot(thisObject->m_impl->publicKey());
    44     visitor.addOpaqueRoot(thisObject->m_impl->privateKey());
     35    visitor.addOpaqueRoot(impl().publicKey());
     36    visitor.addOpaqueRoot(impl().privateKey());
    4537}
    4638
  • trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp

    r166823 r167794  
    9292    Base::visitChildren(thisObject, visitor);
    9393
    94     JSDOMStructureMap::iterator end = thisObject->structures().end();
    95     for (JSDOMStructureMap::iterator it = thisObject->structures().begin(); it != end; ++it)
    96         visitor.append(&it->value);
     94    for (auto& structure : thisObject->structures().values())
     95        visitor.append(&structure);
    9796
    98     JSDOMConstructorMap::iterator end2 = thisObject->constructors().end();
    99     for (JSDOMConstructorMap::iterator it2 = thisObject->constructors().begin(); it2 != end2; ++it2)
    100         visitor.append(&it2->value);
     97    for (auto& constructor : thisObject->constructors().values())
     98        visitor.append(&constructor);
    10199}
    102100
  • trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp

    r165914 r167794  
    5959namespace WebCore {
    6060
    61 void JSDOMWindow::visitChildren(JSCell* cell, SlotVisitor& visitor)
    62 {
    63     JSDOMWindow* thisObject = jsCast<JSDOMWindow*>(cell);
    64     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    65     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    66     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    67     Base::visitChildren(thisObject, visitor);
    68 
    69     thisObject->impl().visitJSEventListeners(visitor);
    70     if (Frame* frame = thisObject->impl().frame())
     61void JSDOMWindow::visitAdditionalChildren(SlotVisitor& visitor)
     62{
     63    if (Frame* frame = impl().frame())
    7164        visitor.addOpaqueRoot(frame);
    7265}
  • trunk/Source/WebCore/bindings/js/JSMessageChannelCustom.cpp

    r154038 r167794  
    3030#include "JSMessageChannel.h"
    3131
    32 #include "MessageChannel.h"
    33 #include <runtime/Error.h>
    34 
    35 using namespace JSC;
    36 
    3732namespace WebCore {
    3833
    39 void JSMessageChannel::visitChildren(JSCell* cell, SlotVisitor& visitor)
     34void JSMessageChannel::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    4035{
    41     JSMessageChannel* thisObject = jsCast<JSMessageChannel*>(cell);
    42     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    43     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    44     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    45     Base::visitChildren(thisObject, visitor);
    46 
    47     if (MessagePort* port = thisObject->m_impl->port1())
     36    if (MessagePort* port = impl().port1())
    4837        visitor.addOpaqueRoot(port);
    4938
    50     if (MessagePort* port = thisObject->m_impl->port2())
     39    if (MessagePort* port = impl().port2())
    5140        visitor.addOpaqueRoot(port);
    5241}
  • trunk/Source/WebCore/bindings/js/JSMessagePortCustom.cpp

    r163844 r167794  
    4444namespace WebCore {
    4545
    46 void JSMessagePort::visitChildren(JSCell* cell, SlotVisitor& visitor)
     46void JSMessagePort::visitAdditionalChildren(SlotVisitor& visitor)
    4747{
    48     JSMessagePort* thisObject = jsCast<JSMessagePort*>(cell);
    49     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    50     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    51     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    52     Base::visitChildren(thisObject, visitor);
    53 
    5448    // 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().
    55     if (MessagePort* port = thisObject->m_impl->locallyEntangledPort())
     49    if (MessagePort* port = impl().locallyEntangledPort())
    5650        visitor.addOpaqueRoot(port);
    57 
    58     thisObject->m_impl->visitJSEventListeners(visitor);
    5951}
    6052
  • trunk/Source/WebCore/bindings/js/JSNodeCustom.cpp

    r166823 r167794  
    180180}
    181181
    182 void JSNode::visitChildren(JSCell* cell, SlotVisitor& visitor)
    183 {
    184     JSNode* thisObject = jsCast<JSNode*>(cell);
    185     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    186     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    187     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    188     Base::visitChildren(thisObject, visitor);
    189 
    190     Node& node = thisObject->impl();
    191     node.visitJSEventListeners(visitor);
    192 
    193     visitor.addOpaqueRoot(root(node));
     182void JSNode::visitAdditionalChildren(SlotVisitor& visitor)
     183{
     184    visitor.addOpaqueRoot(root(impl()));
    194185}
    195186
  • trunk/Source/WebCore/bindings/js/JSNodeFilterCustom.cpp

    r165676 r167794  
    2727#include "JSNodeFilter.h"
    2828
    29 #include "JSDOMWindowBase.h"
    30 #include "JSNode.h"
    3129#include "JSNodeFilterCondition.h"
    32 #include "NodeFilter.h"
    33 #include "JSDOMBinding.h"
    34 
    35 using namespace JSC;
    3630
    3731namespace WebCore {
    3832
    39 void JSNodeFilter::visitChildren(JSCell* cell, SlotVisitor& visitor)
     33void JSNodeFilter::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    4034{
    41     JSNodeFilter* thisObject = jsCast<JSNodeFilter*>(cell);
    42     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    43     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    44     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    45     Base::visitChildren(thisObject, visitor);
    46     visitor.addOpaqueRoot(&thisObject->impl());
     35    visitor.addOpaqueRoot(&impl());
    4736}
    4837
    49 PassRefPtr<NodeFilter> toNodeFilter(VM& vm, JSValue value)
     38PassRefPtr<NodeFilter> toNodeFilter(JSC::VM& vm, JSC::JSValue value)
    5039{
    5140    if (value.inherits(JSNodeFilter::info()))
    52         return &jsCast<JSNodeFilter*>(asObject(value))->impl();
     41        return &JSC::jsCast<JSNodeFilter*>(asObject(value))->impl();
    5342
    5443    RefPtr<NodeFilter> result = NodeFilter::create();
  • trunk/Source/WebCore/bindings/js/JSNodeIteratorCustom.cpp

    r154038 r167794  
    2121#include "JSNodeIterator.h"
    2222
    23 #include "JSNode.h"
    2423#include "Node.h"
    25 #include "NodeFilter.h"
    26 #include "NodeIterator.h"
    27 
    28 using namespace JSC;
    2924
    3025namespace WebCore {
    3126
    32 void JSNodeIterator::visitChildren(JSCell* cell, SlotVisitor& visitor)
     27void JSNodeIterator::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    3328{
    34     JSNodeIterator* thisObject = jsCast<JSNodeIterator*>(cell);
    35     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    36     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    37     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    38     Base::visitChildren(thisObject, visitor);
    39 
    40     if (NodeFilter* filter = thisObject->m_impl->filter())
     29    if (NodeFilter* filter = impl().filter())
    4130        visitor.addOpaqueRoot(filter);
    4231}
  • trunk/Source/WebCore/bindings/js/JSSVGElementInstanceCustom.cpp

    r165676 r167794  
    2828#include "JSSVGElementInstance.h"
    2929
    30 #include "JSEventTarget.h"
    3130#include "JSNodeCustom.h"
    3231
    3332namespace WebCore {
    3433
    35 void JSSVGElementInstance::visitChildren(JSC::JSCell* cell, JSC::SlotVisitor& visitor)
     34void JSSVGElementInstance::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    3635{
    37     JSSVGElementInstance* thisObject = JSC::jsCast<JSSVGElementInstance*>(cell);
    38     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    39     COMPILE_ASSERT(StructureFlags & JSC::OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    40     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    41     // Skip JSEventTarget::visitChildren because event listener registration is
    42     // forwarded to the corresponding element.
    43     JSEventTarget::Base::visitChildren(thisObject, visitor);
    44     visitor.addOpaqueRoot(root(thisObject->impl().correspondingElement()));
     36    visitor.addOpaqueRoot(root(impl().correspondingElement()));
    4537}
    4638
  • trunk/Source/WebCore/bindings/js/JSSharedWorkerCustom.cpp

    r157215 r167794  
    4545namespace WebCore {
    4646
    47 void JSSharedWorker::visitChildren(JSCell* cell, SlotVisitor& visitor)
     47void JSSharedWorker::visitAdditionalChildren(SlotVisitor& visitor)
    4848{
    49     JSSharedWorker* thisObject = jsCast<JSSharedWorker*>(cell);
    50     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    51     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    52     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    53     Base::visitChildren(thisObject, visitor);
    54 
    55     if (MessagePort* port = thisObject->impl().port())
     49    if (MessagePort* port = impl().port())
    5650        visitor.addOpaqueRoot(port);
    5751}
  • trunk/Source/WebCore/bindings/js/JSStyleSheetCustom.cpp

    r166128 r167794  
    2727#include "JSStyleSheet.h"
    2828
    29 #include "CSSStyleSheet.h"
    30 #include "Node.h"
    3129#include "JSCSSStyleSheet.h"
    32 #include "JSNode.h"
    33 
    34 using namespace JSC;
    3530
    3631namespace WebCore {
    3732
    38 void JSStyleSheet::visitChildren(JSCell* cell, SlotVisitor& visitor)
     33void JSStyleSheet::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    3934{
    40     JSStyleSheet* thisObject = jsCast<JSStyleSheet*>(cell);
    41     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    42     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(thisObject, visitor);
    45     visitor.addOpaqueRoot(root(&thisObject->impl()));
     35    visitor.addOpaqueRoot(root(&impl()));
    4636}
    4737
    48 JSValue toJS(ExecState*, JSDOMGlobalObject* globalObject, StyleSheet* styleSheet)
     38JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject* globalObject, StyleSheet* styleSheet)
    4939{
    5040    if (!styleSheet)
    51         return jsNull();
     41        return JSC::jsNull();
    5242
    53     JSObject* wrapper = getCachedWrapper(globalObject->world(), styleSheet);
    54     if (wrapper)
     43    if (JSC::JSObject* wrapper = getCachedWrapper(globalObject->world(), styleSheet))
    5544        return wrapper;
    5645
    5746    if (styleSheet->isCSSStyleSheet())
    58         wrapper = CREATE_DOM_WRAPPER(globalObject, CSSStyleSheet, styleSheet);
    59     else
    60         wrapper = CREATE_DOM_WRAPPER(globalObject, StyleSheet, styleSheet);
     47        return CREATE_DOM_WRAPPER(globalObject, CSSStyleSheet, styleSheet);
    6148
    62     return wrapper;
     49    return CREATE_DOM_WRAPPER(globalObject, StyleSheet, styleSheet);
    6350}
    6451
  • trunk/Source/WebCore/bindings/js/JSTextTrackCueCustom.cpp

    r166128 r167794  
    2828#if ENABLE(VIDEO_TRACK)
    2929
     30#include "JSTextTrackCue.h"
     31
    3032#include "JSDataCue.h"
    31 #include "JSTextTrackCue.h"
    3233#include "JSTrackCustom.h"
    3334#include "JSVTTCue.h"
     
    8283}
    8384
    84 void JSTextTrackCue::visitChildren(JSCell* cell, SlotVisitor& visitor)
     85void JSTextTrackCue::visitAdditionalChildren(SlotVisitor& visitor)
    8586{
    86     JSTextTrackCue* jsTextTrackCue = jsCast<JSTextTrackCue*>(cell);
    87     ASSERT_GC_OBJECT_INHERITS(jsTextTrackCue, info());
    88     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    89     ASSERT(jsTextTrackCue->structure()->typeInfo().overridesVisitChildren());
    90     Base::visitChildren(jsTextTrackCue, visitor);
    91 
    92     // Mark the cue's track root if it has one.
    93     TextTrackCue& textTrackCue = jsTextTrackCue->impl();
    94     if (TextTrack* textTrack = textTrackCue.track())
     87    if (TextTrack* textTrack = impl().track())
    9588        visitor.addOpaqueRoot(root(textTrack));
    96    
    97     textTrackCue.visitJSEventListeners(visitor);
    9889}
    9990
  • trunk/Source/WebCore/bindings/js/JSTextTrackCustom.cpp

    r165676 r167794  
    2727
    2828#if ENABLE(VIDEO_TRACK)
     29
    2930#include "JSTextTrack.h"
     31
    3032#include "JSTextTrackCueList.h"
    3133#include "JSTrackCustom.h"
     
    3537namespace WebCore {
    3638
    37 void JSTextTrack::visitChildren(JSCell* cell, SlotVisitor& visitor)
     39void JSTextTrack::visitAdditionalChildren(SlotVisitor& visitor)
    3840{
    39     JSTextTrack* jsTextTrack = jsCast<JSTextTrack*>(cell);
    40     ASSERT_GC_OBJECT_INHERITS(jsTextTrack, info());
    41     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    42     ASSERT(jsTextTrack->structure()->typeInfo().overridesVisitChildren());
    43     Base::visitChildren(jsTextTrack, visitor);
    44 
    45     TextTrack& textTrack = jsTextTrack->impl();
    46     visitor.addOpaqueRoot(root(&textTrack));
    47 
    48     textTrack.visitJSEventListeners(visitor);
     41    visitor.addOpaqueRoot(root(&impl()));
    4942}
    5043
  • trunk/Source/WebCore/bindings/js/JSTextTrackListCustom.cpp

    r165676 r167794  
    2727
    2828#if ENABLE(VIDEO_TRACK)
     29
    2930#include "JSTextTrackList.h"
    3031
     
    3637namespace WebCore {
    3738
    38 void JSTextTrackList::visitChildren(JSCell* cell, SlotVisitor& visitor)
     39void JSTextTrackList::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    3940{
    40     JSTextTrackList* jsTextTrackList = jsCast<JSTextTrackList*>(cell);
    41     ASSERT_GC_OBJECT_INHERITS(jsTextTrackList, info());
    42     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(jsTextTrackList->structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(jsTextTrackList, visitor);
    45    
    46     TextTrackList& textTrackList = jsTextTrackList->impl();
    47     visitor.addOpaqueRoot(root(textTrackList.element()));
    48     textTrackList.visitJSEventListeners(visitor);
     41    visitor.addOpaqueRoot(root(impl().element()));
    4942}
    5043   
  • trunk/Source/WebCore/bindings/js/JSTreeWalkerCustom.cpp

    r154038 r167794  
    2121#include "JSTreeWalker.h"
    2222
    23 #include "JSNode.h"
    2423#include "Node.h"
    25 #include "NodeFilter.h"
    26 #include "TreeWalker.h"
    27 
    28 using namespace JSC;
    2924
    3025namespace WebCore {
    3126
    32 void JSTreeWalker::visitChildren(JSCell* cell, SlotVisitor& visitor)
     27void JSTreeWalker::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    3328{
    34     JSTreeWalker* thisObject = jsCast<JSTreeWalker*>(cell);
    35     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    36     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    37     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    38     Base::visitChildren(thisObject, visitor);
    39 
    40     if (NodeFilter* filter = thisObject->m_impl->filter())
     29    if (NodeFilter* filter = impl().filter())
    4130        visitor.addOpaqueRoot(filter);
    4231}
  • trunk/Source/WebCore/bindings/js/JSVideoTrackCustom.cpp

    r165676 r167794  
    3636namespace WebCore {
    3737
    38 void JSVideoTrack::visitChildren(JSCell* cell, SlotVisitor& visitor)
     38void JSVideoTrack::visitAdditionalChildren(SlotVisitor& visitor)
    3939{
    40     JSVideoTrack* jsVideoTrack = jsCast<JSVideoTrack*>(cell);
    41     ASSERT_GC_OBJECT_INHERITS(jsVideoTrack, info());
    42     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(jsVideoTrack->structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(jsVideoTrack, visitor);
    45 
    46     VideoTrack& videoTrack = jsVideoTrack->impl();
    47     visitor.addOpaqueRoot(root(&videoTrack));
     40    visitor.addOpaqueRoot(root(&impl()));
    4841}
    4942
  • trunk/Source/WebCore/bindings/js/JSVideoTrackListCustom.cpp

    r165676 r167794  
    2727
    2828#if ENABLE(VIDEO_TRACK)
     29
    2930#include "JSVideoTrackList.h"
    3031
    31 #include "Element.h"
    3232#include "JSNodeCustom.h"
    3333
     
    3636namespace WebCore {
    3737
    38 void JSVideoTrackList::visitChildren(JSCell* cell, SlotVisitor& visitor)
     38void JSVideoTrackList::visitAdditionalChildren(SlotVisitor& visitor)
    3939{
    40     JSVideoTrackList* jsVideoTrackList = jsCast<JSVideoTrackList*>(cell);
    41     ASSERT_GC_OBJECT_INHERITS(jsVideoTrackList, info());
    42     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(jsVideoTrackList->structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(jsVideoTrackList, visitor);
    45 
    46     VideoTrackList& videoTrackList = jsVideoTrackList->impl();
    47     visitor.addOpaqueRoot(root(videoTrackList.element()));
    48     videoTrackList.visitJSEventListeners(visitor);
     40    visitor.addOpaqueRoot(root(impl().element()));
    4941}
    5042
  • trunk/Source/WebCore/bindings/js/JSWebGLRenderingContextCustom.cpp

    r165676 r167794  
    243243}
    244244
    245 void JSWebGLRenderingContext::visitChildren(JSCell* cell, SlotVisitor& visitor)
    246 {
    247     JSWebGLRenderingContext* thisObject = jsCast<JSWebGLRenderingContext*>(cell);
    248     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    249     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    250     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    251     Base::visitChildren(thisObject, visitor);
    252     visitor.addOpaqueRoot(&thisObject->impl());
     245void JSWebGLRenderingContext::visitAdditionalChildren(SlotVisitor& visitor)
     246{
     247    visitor.addOpaqueRoot(&impl());
    253248}
    254249
  • trunk/Source/WebCore/bindings/js/JSWorkerGlobalScopeCustom.cpp

    r165914 r167794  
    5252namespace WebCore {
    5353
    54 void JSWorkerGlobalScope::visitChildren(JSCell* cell, SlotVisitor& visitor)
     54void JSWorkerGlobalScope::visitAdditionalChildren(SlotVisitor& visitor)
    5555{
    56     JSWorkerGlobalScope* thisObject = jsCast<JSWorkerGlobalScope*>(cell);
    57     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    58     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    59     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    60     Base::visitChildren(thisObject, visitor);
    61 
    62     if (WorkerLocation* location = thisObject->impl().optionalLocation())
     56    if (WorkerLocation* location = impl().optionalLocation())
    6357        visitor.addOpaqueRoot(location);
    64     if (WorkerNavigator* navigator = thisObject->impl().optionalNavigator())
     58    if (WorkerNavigator* navigator = impl().optionalNavigator())
    6559        visitor.addOpaqueRoot(navigator);
    66 
    67     thisObject->impl().visitJSEventListeners(visitor);
    6860}
    6961
  • trunk/Source/WebCore/bindings/js/JSXMLHttpRequestCustom.cpp

    r165676 r167794  
    5757namespace WebCore {
    5858
    59 void JSXMLHttpRequest::visitChildren(JSCell* cell, SlotVisitor& visitor)
    60 {
    61     JSXMLHttpRequest* thisObject = jsCast<JSXMLHttpRequest*>(cell);
    62     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    63     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    64     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    65     Base::visitChildren(thisObject, visitor);
    66 
    67     if (XMLHttpRequestUpload* upload = thisObject->m_impl->optionalUpload())
     59void JSXMLHttpRequest::visitAdditionalChildren(SlotVisitor& visitor)
     60{
     61    if (XMLHttpRequestUpload* upload = impl().optionalUpload())
    6862        visitor.addOpaqueRoot(upload);
    6963
    70     if (Document* responseDocument = thisObject->m_impl->optionalResponseXML())
     64    if (Document* responseDocument = impl().optionalResponseXML())
    7165        visitor.addOpaqueRoot(responseDocument);
    7266
    73     if (ArrayBuffer* responseArrayBuffer = thisObject->m_impl->optionalResponseArrayBuffer())
     67    if (ArrayBuffer* responseArrayBuffer = impl().optionalResponseArrayBuffer())
    7468        visitor.addOpaqueRoot(responseArrayBuffer);
    7569
    76     if (Blob* responseBlob = thisObject->m_impl->optionalResponseBlob())
     70    if (Blob* responseBlob = impl().optionalResponseBlob())
    7771        visitor.addOpaqueRoot(responseBlob);
    7872
    79     if (thisObject->m_response)
    80         visitor.append(&thisObject->m_response);
    81 
    82     thisObject->m_impl->visitJSEventListeners(visitor);
     73    if (m_response)
     74        visitor.append(&m_response);
    8375}
    8476
  • trunk/Source/WebCore/bindings/js/JSXPathResultCustom.cpp

    r157215 r167794  
    2727#include "JSXPathResult.h"
    2828
    29 #include "JSDOMBinding.h"
    3029#include "JSNodeCustom.h"
    31 #include "XPathResult.h"
    3230#include "XPathValue.h"
    33 
    34 using namespace JSC;
    3531
    3632namespace WebCore {
    3733
    38 void JSXPathResult::visitChildren(JSCell* cell, SlotVisitor& visitor)
     34void JSXPathResult::visitAdditionalChildren(JSC::SlotVisitor& visitor)
    3935{
    40     JSXPathResult* thisObject = jsCast<JSXPathResult*>(cell);
    41     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    42     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
    43     ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
    44     Base::visitChildren(thisObject, visitor);
    45 
    46     const XPath::Value& xpathValue = thisObject->impl().value();
    47     if (xpathValue.isNodeSet()) {
    48         const XPath::NodeSet& nodesToMark = xpathValue.toNodeSet();
    49         for (size_t i = 0; i < nodesToMark.size(); ++i) {
    50             Node* node = nodesToMark[i];
    51             visitor.addOpaqueRoot(root(node));
    52         }
     36    auto& value = impl().value();
     37    if (value.isNodeSet()) {
     38        for (auto& node : value.toNodeSet())
     39            visitor.addOpaqueRoot(root(node.get()));
    5340    }
    5441}
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r167466 r167794  
    767767    my $interface = shift;
    768768    return $interface->extendedAttributes->{"JSCustomMarkFunction"}
    769     || $interface->extendedAttributes->{"EventTarget"}
    770     || $interface->name eq "EventTarget"
    771     || $interface->extendedAttributes->{"ReportExtraMemoryCost"};
     769        || $interface->extendedAttributes->{"EventTarget"}
     770        || $interface->name eq "EventTarget"
     771        || $interface->extendedAttributes->{"ReportExtraMemoryCost"};
    772772}
    773773
     
    10181018    # visit function
    10191019    if ($needsVisitChildren) {
    1020         push(@headerContent, "    static void visitChildren(JSCell*, JSC::SlotVisitor&);\n\n");
     1020        push(@headerContent, "    static void visitChildren(JSCell*, JSC::SlotVisitor&);\n");
     1021        push(@headerContent, "    void visitAdditionalChildren(JSC::SlotVisitor&);\n") if $interface->extendedAttributes->{"JSCustomMarkFunction"};
     1022        push(@headerContent, "\n");
    10211023        $structureFlags{"JSC::OverridesVisitChildren"} = 1;
    10221024    }
     
    27772779    }
    27782780
    2779     if ($needsVisitChildren && !$interface->extendedAttributes->{"JSCustomMarkFunction"}) {
     2781    if ($needsVisitChildren) {
    27802782        push(@implContent, "void ${className}::visitChildren(JSCell* cell, SlotVisitor& visitor)\n");
    27812783        push(@implContent, "{\n");
     
    27882790            push(@implContent, "    thisObject->impl().visitJSEventListeners(visitor);\n");
    27892791        }
     2792        push(@implContent, "    thisObject->visitAdditionalChildren(visitor);\n") if $interface->extendedAttributes->{"JSCustomMarkFunction"};
    27902793        if ($interface->extendedAttributes->{"ReportExtraMemoryCost"}) {
    27912794            push(@implContent, "    visitor.reportExtraMemoryUsage(cell, thisObject->impl().memoryCost());\n");
Note: See TracChangeset for help on using the changeset viewer.