Index: Source/core/dom/ElementData.h |
diff --git a/Source/core/dom/ElementData.h b/Source/core/dom/ElementData.h |
index f7f4a07996c6b120ea9dc68fa6fa1ba45abd22b0..2eb84fb67049b0ba46438837b5a3f633ed3b94de 100644 |
--- a/Source/core/dom/ElementData.h |
+++ b/Source/core/dom/ElementData.h |
@@ -78,6 +78,7 @@ public: |
bool isEquivalent(const ElementData* other) const; |
bool isUnique() const { return m_isUnique; } |
+ bool isShareable() const { return !m_isUnique; } |
void traceAfterDispatch(Visitor*); |
void trace(Visitor*); |
@@ -111,6 +112,10 @@ private: |
PassRefPtrWillBeRawPtr<UniqueElementData> makeUniqueCopy() const; |
}; |
+#define DEFINE_ELEMENT_DATA_TYPE_CASTS(thisType, predicate) \ |
+ template<typename T> inline thisType* to##thisType(const RefPtr<T>& data) { return to##thisType(data.get()); } \ |
Inactive
2014/07/21 19:37:47
Sorry, I thought the macro was doing this for us a
gyuyoung-inactive
2014/07/22 00:20:32
I removed .get() in issue 401553002 as well. I wou
Inactive
2014/07/22 00:44:29
Ok, I see tkent's comment on the other CL, fine th
tkent
2014/07/22 00:57:12
I agree with Chris. Adding the intermediate macro
|
+ DEFINE_TYPE_CASTS(thisType, ElementData, data, data->predicate, data.predicate) |
+ |
#if COMPILER(MSVC) |
#pragma warning(push) |
#pragma warning(disable: 4200) // Disable "zero-sized array in struct/union" warning |
@@ -145,6 +150,8 @@ public: |
Attribute m_attributeArray[0]; |
}; |
+DEFINE_ELEMENT_DATA_TYPE_CASTS(ShareableElementData, isShareable()); |
+ |
#if COMPILER(MSVC) |
#pragma warning(pop) |
#endif |
@@ -183,6 +190,8 @@ public: |
Vector<Attribute, 4> m_attributeVector; |
}; |
+DEFINE_ELEMENT_DATA_TYPE_CASTS(UniqueElementData, isUnique()); |
+ |
#if !ENABLE(OILPAN) |
inline void ElementData::deref() |
{ |
@@ -196,14 +205,14 @@ inline const StylePropertySet* ElementData::presentationAttributeStyle() const |
{ |
if (!m_isUnique) |
return 0; |
- return static_cast<const UniqueElementData*>(this)->m_presentationAttributeStyle.get(); |
+ return toUniqueElementData(this)->m_presentationAttributeStyle.get(); |
} |
inline AttributeCollection ElementData::attributes() const |
{ |
if (isUnique()) |
- return static_cast<const UniqueElementData*>(this)->attributes(); |
- return static_cast<const ShareableElementData*>(this)->attributes(); |
+ return toUniqueElementData(this)->attributes(); |
+ return toShareableElementData(this)->attributes(); |
} |
inline AttributeCollection ShareableElementData::attributes() const |