Reviewed by Darin.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 6 May 2005 20:40:55 +0000 (20:40 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 6 May 2005 20:40:55 +0000 (20:40 +0000)
<rdar://problem/4058167> Unit Converter and Weather widgets crashed in KJS::Collector::markCurrentThreadConservatively

Avoid possibly allocating new prototype objects as parameters to
superclass constructors - there may be an allocated but
uninitilized object so this is a bad time to allocate. Instead,
set the prototype in the constructor body, since the object is
happily allocated by then.

* khtml/ecma/kjs_binding.h:
        * khtml/ecma/kjs_css.cpp:
        (DOMCSSStyleDeclaration::DOMCSSStyleDeclaration):
        (DOMMediaList::DOMMediaList):
        (DOMCSSStyleSheet::DOMCSSStyleSheet):
        (DOMCSSPrimitiveValue::DOMCSSPrimitiveValue):
        (DOMCSSValueList::DOMCSSValueList):
        * khtml/ecma/kjs_css.h:
        (KJS::DOMStyleSheet::DOMStyleSheet):
        (KJS::DOMCSSValue::DOMCSSValue):
        * khtml/ecma/kjs_dom.cpp:
        (DOMNode::DOMNode):
        (DOMDocument::DOMDocument):
        (DOMElement::DOMElement):
        (DOMDOMImplementation::DOMDOMImplementation):
        (DOMNamedNodeMap::DOMNamedNodeMap):
        (DOMNamedNodesCollection::DOMNamedNodesCollection):
        (DOMCharacterData::DOMCharacterData):
        (DOMText::DOMText):
        * khtml/ecma/kjs_dom.h:
        (KJS::NodeConstructor::NodeConstructor):
        (KJS::DOMExceptionConstructor::DOMExceptionConstructor):
        * khtml/ecma/kjs_events.cpp:
        (DOMEvent::DOMEvent):
        (Clipboard::Clipboard):
        * khtml/ecma/kjs_html.cpp:
        (HTMLCollection::HTMLCollection):
        * khtml/ecma/kjs_range.cpp:
        (DOMRange::DOMRange):
        * khtml/ecma/kjs_traversal.cpp:
        (DOMNodeIterator::DOMNodeIterator):
        (DOMNodeFilter::DOMNodeFilter):
        (DOMTreeWalker::DOMTreeWalker):
        * khtml/ecma/xmlhttprequest.cpp:
        (KJS::XMLHttpRequest::XMLHttpRequest):
        * khtml/ecma/xmlserializer.cpp:
        (KJS::XMLSerializer::XMLSerializer):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9129 268f45cc-cd09-0410-ab3c-d52691b4dbfc

12 files changed:
WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/kjs_binding.h
WebCore/khtml/ecma/kjs_css.cpp
WebCore/khtml/ecma/kjs_css.h
WebCore/khtml/ecma/kjs_dom.cpp
WebCore/khtml/ecma/kjs_dom.h
WebCore/khtml/ecma/kjs_events.cpp
WebCore/khtml/ecma/kjs_html.cpp
WebCore/khtml/ecma/kjs_range.cpp
WebCore/khtml/ecma/kjs_traversal.cpp
WebCore/khtml/ecma/xmlhttprequest.cpp
WebCore/khtml/ecma/xmlserializer.cpp

index 711d9940e730bf17c5ef1b9f2b5a2f8c9489ce5e..be3fe2631a3036554b8acfd1b2724d3dd0564e26 100644 (file)
@@ -1,3 +1,53 @@
+2005-05-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+
+       <rdar://problem/4058167> Unit Converter and Weather widgets crashed in KJS::Collector::markCurrentThreadConservatively
+        
+       Avoid possibly allocating new prototype objects as parameters to
+       superclass constructors - there may be an allocated but
+       uninitilized object so this is a bad time to allocate. Instead,
+       set the prototype in the constructor body, since the object is
+       happily allocated by then.
+
+       * khtml/ecma/kjs_binding.h:
+        * khtml/ecma/kjs_css.cpp:
+        (DOMCSSStyleDeclaration::DOMCSSStyleDeclaration):
+        (DOMMediaList::DOMMediaList):
+        (DOMCSSStyleSheet::DOMCSSStyleSheet):
+        (DOMCSSPrimitiveValue::DOMCSSPrimitiveValue):
+        (DOMCSSValueList::DOMCSSValueList):
+        * khtml/ecma/kjs_css.h:
+        (KJS::DOMStyleSheet::DOMStyleSheet):
+        (KJS::DOMCSSValue::DOMCSSValue):
+        * khtml/ecma/kjs_dom.cpp:
+        (DOMNode::DOMNode):
+        (DOMDocument::DOMDocument):
+        (DOMElement::DOMElement):
+        (DOMDOMImplementation::DOMDOMImplementation):
+        (DOMNamedNodeMap::DOMNamedNodeMap):
+        (DOMNamedNodesCollection::DOMNamedNodesCollection):
+        (DOMCharacterData::DOMCharacterData):
+        (DOMText::DOMText):
+        * khtml/ecma/kjs_dom.h:
+        (KJS::NodeConstructor::NodeConstructor):
+        (KJS::DOMExceptionConstructor::DOMExceptionConstructor):
+        * khtml/ecma/kjs_events.cpp:
+        (DOMEvent::DOMEvent):
+        (Clipboard::Clipboard):
+        * khtml/ecma/kjs_html.cpp:
+        (HTMLCollection::HTMLCollection):
+        * khtml/ecma/kjs_range.cpp:
+        (DOMRange::DOMRange):
+        * khtml/ecma/kjs_traversal.cpp:
+        (DOMNodeIterator::DOMNodeIterator):
+        (DOMNodeFilter::DOMNodeFilter):
+        (DOMTreeWalker::DOMTreeWalker):
+        * khtml/ecma/xmlhttprequest.cpp:
+        (KJS::XMLHttpRequest::XMLHttpRequest):
+        * khtml/ecma/xmlserializer.cpp:
+        (KJS::XMLSerializer::XMLSerializer):
+
 2005-05-06  Darin Adler  <darin@apple.com>
 
         Reviewed by Maciej.
         * khtml/editing/htmlediting.cpp:
         (khtml::EditCommandPtr::setEndingSelection):
 
+>>>>>>> 1.4172
 2005-05-02  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Vicki.
index d9a5df20d63cd182078c4a1554898955d2f403e3..f4ecca264131ecd3c34fc87443c97d37b044899b 100644 (file)
@@ -46,7 +46,6 @@ namespace KJS {
    */
   class DOMObject : public ObjectImp {
   public:
-    DOMObject(const Object &proto) : ObjectImp(proto) {}
     DOMObject() : ObjectImp() {}
     virtual Value get(ExecState *exec, const Identifier &propertyName) const;
     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const
index 1b15515f165f692e7845781c36c8e00d31f2df9f..b43da37d473c3b6bcffddb0afda73d0cfb36a301 100644 (file)
@@ -86,8 +86,10 @@ IMPLEMENT_PROTOTYPE(DOMCSSStyleDeclarationProto, DOMCSSStyleDeclarationProtoFunc
 const ClassInfo DOMCSSStyleDeclaration::info = { "CSSStyleDeclaration", 0, &DOMCSSStyleDeclarationTable, 0 };
 
 DOMCSSStyleDeclaration::DOMCSSStyleDeclaration(ExecState *exec, DOM::CSSStyleDeclaration s)
-  : DOMObject(DOMCSSStyleDeclarationProto::self(exec)), styleDecl(s)
-{ }
+  : styleDecl(s)
+{ 
+  setPrototype(DOMCSSStyleDeclarationProto::self(exec));
+}
 
 DOMCSSStyleDeclaration::~DOMCSSStyleDeclaration()
 {
@@ -419,7 +421,10 @@ IMPLEMENT_PROTOFUNC(DOMMediaListProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMMediaListProto, DOMMediaListProtoFunc)
 
 DOMMediaList::DOMMediaList(ExecState *exec, DOM::MediaList ml)
-  : DOMObject(DOMMediaListProto::self(exec)), mediaList(ml) { }
+  : mediaList(ml)
+{
+  setPrototype(DOMMediaListProto::self(exec));
+}
 
 DOMMediaList::~DOMMediaList()
 {
@@ -499,7 +504,10 @@ IMPLEMENT_PROTOFUNC(DOMCSSStyleSheetProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMCSSStyleSheetProto,DOMCSSStyleSheetProtoFunc) // warning, use _WITH_PARENT if DOMStyleSheet gets a proto
 
 DOMCSSStyleSheet::DOMCSSStyleSheet(ExecState *exec, DOM::CSSStyleSheet ss)
-  : DOMStyleSheet(DOMCSSStyleSheetProto::self(exec),ss) { }
+  : DOMStyleSheet(ss) 
+{
+  setPrototype(DOMCSSStyleSheetProto::self(exec));
+}
 
 DOMCSSStyleSheet::~DOMCSSStyleSheet()
 {
@@ -969,7 +977,10 @@ IMPLEMENT_PROTOFUNC(DOMCSSPrimitiveValueProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMCSSPrimitiveValueProto,DOMCSSPrimitiveValueProtoFunc)
 
 DOMCSSPrimitiveValue::DOMCSSPrimitiveValue(ExecState *exec, DOM::CSSPrimitiveValue v)
-  : DOMCSSValue(DOMCSSPrimitiveValueProto::self(exec), v) { }
+  : DOMCSSValue(v) 
+{ 
+  setPrototype(DOMCSSPrimitiveValueProto::self(exec));
+}
 
 Value DOMCSSPrimitiveValue::tryGet(ExecState *exec, const Identifier &p) const
 {
@@ -1072,7 +1083,9 @@ const ClassInfo DOMCSSValueList::info = { "CSSValueList", 0, &DOMCSSValueListTab
 IMPLEMENT_PROTOFUNC(DOMCSSValueListFunc) // not really a proto, but doesn't matter
 
 DOMCSSValueList::DOMCSSValueList(ExecState *exec, DOM::CSSValueList v)
-  : DOMCSSValue(exec, v) { }
+  : DOMCSSValue(exec, v) 
+{ 
+}
 
 Value DOMCSSValueList::tryGet(ExecState *exec, const Identifier &p) const
 {
index 4136d2c98b70822be55d31de1921db39c7d3486a..c82e656a0cfb30823134c6778619196088bab260 100644 (file)
@@ -57,7 +57,7 @@ namespace KJS {
     // Build a DOMStyleSheet
     DOMStyleSheet(ExecState *, DOM::StyleSheet ss) : styleSheet(ss) { }
     // Constructor for inherited classes
-    DOMStyleSheet(Object proto, DOM::StyleSheet ss) : DOMObject(proto), styleSheet(ss) { }
+    DOMStyleSheet(DOM::StyleSheet ss) : styleSheet(ss) { }
     virtual ~DOMStyleSheet();
     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
@@ -184,7 +184,7 @@ namespace KJS {
   class DOMCSSValue : public DOMObject {
   public:
     DOMCSSValue(ExecState *, DOM::CSSValue v) : cssValue(v) { }
-    DOMCSSValue(Object proto, DOM::CSSValue v) : DOMObject(proto), cssValue(v) { }
+    DOMCSSValue(DOM::CSSValue v) : cssValue(v) { }
     virtual ~DOMCSSValue();
     virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
index 5854ab85cfaff43af40314448642e1967f6a6ec7..12e1b442604ed58be6613562784089701e291b49 100644 (file)
@@ -82,12 +82,13 @@ IMPLEMENT_PROTOTYPE(DOMNodeProto,DOMNodeProtoFunc)
 const ClassInfo DOMNode::info = { "Node", 0, &DOMNodeTable, 0 };
 
 DOMNode::DOMNode(ExecState *exec, const DOM::Node &n)
-  : DOMObject(DOMNodeProto::self(exec)), node(n)
+  : node(n)
 {
+  setPrototype(DOMNodeProto::self(exec));
 }
 
-DOMNode::DOMNode(const Object &proto, const DOM::Node &n)
-  : DOMObject(proto), node(n)
+DOMNode::DOMNode(const DOM::Node &n)
+  : node(n)
 {
 }
 
@@ -830,10 +831,15 @@ const ClassInfo DOMDocument::info = { "Document", &DOMNode::info, &DOMDocumentTa
 */
 
 DOMDocument::DOMDocument(ExecState *exec, const DOM::Document &d)
-  : DOMNode(DOMDocumentProto::self(exec), d) { }
+  : DOMNode(d) 
+{ 
+  setPrototype(DOMDocumentProto::self(exec));
+}
 
-DOMDocument::DOMDocument(const Object &proto, const DOM::Document &d)
-  : DOMNode(proto, d) { }
+DOMDocument::DOMDocument(const DOM::Document &d)
+  : DOMNode(d) 
+{ 
+}
 
 DOMDocument::~DOMDocument()
 {
@@ -1053,10 +1059,15 @@ const ClassInfo DOMElement::info = { "Element", &DOMNode::info, &DOMElementTable
 @end
 */
 DOMElement::DOMElement(ExecState *exec, const DOM::Element &e)
-  : DOMNode(DOMElementProto::self(exec), e) { }
+  : DOMNode(e) 
+{
+  setPrototype(DOMElementProto::self(exec));
+}
 
-DOMElement::DOMElement(const Object &proto, const DOM::Element &e)
-  : DOMNode(proto, e) { }
+DOMElement::DOMElement(const DOM::Element &e)
+  : DOMNode(e) 
+{ 
+}
 
 Value DOMElement::tryGet(ExecState *exec, const Identifier &propertyName) const
 {
@@ -1184,7 +1195,10 @@ IMPLEMENT_PROTOTYPE(DOMDOMImplementationProto,DOMDOMImplementationProtoFunc)
 const ClassInfo DOMDOMImplementation::info = { "DOMImplementation", 0, 0, 0 };
 
 DOMDOMImplementation::DOMDOMImplementation(ExecState *exec, const DOM::DOMImplementation &i)
-  : DOMObject(DOMDOMImplementationProto::self(exec)), implementation(i) { }
+  : implementation(i) 
+{ 
+  setPrototype(DOMDOMImplementationProto::self(exec));
+}
 
 DOMDOMImplementation::~DOMDOMImplementation()
 {
@@ -1284,7 +1298,10 @@ IMPLEMENT_PROTOTYPE(DOMNamedNodeMapProto,DOMNamedNodeMapProtoFunc)
 const ClassInfo DOMNamedNodeMap::info = { "NamedNodeMap", 0, 0, 0 };
 
 DOMNamedNodeMap::DOMNamedNodeMap(ExecState *exec, const DOM::NamedNodeMap &m)
-  : DOMObject(DOMNamedNodeMapProto::self(exec)), map(m) { }
+  : map(m) 
+{ 
+  setPrototype(DOMNamedNodeMapProto::self(exec));
+}
 
 DOMNamedNodeMap::~DOMNamedNodeMap()
 {
@@ -1746,7 +1763,7 @@ Object KJS::getDOMExceptionConstructor(ExecState *exec)
 // for constructs like document.forms.<name>[1],
 // so it shouldn't be a problem that it's storing all the nodes (with the same name). (David)
 DOMNamedNodesCollection::DOMNamedNodesCollection(ExecState *, const QValueList<DOM::Node>& nodes )
-  : DOMObject(), m_nodes(nodes)
+  : m_nodes(nodes)
 {
   // Maybe we should ref (and deref in the dtor) the nodes, though ?
 }
@@ -1809,10 +1826,15 @@ IMPLEMENT_PROTOFUNC(DOMCharacterDataProtoFunc)
 IMPLEMENT_PROTOTYPE_WITH_PARENT(DOMCharacterDataProto,DOMCharacterDataProtoFunc, DOMNodeProto)
 
 DOMCharacterData::DOMCharacterData(ExecState *exec, const DOM::CharacterData &d)
- : DOMNode(DOMCharacterDataProto::self(exec), d) {}
+ : DOMNode(d) 
+{
+  setPrototype(DOMCharacterDataProto::self(exec));
+}
 
-DOMCharacterData::DOMCharacterData(const Object &proto, const DOM::CharacterData &d)
- : DOMNode(proto, d) {}
+DOMCharacterData::DOMCharacterData(const DOM::CharacterData &d)
+ : DOMNode(d) 
+{
+}
 
 Value DOMCharacterData::tryGet(ExecState *exec, const Identifier &p) const
 {
@@ -1898,7 +1920,10 @@ IMPLEMENT_PROTOFUNC(DOMTextProtoFunc)
 IMPLEMENT_PROTOTYPE_WITH_PARENT(DOMTextProto,DOMTextProtoFunc,DOMCharacterDataProto)
 
 DOMText::DOMText(ExecState *exec, const DOM::Text &t)
-  : DOMCharacterData(DOMTextProto::self(exec), t) { }
+  : DOMCharacterData(t) 
+{ 
+  setPrototype(DOMTextProto::self(exec));
+}
 
 Value DOMText::tryGet(ExecState *exec, const Identifier &p) const
 {
index a5b754063361e3ab5d370f8967662412320450a2..4edb5d84707ba9ee68b8560490d92060781a784e 100644 (file)
@@ -38,7 +38,7 @@ namespace KJS {
     // Build a DOMNode
     DOMNode(ExecState *exec, const DOM::Node &n);
     // Constructor for inherited classes
-    DOMNode(const Object &proto, const DOM::Node &n);
+    DOMNode(const DOM::Node &n);
     virtual bool toBoolean(ExecState *) const;
     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
@@ -110,7 +110,7 @@ namespace KJS {
     // Build a DOMDocument
     DOMDocument(ExecState *exec, const DOM::Document &d);
     // Constructor for inherited classes
-    DOMDocument(const Object &proto, const DOM::Document &d);
+    DOMDocument(const DOM::Document &d);
     ~DOMDocument();
     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
@@ -148,7 +148,7 @@ namespace KJS {
     // Build a DOMElement
     DOMElement(ExecState *exec, const DOM::Element &e);
     // Constructor for inherited classes
-    DOMElement(const Object &proto, const DOM::Element &e);
+    DOMElement(const DOM::Element &e);
     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     // no put - all read-only
     virtual const ClassInfo* classInfo() const { return &info; }
@@ -241,7 +241,7 @@ namespace KJS {
   // Constructor for Node - constructor stuff not implemented yet
   class NodeConstructor : public DOMObject {
   public:
-    NodeConstructor(ExecState *) : DOMObject() { }
+    NodeConstructor(ExecState *) { }
     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
@@ -252,7 +252,7 @@ namespace KJS {
   // Constructor for DOMException - constructor stuff not implemented yet
   class DOMExceptionConstructor : public DOMObject {
   public:
-    DOMExceptionConstructor(ExecState *) : DOMObject() { }
+    DOMExceptionConstructor(ExecState *) { }
     virtual Value tryGet(ExecState *exec, const Identifier &propertyName) const;
     Value getValueProperty(ExecState *exec, int token) const;
     // no put - all read-only
@@ -287,7 +287,7 @@ namespace KJS {
     // Build a DOMCharacterData
     DOMCharacterData(ExecState *exec, const DOM::CharacterData &d);
     // Constructor for inherited classes
-    DOMCharacterData(const Object &proto, const DOM::CharacterData &d);
+    DOMCharacterData(const DOM::CharacterData &d);
     virtual Value tryGet(ExecState *exec,const Identifier &propertyName) const;
     Value getValueProperty(ExecState *, int token) const;
     virtual void tryPut(ExecState *exec, const Identifier &propertyName, const Value& value, int attr = None);
index fea10736d47cf5e6150d1a631bc6b0bca4df83f8..7541339203f7df4edf9e609bfa414f8967e885d0 100644 (file)
@@ -385,7 +385,10 @@ IMPLEMENT_PROTOFUNC(DOMEventProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMEventProto, DOMEventProtoFunc)
 
 DOMEvent::DOMEvent(ExecState *exec, DOM::Event e)
-  : DOMObject(DOMEventProto::self(exec)), event(e), clipboard(0) { }
+  : event(e), clipboard(0) 
+{
+  setPrototype(DOMEventProto::self(exec));
+}
 
 DOMEvent::~DOMEvent()
 {
@@ -1085,8 +1088,10 @@ IMPLEMENT_PROTOFUNC(ClipboardProtoFunc)
 IMPLEMENT_PROTOTYPE(ClipboardProto, ClipboardProtoFunc)
 
 Clipboard::Clipboard(ExecState *exec, DOM::ClipboardImpl *cb)
-: DOMObject(ClipboardProto::self(exec)), clipboard(cb)
+  : clipboard(cb)
 {
+    setPrototype(ClipboardProto::self(exec));
+  
     if (clipboard)
         clipboard->ref();
 }
index e57bec087439c2f17a6f464566d9a95cb494e35b..63bdc5dea18572d7560ff7b7f2493ed53ee17872 100644 (file)
@@ -3066,7 +3066,10 @@ IMPLEMENT_PROTOTYPE(HTMLCollectionProto,HTMLCollectionProtoFunc)
 const ClassInfo HTMLCollection::info = { "HTMLCollection", 0, 0, 0 };
 
 HTMLCollection::HTMLCollection(ExecState *exec, const DOM::HTMLCollection &c)
-  : DOMObject(HTMLCollectionProto::self(exec)), collection(c) {}
+  : collection(c) 
+{
+  setPrototype(HTMLCollectionProto::self(exec));
+}
 
 HTMLCollection::~HTMLCollection()
 {
index c538b28e788e0fa95f152a7eca4e0101cde16849..1b2ec6d082ff0f0e61bd232ece63bb4593945409 100644 (file)
@@ -64,7 +64,10 @@ IMPLEMENT_PROTOFUNC(DOMRangeProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMRangeProto,DOMRangeProtoFunc)
 
 DOMRange::DOMRange(ExecState *exec, DOM::Range r)
- : DOMObject(DOMRangeProto::self(exec)), range(r) {}
+ : range(r) 
+{
+  setPrototype(DOMRangeProto::self(exec));
+}
 
 DOMRange::~DOMRange()
 {
index 09a28faca42f3cf50fd0fb27c606d017e0feb415..e9075e6f9f957225a40a6fb8ef416bcee7a74e4d 100644 (file)
@@ -52,7 +52,10 @@ IMPLEMENT_PROTOFUNC(DOMNodeIteratorProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMNodeIteratorProto,DOMNodeIteratorProtoFunc)
 
 DOMNodeIterator::DOMNodeIterator(ExecState *exec, DOM::NodeIterator ni)
-  : DOMObject(DOMNodeIteratorProto::self(exec)), nodeIterator(ni) {}
+  : nodeIterator(ni) 
+{
+  setPrototype(DOMNodeIteratorProto::self(exec));
+}
 
 DOMNodeIterator::~DOMNodeIterator()
 {
@@ -164,7 +167,10 @@ IMPLEMENT_PROTOFUNC(DOMNodeFilterProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMNodeFilterProto,DOMNodeFilterProtoFunc)
 
 DOMNodeFilter::DOMNodeFilter(ExecState *exec, DOM::NodeFilter nf)
-  : DOMObject(DOMNodeFilterProto::self(exec)), nodeFilter(nf) {}
+  : nodeFilter(nf) 
+{
+  setPrototype(DOMNodeFilterProto::self(exec));
+}
 
 DOMNodeFilter::~DOMNodeFilter()
 {
@@ -217,7 +223,10 @@ IMPLEMENT_PROTOFUNC(DOMTreeWalkerProtoFunc)
 IMPLEMENT_PROTOTYPE(DOMTreeWalkerProto,DOMTreeWalkerProtoFunc)
 
 DOMTreeWalker::DOMTreeWalker(ExecState *exec, DOM::TreeWalker tw)
-  : DOMObject(DOMTreeWalkerProto::self(exec)), treeWalker(tw) {}
+  : treeWalker(tw)
+{
+  setPrototype(DOMTreeWalkerProto::self(exec));
+}
 
 DOMTreeWalker::~DOMTreeWalker()
 {
index 3c91c45d19635b63ee2f271e6844e9ccf54c2f91..b6b870b2af56cee84781372ce89a5bb95d81b4d0 100644 (file)
@@ -229,8 +229,7 @@ void XMLHttpRequest::mark()
 
 
 XMLHttpRequest::XMLHttpRequest(ExecState *exec, const DOM::Document &d)
-  : DOMObject(XMLHttpRequestProto::self(exec)),
-    qObject(new XMLHttpRequestQObject(this)),
+  : qObject(new XMLHttpRequestQObject(this)),
     doc(static_cast<DOM::DocumentImpl*>(d.handle())),
     async(true),
     job(0),
@@ -241,6 +240,7 @@ XMLHttpRequest::XMLHttpRequest(ExecState *exec, const DOM::Document &d)
     createdDocument(false),
     aborted(false)
 {
+  setPrototype(XMLHttpRequestProto::self(exec));
 }
 
 XMLHttpRequest::~XMLHttpRequest()
index e096f91b6c3acf25e806da2b14e7e600bab8c2f5..9e41a67f19c46cebf3a190df260e0999db29d6f2 100644 (file)
@@ -65,8 +65,8 @@ const ClassInfo XMLSerializer::info = { "XMLSerializer", 0, &XMLSerializerTable,
 */
 
 XMLSerializer::XMLSerializer(ExecState *exec)
-  : DOMObject(XMLSerializerProto::self(exec))
 {
+  setPrototype(XMLSerializerProto::self(exec));
 }
 
 Value XMLSerializerProtoFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)