Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: Source/build/scripts/templates/ElementTypeHelpers.h.tmpl

Issue 195993009: Generate better isFooElement() helper functions for HTML Elements (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/core/html/HTMLElement.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 {% from "macros.tmpl" import license -%} 1 {% from "macros.tmpl" import license -%}
2 {{ license() }} 2 {{ license() }}
3 3
4 #ifndef {{namespace}}ElementTypeHelpers_h 4 #ifndef {{namespace}}ElementTypeHelpers_h
5 #define {{namespace}}ElementTypeHelpers_h 5 #define {{namespace}}ElementTypeHelpers_h
6 6
7 #include "core/dom/ContextFeatures.h" 7 #include "core/dom/ContextFeatures.h"
8 #include "core/dom/Element.h" 8 #include "core/dom/Element.h"
9 #include "{{namespace}}Names.h" 9 #include "{{namespace}}Names.h"
10 #include "RuntimeEnabledFeatures.h" 10 #include "RuntimeEnabledFeatures.h"
11 11
12 namespace WebCore { 12 namespace WebCore {
13 // Type checking. 13 // Type checking.
14 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} 14 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %}
15 class {{tag.interface}}; 15 class {{tag.interface}};
16 void is{{tag.interface}}(const {{tag.interface}}&); // Catch unnecessary runtime check of type known at compile time. 16 void is{{tag.interface}}(const {{tag.interface}}&); // Catch unnecessary runtime check of type known at compile time.
17 void is{{tag.interface}}(const {{tag.interface}}*); // Catch unnecessary runtime check of type known at compile time. 17 void is{{tag.interface}}(const {{tag.interface}}*); // Catch unnecessary runtime check of type known at compile time.
18
19 {# For HTML Elements, call hasLocalName() instead of hasTagName() to avoid check ing the namespace unnecessarily #}
20 {%- if namespace == "HTML" -%}
21 inline bool is{{tag.interface}}(const HTMLElement& element) {
22 {%- if tag.runtimeEnabled or tag.contextConditional %}
23 if (element.isHTMLUnknownElement())
24 return false;
25 {%- endif %}
26 return element.hasLocalName(HTMLNames::{{tag|symbol}}Tag);
27 }
28 inline bool is{{tag.interface}}(const Element& element) {
29 return element.isHTMLElement() && is{{tag.interface}}(toHTMLElement(element) );
30 }
31 inline bool is{{tag.interface}}(const HTMLElement* element) { return element && is{{tag.interface}}(*element); }
32 {% else %}
18 inline bool is{{tag.interface}}(const Element& element) { 33 inline bool is{{tag.interface}}(const Element& element) {
19 {%- if tag.contextConditional %} 34 {%- if tag.contextConditional %}
20 if (!ContextFeatures::{{tag.contextConditional}}Enabled(&element.document()) ) 35 if (!ContextFeatures::{{tag.contextConditional}}Enabled(&element.document()) )
21 return false; 36 return false;
22 {%- endif %} 37 {%- endif %}
23 {%- if tag.runtimeEnabled %} 38 {%- if tag.runtimeEnabled %}
24 if (!RuntimeEnabledFeatures::{{tag.runtimeEnabled}}Enabled()) 39 if (!RuntimeEnabledFeatures::{{tag.runtimeEnabled}}Enabled())
25 return false; 40 return false;
26 {%- endif %} 41 {%- endif %}
27 return element.hasTagName({{namespace}}Names::{{tag|symbol}}Tag); 42 return element.hasTagName({{namespace}}Names::{{tag|symbol}}Tag);
28 } 43 }
44 {%- endif -%}
45
29 inline bool is{{tag.interface}}(const Element* element) { return element && is{{ tag.interface}}(*element); } 46 inline bool is{{tag.interface}}(const Element* element) { return element && is{{ tag.interface}}(*element); }
30 template<typename T> inline bool is{{tag.interface}}(const PassRefPtr<T>& node) { return is{{tag.interface}}(node.get()); } 47 template<typename T> inline bool is{{tag.interface}}(const PassRefPtr<T>& node) { return is{{tag.interface}}(node.get()); }
31 template<typename T> inline bool is{{tag.interface}}(const RefPtr<T>& node) { re turn is{{tag.interface}}(node.get()); } 48 template<typename T> inline bool is{{tag.interface}}(const RefPtr<T>& node) { re turn is{{tag.interface}}(node.get()); }
32 inline bool is{{tag.interface}}(const Node& node) { return node.isElementNode() ? is{{tag.interface}}(toElement(node)) : false; } 49 inline bool is{{tag.interface}}(const Node& node) { return node.isElementNode() ? is{{tag.interface}}(toElement(node)) : false; }
33 inline bool is{{tag.interface}}(const Node* node) { return node && node->isEleme ntNode() ? is{{tag.interface}}(*toElement(node)) : false; } 50 inline bool is{{tag.interface}}(const Node* node) { return node && node->isEleme ntNode() ? is{{tag.interface}}(*toElement(node)) : false; }
34 template <> inline bool isElementOfType<const {{tag.interface}}>(const Element& element) { return is{{tag.interface}}(element); } 51 template <> inline bool isElementOfType<const {{tag.interface}}>(const Element& element) { return is{{tag.interface}}(element); }
52 {%- if namespace == "HTML" %}
53 template <> inline bool isElementOfType<const {{tag.interface}}>(const HTMLEleme nt& element) { return is{{tag.interface}}(element); }
54 {%- endif %}
55
35 {% endfor %} 56 {% endfor %}
36 57
37 // Using macros because the types are forward-declared and we don't want to use reinterpret_cast in the 58 // Using macros because the types are forward-declared and we don't want to use reinterpret_cast in the
38 // casting functions above. reinterpret_cast would be unsafe due to multiple inh eritence. 59 // casting functions above. reinterpret_cast would be unsafe due to multiple inh eritence.
39 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %} 60 {% for tag in tags|sort if not tag.multipleTagNames and not tag.noTypeHelpers %}
40 #define to{{tag.interface}}(x) WebCore::toElement<WebCore::{{tag.interface}}>(x) 61 #define to{{tag.interface}}(x) WebCore::toElement<WebCore::{{tag.interface}}>(x)
41 {% endfor %} 62 {% endfor %}
42 } // WebCore 63 } // WebCore
43 64
44 #endif 65 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/core/html/HTMLElement.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698