toFooElement() should use static_cast, not reinterpret_cast.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 Sep 2013 09:41:04 +0000 (09:41 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 Sep 2013 09:41:04 +0000 (09:41 +0000)
<https://webkit.org/b/121087>

Reviewed by Antti Koivisto.

reinterpret_cast is not safe for downcasting with multiple inheritance.
Add a ELEMENT_TYPE_CASTS(classname) macro that goes after class definitions.
It expands into the following methods:

    - FooElement* toFooElement(Node*)
    - const FooElement* toFooElement(const Node*)
    - FooElement& toFooElement(Node&)
    - const FooElement& toFooElement(const Node&)

As a bonus, it also adds these to catch unnecessary casting:

    - void toFooElement(const Node*)
    - void toFooElement(const Node&)

There might be a more clever way of doing this, but this gets us to a
correct place so we can think in peace.

* bridge/qt/qt_pixmapruntime.cpp:
(JSC::Bindings::assignToHTMLImageElement):
(JSC::Bindings::QtPixmapRuntime::toQt):
* dom/Element.h:
(WebCore::isElement):
* dom/make_names.pl:
(printTypeHelpers):
* html/HTMLAnchorElement.h:
* html/HTMLAreaElement.h:
* html/HTMLAudioElement.h:
* html/HTMLBaseElement.h:
* html/HTMLCanvasElement.h:
* html/HTMLElement.h:
(WebCore::isHTMLElement):
* html/HTMLFieldSetElement.h:
* html/HTMLFormElement.h:
* html/HTMLFrameSetElement.h:
* html/HTMLImageElement.h:
* html/HTMLInputElement.h:
* html/HTMLLabelElement.h:
* html/HTMLLegendElement.h:
* html/HTMLMapElement.h:
* html/HTMLMeterElement.h:
* html/HTMLOptGroupElement.h:
* html/HTMLOptionElement.h:
* html/HTMLParamElement.h:
* html/HTMLProgressElement.h:
* html/HTMLScriptElement.h:
* html/HTMLSourceElement.h:
* html/HTMLStyleElement.h:
* html/HTMLTableElement.h:
* html/HTMLTableRowElement.h:
* html/HTMLTextAreaElement.h:
* html/HTMLTitleElement.h:
* html/HTMLTrackElement.h:
* svg/SVGAltGlyphDefElement.h:
* svg/SVGAltGlyphElement.h:
* svg/SVGAltGlyphItemElement.h:
* svg/SVGAnimateMotionElement.h:
* svg/SVGAnimateTransformElement.h:
* svg/SVGCircleElement.h:
* svg/SVGClipPathElement.h:
* svg/SVGCursorElement.h:
* svg/SVGEllipseElement.h:
* svg/SVGFEDistantLightElement.h:
* svg/SVGFEFuncAElement.h:
* svg/SVGFEFuncBElement.h:
* svg/SVGFEFuncGElement.h:
* svg/SVGFEFuncRElement.h:
* svg/SVGFEMergeNodeElement.h:
* svg/SVGFEPointLightElement.h:
* svg/SVGFESpotLightElement.h:
* svg/SVGFilterElement.h:
* svg/SVGFontElement.h:
* svg/SVGFontFaceElement.h:
* svg/SVGFontFaceNameElement.h:
* svg/SVGFontFaceSrcElement.h:
* svg/SVGFontFaceUriElement.h:
* svg/SVGForeignObjectElement.h:
* svg/SVGGlyphElement.h:
* svg/SVGGlyphRefElement.h:
* svg/SVGHKernElement.h:
* svg/SVGImageElement.h:
* svg/SVGLineElement.h:
* svg/SVGLinearGradientElement.h:
* svg/SVGMPathElement.h:
* svg/SVGMarkerElement.h:
* svg/SVGMaskElement.h:
* svg/SVGMissingGlyphElement.h:
* svg/SVGPathElement.h:
* svg/SVGPatternElement.h:
* svg/SVGRadialGradientElement.h:
* svg/SVGRectElement.h:
* svg/SVGSVGElement.h:
* svg/SVGScriptElement.h:
* svg/SVGStyleElement.h:
* svg/SVGTextElement.h:
* svg/SVGTextPathElement.h:
* svg/SVGTitleElement.h:
* svg/SVGUseElement.h:
* svg/SVGVKernElement.h:
* svg/SVGViewElement.h:

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

78 files changed:
Source/WebCore/ChangeLog
Source/WebCore/bridge/qt/qt_pixmapruntime.cpp
Source/WebCore/dom/Element.h
Source/WebCore/dom/make_names.pl
Source/WebCore/html/HTMLAnchorElement.h
Source/WebCore/html/HTMLAreaElement.h
Source/WebCore/html/HTMLAudioElement.h
Source/WebCore/html/HTMLBaseElement.h
Source/WebCore/html/HTMLCanvasElement.h
Source/WebCore/html/HTMLElement.h
Source/WebCore/html/HTMLFieldSetElement.h
Source/WebCore/html/HTMLFormElement.h
Source/WebCore/html/HTMLFrameSetElement.h
Source/WebCore/html/HTMLImageElement.h
Source/WebCore/html/HTMLInputElement.h
Source/WebCore/html/HTMLLabelElement.h
Source/WebCore/html/HTMLLegendElement.h
Source/WebCore/html/HTMLMapElement.h
Source/WebCore/html/HTMLMeterElement.h
Source/WebCore/html/HTMLOptGroupElement.h
Source/WebCore/html/HTMLOptionElement.h
Source/WebCore/html/HTMLParamElement.h
Source/WebCore/html/HTMLProgressElement.h
Source/WebCore/html/HTMLScriptElement.h
Source/WebCore/html/HTMLSourceElement.h
Source/WebCore/html/HTMLStyleElement.h
Source/WebCore/html/HTMLTableElement.h
Source/WebCore/html/HTMLTableRowElement.h
Source/WebCore/html/HTMLTextAreaElement.h
Source/WebCore/html/HTMLTitleElement.h
Source/WebCore/html/HTMLTrackElement.h
Source/WebCore/svg/SVGAltGlyphDefElement.h
Source/WebCore/svg/SVGAltGlyphElement.h
Source/WebCore/svg/SVGAltGlyphItemElement.h
Source/WebCore/svg/SVGAnimateMotionElement.h
Source/WebCore/svg/SVGAnimateTransformElement.h
Source/WebCore/svg/SVGCircleElement.h
Source/WebCore/svg/SVGClipPathElement.h
Source/WebCore/svg/SVGCursorElement.h
Source/WebCore/svg/SVGEllipseElement.h
Source/WebCore/svg/SVGFEDistantLightElement.h
Source/WebCore/svg/SVGFEFuncAElement.h
Source/WebCore/svg/SVGFEFuncBElement.h
Source/WebCore/svg/SVGFEFuncGElement.h
Source/WebCore/svg/SVGFEFuncRElement.h
Source/WebCore/svg/SVGFEMergeNodeElement.h
Source/WebCore/svg/SVGFEPointLightElement.h
Source/WebCore/svg/SVGFESpotLightElement.h
Source/WebCore/svg/SVGFilterElement.h
Source/WebCore/svg/SVGFontElement.h
Source/WebCore/svg/SVGFontFaceElement.h
Source/WebCore/svg/SVGFontFaceNameElement.h
Source/WebCore/svg/SVGFontFaceSrcElement.h
Source/WebCore/svg/SVGFontFaceUriElement.h
Source/WebCore/svg/SVGForeignObjectElement.h
Source/WebCore/svg/SVGGlyphElement.h
Source/WebCore/svg/SVGGlyphRefElement.h
Source/WebCore/svg/SVGHKernElement.h
Source/WebCore/svg/SVGImageElement.h
Source/WebCore/svg/SVGLineElement.h
Source/WebCore/svg/SVGLinearGradientElement.h
Source/WebCore/svg/SVGMPathElement.h
Source/WebCore/svg/SVGMarkerElement.h
Source/WebCore/svg/SVGMaskElement.h
Source/WebCore/svg/SVGMissingGlyphElement.h
Source/WebCore/svg/SVGPathElement.h
Source/WebCore/svg/SVGPatternElement.h
Source/WebCore/svg/SVGRadialGradientElement.h
Source/WebCore/svg/SVGRectElement.h
Source/WebCore/svg/SVGSVGElement.h
Source/WebCore/svg/SVGScriptElement.h
Source/WebCore/svg/SVGStyleElement.h
Source/WebCore/svg/SVGTextElement.h
Source/WebCore/svg/SVGTextPathElement.h
Source/WebCore/svg/SVGTitleElement.h
Source/WebCore/svg/SVGUseElement.h
Source/WebCore/svg/SVGVKernElement.h
Source/WebCore/svg/SVGViewElement.h

index d142189..fe47b89 100644 (file)
@@ -1,3 +1,110 @@
+2013-09-10  Andreas Kling  <akling@apple.com>
+
+        toFooElement() should use static_cast, not reinterpret_cast.
+        <https://webkit.org/b/121087>
+
+        Reviewed by Antti Koivisto.
+
+        reinterpret_cast is not safe for downcasting with multiple inheritance.
+        Add a ELEMENT_TYPE_CASTS(classname) macro that goes after class definitions.
+        It expands into the following methods:
+
+            - FooElement* toFooElement(Node*)
+            - const FooElement* toFooElement(const Node*)
+            - FooElement& toFooElement(Node&)
+            - const FooElement& toFooElement(const Node&)
+
+        As a bonus, it also adds these to catch unnecessary casting:
+
+            - void toFooElement(const Node*)
+            - void toFooElement(const Node&)
+
+        There might be a more clever way of doing this, but this gets us to a
+        correct place so we can think in peace.
+
+        * bridge/qt/qt_pixmapruntime.cpp:
+        (JSC::Bindings::assignToHTMLImageElement):
+        (JSC::Bindings::QtPixmapRuntime::toQt):
+        * dom/Element.h:
+        (WebCore::isElement):
+        * dom/make_names.pl:
+        (printTypeHelpers):
+        * html/HTMLAnchorElement.h:
+        * html/HTMLAreaElement.h:
+        * html/HTMLAudioElement.h:
+        * html/HTMLBaseElement.h:
+        * html/HTMLCanvasElement.h:
+        * html/HTMLElement.h:
+        (WebCore::isHTMLElement):
+        * html/HTMLFieldSetElement.h:
+        * html/HTMLFormElement.h:
+        * html/HTMLFrameSetElement.h:
+        * html/HTMLImageElement.h:
+        * html/HTMLInputElement.h:
+        * html/HTMLLabelElement.h:
+        * html/HTMLLegendElement.h:
+        * html/HTMLMapElement.h:
+        * html/HTMLMeterElement.h:
+        * html/HTMLOptGroupElement.h:
+        * html/HTMLOptionElement.h:
+        * html/HTMLParamElement.h:
+        * html/HTMLProgressElement.h:
+        * html/HTMLScriptElement.h:
+        * html/HTMLSourceElement.h:
+        * html/HTMLStyleElement.h:
+        * html/HTMLTableElement.h:
+        * html/HTMLTableRowElement.h:
+        * html/HTMLTextAreaElement.h:
+        * html/HTMLTitleElement.h:
+        * html/HTMLTrackElement.h:
+        * svg/SVGAltGlyphDefElement.h:
+        * svg/SVGAltGlyphElement.h:
+        * svg/SVGAltGlyphItemElement.h:
+        * svg/SVGAnimateMotionElement.h:
+        * svg/SVGAnimateTransformElement.h:
+        * svg/SVGCircleElement.h:
+        * svg/SVGClipPathElement.h:
+        * svg/SVGCursorElement.h:
+        * svg/SVGEllipseElement.h:
+        * svg/SVGFEDistantLightElement.h:
+        * svg/SVGFEFuncAElement.h:
+        * svg/SVGFEFuncBElement.h:
+        * svg/SVGFEFuncGElement.h:
+        * svg/SVGFEFuncRElement.h:
+        * svg/SVGFEMergeNodeElement.h:
+        * svg/SVGFEPointLightElement.h:
+        * svg/SVGFESpotLightElement.h:
+        * svg/SVGFilterElement.h:
+        * svg/SVGFontElement.h:
+        * svg/SVGFontFaceElement.h:
+        * svg/SVGFontFaceNameElement.h:
+        * svg/SVGFontFaceSrcElement.h:
+        * svg/SVGFontFaceUriElement.h:
+        * svg/SVGForeignObjectElement.h:
+        * svg/SVGGlyphElement.h:
+        * svg/SVGGlyphRefElement.h:
+        * svg/SVGHKernElement.h:
+        * svg/SVGImageElement.h:
+        * svg/SVGLineElement.h:
+        * svg/SVGLinearGradientElement.h:
+        * svg/SVGMPathElement.h:
+        * svg/SVGMarkerElement.h:
+        * svg/SVGMaskElement.h:
+        * svg/SVGMissingGlyphElement.h:
+        * svg/SVGPathElement.h:
+        * svg/SVGPatternElement.h:
+        * svg/SVGRadialGradientElement.h:
+        * svg/SVGRectElement.h:
+        * svg/SVGSVGElement.h:
+        * svg/SVGScriptElement.h:
+        * svg/SVGStyleElement.h:
+        * svg/SVGTextElement.h:
+        * svg/SVGTextPathElement.h:
+        * svg/SVGTitleElement.h:
+        * svg/SVGUseElement.h:
+        * svg/SVGVKernElement.h:
+        * svg/SVGViewElement.h:
+
 2013-09-10  Mario Sanchez Prada  <mario.prada@samsung.com>
 
         [GTK] Test /webkit/atk/getTextInParagraphAndBodyModerate fails
index 2b72951..d51fc3a 100644 (file)
@@ -137,7 +137,7 @@ static JSValueRef assignToHTMLImageElement(JSContextRef context, JSObjectRef fun
 
     // We now know that we have a valid <img> element as the argument, we can attach the pixmap to it.
     RefPtr<StillImage> stillImage = WebCore::StillImage::create(toPixmap(data));
-    HTMLImageElement* imageElement = toHTMLImageElement(static_cast<JSHTMLImageElement*>(jsObject)->impl());
+    HTMLImageElement* imageElement = static_cast<JSHTMLImageElement*>(jsObject)->impl();
     imageElement->setCachedImage(new CachedImage(stillImage.get()));
     return JSValueMakeUndefined(context);
 }
@@ -218,7 +218,7 @@ QVariant QtPixmapRuntime::toQt(JSContextRef context, JSObjectRef obj, QMetaType:
         return emptyVariantForHint(hint);
 
     JSHTMLImageElement* elementJSWrapper = static_cast<JSHTMLImageElement*>(jsObject);
-    HTMLImageElement* imageElement = toHTMLImageElement(elementJSWrapper->impl());
+    HTMLImageElement* imageElement = elementJSWrapper->impl();
 
     if (!imageElement)
         return emptyVariantForHint(hint);
index 1736352..3de1910 100644 (file)
@@ -677,20 +677,34 @@ private:
     RefPtr<ElementData> m_elementData;
 };
 
-inline Element* toElement(Node* node)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isElementNode());
-    return static_cast<Element*>(node);
-}
-
-inline const Element* toElement(const Node* node)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isElementNode());
-    return static_cast<const Element*>(node);
-}
-
-// This will catch anyone doing an unnecessary cast.
-void toElement(const Element*);
+inline bool isElement(const Node& node) { return node.isElementNode(); }
+
+
+#define ELEMENT_TYPE_CASTS(ElementClassName) \
+inline const ElementClassName* to##ElementClassName(const Node* node) \
+{ \
+    ASSERT_WITH_SECURITY_IMPLICATION(!node || is##ElementClassName(*node)); \
+    return static_cast<const ElementClassName*>(node); \
+} \
+inline ElementClassName* to##ElementClassName(Node* node) \
+{ \
+    ASSERT_WITH_SECURITY_IMPLICATION(!node || is##ElementClassName(*node)); \
+    return static_cast<ElementClassName*>(node); \
+} \
+inline const ElementClassName& to##ElementClassName(const Node& node) \
+{ \
+    ASSERT_WITH_SECURITY_IMPLICATION(is##ElementClassName(node)); \
+    return static_cast<const ElementClassName&>(node); \
+} \
+inline ElementClassName& to##ElementClassName(Node& node) \
+{ \
+    ASSERT_WITH_SECURITY_IMPLICATION(is##ElementClassName(node)); \
+    return static_cast<ElementClassName&>(node); \
+} \
+void to##ElementClassName(const ElementClassName*); \
+void to##ElementClassName(const ElementClassName&);
+
+ELEMENT_TYPE_CASTS(Element)
 
 template <typename Type> bool isElementOfType(const Element*);
 template <typename Type> bool isElementOfType(const Node* node) { return node->isElementNode() && isElementOfType<Type>(toElement(node)); }
index d049ef4..8032394 100755 (executable)
@@ -628,17 +628,13 @@ sub printTypeHelpers
 
         my $class = $parsedTags{$name}{interfaceName};
         my $checkHelper = "is$class";
-        my $castingHelper = "to$class";
 
         print F "class $class;\n";
         print F "inline bool $checkHelper(const Element& element) { return element.hasTagName(".$parameters{namespace}."Names::".$name."Tag); }\n";
         print F "inline bool $checkHelper(const Element* element) { ASSERT(element); return $checkHelper(*element); }\n";
         print F "inline bool $checkHelper(const Node* node) { ASSERT(node); return node->isElementNode() && $checkHelper(toElement(node)); }\n";
+        print F "inline bool $checkHelper(const Node& node) { return node.isElementNode() && $checkHelper(toElement(node)); }\n";
         print F "template <> inline bool isElementOfType<$class>(const Element* element) { return $checkHelper(element); }\n";
-        print F "inline $class* $castingHelper(Node* node) { ASSERT_WITH_SECURITY_IMPLICATION(!node || $checkHelper(node)); return reinterpret_cast<".$class."*>(node); }\n";
-        print F "inline $class* $castingHelper(Element* element) { ASSERT_WITH_SECURITY_IMPLICATION(!element || $checkHelper(element)); return reinterpret_cast<".$class."*>(element); }\n";
-        print F "inline const $class* $castingHelper(const Node* node) { ASSERT_WITH_SECURITY_IMPLICATION(!node || $checkHelper(node)); return reinterpret_cast<const ".$class."*>(node); }\n";
-        print F "inline const $class* $castingHelper(const Element* element) { ASSERT_WITH_SECURITY_IMPLICATION(!element || $checkHelper(element)); return reinterpret_cast<const ".$class."*>(element); }\n";
 
         print F "\n";
     }
index 64ff0a4..42470c0 100644 (file)
@@ -155,6 +155,8 @@ bool isEnterKeyKeydownEvent(Event*);
 bool isLinkClick(Event*);
 bool shouldProhibitLinks(Element*);
 
+ELEMENT_TYPE_CASTS(HTMLAnchorElement)
+
 } // namespace WebCore
 
 #endif // HTMLAnchorElement_h
index 0e031e3..6456855 100644 (file)
@@ -70,6 +70,8 @@ private:
     Shape m_shape;
 };
 
+ELEMENT_TYPE_CASTS(HTMLAreaElement)
+
 } //namespace
 
 #endif
index fde628f..adfc924 100644 (file)
@@ -43,6 +43,8 @@ private:
     HTMLAudioElement(const QualifiedName&, Document*, bool);
 };
 
+ELEMENT_TYPE_CASTS(HTMLAudioElement)
+
 } //namespace
 
 #endif
index 88ef7c7..9b0bc8e 100644 (file)
@@ -44,6 +44,8 @@ private:
     virtual void removedFrom(ContainerNode*) OVERRIDE;
 };
 
+ELEMENT_TYPE_CASTS(HTMLBaseElement)
+
 } // namespace
 
 #endif
index 00b7ac0..eaa0dc3 100644 (file)
@@ -188,8 +188,7 @@ private:
     mutable RefPtr<Image> m_copiedImage; // FIXME: This is temporary for platforms that have to copy the image buffer to render (and for CSSCanvasValue).
 };
 
-// This will catch anyone doing an unnecessary cast.
-void toHTMLCanvasElement(const HTMLCanvasElement*);
+ELEMENT_TYPE_CASTS(HTMLCanvasElement)
 
 } //namespace
 
index bf52a44..68b7303 100644 (file)
@@ -135,29 +135,17 @@ private:
     AtomicString eventNameForAttributeName(const QualifiedName& attrName) const;
 };
 
-inline HTMLElement* toHTMLElement(Node* node)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isHTMLElement());
-    return static_cast<HTMLElement*>(node);
-}
-
-inline const HTMLElement* toHTMLElement(const Node* node)
-{
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isHTMLElement());
-    return static_cast<const HTMLElement*>(node);
-}
-
-// This will catch anyone doing an unnecessary cast.
-void toHTMLElement(const HTMLElement*);
-
 inline HTMLElement::HTMLElement(const QualifiedName& tagName, Document* document, ConstructionType type = CreateHTMLElement)
     : StyledElement(tagName, document, type)
 {
     ASSERT(tagName.localName().impl());
 }
 
+inline bool isHTMLElement(const Node& node) { return node.isHTMLElement(); }
 template <> inline bool isElementOfType<HTMLElement>(const Element* element) { return element->isHTMLElement(); }
 
+ELEMENT_TYPE_CASTS(HTMLElement)
+
 } // namespace WebCore
 
 #endif // HTMLElement_h
index 4a34ccc..729cf1c 100644 (file)
@@ -63,6 +63,8 @@ private:
     mutable uint64_t m_documentVersion;
 };
 
+ELEMENT_TYPE_CASTS(HTMLFieldSetElement)
+
 } // namespace
 
 #endif
index 26aecb0..370e0ee 100644 (file)
@@ -166,6 +166,8 @@ private:
     bool m_wasDemoted;
 };
 
+ELEMENT_TYPE_CASTS(HTMLFormElement)
+
 } // namespace WebCore
 
 #endif // HTMLFormElement_h
index a87c6cd..73bacf4 100644 (file)
@@ -100,6 +100,8 @@ private:
     bool m_noresize;
 };
 
+ELEMENT_TYPE_CASTS(HTMLFrameSetElement)
+
 } // namespace WebCore
 
 #endif // HTMLFrameSetElement_h
index 3f90c87..dedc108 100644 (file)
@@ -115,6 +115,8 @@ private:
     AtomicString m_bestFitImageURL;
 };
 
+ELEMENT_TYPE_CASTS(HTMLImageElement)
+
 } //namespace
 
 #endif
index 2300924..a17ea90 100644 (file)
@@ -443,5 +443,7 @@ private:
 #endif
 };
 
+ELEMENT_TYPE_CASTS(HTMLInputElement)
+
 } //namespace
 #endif
index 3e6debe..987154e 100644 (file)
@@ -55,6 +55,8 @@ private:
     virtual void focus(bool restorePreviousSelection, FocusDirection) OVERRIDE;
 };
 
+ELEMENT_TYPE_CASTS(HTMLLabelElement)
+
 } //namespace
 
 #endif
index dcc0d38..79df4e4 100644 (file)
@@ -45,6 +45,8 @@ private:
     virtual HTMLFormElement* virtualForm() const OVERRIDE;
 };
 
+ELEMENT_TYPE_CASTS(HTMLLegendElement)
+
 } //namespace
 
 #endif
index 5167b11..2ff03df 100644 (file)
@@ -54,6 +54,8 @@ private:
     AtomicString m_name;
 };
 
+ELEMENT_TYPE_CASTS(HTMLMapElement)
+
 } // namespaces
 
 #endif
index c6bc04d..1522760 100644 (file)
@@ -82,6 +82,8 @@ private:
     RefPtr<MeterValueElement> m_value;
 };
 
+ELEMENT_TYPE_CASTS(HTMLMeterElement)
+
 } // namespace
 
 #endif
index df901ea..41c2ec0 100644 (file)
@@ -63,6 +63,8 @@ private:
     RefPtr<RenderStyle> m_style;
 };
 
+ELEMENT_TYPE_CASTS(HTMLOptGroupElement)
+
 } //namespace
 
 #endif
index 6583353..1b17188 100644 (file)
@@ -95,6 +95,8 @@ private:
     RefPtr<RenderStyle> m_style;
 };
 
+ELEMENT_TYPE_CASTS(HTMLOptionElement)
+
 } // namespace
 
 #endif
index ed091ab..f5fc4cb 100644 (file)
@@ -43,6 +43,8 @@ private:
     virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
 };
 
+ELEMENT_TYPE_CASTS(HTMLParamElement)
+
 } // namespace WebCore
 
 #endif
index 49c6ac0..61bb860 100644 (file)
@@ -69,6 +69,8 @@ private:
     ProgressValueElement* m_value;
 };
 
+ELEMENT_TYPE_CASTS(HTMLProgressElement)
+
 } // namespace
 
 #endif
index a7878e1..d3f3ff3 100644 (file)
@@ -67,6 +67,8 @@ private:
     virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren();
 };
 
+ELEMENT_TYPE_CASTS(HTMLScriptElement)
+
 } //namespace
 
 #endif
index dc1821f..8262af0 100644 (file)
@@ -57,6 +57,8 @@ private:
     Timer<HTMLSourceElement> m_errorEventTimer;
 };
 
+ELEMENT_TYPE_CASTS(HTMLSourceElement)
+
 } //namespace
 
 #endif
index 5d68801..1174669 100644 (file)
@@ -93,6 +93,8 @@ private:
     ScopedStyleRegistrationState m_scopedStyleRegistrationState;
 };
 
+ELEMENT_TYPE_CASTS(HTMLStyleElement)
+
 } //namespace
 
 #endif
index c47f181..31c2898 100644 (file)
@@ -100,6 +100,8 @@ private:
     RefPtr<StylePropertySet> m_sharedCellStyle;
 };
 
+ELEMENT_TYPE_CASTS(HTMLTableElement)
+
 } //namespace
 
 #endif
index b9e2ba5..14edaf7 100644 (file)
@@ -51,6 +51,8 @@ private:
     HTMLTableRowElement(const QualifiedName&, Document*);
 };
 
+ELEMENT_TYPE_CASTS(HTMLTableRowElement)
+
 } // namespace
 
 #endif
index 05c9596..a9fe1c9 100644 (file)
@@ -126,6 +126,8 @@ private:
     mutable bool m_wasModifiedByUser;
 };
 
+ELEMENT_TYPE_CASTS(HTMLTextAreaElement)
+
 } //namespace
 
 #endif
index bd0589a..e388bc9 100644 (file)
@@ -46,6 +46,8 @@ private:
     StringWithDirection m_title;
 };
 
+ELEMENT_TYPE_CASTS(HTMLTitleElement)
+
 } //namespace
 
 #endif
index 9d8eb3b..24224e5 100644 (file)
@@ -97,6 +97,8 @@ private:
     Timer<HTMLTrackElement> m_loadTimer;
 };
 
+ELEMENT_TYPE_CASTS(HTMLTrackElement)
+
 }
 
 #endif
index 0f409df..710d691 100644 (file)
@@ -38,6 +38,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGAltGlyphDefElement)
+
 }
 
 #endif
index 7e18275..c2a5186 100644 (file)
@@ -54,6 +54,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGAltGlyphElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 03c5a85..3ab9529 100644 (file)
@@ -38,6 +38,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGAltGlyphItemElement)
+
 }
 
 #endif
index e21ab4b..0829759 100644 (file)
@@ -71,6 +71,8 @@ private:
     Path m_path;
     Path m_animationPath;
 };
+
+ELEMENT_TYPE_CASTS(SVGAnimateMotionElement)
     
 } // namespace WebCore
 
index 11e91ae..2253c8b 100644 (file)
@@ -48,6 +48,8 @@ private:
     SVGTransform::SVGTransformType m_type;
 };
 
+ELEMENT_TYPE_CASTS(SVGAnimateTransformElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index e04683e..73b70bc 100644 (file)
@@ -56,6 +56,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGCircleElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index a552ada..ff7edd1 100644 (file)
@@ -56,6 +56,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGClipPathElement)
+
 }
 
 #endif
index 8c5b3b3..3786119 100644 (file)
@@ -73,6 +73,8 @@ private:
     HashSet<SVGElement*> m_clients;
 };
 
+ELEMENT_TYPE_CASTS(SVGCursorElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index a3c8e43..4e9c7bc 100644 (file)
@@ -57,6 +57,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGEllipseElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 5a20900..ffd21e7 100644 (file)
@@ -35,6 +35,8 @@ private:
     virtual PassRefPtr<LightSource> lightSource() const;
 };
 
+ELEMENT_TYPE_CASTS(SVGFEDistantLightElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 4382baa..88d6b54 100644 (file)
@@ -34,6 +34,8 @@ private:
     SVGFEFuncAElement(const QualifiedName&, Document*);
 };
 
+ELEMENT_TYPE_CASTS(SVGFEFuncAElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 7645600..65285f8 100644 (file)
@@ -34,6 +34,8 @@ private:
     SVGFEFuncBElement(const QualifiedName&, Document*);
 };
 
+ELEMENT_TYPE_CASTS(SVGFEFuncBElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index a0ed694..bcae17b 100644 (file)
@@ -34,6 +34,8 @@ private:
     SVGFEFuncGElement(const QualifiedName&, Document*);
 };
 
+ELEMENT_TYPE_CASTS(SVGFEFuncGElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 83d11f5..3a82ac5 100644 (file)
@@ -34,6 +34,8 @@ private:
     SVGFEFuncRElement(const QualifiedName&, Document*);
 };
 
+ELEMENT_TYPE_CASTS(SVGFEFuncRElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index bd248f8..4bbfa35 100644 (file)
@@ -45,6 +45,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGFEMergeNodeElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index bf7a360..44747b3 100644 (file)
@@ -35,6 +35,8 @@ private:
     virtual PassRefPtr<LightSource> lightSource() const;
 };
 
+ELEMENT_TYPE_CASTS(SVGFEPointLightElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 29c7d58..11d32cc 100644 (file)
@@ -35,6 +35,8 @@ private:
     virtual PassRefPtr<LightSource> lightSource() const;
 };
 
+ELEMENT_TYPE_CASTS(SVGFESpotLightElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index cd774bd..37ad947 100644 (file)
@@ -76,6 +76,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGFilterElement)
+
 }
 
 #endif
index 9f8420a..15051a3 100644 (file)
@@ -88,6 +88,8 @@ private:
     bool m_isGlyphCacheValid;
 };
 
+ELEMENT_TYPE_CASTS(SVGFontElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index e2e104d..f1e4a6a 100644 (file)
@@ -66,6 +66,8 @@ private:
     SVGFontElement* m_fontElement;
 };
 
+ELEMENT_TYPE_CASTS(SVGFontFaceElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index 03253b9..12d5938 100644 (file)
@@ -39,6 +39,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGFontFaceNameElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index 6020db2..df8c139 100644 (file)
@@ -40,6 +40,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGFontFaceSrcElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index 9a95144..171f4d2 100644 (file)
@@ -50,6 +50,8 @@ private:
     CachedResourceHandle<CachedFont> m_cachedFont;
 };
 
+ELEMENT_TYPE_CASTS(SVGFontFaceUriElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index 8936308..9d8dda4 100644 (file)
@@ -59,6 +59,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGForeignObjectElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 27cc092..8f64148 100644 (file)
@@ -57,6 +57,8 @@ private:
     void invalidateGlyphCache();
 };
 
+ELEMENT_TYPE_CASTS(SVGGlyphElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index b4a44ae..b704948 100644 (file)
@@ -61,6 +61,8 @@ private:
     float m_dy;
 };
 
+ELEMENT_TYPE_CASTS(SVGGlyphRefElement)
+
 }
 
 #endif
index ae67571..b39c2b4 100644 (file)
@@ -42,6 +42,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGHKernElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index 18315c9..4fe6a05 100644 (file)
@@ -76,6 +76,8 @@ private:
     SVGImageLoader m_imageLoader;
 };
 
+ELEMENT_TYPE_CASTS(SVGImageElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index ffba824..6d344ae 100644 (file)
@@ -57,6 +57,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGLineElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 7c42137..3964093 100644 (file)
@@ -55,6 +55,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGLinearGradientElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 159ed39..42efb99 100644 (file)
@@ -66,6 +66,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGMPathElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 6ff04a2..bbfe0a4 100644 (file)
@@ -165,6 +165,8 @@ private:
     mutable SVGSynchronizableAnimatedProperty<SVGMarkerOrientType> m_orientType;
 };
 
+ELEMENT_TYPE_CASTS(SVGMarkerElement)
+
 }
 
 #endif
index 5e786dc..8160b50 100644 (file)
@@ -69,6 +69,8 @@ private:
     virtual void synchronizeSystemLanguage() { SVGTests::synchronizeSystemLanguage(this); }
 };
 
+ELEMENT_TYPE_CASTS(SVGMaskElement)
+
 }
 
 #endif
index a44d846..c01b3e6 100644 (file)
@@ -36,6 +36,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGMissingGlyphElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index 5e1f3fa..fc3658d 100644 (file)
@@ -131,6 +131,8 @@ private:
     bool m_isAnimValObserved;
 };
 
+ELEMENT_TYPE_CASTS(SVGPathElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index c567fb8..f11388e 100644 (file)
@@ -87,6 +87,8 @@ private:
     virtual void synchronizeSystemLanguage() { SVGTests::synchronizeSystemLanguage(this); }
 };
 
+ELEMENT_TYPE_CASTS(SVGPatternElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 6903e49..73b4697 100644 (file)
@@ -57,6 +57,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGRadialGradientElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 9d801ae..e6139df 100644 (file)
@@ -60,6 +60,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGRectElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 9de8f54..8d11ae6 100644 (file)
@@ -183,6 +183,8 @@ private:
     RefPtr<SVGViewSpec> m_viewSpec;
 };
 
+ELEMENT_TYPE_CASTS(SVGSVGElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 1bbf0e1..f21adb0 100644 (file)
@@ -87,6 +87,8 @@ private:
     Timer<SVGElement> m_svgLoadEventTimer;
 };
 
+ELEMENT_TYPE_CASTS(SVGScriptElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 05a5a4f..650689c 100644 (file)
@@ -69,6 +69,8 @@ private:
     Timer<SVGElement> m_svgLoadEventTimer;
 };
 
+ELEMENT_TYPE_CASTS(SVGStyleElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index d43636d..5c09edf 100644 (file)
@@ -41,6 +41,8 @@ private:
     virtual bool childShouldCreateRenderer(const Node*) const;
 };
 
+ELEMENT_TYPE_CASTS(SVGTextElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 8f58b24..32dcd0f 100644 (file)
@@ -141,6 +141,8 @@ private:
     END_DECLARE_ANIMATED_PROPERTIES
 };
 
+ELEMENT_TYPE_CASTS(SVGTextPathElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index 5d0c9e3..cc14376 100644 (file)
@@ -41,6 +41,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGTitleElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)
index f435e6e..a5eb659 100644 (file)
@@ -128,6 +128,8 @@ private:
     Timer<SVGElement> m_svgLoadEventTimer;
 };
 
+ELEMENT_TYPE_CASTS(SVGUseElement)
+
 }
 
 #endif
index cf1bc98..f1987b1 100644 (file)
@@ -41,6 +41,8 @@ private:
     virtual bool rendererIsNeeded(const RenderStyle&) { return false; }
 };
 
+ELEMENT_TYPE_CASTS(SVGVKernElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG_FONTS)
index 983f984..1b9ee54 100644 (file)
@@ -66,6 +66,8 @@ private:
     SVGStringList m_viewTarget;
 };
 
+ELEMENT_TYPE_CASTS(SVGViewElement)
+
 } // namespace WebCore
 
 #endif // ENABLE(SVG)