void ElementData::destroy() { if (m_isUnique) delete toUniqueElementData(this); else delete toShareableElementData(this); }
void ElementData::finalizeGarbageCollectedObject() { if (m_isUnique) toUniqueElementData(this)->~UniqueElementData(); else toShareableElementData(this)->~ShareableElementData(); }
void ElementData::trace(Visitor* visitor) { if (m_isUnique) toUniqueElementData(this)->traceAfterDispatch(visitor); else toShareableElementData(this)->traceAfterDispatch(visitor); }
void Element::createUniqueElementData() { if (!m_elementData) m_elementData = UniqueElementData::create(); else { ASSERT(!m_elementData->isUnique()); m_elementData = toShareableElementData(m_elementData)->makeUniqueCopy(); } }
PassRefPtr<UniqueElementData> ElementData::makeUniqueCopy() const { if (isUnique()) return adoptRef(new UniqueElementData(toUniqueElementData(*this))); return adoptRef(new UniqueElementData(toShareableElementData(*this))); }