Пример #1
0
ProxyArray* ProxyArray::reseatable(ArrayData* oldArr, ArrayData* newArr) {
  if (innerArr(oldArr) != newArr) {
    decRefArr(innerArr(oldArr));
    newArr->incRefCount();
    asProxyArray(oldArr)->m_ad = newArr;
  }
  return asProxyArray(oldArr);
}
Пример #2
0
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);
}
Пример #3
0
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);
  }
}
Пример #4
0
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;
  }
}
Пример #5
0
void ProxyArray::Release(ArrayData*ad) {
  decRefRef(asProxyArray(ad)->m_ref);
  MM().objFree(ad, sizeof(ProxyArray));
}
Пример #6
0
ArrayData* ProxyArray::innerArr(const ArrayData* ad) {
  return asProxyArray(ad)->m_ref->tv()->m_data.parr;
}
Пример #7
0
ArrayData* ProxyArray::innerArr(const ArrayData* ad) {
  return asProxyArray(ad)->m_ad;
}