ArrayData* MutableArrayIter::cowCheck() { ArrayData* data; if (m_var) { data = getData(); if (!data) return NULL; if (data->getCount() > 1 && !data->noCopyOnWrite()) { *const_cast<Variant*>(m_var) = (data = data->copyWithStrongIterators()); } } else { assert(m_data); data = m_data; if (data->getCount() > 1 && !data->noCopyOnWrite()) { ArrayData* copied = data->copyWithStrongIterators(); copied->incRefCount(); decRefArr(data); m_data = data = copied; } } return data; }