ArrayData *ZendArray::setRef(CStrRef k, CVarRef v, bool copy) { if (UNLIKELY(copy)) { ZendArray *a = copyImpl(); a->updateRef(k.get(), v); return a; } updateRef(k.get(), v); return NULL; }
ArrayData *VectorArray::setRef(CVarRef k, CVarRef v, bool copy) { Variant::TypedValueAccessor tva = k.getTypedAccessor(); if (isIntKey(tva)) { return VectorArray::setRef(getIntKey(tva), v, copy); } ASSERT(k.isString()); ZendArray *a = escalateToZendArray(); a->updateRef(getStringKey(tva), v); return a; }
ArrayData *ZendArray::setRef(CVarRef k, CVarRef v, bool copy) { TypedValueAccessor tva = k.getTypedAccessor(); if (isIntKey(tva)) { if (UNLIKELY(copy)) { ZendArray *a = copyImpl(); a->updateRef(getIntKey(tva), v); return a; } updateRef(getIntKey(tva), v); return NULL; } else { ASSERT(k.isString()); StringData *sd = getStringKey(tva); if (UNLIKELY(copy)) { ZendArray *a = copyImpl(); a->updateRef(sd, v); return a; } updateRef(sd, v); return NULL; } }
ArrayData *VectorArray::setRef(int64 k, CVarRef v, bool copy) { if (UNLIKELY(copy)) { if (inRange(k, m_size) || k == m_size) { VectorArray *a = NEW(VectorArray)(this); a->VectorArray::setRef(k, v, false); return a; } } else { if (inRange(k, m_size)) { tvAsVariant(&m_elems[k]).assignRef(v); return nullptr; } else if (k == m_size) { checkSize(); tvAsUninitializedVariant(&m_elems[k]).constructRefHelper(v); checkInsertIterator((ssize_t)k); m_size++; return nullptr; } } ZendArray *a = escalateToZendArray(); a->updateRef(k, v); return a; }
ArrayData *VectorArray::setRef(StringData* k, CVarRef v, bool copy) { ZendArray *a = escalateToZendArray(); a->updateRef(k, v); return a; }
ArrayData *VectorArray::setRef(CStrRef k, CVarRef v, bool copy) { ZendArray *a = escalateToZendArray(); a->updateRef(k.get(), v); return a; }