Variant DynamicObjectData::t___set(Variant v_name, Variant v_value) { if (!parent.isNull()) { return parent->t___set(v_name, withRefBind(v_value)); } else { return ObjectData::t___set(v_name, withRefBind(v_value)); } }
Variant EvalObjectData::t___set(Variant v_name, Variant v_value) { const MethodStatement *ms = getMethodStatement("__set"); if (ms) { return ms->invokeInstance(Object(root), CREATE_VECTOR2(v_name, withRefBind(v_value)), false); } else { return DynamicObjectData::t___set(v_name, withRefBind(v_value)); } }
ZendArray *VectorArray::escalateToNonEmptyZendArray() const { assert(m_size); ZendArray *ret; ZendArray::Bucket *p[256], **pp; if (LIKELY(m_size < 256)) { pp = p; } else { pp = (ZendArray::Bucket **)malloc(sizeof(ZendArray::Bucket *) * (m_size + 1)); } DECLARE_ALLOCATOR(a, ZendArray::Bucket, Bucket); for (int64 i = 0; i < m_size; i++) { CVarRef v = tvAsCVarRef(&m_elems[i]); pp[i] = NEWALLOC(a) ZendArray::Bucket(i, withRefBind(v)); } pp[m_size] = nullptr; ret = NEW(ZendArray)(m_size, m_size, pp); if (UNLIKELY(pp != p)) free(pp); if (m_pos != ArrayData::invalid_index) { ret->setPosition(ret->getIndex(m_pos)); } else { ret->setPosition(0); } return ret; }
bool ZendArray::nextInsertWithRef(CVarRef data) { int64 h = m_nNextFreeElement; Bucket * p = NEW(Bucket)(withRefBind(data)); p->h = h; uint nIndex = (h & m_nTableMask); CONNECT_TO_BUCKET_LIST(p, m_arBuckets[nIndex]); SET_ARRAY_BUCKET_HEAD(m_arBuckets, nIndex, p); CONNECT_TO_GLOBAL_DLLIST(p); m_nNextFreeElement = h + 1; if (++m_nNumOfElements > m_nTableSize) { resize(); } return true; }
HOT_FUNC_HPHP bool ZendArray::addValWithRef(StringData *key, CVarRef data) { int64 h = key->hash(); Bucket *p = findForInsert(key->data(), key->size(), h); if (p) { return false; } p = NEW(Bucket)(withRefBind(data)); p->setStrKey(key, h); uint nIndex = (h & m_nTableMask); CONNECT_TO_BUCKET_LIST(p, m_arBuckets[nIndex]); SET_ARRAY_BUCKET_HEAD(m_arBuckets, nIndex, p); CONNECT_TO_GLOBAL_DLLIST(p); if (++m_size > tableSize()) { resize(); } return true; }
bool ZendArray::addValWithRef(StringData *key, CVarRef data) { int64 h = key->hash(); Bucket *p = find(key->data(), key->size(), h); if (p) { return false; } p = NEW(Bucket)(withRefBind(data)); p->key = key; p->key->incRefCount(); p->h = h; uint nIndex = (h & m_nTableMask); CONNECT_TO_BUCKET_LIST(p, m_arBuckets[nIndex]); SET_ARRAY_BUCKET_HEAD(m_arBuckets, nIndex, p); CONNECT_TO_GLOBAL_DLLIST(p); if (++m_nNumOfElements > m_nTableSize) { resize(); } return true; }
bool ZendArray::addValWithRef(int64 h, CVarRef data) { Bucket *p = find(h); if (p) { return false; } p = NEW(Bucket)(withRefBind(data)); p->h = h; uint nIndex = (h & m_nTableMask); CONNECT_TO_BUCKET_LIST(p, m_arBuckets[nIndex]); SET_ARRAY_BUCKET_HEAD(m_arBuckets, nIndex, p); CONNECT_TO_GLOBAL_DLLIST(p); if (h >= m_nNextFreeElement && m_nNextFreeElement >= 0) { m_nNextFreeElement = h + 1; } if (++m_nNumOfElements > m_nTableSize) { resize(); } return true; }