[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

kocienda kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:28:09 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit c890d0d835db2545b5e1af0290a3db1400828997
Author: kocienda <kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Mar 2 02:52:05 2004 +0000

    WebCore:
    
            Reviewed by me, changes by Darin.
    
            Yet another pass at the DOM API, this one by
            Darin to simplify the internal structure of the
            implementation. Little has changed in the API;
            much has changed in the implementation, particularly
            with regard to object creation and data storage and
            the class hierarchy.
    
            * kwq/DOM.h
            * kwq/DOM.mm
            * kwq/DOMInternal.h
            * kwq/KWQKHTMLPart.mm
            * kwq/WebCoreBridge.mm
    
    WebKit:
    
            Reviewed by me
    
            * DOM.subproj/DOM.h: Checked in header copied over
            from WebCore.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6150 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 47193a0..913dca2 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,20 @@
+2004-03-01  Ken Kocienda  <kocienda at apple.com>
+
+        Reviewed by me, changes by Darin.
+        
+        Yet another pass at the DOM API, this one by 
+        Darin to simplify the internal structure of the
+        implementation. Little has changed in the API;
+        much has changed in the implementation, particularly
+        with regard to object creation and data storage and
+        the class hierarchy.
+
+        * kwq/DOM.h
+        * kwq/DOM.mm
+        * kwq/DOMInternal.h
+        * kwq/KWQKHTMLPart.mm
+        * kwq/WebCoreBridge.mm
+
 2004-03-01  Maciej Stachowiak  <mjs at apple.com>
 
         Reviewed by NOBODY (OOPS!).
diff --git a/WebCore/kwq/DOM.h b/WebCore/kwq/DOM.h
index 1795c1f..f997918 100644
--- a/WebCore/kwq/DOM.h
+++ b/WebCore/kwq/DOM.h
@@ -23,6 +23,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
+#import <Foundation/Foundation.h>
+
 //=========================================================================
 //=========================================================================
 //=========================================================================
@@ -71,28 +73,27 @@ enum DOMErrorCode {
 
 extern NSString * const DOMErrorDomain;
 
- at class NSError;
- at class NSString;
-
- at class DOMNode;
- at class DOMNamedNodeMap;
- at class DOMNodeList;
- at class DOMDocumentFragment;
- at class DOMDocument;
- at class DOMCharacterData;
 @class DOMAttr;
- at class DOMElement;
- at class DOMText;
- at class DOMComment;
 @class DOMCDATASection;
+ at class DOMComment;
+ at class DOMDocument;
 @class DOMDocumentType;
- at class DOMNotation;
- at class DOMEntity;
+ at class DOMElement;
 @class DOMEntityReference;
+ at class DOMNamedNodeMap;
+ at class DOMNodeList;
 @class DOMProcessingInstruction;
- at class DOMRange;
+ at class DOMText;
+
+typedef struct DOMObjectInternal DOMObjectInternal;
 
- at interface DOMNode : NSObject <NSCopying>
+ at interface DOMObject : NSObject <NSCopying>
+{
+    DOMObjectInternal *_internal;
+}
+ at end
+
+ at interface DOMNode : DOMObject
 - (NSString *)nodeName;
 - (NSString *)nodeValue;
 - (void)setNodeValue:(NSString *)string error:(NSError **)error;
@@ -121,7 +122,7 @@ extern NSString * const DOMErrorDomain;
 - (NSString *)HTMLString;
 @end
 
- at interface DOMNamedNodeMap : NSObject <NSCopying>
+ at interface DOMNamedNodeMap : DOMObject
 - (DOMNode *)getNamedItem:(NSString *)name;
 - (DOMNode *)setNamedItem:(DOMNode *)arg error:(NSError **)error;
 - (DOMNode *)removeNamedItem:(NSString *)name error:(NSError **)error;
@@ -133,13 +134,13 @@ extern NSString * const DOMErrorDomain;
 @end
 
 
- at interface DOMNodeList : NSObject <NSCopying>
+ at interface DOMNodeList : DOMObject
 - (DOMNode *)item:(unsigned long)index;
 - (unsigned long)length;
 @end
 
 
- at interface DOMImplementation : NSObject <NSCopying>
+ at interface DOMImplementation : DOMObject
 - (BOOL)hasFeature:(NSString *)feature :(NSString *)version;
 - (DOMDocumentType *)createDocumentType:(NSString *)qualifiedName :(NSString *)publicId :(NSString *)systemId error:(NSError **)error;
 - (DOMDocument *)createDocument:(NSString *)namespaceURI :(NSString *)qualifiedName :(DOMDocumentType *)doctype error:(NSError **)error;
@@ -267,7 +268,7 @@ enum DOMCompareHow
     DOMCompareEndToStart   = 3,
 };
 
- at interface DOMRange : NSObject
+ at interface DOMRange : DOMObject
 - (DOMNode *)startContainer:(NSError **)error;
 - (long)startOffset:(NSError **)error;
 - (DOMNode *)endContainer:(NSError **)error;
@@ -293,4 +294,3 @@ enum DOMCompareHow
 - (NSString *)toString:(NSError **)error;
 - (void)detach:(NSError **)error;
 @end
-
diff --git a/WebCore/kwq/DOM.mm b/WebCore/kwq/DOM.mm
index e19ea64..15f0121 100644
--- a/WebCore/kwq/DOM.mm
+++ b/WebCore/kwq/DOM.mm
@@ -23,13 +23,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#import "DOM.h"
 #import "DOMInternal.h"
 
-#import <Foundation/Foundation.h>
-
-#include <objc/objc-class.h>
-
 #import <dom/dom_doc.h>
 #import <dom/dom_element.h>
 #import <dom/dom_exception.h>
@@ -47,14 +42,11 @@
 #import <xml/dom2_rangeimpl.h>
 
 #import "KWQAssertions.h"
-#import "KWQLogging.h"
 
 using DOM::Attr;
 using DOM::AttrImpl;
-using DOM::CDATASectionImpl;
 using DOM::CharacterData;
 using DOM::CharacterDataImpl;
-using DOM::CommentImpl;
 using DOM::DocumentFragmentImpl;
 using DOM::DocumentType;
 using DOM::DocumentTypeImpl;
@@ -67,7 +59,6 @@ using DOM::DOMStringImpl;
 using DOM::Element;
 using DOM::ElementImpl;
 using DOM::EntityImpl;
-using DOM::EntityReferenceImpl;
 using DOM::NamedNodeMap;
 using DOM::NamedNodeMapImpl;
 using DOM::Node;
@@ -82,158 +73,156 @@ using DOM::RangeImpl;
 using DOM::Text;
 using DOM::TextImpl;
 
- at class WebCoreDOMAttr;
- at class WebCoreDOMCDATASection;
- at class WebCoreDOMCharacterData;
- at class WebCoreDOMComment;
- at class WebCoreDOMDocumentFragment;
- at class WebCoreDOMDocumentType;
- at class WebCoreDOMDocument;
- at class WebCoreDOMImplementation;
- at class WebCoreDOMElement;
- at class WebCoreDOMEntity;
- at class WebCoreDOMEntityReference;
- at class WebCoreDOMNamedNodeMap;
- at class WebCoreDOMNode;
- at class WebCoreDOMNodeList;
- at class WebCoreDOMNotation;
- at class WebCoreDOMProcessingInstruction;
- at class WebCoreDOMRange;
- at class WebCoreDOMText;
+ at interface DOMNamedNodeMap (WebCoreInternal)
++ (DOMNamedNodeMap *)namedNodeMapWithImpl:(NamedNodeMapImpl *)impl;
+ at end
+
+ at interface DOMNodeList (WebCoreInternal)
++ (DOMNodeList *)nodeListWithImpl:(NodeListImpl *)impl;
+ at end
+
+ at interface DOMImplementation (WebCoreInternal)
++ (DOMImplementation *)DOMImplementationWithImpl:(DOMImplementationImpl *)impl;
+ at end
+
+ at interface DOMDocumentFragment (WebCoreInternal)
++ (DOMDocumentFragment *)documentFragmentWithImpl:(DocumentFragmentImpl *)impl;
+ at end
+
+ at interface DOMAttr (WebCoreInternal)
++ (DOMAttr *)attrWithImpl:(AttrImpl *)impl;
+- (AttrImpl *)attrImpl;
+ at end
+
+ at interface DOMRange (WebCoreInternal)
++ (DOMRange *)rangeWithImpl:(RangeImpl *)impl;
+ at end
 
 //------------------------------------------------------------------------------------------
 // Static functions and data
 
 NSString * const DOMErrorDomain = @"DOMErrorDomain";
 
-static CFMutableDictionaryRef wrapperCache(void)
-{
-    static CFMutableDictionaryRef wrapperCache = NULL;
-    if (!wrapperCache) {
-        // No need to retain/free either impl key, or id value.  Items will be removed
-        // from the cache in WebCoreDOMNode's dealloc method.
-        wrapperCache = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
-    }
-    return wrapperCache;
-}
+static CFMutableDictionaryRef wrapperCache = NULL;
 
 static id wrapperForImpl(const void *impl)
 {
-    return (id)CFDictionaryGetValue(wrapperCache(), impl);
+    if (!wrapperCache)
+        return nil;
+    return (id)CFDictionaryGetValue(wrapperCache, impl);
 }
 
 static void setWrapperForImpl(id wrapper, const void *impl)
 {
-    CFDictionarySetValue(wrapperCache(), impl, wrapper);
+    if (!wrapperCache) {
+        // No need to retain/free either impl key, or id value.  Items will be removed
+        // from the cache in dealloc methods.
+        wrapperCache = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
+    }
+    CFDictionarySetValue(wrapperCache, impl, wrapper);
 }
 
 static void removeWrapperForImpl(const void *impl)
 {
-    CFDictionaryRemoveValue(wrapperCache(), impl);
+    if (!wrapperCache)
+        return;
+    CFDictionaryRemoveValue(wrapperCache, impl);
 }
 
 static NSString *DOMStringToNSString(const DOMString &aString)
 {
-    return [NSString stringWithCharacters:(unichar *)aString.unicode() length:aString.length()];
+    return [NSString stringWithCharacters:reinterpret_cast<const unichar *>(aString.unicode()) length:aString.length()];
 }
 
 static DOMString NSStringToDOMString(NSString *aString)
 {
-    QChar *chars = (QChar *)malloc([aString length] * sizeof(QChar));
-    [aString getCharacters:(unichar *)chars];
-    DOMString ret(chars, [aString length]);
-    free(chars);
+    ASSERT(aString);
+
+    CFIndex size = CFStringGetLength(reinterpret_cast<CFStringRef>(aString));
+    UniChar fixedSizeBuffer[1024];
+    UniChar *buffer;
+    if (size > static_cast<CFIndex>(sizeof(fixedSizeBuffer) / sizeof(UniChar))) {
+        buffer = static_cast<UniChar *>(malloc(size * sizeof(UniChar)));
+    } else {
+        buffer = fixedSizeBuffer;
+    }
+    CFStringGetCharacters(reinterpret_cast<CFStringRef>(aString), CFRangeMake(0, size), buffer);
+    DOMString ret(reinterpret_cast<const QChar *>(buffer), (uint)size);
+    if (buffer != fixedSizeBuffer) {
+        free(buffer);
+    }
     return ret;
 }
 
 static void fillInError(NSError **error, int code)
 {
-    if (!error || !code)
+    if (!error)
         return;
-        
-    *error = [NSError errorWithDomain:DOMErrorDomain code:code userInfo:nil];
+    if (!code)
+        *error = nil;
+    else
+        *error = [NSError errorWithDomain:DOMErrorDomain code:code userInfo:nil];
 }
 
-#define AbstractMethodCalled(absClass) do { \
-	if ([self class] == absClass) \
-		[NSException raise:NSInvalidArgumentException format:@"*** -%s cannot be sent to an abstract object of class %s: You must create a concrete instance.", sel_getName(_cmd), absClass->name]; \
-	else \
-		[NSException raise:NSInvalidArgumentException format:@"*** -%s only defined for abstract class. You must define -[%s %s]", sel_getName(_cmd), object_getClassName(self), sel_getName(_cmd)]; \
-	} while (0)
-
 //------------------------------------------------------------------------------------------
 // Factory methods
 
-NodeList NodeListImpl::createInstance(NodeListImpl *impl)
-{
-    return NodeList(impl);
-}
-
-NamedNodeMap NamedNodeMapImpl::createInstance(NamedNodeMapImpl *impl)
+inline NamedNodeMap NamedNodeMapImpl::createInstance(NamedNodeMapImpl *impl)
 {
     return NamedNodeMap(impl);
 }
 
-Attr AttrImpl::createInstance(AttrImpl *impl)
+inline Attr AttrImpl::createInstance(AttrImpl *impl)
 {
     return Attr(impl);
 }
 
-Element ElementImpl::createInstance(ElementImpl *impl)
+inline Element ElementImpl::createInstance(ElementImpl *impl)
 {
     return Element(impl);
 }
 
-CharacterData CharacterDataImpl::createInstance(CharacterDataImpl *impl)
+inline DocumentType DocumentTypeImpl::createInstance(DocumentTypeImpl *impl)
 {
-    return CharacterData(impl);
+    return DocumentType(impl);
 }
 
-Text TextImpl::createInstance(TextImpl *impl)
+inline Document DocumentImpl::createInstance(DocumentImpl *impl)
 {
-    return Text(impl);
+    return Document(impl);
 }
 
-ProcessingInstruction ProcessingInstructionImpl::createInstance(ProcessingInstructionImpl *impl)
-{
-    return ProcessingInstruction(impl);
-}
+//------------------------------------------------------------------------------------------
+// DOMObject
 
-DocumentType DocumentTypeImpl::createInstance(DocumentTypeImpl *impl)
-{
-    return DocumentType(impl);
-}
+ at implementation DOMObject
 
-Document DocumentImpl::createInstance(DocumentImpl *impl)
+- (void)dealloc
 {
-    return Document(impl);
+    if (_internal) {
+        removeWrapperForImpl(_internal);
+    }
+    [super dealloc];
 }
 
-Range RangeImpl::createInstance(RangeImpl *impl)
+- (id)copyWithZone:(NSZone *)zone
 {
-    return Range(impl);
+    return [self retain];
 }
 
+ at end
+
 //------------------------------------------------------------------------------------------
 // DOMNode
 
 @implementation DOMNode
 
-- (NodeImpl *)nodeImpl
-{
-	AbstractMethodCalled([DOMNode class]);
-    return nil;
-}
-
-- (Class)classForDOMDocument
-{
-	AbstractMethodCalled([DOMNode class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
+- (void)dealloc
 {
-    return [self retain];
+    if (_internal) {
+        reinterpret_cast<NodeImpl *>(_internal)->deref();
+    }
+    [super dealloc];
 }
 
 - (NSString *)nodeName
@@ -301,7 +290,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (DOMDocument *)ownerDocument
 {
-    return [[self classForDOMDocument] documentWithImpl:[self nodeImpl]->getDocument()];
+    return [DOMDocument documentWithImpl:[self nodeImpl]->getDocument()];
 }
 
 - (DOMNode *)insertBefore:(DOMNode *)newChild :(DOMNode *)refChild error:(NSError **)error
@@ -367,15 +356,13 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     ASSERT(version);
 
     // Method not reflected in DOM::NodeImpl interface
-    Node node([self nodeImpl]);
-    return node.isSupported(NSStringToDOMString(feature), NSStringToDOMString(version));
+    return Node([self nodeImpl]).isSupported(NSStringToDOMString(feature), NSStringToDOMString(version));
 }
 
 - (NSString *)namespaceURI
 {
     // Method not reflected in DOM::NodeImpl interface
-    Node node([self nodeImpl]);
-    return DOMStringToNSString(node.namespaceURI());
+    return DOMStringToNSString(Node([self nodeImpl]).namespaceURI());
 }
 
 - (NSString *)prefix
@@ -400,8 +387,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 - (BOOL)hasAttributes
 {
     // Method not reflected in DOM::NodeImpl interface
-    Node node([self nodeImpl]);
-    return node.hasAttributes();
+    return Node([self nodeImpl]).hasAttributes();
 }
 
 - (NSString *)HTMLString
@@ -411,31 +397,16 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMNode
-
- at implementation WebCoreDOMNode
+ at implementation DOMNode (WebCoreInternal)
 
-- (id)initWithNodeImpl:(NodeImpl *)impl checkCache:(BOOL)checkCache
+- (id)initWithNodeImpl:(NodeImpl *)impl
 {
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
+    ASSERT(impl);
 
     [super init];
-    m_impl = impl;
+    _internal = reinterpret_cast<DOMObjectInternal *>(impl);
     impl->ref();
-    setWrapperForImpl(self, m_impl);
+    setWrapperForImpl(self, impl);
     return self;
 }
 
@@ -449,31 +420,51 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     if (cachedInstance)
         return [[cachedInstance retain] autorelease];
     
-    return [[[self alloc] initWithNodeImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithNodeImpl:(NodeImpl *)impl
-{
-    return [self initWithNodeImpl:impl checkCache:YES];
+    Class wrapperClass = nil;
+    switch (impl->nodeType()) {
+    case Node::ELEMENT_NODE:
+        wrapperClass = [DOMElement class];
+        break;
+    case Node::ATTRIBUTE_NODE:
+        wrapperClass = [DOMAttr class];
+        break;
+    case Node::TEXT_NODE:
+        wrapperClass = [DOMText class];
+        break;
+    case Node::CDATA_SECTION_NODE:
+        wrapperClass = [DOMCDATASection class];
+        break;
+    case Node::ENTITY_REFERENCE_NODE:
+        wrapperClass = [DOMEntityReference class];
+        break;
+    case Node::ENTITY_NODE:
+        wrapperClass = [DOMEntity class];
+        break;
+    case Node::PROCESSING_INSTRUCTION_NODE:
+        wrapperClass = [DOMProcessingInstruction class];
+        break;
+    case Node::COMMENT_NODE:
+        wrapperClass = [DOMComment class];
+        break;
+    case Node::DOCUMENT_NODE:
+        wrapperClass = [DOMDocument class];
+        break;
+    case Node::DOCUMENT_TYPE_NODE:
+        wrapperClass = [DOMDocumentType class];
+        break;
+    case Node::DOCUMENT_FRAGMENT_NODE:
+        wrapperClass = [DOMDocumentFragment class];
+        break;
+    case Node::NOTATION_NODE:
+        wrapperClass = [DOMNotation class];
+        break;
+    }
+    return [[[wrapperClass alloc] initWithNodeImpl:impl] autorelease];
 }
 
 - (NodeImpl *)nodeImpl
 {
-	return m_impl;
-}
-
-- (Class)classForDOMDocument
-{
-	return [WebCoreDOMDocument class];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return reinterpret_cast<NodeImpl *>(_internal);
 }
 
 @end
@@ -483,21 +474,17 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @implementation DOMNamedNodeMap
 
-- (NamedNodeMapImpl *)namedNodeMapImpl
-{
-	AbstractMethodCalled([DOMNamedNodeMap class]);
-    return nil;
-}
-
-- (Class)classForDOMNode
+- (void)dealloc
 {
-	AbstractMethodCalled([DOMNamedNodeMap class]);
-    return nil;
+    if (_internal) {
+        reinterpret_cast<NamedNodeMapImpl *>(_internal)->deref();
+    }
+    [super dealloc];
 }
 
-- (id)copyWithZone:(NSZone *)zone
+- (NamedNodeMapImpl *)namedNodeMapImpl
 {
-    return [self retain];
+    return reinterpret_cast<NamedNodeMapImpl *>(_internal);
 }
 
 - (DOMNode *)getNamedItem:(NSString *)name
@@ -507,7 +494,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     // Method not reflected in DOM::NamedNodeMapImpl interface
     NamedNodeMap map = NamedNodeMapImpl::createInstance([self namedNodeMapImpl]);
     Node result(map.getNamedItem(NSStringToDOMString(name)));
-    return [[self classForDOMNode] nodeWithImpl:result.handle()];
+    return [DOMNode nodeWithImpl:result.handle()];
 }
 
 - (DOMNode *)setNamedItem:(DOMNode *)arg error:(NSError **)error
@@ -518,7 +505,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         NamedNodeMap map = NamedNodeMapImpl::createInstance([self namedNodeMapImpl]);
         Node result(map.setNamedItem([arg nodeImpl]));
-        return [[self classForDOMNode] nodeWithImpl:result.handle()];
+        if (error) {
+            *error = nil;
+        }
+        return [DOMNode nodeWithImpl:result.handle()];
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -534,7 +524,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         NamedNodeMap map = NamedNodeMapImpl::createInstance([self namedNodeMapImpl]);
         Node result(map.removeNamedItem(NSStringToDOMString(name)));
-        return [[self classForDOMNode] nodeWithImpl:result.handle()];
+        if (error) {
+            *error = nil;
+        }
+        return [DOMNode nodeWithImpl:result.handle()];
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -544,7 +537,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (DOMNode *)item:(unsigned long)index
 {
-    return [[self classForDOMNode] nodeWithImpl:[self namedNodeMapImpl]->item(index)];
+    return [DOMNode nodeWithImpl:[self namedNodeMapImpl]->item(index)];
 }
 
 - (unsigned long)length
@@ -561,7 +554,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     // Method not reflected in DOM::NamedNodeMapImpl interface
     NamedNodeMap map = NamedNodeMapImpl::createInstance([self namedNodeMapImpl]);
     Node result(map.getNamedItemNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(localName)));
-    return [[self classForDOMNode] nodeWithImpl:result.handle()];
+    return [DOMNode nodeWithImpl:result.handle()];
 }
 
 - (DOMNode *)setNamedItemNS:(DOMNode *)arg error:(NSError **)error
@@ -572,7 +565,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         NamedNodeMap map = NamedNodeMapImpl::createInstance([self namedNodeMapImpl]);
         Node result(map.setNamedItemNS([arg nodeImpl]));
-        return [[self classForDOMNode] nodeWithImpl:result.handle()];
+        if (error) {
+            *error = nil;
+        }
+        return [DOMNode nodeWithImpl:result.handle()];
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -589,7 +585,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         NamedNodeMap map = NamedNodeMapImpl::createInstance([self namedNodeMapImpl]);
         Node result(map.removeNamedItemNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(localName)));
-        return [[self classForDOMNode] nodeWithImpl:result.handle()];
+        if (error) {
+            *error = nil;
+        }
+        return [DOMNode nodeWithImpl:result.handle()];
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -599,31 +598,16 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMNamedNodeMap
+ at implementation DOMNamedNodeMap (WebCoreInternal)
 
- at implementation WebCoreDOMNamedNodeMap
-
-- (id)initWithNamedNodeMapImpl:(NamedNodeMapImpl *)impl checkCache:(BOOL)checkCache
+- (id)initWithNamedNodeMapImpl:(NamedNodeMapImpl *)impl
 {
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
+    ASSERT(impl);
 
     [super init];
-    m_impl = impl;
+    _internal = reinterpret_cast<DOMObjectInternal *>(impl);
     impl->ref();
-    setWrapperForImpl(self, m_impl);
+    setWrapperForImpl(self, impl);
     return self;
 }
 
@@ -637,31 +621,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     if (cachedInstance)
         return [[cachedInstance retain] autorelease];
     
-    return [[[self alloc] initWithNamedNodeMapImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithNamedNodeMapImpl:(NamedNodeMapImpl *)impl
-{
-    return [self initWithNamedNodeMapImpl:impl checkCache:YES];
-}
-
-- (NamedNodeMapImpl *)namedNodeMapImpl
-{
-	return m_impl;
-}
-
-- (Class)classForDOMNode
-{
-	return [WebCoreDOMNode class];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return [[[self alloc] initWithNamedNodeMapImpl:impl] autorelease];
 }
 
 @end
@@ -671,26 +631,22 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @implementation DOMNodeList
 
-- (NodeListImpl *)nodeListImpl
-{
-	AbstractMethodCalled([DOMNodeList class]);
-    return nil;
-}
-
-- (Class)classForDOMNode
+- (void)dealloc
 {
-	AbstractMethodCalled([DOMNodeList class]);
-    return nil;
+    if (_internal) {
+        reinterpret_cast<NodeListImpl *>(_internal)->deref();
+    }
+    [super dealloc];
 }
 
-- (id)copyWithZone:(NSZone *)zone
+- (NodeListImpl *)nodeListImpl
 {
-    return [self retain];
+    return reinterpret_cast<NodeListImpl *>(_internal);
 }
 
 - (DOMNode *)item:(unsigned long)index
 {
-    return [[self classForDOMNode] nodeWithImpl:[self nodeListImpl]->item(index)];
+    return [DOMNode nodeWithImpl:[self nodeListImpl]->item(index)];
 }
 
 - (unsigned long)length
@@ -700,31 +656,16 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMNodeList
-
- at implementation WebCoreDOMNodeList
+ at implementation DOMNodeList (WebCoreInternal)
 
-- (id)initWithNodeListImpl:(NodeListImpl *)impl checkCache:(BOOL)checkCache
+- (id)initWithNodeListImpl:(NodeListImpl *)impl
 {
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
+    ASSERT(impl);
 
     [super init];
-    m_impl = impl;
+    _internal = reinterpret_cast<DOMObjectInternal *>(impl);
     impl->ref();
-    setWrapperForImpl(self, m_impl);
+    setWrapperForImpl(self, impl);
     return self;
 }
 
@@ -738,36 +679,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     if (cachedInstance)
         return [[cachedInstance retain] autorelease];
     
-    return [[[self alloc] initWithNodeListImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithNodeListImpl:(NodeListImpl *)impl
-{
-    return [self initWithNodeListImpl:impl checkCache:YES];
-}
-
-- (NodeListImpl *)nodeListImpl
-{
-	return m_impl;
-}
-
-- (Class)classForDOMNode
-{
-	return [WebCoreDOMNode class];
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return [[[self alloc] initWithNodeListImpl:impl] autorelease];
 }
 
 @end
@@ -777,27 +689,17 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @implementation DOMImplementation
 
-- (DOMImplementationImpl *)DOMImplementationImpl
-{
-	AbstractMethodCalled([DOMImplementation class]);
-    return nil;
-}
-
-- (Class)classForDOMDocumentType
-{
-	AbstractMethodCalled([DOMImplementation class]);
-    return nil;
-}
-
-- (Class)classForDOMDocument
+- (void)dealloc
 {
-	AbstractMethodCalled([DOMImplementation class]);
-    return nil;
+    if (_internal) {
+        reinterpret_cast<DOMImplementationImpl *>(_internal)->deref();
+    }
+    [super dealloc];
 }
 
-- (id)copyWithZone:(NSZone *)zone
+- (DOMImplementationImpl *)DOMImplementationImpl
 {
-    return [self retain];
+    return reinterpret_cast<DOMImplementationImpl *>(_internal);
 }
 
 - (BOOL)hasFeature:(NSString *)feature :(NSString *)version
@@ -816,9 +718,8 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
     int code;
     DocumentTypeImpl *impl = [self DOMImplementationImpl]->createDocumentType(NSStringToDOMString(qualifiedName), NSStringToDOMString(publicId), NSStringToDOMString(systemId), code);
-    DOMDocumentType * result = [[self classForDOMDocumentType] documentTypeWithImpl:impl];
     fillInError(error, code);
-    return result;
+    return static_cast<DOMDocumentType *>([DOMNode nodeWithImpl:impl]);
 }
 
 - (DOMDocument *)createDocument:(NSString *)namespaceURI :(NSString *)qualifiedName :(DOMDocumentType *)doctype error:(NSError **)error
@@ -827,40 +728,24 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     ASSERT(qualifiedName);
 
     int code;
-    DocumentType dt = DocumentTypeImpl::createInstance([doctype documentTypeImpl]);
+    DocumentType dt = DocumentTypeImpl::createInstance(static_cast<DocumentTypeImpl *>([doctype nodeImpl]));
     DocumentImpl *impl = [self DOMImplementationImpl]->createDocument(NSStringToDOMString(namespaceURI), NSStringToDOMString(qualifiedName), dt, code);
-    DOMDocument * result = [[self classForDOMDocument] documentWithImpl:impl];
     fillInError(error, code);
-    return result;
+    return static_cast<DOMDocument *>([DOMNode nodeWithImpl:impl]);
 }
 
 @end
  
-//------------------------------------------------------------------------------------------
-// WebCoreDOMImplementation
+ at implementation DOMImplementation (WebInternal)
 
- at implementation WebCoreDOMImplementation
-
-- (id)initWithDOMImplementationImpl:(DOMImplementationImpl *)impl checkCache:(BOOL)checkCache
+- (id)initWithDOMImplementationImpl:(DOMImplementationImpl *)impl
 {
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
+    ASSERT(impl);
 
     [super init];
-    m_impl = impl;
+    _internal = reinterpret_cast<DOMObjectInternal *>(impl);
     impl->ref();
-    setWrapperForImpl(self, m_impl);
+    setWrapperForImpl(self, impl);
     return self;
 }
 
@@ -874,36 +759,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     if (cachedInstance)
         return [[cachedInstance retain] autorelease];
     
-    return [[[self alloc] initWithDOMImplementationImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithDOMImplementationImpl:(DOMImplementationImpl *)impl
-{
-    return [self initWithDOMImplementationImpl:impl checkCache:YES];
-}
-
-- (DOMImplementationImpl *)DOMImplementationImpl
-{
-	return m_impl;
-}
-
-- (Class)classForDOMDocumentType
-{
-	return [WebCoreDOMDocumentType class];
-}
-
-- (Class)classForDOMDocument
-{
-	return [WebCoreDOMDocument class];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return [[[self alloc] initWithDOMImplementationImpl:impl] autorelease];
 }
 
 @end
@@ -913,77 +769,13 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @implementation DOMDocumentFragment
 
-- (DocumentFragmentImpl *)documentFragmentImpl
-{
-	AbstractMethodCalled([DOMDocumentFragment class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
-}
-
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMDocumentFragment
-
- at implementation WebCoreDOMDocumentFragment
-
-- (id)initWithDocumentFragmentImpl:(DocumentFragmentImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
+ at implementation DOMDocumentFragment (WebCoreInternal)
 
 + (DOMDocumentFragment *)documentFragmentWithImpl:(DocumentFragmentImpl *)impl
 {
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithDocumentFragmentImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithDocumentFragmentImpl:(DocumentFragmentImpl *)impl
-{
-    return [self initWithDocumentFragmentImpl:impl checkCache:YES];
-}
-
-- (DocumentFragmentImpl *)documentFragmentImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return static_cast<DOMDocumentFragment *>([DOMNode nodeWithImpl:impl]);
 }
 
 @end
@@ -995,100 +787,22 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (DocumentImpl *)documentImpl
 {
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMAttr
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMCDATASection
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMComment
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMDocumentFragment
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMDocumentType
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMElement
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMEntityReference
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMImplementation
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMNode
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMNodeList
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMProcessingInstruction
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (Class)classForDOMText
-{
-	AbstractMethodCalled([DOMDocument class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<DocumentImpl *>(_internal);
 }
 
 - (DOMDocumentType *)doctype
 {
-    return [[self classForDOMDocumentType] documentTypeWithImpl:[self documentImpl]->doctype()];
+    return static_cast<DOMDocumentType *>([DOMNode nodeWithImpl:[self documentImpl]->doctype()]);
 }
 
 - (DOMImplementation *)implementation
 {
-    return [[self classForDOMImplementation] DOMImplementationWithImpl:[self documentImpl]->implementation()];
+    return [DOMImplementation DOMImplementationWithImpl:[self documentImpl]->implementation()];
 }
 
 - (DOMElement *)documentElement
 {
-    return [[self classForDOMElement] elementWithImpl:[self documentImpl]->documentElement()];
+    return static_cast<DOMElement *>([DOMNode nodeWithImpl:[self documentImpl]->documentElement()]);
 }
 
 - (DOMElement *)createElement:(NSString *)tagName error:(NSError **)error
@@ -1096,28 +810,26 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     ASSERT(tagName);
 
     int code;
-    DOMElement *result = [[self classForDOMElement] elementWithImpl:[self documentImpl]->createElement(NSStringToDOMString(tagName), code)];
+    DOMElement *result = static_cast<DOMElement *>([DOMNode nodeWithImpl:[self documentImpl]->createElement(NSStringToDOMString(tagName), code)]);
     fillInError(error, code);
     return result;
 }
 
 - (DOMDocumentFragment *)createDocumentFragment
 {
-    return [[self classForDOMDocumentFragment] documentFragmentWithImpl:[self documentImpl]->createDocumentFragment()];
+    return static_cast<DOMDocumentFragment *>([DOMNode nodeWithImpl:[self documentImpl]->createDocumentFragment()]);
 }
 
 - (DOMText *)createTextNode:(NSString *)data
 {
     ASSERT(data);
-
-    return [[self classForDOMText] textWithImpl:[self documentImpl]->createTextNode(NSStringToDOMString(data))];
+    return static_cast<DOMText *>([DOMNode nodeWithImpl:[self documentImpl]->createTextNode(NSStringToDOMString(data))]);
 }
 
 - (DOMComment *)createComment:(NSString *)data
 {
     ASSERT(data);
-
-    return [[self classForDOMComment] commentWithImpl:[self documentImpl]->createComment(NSStringToDOMString(data))];
+    return static_cast<DOMComment *>([DOMNode nodeWithImpl:[self documentImpl]->createComment(NSStringToDOMString(data))]);
 }
 
 - (DOMCDATASection *)createCDATASection:(NSString *)data error:(NSError **)error
@@ -1126,7 +838,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
     // Documentation says we can raise a NOT_SUPPORTED_ERR.
     // However, the lower layer does not report that error up to us.
-    return [[self classForDOMCDATASection] CDATASectionWithImpl:[self documentImpl]->createCDATASection(NSStringToDOMString(data))];
+    if (error) {
+        *error = nil;
+    }
+    return static_cast<DOMCDATASection *>([DOMNode nodeWithImpl:[self documentImpl]->createCDATASection(NSStringToDOMString(data))]);
 }
 
 - (DOMProcessingInstruction *)createProcessingInstruction:(NSString *)target :(NSString *)data error:(NSError **)error
@@ -1136,7 +851,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
     // Documentation says we can raise a INVALID_CHARACTER_ERR or a NOT_SUPPORTED_ERR.
     // However, the lower layer does not report these errors up to us.
-    return [[self classForDOMProcessingInstruction] processingInstructionWithImpl:[self documentImpl]->createProcessingInstruction(NSStringToDOMString(target), NSStringToDOMString(data))];
+    if (error) {
+        *error = nil;
+    }
+    return static_cast<DOMProcessingInstruction *>([DOMNode nodeWithImpl:[self documentImpl]->createProcessingInstruction(NSStringToDOMString(target), NSStringToDOMString(data))]);
 }
 
 - (DOMAttr *)createAttribute:(NSString *)name error:(NSError **)error
@@ -1147,8 +865,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         Document doc(DocumentImpl::createInstance([self documentImpl]));
         Attr result(doc.createAttribute(NSStringToDOMString(name)));
-        AttrImpl *impl = static_cast<AttrImpl *>(result.handle());
-        return [[self classForDOMAttr] attrWithImpl:impl];
+        if (error) {
+            *error = nil;
+        }
+        return static_cast<DOMAttr *>([DOMNode nodeWithImpl:result.handle()]);
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1162,20 +882,22 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
     // Documentation says we can raise a INVALID_CHARACTER_ERR or a NOT_SUPPORTED_ERR.
     // However, the lower layer does not report these errors up to us.
-    return [WebCoreDOMEntityReference entityReferenceWithImpl:[self documentImpl]->createEntityReference(NSStringToDOMString(name))];
+    if (error) {
+        *error = nil;
+    }
+    return static_cast<DOMEntityReference *>([DOMNode nodeWithImpl:[self documentImpl]->createEntityReference(NSStringToDOMString(name))]);
 }
 
 - (DOMNodeList *)getElementsByTagName:(NSString *)tagname
 {
     ASSERT(tagname);
-
-    return [[self classForDOMNodeList] nodeListWithImpl:[self documentImpl]->getElementsByTagNameNS(0, NSStringToDOMString(tagname).implementation())];
+    return [DOMNodeList nodeListWithImpl:[self documentImpl]->getElementsByTagNameNS(0, NSStringToDOMString(tagname).implementation())];
 }
 
 - (DOMNode *)importNode:(DOMNode *)importedNode :(BOOL)deep error:(NSError **)error
 {
     int code;
-    DOMNode *result = [WebCoreDOMNode nodeWithImpl:[self documentImpl]->importNode([importedNode nodeImpl], deep, code)];
+    DOMNode *result = [DOMNode nodeWithImpl:[self documentImpl]->importNode([importedNode nodeImpl], deep, code)];
     fillInError(error, code);
     return result;
 }
@@ -1186,9 +908,9 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     ASSERT(qualifiedName);
 
     int code;
-    DOMElement *result = [[self classForDOMElement] elementWithImpl:[self documentImpl]->createElementNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(qualifiedName), code)];
+    DOMNode *result = [DOMNode nodeWithImpl:[self documentImpl]->createElementNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(qualifiedName), code)];
     fillInError(error, code);
-    return result;
+    return static_cast<DOMElement *>(result);
 }
 
 - (DOMAttr *)createAttributeNS:(NSString *)namespaceURI :(NSString *)qualifiedName error:(NSError **)error
@@ -1200,8 +922,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         Document doc(DocumentImpl::createInstance([self documentImpl]));
         Attr result(doc.createAttributeNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(qualifiedName)));
-        AttrImpl *impl = static_cast<AttrImpl *>(result.handle());
-        return [[self classForDOMAttr] attrWithImpl:impl];
+        if (error) {
+            *error = nil;
+        }
+        return static_cast<DOMAttr *>([DOMNode nodeWithImpl:result.handle()]);
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1214,136 +938,23 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    return [[self classForDOMNodeList] nodeListWithImpl:[self documentImpl]->getElementsByTagNameNS(NSStringToDOMString(namespaceURI).implementation(), NSStringToDOMString(localName).implementation())];
+    return [DOMNodeList nodeListWithImpl:[self documentImpl]->getElementsByTagNameNS(NSStringToDOMString(namespaceURI).implementation(), NSStringToDOMString(localName).implementation())];
 }
 
 - (DOMElement *)getElementById:(NSString *)elementId
 {
     ASSERT(elementId);
 
-    return [[self classForDOMElement] elementWithImpl:[self documentImpl]->getElementById(NSStringToDOMString(elementId))];
+    return static_cast<DOMElement *>([DOMNode nodeWithImpl:[self documentImpl]->getElementById(NSStringToDOMString(elementId))]);
 }
 
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMDocumentFragment
-
- at implementation WebCoreDOMDocument
-
-- (id)initWithDocumentImpl:(DocumentImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
+ at implementation DOMDocument (WebCoreInternal)
 
 + (DOMDocument *)documentWithImpl:(DocumentImpl *)impl
 {
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithDocumentImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithDocumentImpl:(DocumentImpl *)impl
-{
-    return [self initWithDocumentImpl:impl checkCache:YES];
-}
-
-- (DocumentImpl *)documentImpl
-{
-	return m_impl;
-}
-
-- (Class)classForDOMAttr
-{
-	return [WebCoreDOMAttr class];
-}
-
-- (Class)classForDOMCDATASection
-{
-	return [WebCoreDOMCDATASection class];
-}
-
-- (Class)classForDOMComment
-{
-	return [WebCoreDOMComment class];
-}
-
-- (Class)classForDOMDocumentFragment
-{
-	return [WebCoreDOMDocumentFragment class];
-}
-
-- (Class)classForDOMDocumentType
-{
-	return [WebCoreDOMDocumentType class];
-}
-
-- (Class)classForDOMElement
-{
-	return [WebCoreDOMElement class];
-}
-
-- (Class)classForDOMEntityReference
-{
-	return [WebCoreDOMEntityReference class];
-}
-
-- (Class)classForDOMImplementation
-{
-	return [WebCoreDOMImplementation class];
-}
-
-- (Class)classForDOMNode
-{
-	return [WebCoreDOMNode class];
-}
-
-- (Class)classForDOMNodeList
-{
-	return [WebCoreDOMNodeList class];
-}
-
-- (Class)classForDOMProcessingInstruction
-{
-	return [WebCoreDOMProcessingInstruction class];
-}
-
-- (Class)classForDOMText
-{
-	return [WebCoreDOMText class];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return static_cast<DOMDocument *>([DOMNode nodeWithImpl:impl]);
 }
 
 @end
@@ -1355,13 +966,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (CharacterDataImpl *)characterDataImpl
 {
-	AbstractMethodCalled([DOMCharacterData class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<CharacterDataImpl *>(_internal);
 }
 
 - (NSString *)data
@@ -1430,89 +1035,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 @end
 
 //------------------------------------------------------------------------------------------
-// WebCoreDOMCharacterData
-
- at implementation WebCoreDOMCharacterData
-
-- (id)initWithCharacterDataImpl:(CharacterDataImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMCharacterData *)characterDataWithImpl:(CharacterDataImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithCharacterDataImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithCharacterDataImpl:(CharacterDataImpl *)impl
-{
-    return [self initWithCharacterDataImpl:impl checkCache:YES];
-}
-
-- (CharacterDataImpl *)characterDataImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
-}
-
- at end
-
-//------------------------------------------------------------------------------------------
 // DOMAttr
 
 @implementation DOMAttr
 
-- (AttrImpl *)attrImpl
-{
-	AbstractMethodCalled([DOMAttr class]);
-    return nil;
-}
-
-- (Class)classForDOMElement
-{
-	AbstractMethodCalled([DOMAttr class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
-}
-
 - (NSString *)name
 {
     return DOMStringToNSString([self attrImpl]->nodeName());
@@ -1539,74 +1065,21 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (DOMElement *)ownerElement
 {
-    return [[self classForDOMElement] elementWithImpl:[self attrImpl]->ownerElement()];
+    return [DOMElement elementWithImpl:[self attrImpl]->ownerElement()];
 }
 
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMAttr
-
- at implementation WebCoreDOMAttr
-
-- (id)initWithAttrImpl:(AttrImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
+ at implementation DOMAttr (WebCoreInternal)
 
 + (DOMAttr *)attrWithImpl:(AttrImpl *)impl
 {
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithAttrImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithAttrImpl:(AttrImpl *)impl
-{
-    return [self initWithAttrImpl:impl checkCache:YES];
+    return static_cast<DOMAttr *>([DOMNode nodeWithImpl:impl]);
 }
 
 - (AttrImpl *)attrImpl
 {
-	return m_impl;
-}
-
-- (Class)classForDOMElement
-{
-	return [WebCoreDOMElement class];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return reinterpret_cast<AttrImpl *>(_internal);
 }
 
 @end
@@ -1616,32 +1089,14 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @implementation DOMElement
 
-- (ElementImpl *)elementImpl
-{
-	AbstractMethodCalled([DOMElement class]);
-    return nil;
-}
-
-- (Class)classForDOMAttr
-{
-	AbstractMethodCalled([DOMElement class]);
-    return nil;
-}
-
-- (Class)classForDOMNodeList
-{
-	AbstractMethodCalled([DOMElement class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
+- (NSString *)tagName
 {
-    return [self retain];
+    return DOMStringToNSString([self elementImpl]->tagName());
 }
 
-- (NSString *)tagName
+- (DOMNamedNodeMap *)attributes
 {
-    return DOMStringToNSString([self elementImpl]->tagName());
+    return [DOMNamedNodeMap namedNodeMapWithImpl:[self elementImpl]->attributes()];
 }
 
 - (NSString *)getAttribute:(NSString *)name
@@ -1660,6 +1115,9 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         Element element(ElementImpl::createInstance([self elementImpl]));
         element.setAttribute(NSStringToDOMString(name), NSStringToDOMString(value));
+        if (error) {
+            *error = nil;
+        }
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1674,6 +1132,9 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         Element element(ElementImpl::createInstance([self elementImpl]));
         element.removeAttribute(NSStringToDOMString(name));
+        if (error) {
+            *error = nil;
+        }
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1687,7 +1148,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     // Method not reflected in DOM::ElementImpl interface
     Element element(ElementImpl::createInstance([self elementImpl]));
     Attr result(element.getAttributeNode(NSStringToDOMString(name)));
-    return [[self classForDOMAttr] attrWithImpl:static_cast<AttrImpl *>(result.handle())];
+    return [DOMAttr attrWithImpl:static_cast<AttrImpl *>(result.handle())];
 }
 
 - (DOMAttr *)setAttributeNode:(DOMAttr *)newAttr error:(NSError **)error
@@ -1699,7 +1160,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
         Element element(ElementImpl::createInstance([self elementImpl]));
         Attr attr(AttrImpl::createInstance([newAttr attrImpl]));
         Attr result(element.setAttributeNode(attr));
-        return [[self classForDOMAttr] attrWithImpl:static_cast<AttrImpl *>(result.handle())];
+        if (error) {
+            *error = nil;
+        }
+        return [DOMAttr attrWithImpl:static_cast<AttrImpl *>(result.handle())];
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1716,7 +1180,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
         Element element(ElementImpl::createInstance([self elementImpl]));
         Attr attr(AttrImpl::createInstance([oldAttr attrImpl]));
         Attr result(element.removeAttributeNode(attr));
-        return [[self classForDOMAttr] attrWithImpl:static_cast<AttrImpl *>(result.handle())];
+        if (error) {
+            *error = nil;
+        }
+        return [DOMAttr attrWithImpl:static_cast<AttrImpl *>(result.handle())];
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1728,7 +1195,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 {
     ASSERT(name);
 
-    return [[self classForDOMNodeList] nodeListWithImpl:[self elementImpl]->getElementsByTagNameNS(0, NSStringToDOMString(name).implementation())];
+    return [DOMNodeList nodeListWithImpl:[self elementImpl]->getElementsByTagNameNS(0, NSStringToDOMString(name).implementation())];
 }
 
 - (NSString *)getAttributeNS:(NSString *)namespaceURI :(NSString *)localName
@@ -1750,7 +1217,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         Element element(ElementImpl::createInstance([self elementImpl]));
         element.setAttributeNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(qualifiedName), NSStringToDOMString(value));
-    } 
+        if (error) {
+            *error = nil;
+        }
+    }
     catch (const DOMException &e) {
         fillInError(error, e.code);
     }
@@ -1765,6 +1235,9 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     try {
         Element element(ElementImpl::createInstance([self elementImpl]));
         element.removeAttributeNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(localName));
+        if (error) {
+            *error = nil;
+        }
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1779,7 +1252,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     // Method not reflected in DOM::ElementImpl interface
     Element element(ElementImpl::createInstance([self elementImpl]));
     Attr result(element.getAttributeNodeNS(NSStringToDOMString(namespaceURI), NSStringToDOMString(localName)));
-    return [[self classForDOMAttr] attrWithImpl:static_cast<AttrImpl *>(result.handle())];
+    return [DOMAttr attrWithImpl:static_cast<AttrImpl *>(result.handle())];
 }
 
 - (DOMAttr *)setAttributeNodeNS:(DOMAttr *)newAttr error:(NSError **)error
@@ -1791,7 +1264,10 @@ Range RangeImpl::createInstance(RangeImpl *impl)
         Element element(ElementImpl::createInstance([self elementImpl]));
         Attr attr(AttrImpl::createInstance([newAttr attrImpl]));
         Attr result(element.setAttributeNodeNS(attr));
-        return [[self classForDOMAttr] attrWithImpl:static_cast<AttrImpl *>(result.handle())];
+        if (error) {
+            *error = nil;
+        }
+        return [DOMAttr attrWithImpl:static_cast<AttrImpl *>(result.handle())];
     } 
     catch (const DOMException &e) {
         fillInError(error, e.code);
@@ -1804,7 +1280,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     ASSERT(namespaceURI);
     ASSERT(localName);
 
-    return [[self classForDOMNodeList] nodeListWithImpl:[self elementImpl]->getElementsByTagNameNS(NSStringToDOMString(namespaceURI).implementation(), NSStringToDOMString(localName).implementation())];
+    return [DOMNodeList nodeListWithImpl:[self elementImpl]->getElementsByTagNameNS(NSStringToDOMString(namespaceURI).implementation(), NSStringToDOMString(localName).implementation())];
 }
 
 - (BOOL)hasAttribute:(NSString *)name
@@ -1828,74 +1304,16 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMElement
-
- at implementation WebCoreDOMElement
-
-- (id)initWithElementImpl:(ElementImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
+ at implementation DOMElement (WebCoreInternal)
 
 + (DOMElement *)elementWithImpl:(ElementImpl *)impl
 {
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithElementImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithElementImpl:(ElementImpl *)impl
-{
-    return [self initWithElementImpl:impl checkCache:YES];
+    return static_cast<DOMElement *>([DOMNode nodeWithImpl:impl]);
 }
 
 - (ElementImpl *)elementImpl
 {
-	return m_impl;
-}
-
-- (Class)classForDOMAttr
-{
-	return [WebCoreDOMAttr class];
-}
-
-- (Class)classForDOMNodeList
-{
-	return [WebCoreDOMNodeList class];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return reinterpret_cast<ElementImpl *>(_internal);
 }
 
 @end
@@ -1907,83 +1325,15 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (TextImpl *)textImpl
 {
-	AbstractMethodCalled([DOMText class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<TextImpl *>(_internal);
 }
 
 - (DOMText *)splitText:(unsigned long)offset error:(NSError **)error
 {
     int code;
-    DOMText *result = [[self class] textWithImpl:[self textImpl]->splitText(offset, code)];
+    DOMNode *result = [DOMNode nodeWithImpl:[self textImpl]->splitText(offset, code)];
     fillInError(error, code);
-    return result;
-}
-
- at end
-
-//------------------------------------------------------------------------------------------
-// WebCoreDOMText
-
- at implementation WebCoreDOMText
-
-- (id)initWithTextImpl:(TextImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMText *)textWithImpl:(TextImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithTextImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithTextImpl:(TextImpl *)impl
-{
-    return [self initWithTextImpl:impl checkCache:YES];
-}
-
-- (TextImpl *)textImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return static_cast<DOMText *>(result);
 }
 
 @end
@@ -1993,79 +1343,6 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @implementation DOMComment
 
-- (CommentImpl *)commentImpl
-{
-	AbstractMethodCalled([DOMComment class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
-}
-
- at end
-
-//------------------------------------------------------------------------------------------
-// WebCoreDOMComment
-
- at implementation WebCoreDOMComment
-
-- (id)initWithCommentImpl:(CommentImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMComment *)commentWithImpl:(CommentImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithCommentImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithCommentImpl:(CommentImpl *)impl
-{
-    return [self initWithCommentImpl:impl checkCache:YES];
-}
-
-- (CommentImpl *)commentImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
-}
-
 @end
 
 //------------------------------------------------------------------------------------------
@@ -2073,79 +1350,6 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @implementation DOMCDATASection
 
-- (CDATASectionImpl *)CDATASectionImpl
-{
-	AbstractMethodCalled([DOMCDATASection class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
-}
-
- at end
-
-//------------------------------------------------------------------------------------------
-// WebCoreDOMCDATASection
-
- at implementation WebCoreDOMCDATASection
-
-- (id)initWithCDATASectionImpl:(CDATASectionImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMCDATASection *)CDATASectionWithImpl:(CDATASectionImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithCDATASectionImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithCDATASectionImpl:(CDATASectionImpl *)impl
-{
-    return [self initWithCDATASectionImpl:impl checkCache:YES];
-}
-
-- (CDATASectionImpl *)CDATASectionImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
-}
-
 @end
 
 //------------------------------------------------------------------------------------------
@@ -2155,19 +1359,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (DocumentTypeImpl *)documentTypeImpl
 {
-	AbstractMethodCalled([DOMDocumentType class]);
-    return nil;
-}
-
-- (Class)classForDOMNamedNodeMap
-{
-	AbstractMethodCalled([DOMDocumentType class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<DocumentTypeImpl *>(_internal);
 }
 
 - (NSString *)name
@@ -2177,12 +1369,12 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 - (DOMNamedNodeMap *)entities
 {
-    return [[self classForDOMNamedNodeMap] namedNodeMapWithImpl:[self documentTypeImpl]->entities()];
+    return [DOMNamedNodeMap namedNodeMapWithImpl:[self documentTypeImpl]->entities()];
 }
 
 - (DOMNamedNodeMap *)notations
 {
-    return [[self classForDOMNamedNodeMap] namedNodeMapWithImpl:[self documentTypeImpl]->notations()];
+    return [DOMNamedNodeMap namedNodeMapWithImpl:[self documentTypeImpl]->notations()];
 }
 
 - (NSString *)publicId
@@ -2203,86 +1395,13 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 @end
 
 //------------------------------------------------------------------------------------------
-// WebCoreDOMDocumentType
-
- at implementation WebCoreDOMDocumentType
-
-- (id)initWithDocumentTypeImpl:(DocumentTypeImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMDocumentType *)documentTypeWithImpl:(DocumentTypeImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithDocumentTypeImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithDocumentTypeImpl:(DocumentTypeImpl *)impl
-{
-    return [self initWithDocumentTypeImpl:impl checkCache:YES];
-}
-
-- (DocumentTypeImpl *)documentTypeImpl
-{
-	return m_impl;
-}
-
-- (Class)classForDOMNamedNodeMap
-{
-	return [WebCoreDOMNamedNodeMap class];
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
-}
-
- at end
-
-//------------------------------------------------------------------------------------------
 // DOMNotation
 
 @implementation DOMNotation
 
 - (NotationImpl *)notationImpl
 {
-	AbstractMethodCalled([DOMNotation class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<NotationImpl *>(_internal);
 }
 
 - (NSString *)publicId
@@ -2298,81 +1417,13 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 @end
 
 //------------------------------------------------------------------------------------------
-// WebCoreDOMNotation
-
- at implementation WebCoreDOMNotation
-
-- (id)initWithNotationImpl:(NotationImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMNotation *)notationWithImpl:(NotationImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithNotationImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithNotationImpl:(NotationImpl *)impl
-{
-	return [self initWithNotationImpl:impl checkCache:YES];
-}
-
-- (NotationImpl *)notationImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
-}
-
- at end
-
-//------------------------------------------------------------------------------------------
 // DOMEntity
 
 @implementation DOMEntity
 
 - (EntityImpl *)entityImpl
 {
-	AbstractMethodCalled([DOMEntity class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<EntityImpl *>(_internal);
 }
 
 - (NSString *)publicId
@@ -2393,162 +1444,20 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 @end
 
 //------------------------------------------------------------------------------------------
-// WebCoreDOMEntity
-
- at implementation WebCoreDOMEntity
-
-- (id)initWithEntityImpl:(EntityImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMEntity *)entityWithImpl:(EntityImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithEntityImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithEntityImpl:(EntityImpl *)impl
-{
-	return [self initWithEntityImpl:impl checkCache:YES];
-}
-
-- (EntityImpl *)entityImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
-}
-
- at end
-
-//------------------------------------------------------------------------------------------
 // DOMEntityReference
 
 @implementation DOMEntityReference
 
-- (EntityReferenceImpl *)entityReferenceImpl
-{
-	AbstractMethodCalled([DOMEntityReference class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
-}
-
 @end
 
 //------------------------------------------------------------------------------------------
-// WebCoreDOMEntityReference
-
- at implementation WebCoreDOMEntityReference
-
-- (id)initWithEntityReferenceImpl:(EntityReferenceImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMEntityReference *)entityReferenceWithImpl:(EntityReferenceImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithEntityReferenceImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithEntityReferenceImpl:(EntityReferenceImpl *)impl
-{
-    return [self initWithEntityReferenceImpl:impl checkCache:YES];
-}
-
-- (EntityReferenceImpl *)entityReferenceImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
-}
-
- at end
-
-
-//------------------------------------------------------------------------------------------
 // DOMProcessingInstruction
 
 @implementation DOMProcessingInstruction
 
 - (ProcessingInstructionImpl *)processingInstructionImpl
 {
-	AbstractMethodCalled([DOMProcessingInstruction class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<ProcessingInstructionImpl *>(_internal);
 }
 
 - (NSString *)target
@@ -2573,99 +1482,27 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 @end
 
 //------------------------------------------------------------------------------------------
-// WebCoreDOMProcessingInstruction
-
- at implementation WebCoreDOMProcessingInstruction
-
-- (id)initWithProcessingInstructionImpl:(ProcessingInstructionImpl *)impl checkCache:(BOOL)checkCache
-{
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
-
-    [super init];
-    m_impl = impl;
-    impl->ref();
-    setWrapperForImpl(self, m_impl);
-    return self;
-}
-
-+ (DOMProcessingInstruction *)processingInstructionWithImpl:(ProcessingInstructionImpl *)impl
-{
-    if (!impl)
-        return nil;
-    
-    id cachedInstance;
-    cachedInstance = wrapperForImpl(impl);
-    if (cachedInstance)
-        return [[cachedInstance retain] autorelease];
-    
-    return [[[self alloc] initWithProcessingInstructionImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithProcessingInstructionImpl:(ProcessingInstructionImpl *)impl
-{
-	return [self initWithProcessingInstructionImpl:impl checkCache:YES];
-}
+// DOMRange
 
-- (ProcessingInstructionImpl *)processingInstructionImpl
-{
-	return m_impl;
-}
+ at implementation DOMRange
 
 - (void)dealloc
 {
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
+    if (_internal) {
+        reinterpret_cast<RangeImpl *>(_internal)->deref();
     }
     [super dealloc];
 }
 
- at end
-
-//------------------------------------------------------------------------------------------
-// DOMRange
-
- at implementation DOMRange
-
 - (RangeImpl *)rangeImpl
 {
-	AbstractMethodCalled([DOMRange class]);
-    return nil;
-}
-
-- (Class)classForDOMDocumentFragment
-{
-	AbstractMethodCalled([DOMRange class]);
-    return nil;
-}
-
-- (Class)classForDOMNode
-{
-	AbstractMethodCalled([DOMRange class]);
-    return nil;
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    return [self retain];
+    return reinterpret_cast<RangeImpl *>(_internal);
 }
 
 - (DOMNode *)startContainer:(NSError **)error
 {
     int code;
-    DOMNode *result = [[self classForDOMNode] nodeWithImpl:[self rangeImpl]->startContainer(code)];
+    DOMNode *result = [DOMNode nodeWithImpl:[self rangeImpl]->startContainer(code)];
     fillInError(error, code);
     return result;
 }
@@ -2681,7 +1518,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 - (DOMNode *)endContainer:(NSError **)error
 {
     int code;
-    DOMNode *result = [[self classForDOMNode] nodeWithImpl:[self rangeImpl]->endContainer(code)];
+    DOMNode *result = [DOMNode nodeWithImpl:[self rangeImpl]->endContainer(code)];
     fillInError(error, code);
     return result;
 }
@@ -2705,7 +1542,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 - (DOMNode *)commonAncestorContainer:(NSError **)error
 {
     int code;
-    DOMNode *result = [[self classForDOMNode] nodeWithImpl:[self rangeImpl]->commonAncestorContainer(code)];
+    DOMNode *result = [DOMNode nodeWithImpl:[self rangeImpl]->commonAncestorContainer(code)];
     fillInError(error, code);
     return result;
 }
@@ -2791,7 +1628,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 - (DOMDocumentFragment *)extractContents:(NSError **)error
 {
     int code;
-    DOMDocumentFragment *result = [[self classForDOMDocumentFragment] documentFragmentWithImpl:[self rangeImpl]->extractContents(code)];
+    DOMDocumentFragment *result = [DOMDocumentFragment documentFragmentWithImpl:[self rangeImpl]->extractContents(code)];
     fillInError(error, code);
     return result;
 }
@@ -2799,7 +1636,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 - (DOMDocumentFragment *)cloneContents:(NSError **)error
 {
     int code;
-    DOMDocumentFragment *result = [[self classForDOMDocumentFragment] documentFragmentWithImpl:[self rangeImpl]->cloneContents(code)];
+    DOMDocumentFragment *result = [DOMDocumentFragment documentFragmentWithImpl:[self rangeImpl]->cloneContents(code)];
     fillInError(error, code);
     return result;
 }
@@ -2821,7 +1658,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 - (DOMRange *)cloneRange:(NSError **)error
 {
     int code;
-    DOMRange *result = [WebCoreDOMRange rangeWithImpl:[self rangeImpl]->cloneRange(code)];
+    DOMRange *result = [DOMRange rangeWithImpl:[self rangeImpl]->cloneRange(code)];
     fillInError(error, code);
     return result;
 }
@@ -2843,31 +1680,16 @@ Range RangeImpl::createInstance(RangeImpl *impl)
 
 @end
 
-//------------------------------------------------------------------------------------------
-// WebCoreDOMRange
-
- at implementation WebCoreDOMRange
+ at implementation DOMRange (WebCoreInternal)
 
-- (id)initWithRangeImpl:(RangeImpl *)impl checkCache:(BOOL)checkCache
+- (id)initWithRangeImpl:(RangeImpl *)impl
 {
-    if (!impl) {
-        [self release];
-        return nil;
-    }
-
-	if (checkCache) {
-		id cachedInstance;
-		cachedInstance = wrapperForImpl(impl);
-		if (cachedInstance) {
-			[self release];
-			return [cachedInstance retain];
-		}
-	}
+    ASSERT(impl);
 
     [super init];
-    m_impl = impl;
+    _internal = reinterpret_cast<DOMObjectInternal *>(impl);
     impl->ref();
-    setWrapperForImpl(self, m_impl);
+    setWrapperForImpl(self, impl);
     return self;
 }
 
@@ -2881,26 +1703,7 @@ Range RangeImpl::createInstance(RangeImpl *impl)
     if (cachedInstance)
         return [[cachedInstance retain] autorelease];
     
-    return [[[self alloc] initWithRangeImpl:impl checkCache:NO] autorelease];
-}
-
-- (id)initWithRangeImpl:(RangeImpl *)impl
-{
-    return [self initWithRangeImpl:impl checkCache:YES];
-}
-
-- (RangeImpl *)rangeImpl
-{
-	return m_impl;
-}
-
-- (void)dealloc
-{
-    if (m_impl) {
-        removeWrapperForImpl(m_impl);
-    	m_impl->deref();
-    }
-    [super dealloc];
+    return [[[self alloc] initWithRangeImpl:impl] autorelease];
 }
 
 @end
diff --git a/WebCore/kwq/DOMInternal.h b/WebCore/kwq/DOMInternal.h
index 4bb3626..8c0df50 100644
--- a/WebCore/kwq/DOMInternal.h
+++ b/WebCore/kwq/DOMInternal.h
@@ -26,260 +26,21 @@
 #import "DOM.h"
 
 namespace DOM {
-    class AttrImpl;
-    class CDATASectionImpl;
-    class CharacterDataImpl;
-    class CommentImpl;
-    class DocumentFragmentImpl;
-    class DocumentTypeImpl;
     class DocumentImpl;
-    class DOMImplementationImpl;
     class ElementImpl;
-    class EntityImpl;
-    class EntityReferenceImpl;
-    class NamedNodeMapImpl;
     class NodeImpl;
-    class NodeListImpl;
-    class NotationImpl;
-    class ProcessingInstructionImpl;
-    class RangeImpl;
-    class TextImpl;
 }
 
- at interface DOMNode (SubclassResponsibility)
-- (DOM::NodeImpl *)nodeImpl;
-- (Class)classForDOMDocument;
- at end
-
- at interface WebCoreDOMNode : DOMNode
-{
-    DOM::NodeImpl *m_impl;
-}
+ at interface DOMNode (WebCoreInternal)
 + (DOMNode *)nodeWithImpl:(DOM::NodeImpl *)impl;
-- (id)initWithNodeImpl:(DOM::NodeImpl *)impl;
- at end
-
- at interface DOMNamedNodeMap (SubclassResponsibility)
-- (DOM::NamedNodeMapImpl *)namedNodeMapImpl;
-- (Class)classForDOMNode;
- at end
-
- at interface WebCoreDOMNamedNodeMap : DOMNamedNodeMap
-{
-    DOM::NamedNodeMapImpl *m_impl;
-}
-+ (DOMNamedNodeMap *)namedNodeMapWithImpl:(DOM::NamedNodeMapImpl *)impl;
-- (id)initWithNamedNodeMapImpl:(DOM::NamedNodeMapImpl *)impl;
- at end
-
- at interface DOMNodeList (SubclassResponsibility)
-- (DOM::NodeListImpl *)nodeListImpl;
- at end
-
- at interface WebCoreDOMNodeList : DOMNodeList
-{
-    DOM::NodeListImpl *m_impl;
-}
-+ (DOMNodeList *)nodeListWithImpl:(DOM::NodeListImpl *)impl;
-- (id)initWithNodeListImpl:(DOM::NodeListImpl *)impl;
- at end
-
- at interface DOMImplementation (SubclassResponsibility)
-- (DOM::DOMImplementationImpl *)DOMImplementationImpl;
-- (Class)classForDOMDocumentType;
-- (Class)classForDOMDocument;
- at end
-
- at interface WebCoreDOMImplementation : DOMImplementation
-{
-    DOM::DOMImplementationImpl *m_impl;
-}
-+ (DOMImplementation *)DOMImplementationWithImpl:(DOM::DOMImplementationImpl *)impl;
-- (id)initWithDOMImplementationImpl:(DOM::DOMImplementationImpl *)impl;
- at end
-
- at interface DOMDocumentFragment (SubclassResponsibility)
-- (DOM::DocumentFragmentImpl *)documentFragmentImpl;
- at end
-
- at interface WebCoreDOMDocumentFragment : DOMDocumentFragment
-{
-    DOM::DocumentFragmentImpl *m_impl;
-}
-+ (DOMDocumentFragment *)documentFragmentWithImpl:(DOM::DocumentFragmentImpl *)impl;
-- (id)initWithDocumentFragmentImpl:(DOM::DocumentFragmentImpl *)impl;
- at end
-
- at interface DOMDocument (SubclassResponsibility)
-- (DOM::DocumentImpl *)documentImpl;
-- (Class)classForDOMAttr;
-- (Class)classForDOMCDATASection;
-- (Class)classForDOMComment;
-- (Class)classForDOMDocumentFragment;
-- (Class)classForDOMDocumentType;
-- (Class)classForDOMElement;
-- (Class)classForDOMEntityReference;
-- (Class)classForDOMImplementation;
-- (Class)classForDOMNode;
-- (Class)classForDOMNodeList;
-- (Class)classForDOMProcessingInstruction;
-- (Class)classForDOMText;
- at end
-
- at interface WebCoreDOMDocument : DOMDocument
-{
-    DOM::DocumentImpl *m_impl;
-}
-+ (DOMDocument *)documentWithImpl:(DOM::DocumentImpl *)impl;
-- (id)initWithDocumentImpl:(DOM::DocumentImpl *)impl;
- at end
-
- at interface DOMCharacterData (SubclassResponsibility)
-- (DOM::CharacterDataImpl *)characterDataImpl;
- at end
-
- at interface WebCoreDOMCharacterData : DOMCharacterData
-{
-    DOM::CharacterDataImpl *m_impl;
-}
-+ (DOMCharacterData *)characterDataWithImpl:(DOM::CharacterDataImpl *)impl;
-- (id)initWithCharacterDataImpl:(DOM::CharacterDataImpl *)impl;
- at end
-
- at interface DOMAttr (SubclassResponsibility)
-- (DOM::AttrImpl *)attrImpl;
-- (Class)classForDOMElement;
- at end
-
- at interface WebCoreDOMAttr : DOMAttr
-{
-    DOM::AttrImpl *m_impl;
-}
-+ (DOMAttr *)attrWithImpl:(DOM::AttrImpl *)impl;
-- (id)initWithAttrImpl:(DOM::AttrImpl *)impl;
- at end
-
- at interface DOMElement (SubclassResponsibility)
-- (DOM::ElementImpl *)elementImpl;
-- (Class)classForDOMAttr;
-- (Class)classForDOMNodeList;
+- (DOM::NodeImpl *)nodeImpl;
 @end
 
- at interface WebCoreDOMElement : DOMElement
-{
-    DOM::ElementImpl *m_impl;
-}
+ at interface DOMElement (WebCoreInternal)
 + (DOMElement *)elementWithImpl:(DOM::ElementImpl *)impl;
-- (id)initWithElementImpl:(DOM::ElementImpl *)impl;
- at end
-
- at interface DOMText (SubclassResponsibility)
-- (DOM::TextImpl *)textImpl;
- at end
-
- at interface WebCoreDOMText : DOMText
-{
-    DOM::TextImpl *m_impl;
-}
-+ (DOMText *)textWithImpl:(DOM::TextImpl *)impl;
-- (id)initWithTextImpl:(DOM::TextImpl *)impl;
- at end
-
- at interface DOMComment (SubclassResponsibility)
-- (DOM::CommentImpl *)commentImpl;
- at end
-
- at interface WebCoreDOMComment : DOMComment
-{
-    DOM::CommentImpl *m_impl;
-}
-+ (DOMComment *)commentWithImpl:(DOM::CommentImpl *)impl;
-- (id)initWithCommentImpl:(DOM::CommentImpl *)impl;
- at end
-
- at interface DOMCDATASection (SubclassResponsibility)
-- (DOM::CDATASectionImpl *)CDATASectionImpl;
- at end
-
- at interface WebCoreDOMCDATASection : DOMCDATASection
-{
-    DOM::CDATASectionImpl *m_impl;
-}
-+ (DOMCDATASection *)CDATASectionWithImpl:(DOM::CDATASectionImpl *)impl;
-- (id)initWithCDATASectionImpl:(DOM::CDATASectionImpl *)impl;
- at end
-
- at interface DOMDocumentType (SubclassResponsibility)
-- (DOM::DocumentTypeImpl *)documentTypeImpl;
-- (Class)classForDOMNamedNodeMap;
- at end
-
- at interface WebCoreDOMDocumentType : DOMDocumentType
-{
-    DOM::DocumentTypeImpl *m_impl;
-}
-+ (DOMDocumentType *)documentTypeWithImpl:(DOM::DocumentTypeImpl *)impl;
-- (id)initWithDocumentTypeImpl:(DOM::DocumentTypeImpl *)impl;
- at end
-
- at interface DOMNotation (SubclassResponsibility)
-- (DOM::NotationImpl *)notationImpl;
- at end
-
- at interface WebCoreDOMNotation : DOMNotation
-{
-    DOM::NotationImpl *m_impl;
-}
-+ (DOMNotation *)notationWithImpl:(DOM::NotationImpl *)impl;
-- (id)initWithNotationImpl:(DOM::NotationImpl *)impl;
- at end
-
- at interface DOMEntity (SubclassResponsibility)
-- (DOM::EntityImpl *)entityImpl;
- at end
-
- at interface WebCoreDOMEntity : DOMEntity
-{
-    DOM::EntityImpl *m_impl;
-}
-+ (DOMEntity *)entityWithImpl:(DOM::EntityImpl *)impl;
-- (id)initWithEntityImpl:(DOM::EntityImpl *)impl;
- at end
-
- at interface DOMEntityReference (SubclassResponsibility)
-- (DOM::EntityReferenceImpl *)entityReferenceImpl;
- at end
-
- at interface WebCoreDOMEntityReference : DOMEntityReference
-{
-    DOM::EntityReferenceImpl *m_impl;
-}
-+ (DOMEntityReference *)entityReferenceWithImpl:(DOM::EntityReferenceImpl *)impl;
-- (id)initWithEntityReferenceImpl:(DOM::EntityReferenceImpl *)impl;
- at end
-
- at interface DOMProcessingInstruction (SubclassResponsibility)
-- (DOM::ProcessingInstructionImpl *)processingInstructionImpl;
- at end
-
- at interface WebCoreDOMProcessingInstruction : DOMProcessingInstruction
-{
-    DOM::ProcessingInstructionImpl *m_impl;
-}
-+ (DOMProcessingInstruction *)processingInstructionWithImpl:(DOM::ProcessingInstructionImpl *)impl;
-- (id)initWithProcessingInstructionImpl:(DOM::ProcessingInstructionImpl *)impl;
- at end
-
- at interface DOMRange (SubclassResponsibility)
-- (DOM::RangeImpl *)rangeImpl;
-- (Class)classForDOMDocumentFragment;
-- (Class)classForDOMNode;
+- (DOM::ElementImpl *)elementImpl;
 @end
 
- at interface WebCoreDOMRange : DOMRange
-{
-    DOM::RangeImpl *m_impl;
-}
-+ (DOMRange *)rangeWithImpl:(DOM::RangeImpl *)impl;
-- (id)initWithRangeImpl:(DOM::RangeImpl *)impl;
+ at interface DOMDocument (WebCoreInternal)
++ (DOMDocument *)documentWithImpl:(DOM::DocumentImpl *)impl;
 @end
diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index d506045..e8abf17 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -35,7 +35,6 @@
 #import "KWQWindowWidget.h"
 #import "WebCoreBridge.h"
 #import "WebCoreViewFactory.h"
-#import "DOM.h"
 #import "DOMInternal.h"
 #import "csshelper.h"
 #import "html_documentimpl.h"
@@ -582,7 +581,7 @@ void KWQKHTMLPart::recordFormValue(const QString &name, const QString &value, HT
     if (!_formValuesAboutToBeSubmitted) {
         _formValuesAboutToBeSubmitted = [[NSMutableDictionary alloc] init];
         ASSERT(!_formAboutToBeSubmitted);
-        _formAboutToBeSubmitted = [[WebCoreDOMElement elementWithImpl:element] retain];
+        _formAboutToBeSubmitted = [[DOMElement elementWithImpl:element] retain];
     } else {
         ASSERT([_formAboutToBeSubmitted elementImpl] == element);
     }
diff --git a/WebCore/kwq/WebCoreBridge.mm b/WebCore/kwq/WebCoreBridge.mm
index 08de72a..c3b2ecf 100644
--- a/WebCore/kwq/WebCoreBridge.mm
+++ b/WebCore/kwq/WebCoreBridge.mm
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -65,7 +65,6 @@
 #import "KWQPrinter.h"
 #import "KWQAccObjectCache.h"
 
-#import "DOM.h"
 #import "DOMInternal.h"
 #import "WebCoreImageRenderer.h"
 #import "WebCoreTextRendererFactory.h"
@@ -747,13 +746,13 @@ static BOOL nowPrinting(WebCoreBridge *self)
         QWidget *widget = [widgetHolder widget];
         if (widget != nil) {
             NodeImpl *node = static_cast<const RenderWidget *>(widget->eventFilterObject())->element();
-            return [WebCoreDOMElement elementWithImpl:static_cast<ElementImpl *>(node)];
+            return [DOMElement elementWithImpl:static_cast<ElementImpl *>(node)];
         }
     }
     return nil;
 }
 
-static NSView *viewForElement(DOM::ElementImpl *elementImpl)
+static NSView *viewForElement(ElementImpl *elementImpl)
 {
     RenderObject *renderer = elementImpl->renderer();
     if (renderer && renderer->isWidget()) {
@@ -766,20 +765,20 @@ static NSView *viewForElement(DOM::ElementImpl *elementImpl)
     return nil;
 }
 
-static HTMLInputElementImpl *inputElementFromDOMElement(DOMElement * element)
+static HTMLInputElementImpl *inputElementFromDOMElement(DOMElement *element)
 {
-    DOM::ElementImpl *domElement = [element elementImpl];
-    if (domElement && idFromNode(domElement) == ID_INPUT) {
-        return static_cast<HTMLInputElementImpl *>(domElement);
+    NodeImpl *node = [element nodeImpl];
+    if (node && idFromNode(node) == ID_INPUT) {
+        return static_cast<HTMLInputElementImpl *>(node);
     }
     return nil;
 }
 
 static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
 {
-    DOM::ElementImpl *domElement = [element elementImpl];
-    if (domElement && idFromNode(domElement) == ID_FORM) {
-        return static_cast<HTMLFormElementImpl *>(domElement);
+    NodeImpl *node = [element nodeImpl];
+    if (node && idFromNode(node) == ID_FORM) {
+        return static_cast<HTMLFormElementImpl *>(node);
     }
     return nil;
 }
@@ -794,7 +793,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
             HTMLGenericFormElementImpl *elt = elements.at(i);
             // Skip option elements, other duds
             if (elt->name() == targetName) {
-                return [WebCoreDOMElement elementWithImpl:elt];
+                return [DOMElement elementWithImpl:elt];
             }
         }
     }
@@ -822,7 +821,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
     if (inputElement) {
         HTMLFormElementImpl *formElement = inputElement->form();
         if (formElement) {
-            return [WebCoreDOMElement elementWithImpl:formElement];
+            return [DOMElement elementWithImpl:formElement];
         }
     }
     return nil;
@@ -831,7 +830,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
 - (DOMElement *)currentForm
 {
     HTMLFormElementImpl *formElement = _part->currentForm();
-    return formElement ? [WebCoreDOMElement elementWithImpl:formElement] : nil;
+    return formElement ? [DOMElement elementWithImpl:formElement] : nil;
 }
 
 - (NSArray *)controlsInForm:(DOMElement *)form
@@ -934,7 +933,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
         [element setObject:[NSNumber numberWithBool:node->isContentEditable()]
                     forKey:WebCoreElementIsEditableKey];
         
-        [element setObject:[WebCoreDOMNode nodeWithImpl:node] forKey:WebCoreElementDOMNodeKey];
+        [element setObject:[DOMNode nodeWithImpl:node] forKey:WebCoreElementDOMNodeKey];
     
         if (node->renderer() && node->renderer()->isImage()) {
             RenderImage *r = static_cast<RenderImage *>(node->renderer());
@@ -1041,7 +1040,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
 
 - (DOMDocument *)DOMDocument
 {
-    return [WebCoreDOMDocument documentWithImpl:_part->xmlDocImpl()];
+    return [DOMDocument documentWithImpl:_part->xmlDocImpl()];
 }
 
 - (void)setSelectionFrom:(DOMNode *)start startOffset:(int)startOffset to:(DOMNode *)end endOffset:(int) endOffset
@@ -1066,7 +1065,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
 
 - (DOMNode *)selectionStart
 {
-    return [WebCoreDOMNode nodeWithImpl:_part->selectionStart()];
+    return [DOMNode nodeWithImpl:_part->selectionStart()];
 }
 
 - (int)selectionStartOffset
@@ -1076,7 +1075,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
 
 - (DOMNode *)selectionEnd
 {
-    return [WebCoreDOMNode nodeWithImpl:_part->selectionEnd()];
+    return [DOMNode nodeWithImpl:_part->selectionEnd()];
 }
 
 - (int)selectionEndOffset
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index e222410..298525c 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -2,6 +2,13 @@
 
         Reviewed by me
 
+        * DOM.subproj/DOM.h: Checked in header copied over
+        from WebCore.
+
+2004-03-01  Ken Kocienda  <kocienda at apple.com>
+
+        Reviewed by me
+
         * DOM.subproj/DOM.h: Oh, it's like the Keystone Cops this afternoon...
 	Backed out an unintended change to thsi file.
 
diff --git a/WebKit/DOM.subproj/DOM.h b/WebKit/DOM.subproj/DOM.h
index 1795c1f..f997918 100644
--- a/WebKit/DOM.subproj/DOM.h
+++ b/WebKit/DOM.subproj/DOM.h
@@ -23,6 +23,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
+#import <Foundation/Foundation.h>
+
 //=========================================================================
 //=========================================================================
 //=========================================================================
@@ -71,28 +73,27 @@ enum DOMErrorCode {
 
 extern NSString * const DOMErrorDomain;
 
- at class NSError;
- at class NSString;
-
- at class DOMNode;
- at class DOMNamedNodeMap;
- at class DOMNodeList;
- at class DOMDocumentFragment;
- at class DOMDocument;
- at class DOMCharacterData;
 @class DOMAttr;
- at class DOMElement;
- at class DOMText;
- at class DOMComment;
 @class DOMCDATASection;
+ at class DOMComment;
+ at class DOMDocument;
 @class DOMDocumentType;
- at class DOMNotation;
- at class DOMEntity;
+ at class DOMElement;
 @class DOMEntityReference;
+ at class DOMNamedNodeMap;
+ at class DOMNodeList;
 @class DOMProcessingInstruction;
- at class DOMRange;
+ at class DOMText;
+
+typedef struct DOMObjectInternal DOMObjectInternal;
 
- at interface DOMNode : NSObject <NSCopying>
+ at interface DOMObject : NSObject <NSCopying>
+{
+    DOMObjectInternal *_internal;
+}
+ at end
+
+ at interface DOMNode : DOMObject
 - (NSString *)nodeName;
 - (NSString *)nodeValue;
 - (void)setNodeValue:(NSString *)string error:(NSError **)error;
@@ -121,7 +122,7 @@ extern NSString * const DOMErrorDomain;
 - (NSString *)HTMLString;
 @end
 
- at interface DOMNamedNodeMap : NSObject <NSCopying>
+ at interface DOMNamedNodeMap : DOMObject
 - (DOMNode *)getNamedItem:(NSString *)name;
 - (DOMNode *)setNamedItem:(DOMNode *)arg error:(NSError **)error;
 - (DOMNode *)removeNamedItem:(NSString *)name error:(NSError **)error;
@@ -133,13 +134,13 @@ extern NSString * const DOMErrorDomain;
 @end
 
 
- at interface DOMNodeList : NSObject <NSCopying>
+ at interface DOMNodeList : DOMObject
 - (DOMNode *)item:(unsigned long)index;
 - (unsigned long)length;
 @end
 
 
- at interface DOMImplementation : NSObject <NSCopying>
+ at interface DOMImplementation : DOMObject
 - (BOOL)hasFeature:(NSString *)feature :(NSString *)version;
 - (DOMDocumentType *)createDocumentType:(NSString *)qualifiedName :(NSString *)publicId :(NSString *)systemId error:(NSError **)error;
 - (DOMDocument *)createDocument:(NSString *)namespaceURI :(NSString *)qualifiedName :(DOMDocumentType *)doctype error:(NSError **)error;
@@ -267,7 +268,7 @@ enum DOMCompareHow
     DOMCompareEndToStart   = 3,
 };
 
- at interface DOMRange : NSObject
+ at interface DOMRange : DOMObject
 - (DOMNode *)startContainer:(NSError **)error;
 - (long)startOffset:(NSError **)error;
 - (DOMNode *)endContainer:(NSError **)error;
@@ -293,4 +294,3 @@ enum DOMCompareHow
 - (NSString *)toString:(NSError **)error;
 - (void)detach:(NSError **)error;
 @end
-

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list