ProxyArray* ProxyArray::reseatable(ArrayData* oldArr, ArrayData* newArr) { if (innerArr(oldArr) != newArr) { decRefArr(innerArr(oldArr)); newArr->incRefCount(); asProxyArray(oldArr)->m_ad = newArr; } return asProxyArray(oldArr); }
ArrayData* ProxyArray::PlusEq(ArrayData* ad, const ArrayData* elems) { auto const ret = ad->hasMultipleRefs() ? Make(innerArr(ad)) : asProxyArray(ad); auto r = ret->m_ad->plusEq(elems); return reseatable(ad, r); }
void ProxyArray::reseatable(const ArrayData* oldArr, ArrayData* newArr) { if (innerArr(oldArr) != newArr) { auto old = innerArr(oldArr); asProxyArray(oldArr)->m_ref->tv()->m_data.parr = newArr; decRefArr(old); } }
void ProxyArray::reseatable(const ArrayData* oldArr, ArrayData* newArr) { if (innerArr(oldArr) != newArr) { decRefArr(innerArr(oldArr)); newArr->incRefCount(); asProxyArray(oldArr)->m_ref->tv()->m_data.parr = newArr; } }
void ProxyArray::Release(ArrayData*ad) { decRefRef(asProxyArray(ad)->m_ref); MM().objFree(ad, sizeof(ProxyArray)); }
ArrayData* ProxyArray::innerArr(const ArrayData* ad) { return asProxyArray(ad)->m_ref->tv()->m_data.parr; }
ArrayData* ProxyArray::innerArr(const ArrayData* ad) { return asProxyArray(ad)->m_ad; }