#if ZEND_DEBUG
# define HT_ASSERT(ht, expr) \
- ZEND_ASSERT((expr) || ((ht)->u.flags & HASH_FLAG_ALLOW_COW_VIOLATION))
+ ZEND_ASSERT((expr) || (HT_FLAGS(ht) & HASH_FLAG_ALLOW_COW_VIOLATION))
#else
# define HT_ASSERT(ht, expr)
#endif
static zend_always_inline void zend_hash_real_init_ex(HashTable *ht, int packed)
{
HT_ASSERT_RC1(ht);
- ZEND_ASSERT(!((ht)->u.flags & HASH_FLAG_INITIALIZED));
+ ZEND_ASSERT(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED));
if (packed) {
HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT));
- (ht)->u.flags |= HASH_FLAG_INITIALIZED | HASH_FLAG_PACKED;
+ HT_FLAGS(ht) |= HASH_FLAG_INITIALIZED | HASH_FLAG_PACKED;
HT_HASH_RESET_PACKED(ht);
} else {
(ht)->nTableMask = -(ht)->nTableSize;
HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT));
- (ht)->u.flags |= HASH_FLAG_INITIALIZED;
+ HT_FLAGS(ht) |= HASH_FLAG_INITIALIZED;
if (EXPECTED(ht->nTableMask == (uint32_t)-8)) {
Bucket *arData = ht->arData;
static zend_always_inline void zend_hash_check_init(HashTable *ht, int packed)
{
HT_ASSERT_RC1(ht);
- if (UNEXPECTED(!((ht)->u.flags & HASH_FLAG_INITIALIZED))) {
+ if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
zend_hash_real_init_ex(ht, packed);
}
}
{
GC_SET_REFCOUNT(ht, 1);
GC_TYPE_INFO(ht) = IS_ARRAY | (persistent ? (GC_PERSISTENT << GC_FLAGS_SHIFT) : (GC_COLLECTABLE << GC_FLAGS_SHIFT));
- ht->u.flags = HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) = HASH_FLAG_STATIC_KEYS;
ht->nTableMask = HT_MIN_MASK;
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
ht->nNumUsed = 0;
Bucket *old_buckets = ht->arData;
HT_ASSERT_RC1(ht);
- ht->u.flags &= ~HASH_FLAG_PACKED;
+ HT_FLAGS(ht) &= ~HASH_FLAG_PACKED;
new_data = pemalloc(HT_SIZE_EX(ht->nTableSize, -ht->nTableSize), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
ht->nTableMask = -ht->nTableSize;
HT_SET_DATA_ADDR(ht, new_data);
HT_ASSERT_RC1(ht);
new_data = pemalloc(HT_SIZE_EX(ht->nTableSize, HT_MIN_MASK), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
- ht->u.flags |= HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) |= HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS;
ht->nTableMask = HT_MIN_MASK;
HT_SET_DATA_ADDR(ht, new_data);
HT_HASH_RESET_PACKED(ht);
{
HT_ASSERT_RC1(ht);
if (nSize == 0) return;
- if (UNEXPECTED(!((ht)->u.flags & HASH_FLAG_INITIALIZED))) {
+ if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
if (nSize > ht->nTableSize) {
ht->nTableSize = zend_hash_check_size(nSize);
}
zend_hash_check_init(ht, packed);
} else {
if (packed) {
- ZEND_ASSERT(ht->u.flags & HASH_FLAG_PACKED);
+ ZEND_ASSERT(HT_FLAGS(ht) & HASH_FLAG_PACKED);
if (nSize > ht->nTableSize) {
ht->nTableSize = zend_hash_check_size(nSize);
HT_SET_DATA_ADDR(ht, perealloc2(HT_GET_DATA_ADDR(ht), HT_SIZE(ht), HT_USED_SIZE(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT));
}
} else {
- ZEND_ASSERT(!(ht->u.flags & HASH_FLAG_PACKED));
+ ZEND_ASSERT(!(HT_FLAGS(ht) & HASH_FLAG_PACKED));
if (nSize > ht->nTableSize) {
void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
Bucket *old_buckets = ht->arData;
IS_CONSISTENT(ht);
HT_ASSERT_RC1(ht);
- if (UNEXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
+ if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
CHECK_INIT(ht, 0);
if (!ZSTR_IS_INTERNED(key)) {
zend_string_addref(key);
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_hash_val(key);
}
goto add_to_hash;
- } else if (ht->u.flags & HASH_FLAG_PACKED) {
+ } else if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
zend_hash_packed_to_hash(ht);
if (!ZSTR_IS_INTERNED(key)) {
zend_string_addref(key);
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_hash_val(key);
}
} else if ((flag & HASH_ADD_NEW) == 0) {
}
if (!ZSTR_IS_INTERNED(key)) {
zend_string_addref(key);
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
}
} else if (!ZSTR_IS_INTERNED(key)) {
zend_string_addref(key);
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_hash_val(key);
}
IS_CONSISTENT(ht);
HT_ASSERT_RC1(ht);
- if (UNEXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
+ if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
CHECK_INIT(ht, 0);
goto add_to_hash;
- } else if (ht->u.flags & HASH_FLAG_PACKED) {
+ } else if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
zend_hash_packed_to_hash(ht);
} else if ((flag & HASH_ADD_NEW) == 0) {
p = zend_hash_str_find_bucket(ht, str, len, h);
p = ht->arData + idx;
p->key = key = zend_string_init(str, len, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
p->h = ZSTR_H(key) = h;
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
ZVAL_COPY_VALUE(&p->val, pData);
nIndex = h | ht->nTableMask;
Z_NEXT(p->val) = HT_HASH(ht, nIndex);
IS_CONSISTENT(ht);
HT_ASSERT_RC1(ht);
- if (UNEXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
+ if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
CHECK_INIT(ht, h < ht->nTableSize);
if (h < ht->nTableSize) {
p = ht->arData + h;
goto add_to_packed;
}
goto add_to_hash;
- } else if (ht->u.flags & HASH_FLAG_PACKED) {
+ } else if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
if (h < ht->nNumUsed) {
p = ht->arData + h;
if (Z_TYPE(p->val) != IS_UNDEF) {
IS_CONSISTENT(ht);
if (UNEXPECTED(ht->nNumOfElements == 0)) {
- if (ht->u.flags & HASH_FLAG_INITIALIZED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_INITIALIZED) {
ht->nNumUsed = 0;
HT_HASH_RESET(ht);
}
static zend_always_inline void _zend_hash_del_el_ex(HashTable *ht, uint32_t idx, Bucket *p, Bucket *prev)
{
- if (!(ht->u.flags & HASH_FLAG_PACKED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_PACKED)) {
if (prev) {
Z_NEXT(prev->val) = Z_NEXT(p->val);
} else {
{
Bucket *prev = NULL;
- if (!(ht->u.flags & HASH_FLAG_PACKED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_PACKED)) {
uint32_t nIndex = p->h | ht->nTableMask;
uint32_t i = HT_HASH(ht, nIndex);
IS_CONSISTENT(ht);
HT_ASSERT_RC1(ht);
- if (ht->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
if (h < ht->nNumUsed) {
p = ht->arData + h;
if (Z_TYPE(p->val) != IS_UNDEF) {
}
}
zend_hash_iterators_remove(ht);
- } else if (EXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
+ } else if (EXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
return;
}
pefree(HT_GET_DATA_ADDR(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
}
zend_hash_iterators_remove(ht);
SET_INCONSISTENT(HT_DESTROYED);
- } else if (EXPECTED(!(ht->u.flags & HASH_FLAG_INITIALIZED))) {
+ } else if (EXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
goto free_ht;
}
efree(HT_GET_DATA_ADDR(ht));
}
}
}
- if (!(ht->u.flags & HASH_FLAG_PACKED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_PACKED)) {
HT_HASH_RESET(ht);
}
}
if (UNEXPECTED(Z_TYPE(p->val) == IS_UNDEF)) continue;
_zend_hash_del_el(ht, HT_IDX_TO_HASH(idx), p);
}
- if (ht->u.flags & HASH_FLAG_INITIALIZED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_INITIALIZED) {
pefree(HT_GET_DATA_ADDR(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
}
_zend_hash_del_el(ht, HT_IDX_TO_HASH(idx), p);
}
- if (ht->u.flags & HASH_FLAG_INITIALIZED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_INITIALIZED) {
pefree(HT_GET_DATA_ADDR(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT);
}
target->pDestructor = source->pDestructor;
if (source->nNumUsed == 0) {
- target->u.flags = (source->u.flags & ~(HASH_FLAG_INITIALIZED|HASH_FLAG_PACKED)) | HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(target) = (HT_FLAGS(source) & ~(HASH_FLAG_INITIALIZED|HASH_FLAG_PACKED)) | HASH_FLAG_STATIC_KEYS;
target->nTableMask = HT_MIN_MASK;
target->nNumUsed = 0;
target->nNumOfElements = 0;
target->nInternalPointer = HT_INVALID_IDX;
HT_SET_DATA_ADDR(target, &uninitialized_bucket);
} else if (GC_FLAGS(source) & IS_ARRAY_IMMUTABLE) {
- target->u.flags = source->u.flags;
+ HT_FLAGS(target) = HT_FLAGS(source);
target->nTableMask = source->nTableMask;
target->nNumUsed = source->nNumUsed;
target->nNumOfElements = source->nNumOfElements;
}
target->nInternalPointer = idx;
}
- } else if (source->u.flags & HASH_FLAG_PACKED) {
- target->u.flags = source->u.flags;
+ } else if (HT_FLAGS(source) & HASH_FLAG_PACKED) {
+ HT_FLAGS(target) = HT_FLAGS(source);
target->nTableMask = source->nTableMask;
target->nNumUsed = source->nNumUsed;
target->nNumOfElements = source->nNumOfElements;
target->nInternalPointer = idx;
}
} else {
- target->u.flags = source->u.flags;
+ HT_FLAGS(target) = HT_FLAGS(source);
target->nTableMask = source->nTableMask;
target->nNextFreeElement = source->nNextFreeElement;
target->nInternalPointer = source->nInternalPointer;
IS_CONSISTENT(ht);
- if (ht->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
if (h < ht->nNumUsed) {
p = ht->arData + h;
if (Z_TYPE(p->val) != IS_UNDEF) {
IS_CONSISTENT(ht);
- if (ht->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
if (h < ht->nNumUsed) {
if (Z_TYPE(ht->arData[h].val) != IS_UNDEF) {
return 1;
sort((void *)ht->arData, i, sizeof(Bucket), compar,
(swap_func_t)(renumber? zend_hash_bucket_renum_swap :
- ((ht->u.flags & HASH_FLAG_PACKED) ? zend_hash_bucket_packed_swap : zend_hash_bucket_swap)));
+ ((HT_FLAGS(ht) & HASH_FLAG_PACKED) ? zend_hash_bucket_packed_swap : zend_hash_bucket_swap)));
ht->nNumUsed = i;
ht->nInternalPointer = 0;
ht->nNextFreeElement = i;
}
- if (ht->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
if (!renumber) {
zend_hash_packed_to_hash(ht);
}
Bucket *old_buckets = ht->arData;
new_data = pemalloc(HT_SIZE_EX(ht->nTableSize, HT_MIN_MASK), (GC_FLAGS(ht) & IS_ARRAY_PERSISTENT));
- ht->u.flags |= HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) |= HASH_FLAG_PACKED | HASH_FLAG_STATIC_KEYS;
ht->nTableMask = HT_MIN_MASK;
HT_SET_DATA_ADDR(ht, new_data);
memcpy(ht->arData, old_buckets, sizeof(Bucket) * ht->nNumUsed);
#define HASH_FLAG_HAS_EMPTY_IND (1<<5)
#define HASH_FLAG_ALLOW_COW_VIOLATION (1<<6)
+#define HT_FLAGS(ht) (ht)->u.flags
+
#define HT_IS_PACKED(ht) \
- (((ht)->u.flags & HASH_FLAG_PACKED) != 0)
+ ((HT_FLAGS(ht) & HASH_FLAG_PACKED) != 0)
#define HT_IS_WITHOUT_HOLES(ht) \
((ht)->nNumUsed == (ht)->nNumOfElements)
#define HT_HAS_STATIC_KEYS_ONLY(ht) \
- (((ht)->u.flags & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) != 0)
+ ((HT_FLAGS(ht) & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) != 0)
#if ZEND_DEBUG
-# define HT_ALLOW_COW_VIOLATION(ht) (ht)->u.flags |= HASH_FLAG_ALLOW_COW_VIOLATION
+# define HT_ALLOW_COW_VIOLATION(ht) HT_FLAGS(ht) |= HASH_FLAG_ALLOW_COW_VIOLATION
#else
# define HT_ALLOW_COW_VIOLATION(ht)
#endif
}
#define ZEND_HASH_INDEX_FIND(_ht, _h, _ret, _not_found) do { \
- if (EXPECTED((_ht)->u.flags & HASH_FLAG_PACKED)) { \
+ if (EXPECTED(HT_FLAGS(_ht) & HASH_FLAG_PACKED)) { \
if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) { \
_ret = &_ht->arData[_h].val; \
if (UNEXPECTED(Z_TYPE_P(_ret) == IS_UNDEF)) { \
HashTable *__fill_ht = (ht); \
Bucket *__fill_bkt = __fill_ht->arData + __fill_ht->nNumUsed; \
uint32_t __fill_idx = __fill_ht->nNumUsed; \
- ZEND_ASSERT(__fill_ht->u.flags & HASH_FLAG_PACKED);
+ ZEND_ASSERT(HT_FLAGS(__fill_ht) & HASH_FLAG_PACKED);
#define ZEND_HASH_FILL_ADD(_val) do { \
ZVAL_COPY_VALUE(&__fill_bkt->val, _val); \
ZVAL_COPY_VALUE(&p->val, zv);
if (!ZSTR_IS_INTERNED(key)) {
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_addref(key);
zend_string_hash_val(key);
}
ZVAL_PTR(&p->val, ptr);
if (!ZSTR_IS_INTERNED(key)) {
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_addref(key);
zend_string_hash_val(key);
}
ZVAL_INDIRECT(&p->val, ptr);
if (!ZSTR_IS_INTERNED(key)) {
- ht->u.flags &= ~HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
zend_string_addref(key);
zend_string_hash_val(key);
}
ht->nNumOfElements = source->nNumOfElements;
ht->nNextFreeElement = source->nNextFreeElement;
ht->pDestructor = ZVAL_PTR_DTOR;
- ht->u.flags = (source->u.flags & HASH_FLAG_INITIALIZED);
+ HT_FLAGS(ht) = (HT_FLAGS(source) & HASH_FLAG_INITIALIZED);
ht->nInternalPointer = source->nNumOfElements ? 0 : HT_INVALID_IDX;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
ht->arData = source->arData;
return;
}
- ZEND_ASSERT((source->u.flags & HASH_FLAG_PACKED) == 0);
+ ZEND_ASSERT((HT_FLAGS(source) & HASH_FLAG_PACKED) == 0);
HT_SET_DATA_ADDR(ht, emalloc(HT_SIZE(ht)));
HT_HASH_RESET(ht);
ht->nNumOfElements = source->nNumOfElements;
ht->nNextFreeElement = source->nNextFreeElement;
ht->pDestructor = ZEND_FUNCTION_DTOR;
- ht->u.flags = (source->u.flags & HASH_FLAG_INITIALIZED);
+ HT_FLAGS(ht) = (HT_FLAGS(source) & HASH_FLAG_INITIALIZED);
ht->nInternalPointer = source->nNumOfElements ? 0 : HT_INVALID_IDX;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
ht->arData = source->arData;
return;
}
- ZEND_ASSERT(!(source->u.flags & HASH_FLAG_PACKED));
+ ZEND_ASSERT(!(HT_FLAGS(source) & HASH_FLAG_PACKED));
HT_SET_DATA_ADDR(ht, emalloc(HT_SIZE(ht)));
HT_HASH_RESET(ht);
ht->nNumOfElements = source->nNumOfElements;
ht->nNextFreeElement = source->nNextFreeElement;
ht->pDestructor = NULL;
- ht->u.flags = (source->u.flags & HASH_FLAG_INITIALIZED);
+ HT_FLAGS(ht) = (HT_FLAGS(source) & HASH_FLAG_INITIALIZED);
ht->nInternalPointer = source->nNumOfElements ? 0 : HT_INVALID_IDX;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
ht->arData = source->arData;
return;
}
- ZEND_ASSERT(!(source->u.flags & HASH_FLAG_PACKED));
+ ZEND_ASSERT(!(HT_FLAGS(source) & HASH_FLAG_PACKED));
HT_SET_DATA_ADDR(ht, emalloc(HT_SIZE(ht)));
HT_HASH_RESET(ht);
{
Bucket *p, *end;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
ht->arData = NULL;
return;
}
Bucket *p, *end;
ht->pDestructor = dtor;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
return;
}
uint32_t idx, nIndex;
Bucket *p;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
return;
}
efree(HT_GET_DATA_ADDR(ht));
ht->nTableMask = HT_MIN_MASK;
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
- ht->u.flags &= ~HASH_FLAG_INITIALIZED;
+ HT_FLAGS(ht) &= ~HASH_FLAG_INITIALIZED;
return;
}
- if (ht->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
void *data = HT_GET_DATA_ADDR(ht);
zend_accel_store(data, HT_USED_SIZE(ht));
HT_SET_DATA_ADDR(ht, data);
uint32_t idx, nIndex;
Bucket *p;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED)) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
return;
}
efree(HT_GET_DATA_ADDR(ht));
ht->nTableMask = HT_MIN_MASK;
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
- ht->u.flags &= ~HASH_FLAG_INITIALIZED;
+ HT_FLAGS(ht) &= ~HASH_FLAG_INITIALIZED;
return;
}
- if (ht->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
HT_SET_DATA_ADDR(ht, zend_accel_memdup(HT_GET_DATA_ADDR(ht), HT_USED_SIZE(ht)));
} else if (ht->nNumUsed < (uint32_t)(-(int32_t)ht->nTableMask) / 2) {
/* compact table */
Z_TYPE_FLAGS_P(z) = 0;
GC_SET_REFCOUNT(Z_COUNTED_P(z), 2);
GC_FLAGS(Z_COUNTED_P(z)) |= IS_ARRAY_IMMUTABLE;
- Z_ARRVAL_P(z)->u.flags |= HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(Z_ARRVAL_P(z)) |= HASH_FLAG_STATIC_KEYS;
}
}
break;
/* make immutable array */
GC_SET_REFCOUNT(op_array->static_variables, 2);
GC_TYPE_INFO(op_array->static_variables) = IS_ARRAY | (IS_ARRAY_IMMUTABLE << GC_FLAGS_SHIFT);
- op_array->static_variables->u.flags |= HASH_FLAG_STATIC_KEYS;
+ HT_FLAGS(op_array->static_variables) |= HASH_FLAG_STATIC_KEYS;
}
}
uint32_t idx;
Bucket *p;
- if (!(ht->u.flags & HASH_FLAG_INITIALIZED) || ht->nNumUsed == 0) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED) || ht->nNumUsed == 0) {
return;
}
- if (!(ht->u.flags & HASH_FLAG_PACKED) && ht->nNumUsed < (uint32_t)(-(int32_t)ht->nTableMask) / 2) {
+ if (!(HT_FLAGS(ht) & HASH_FLAG_PACKED) && ht->nNumUsed < (uint32_t)(-(int32_t)ht->nTableMask) / 2) {
/* compact table */
uint32_t hash_size;
{
HashTable *data = (HashTable *)stream->abstract;
- if (data && data->u.flags) {
+ if (data && HT_FLAGS(data)) {
zend_hash_destroy(data);
- data->u.flags = 0;
+ HT_FLAGS(data) = 0;
FREE_HASHTABLE(data);
stream->abstract = NULL;
}
return ret;
}
- if (!phar->manifest.u.flags) {
+ if (!HT_FLAGS(&phar->manifest)) {
php_url_free(resource);
return NULL;
}
goto skip_phar;
}
- if ((PHAR_G(phar_fname_map.u.flags) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !cached_phars.u.flags) {
+ if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_FLAGS(&cached_phars)) {
goto skip_phar;
}
goto skip_phar;
}
- if ((PHAR_G(phar_fname_map.u.flags) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !cached_phars.u.flags) {
+ if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_FLAGS(&cached_phars)) {
goto skip_phar;
}
goto skip_phar;
}
- if ((PHAR_G(phar_fname_map.u.flags) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !cached_phars.u.flags) {
+ if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_FLAGS(&cached_phars)) {
goto skip_phar;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p|br!", &filename, &filename_len, &use_include_path, &zcontext) == FAILURE) {
goto skip_phar;
}
- if ((PHAR_G(phar_fname_map.u.flags) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !cached_phars.u.flags) {
+ if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_FLAGS(&cached_phars)) {
/* no need to check, include_path not even specified in fopen/ no active phars */
goto skip_phar;
}
goto skip_phar;
}
- if ((PHAR_G(phar_fname_map.u.flags) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !cached_phars.u.flags) {
+ if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_FLAGS(&cached_phars)) {
goto skip_phar;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) {
goto skip_phar;
}
- if ((PHAR_G(phar_fname_map.u.flags) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !cached_phars.u.flags) {
+ if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_FLAGS(&cached_phars)) {
goto skip_phar;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) {
if (ZSTR_LEN(entry->name) == sizeof("phar.readonly")-1) {
PHAR_G(readonly) = ini;
- if (PHAR_G(request_init) && PHAR_G(phar_fname_map.u.flags)) {
+ if (PHAR_G(request_init) && HT_FLAGS(&PHAR_G(phar_fname_map))) {
zend_hash_apply_with_argument(&(PHAR_G(phar_fname_map)), phar_set_writeable_bit, (void *)&ini);
}
} else {
PHAR_G(manifest_cached) = 0;
efree(tmp);
zend_hash_destroy(&(PHAR_G(phar_fname_map)));
- PHAR_G(phar_fname_map.u.flags) = 0;
+ HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
zend_hash_destroy(&(PHAR_G(phar_alias_map)));
- PHAR_G(phar_alias_map.u.flags) = 0;
+ HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
zend_hash_destroy(&cached_phars);
zend_hash_destroy(&cached_alias);
zend_hash_graceful_reverse_destroy(&EG(regular_list));
zend_hash_destroy(&cached_alias);
cached_phars = PHAR_G(phar_fname_map);
cached_alias = PHAR_G(phar_alias_map);
- PHAR_G(phar_fname_map.u.flags) = 0;
- PHAR_G(phar_alias_map.u.flags) = 0;
+ HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
+ HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
zend_hash_graceful_reverse_destroy(&EG(regular_list));
memset(&EG(regular_list), 0, sizeof(HashTable));
efree(tmp);
phar->signature = NULL;
}
- if (phar->manifest.u.flags) {
+ if (HT_FLAGS(&phar->manifest)) {
zend_hash_destroy(&phar->manifest);
- phar->manifest.u.flags = 0;
+ HT_FLAGS(&phar->manifest) = 0;
}
- if (phar->mounted_dirs.u.flags) {
+ if (HT_FLAGS(&phar->mounted_dirs)) {
zend_hash_destroy(&phar->mounted_dirs);
- phar->mounted_dirs.u.flags = 0;
+ HT_FLAGS(&phar->mounted_dirs) = 0;
}
- if (phar->virtual_dirs.u.flags) {
+ if (HT_FLAGS(&phar->virtual_dirs)) {
zend_hash_destroy(&phar->virtual_dirs);
- phar->virtual_dirs.u.flags = 0;
+ HT_FLAGS(&phar->virtual_dirs) = 0;
}
if (Z_TYPE(phar->metadata) != IS_UNDEF) {
{
phar_release_functions();
zend_hash_destroy(&(PHAR_G(phar_alias_map)));
- PHAR_G(phar_alias_map.u.flags) = 0;
+ HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
zend_hash_destroy(&(PHAR_G(phar_fname_map)));
- PHAR_G(phar_fname_map.u.flags) = 0;
+ HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
zend_hash_destroy(&(PHAR_G(phar_persist_map)));
- PHAR_G(phar_persist_map.u.flags) = 0;
+ HT_FLAGS(&PHAR_G(phar_persist_map)) = 0;
PHAR_G(phar_SERVER_mung_list) = 0;
if (PHAR_G(cached_fp)) {
}
return;
- } else if (PHAR_G(phar_fname_map.u.flags) && NULL != (pphar = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
+ } else if (HT_FLAGS(&PHAR_G(phar_fname_map)) && NULL != (pphar = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
goto carry_on;
} else if (PHAR_G(manifest_cached) && NULL != (pphar = zend_hash_str_find_ptr(&cached_phars, fname, fname_len))) {
if (SUCCESS == phar_copy_on_write(&pphar)) {
if (mode[0] == 'w' || (mode[0] == 'r' && mode[1] == '+')) {
phar_archive_data *pphar = NULL, *phar;
- if (PHAR_G(request_init) && PHAR_G(phar_fname_map.u.flags) && NULL == (pphar = zend_hash_find_ptr(&(PHAR_G(phar_fname_map)), resource->host))) {
+ if (PHAR_G(request_init) && HT_FLAGS(&PHAR_G(phar_fname_map)) && NULL == (pphar = zend_hash_find_ptr(&(PHAR_G(phar_fname_map)), resource->host))) {
pphar = NULL;
}
if (PHAR_G(readonly) && (!pphar || !pphar->is_data)) {
php_url_free(resource);
return SUCCESS;
}
- if (!phar->manifest.u.flags) {
+ if (!HT_FLAGS(&phar->manifest)) {
php_url_free(resource);
return FAILURE;
}
return SUCCESS;
}
/* check for mounted directories */
- if (phar->mounted_dirs.u.flags && zend_hash_num_elements(&phar->mounted_dirs)) {
+ if (HT_FLAGS(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
zend_string *str_key;
ZEND_HASH_FOREACH_STR_KEY(&phar->mounted_dirs, str_key) {
PHP_PHAR_API int phar_resolve_alias(char *alias, int alias_len, char **filename, int *filename_len) /* {{{ */ {
phar_archive_data *fd_ptr;
- if (PHAR_G(phar_alias_map.u.flags)
+ if (HT_FLAGS(&PHAR_G(phar_alias_map))
&& NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
*filename = fd_ptr->fname;
*filename_len = fd_ptr->fname_len;
return NULL;
}
- if (!phar->manifest.u.flags) {
+ if (!HT_FLAGS(&phar->manifest)) {
return NULL;
}
}
}
- if (phar->mounted_dirs.u.flags && zend_hash_num_elements(&phar->mounted_dirs)) {
+ if (HT_FLAGS(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
zend_string *str_key;
ZEND_HASH_FOREACH_STR_KEY(&phar->mounted_dirs, str_key) {
entry.is_persistent = mydata->is_persistent;
#define PHAR_ZIP_FAIL_FREE(errmsg, save) \
zend_hash_destroy(&mydata->manifest); \
- mydata->manifest.u.flags = 0; \
+ HT_FLAGS(&mydata->manifest) = 0; \
zend_hash_destroy(&mydata->mounted_dirs); \
- mydata->mounted_dirs.u.flags = 0; \
+ HT_FLAGS(&mydata->mounted_dirs) = 0; \
zend_hash_destroy(&mydata->virtual_dirs); \
- mydata->virtual_dirs.u.flags = 0; \
+ HT_FLAGS(&mydata->virtual_dirs) = 0; \
php_stream_close(fp); \
zval_dtor(&mydata->metadata); \
if (mydata->signature) { \
return FAILURE;
#define PHAR_ZIP_FAIL(errmsg) \
zend_hash_destroy(&mydata->manifest); \
- mydata->manifest.u.flags = 0; \
+ HT_FLAGS(&mydata->manifest) = 0; \
zend_hash_destroy(&mydata->mounted_dirs); \
- mydata->mounted_dirs.u.flags = 0; \
+ HT_FLAGS(&mydata->mounted_dirs) = 0; \
zend_hash_destroy(&mydata->virtual_dirs); \
- mydata->virtual_dirs.u.flags = 0; \
+ HT_FLAGS(&mydata->virtual_dirs) = 0; \
php_stream_close(fp); \
zval_dtor(&mydata->metadata); \
if (mydata->signature) { \
p->key = NULL;
}
hash->nNextFreeElement = n_elems;
- if (!(hash->u.flags & HASH_FLAG_PACKED)) {
+ if (!(HT_FLAGS(hash) & HASH_FLAG_PACKED)) {
zend_hash_to_packed(hash);
}
}
}
/* re-index like it did before */
- if (Z_ARRVAL_P(stack)->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(Z_ARRVAL_P(stack)) & HASH_FLAG_PACKED) {
uint32_t k = 0;
if (EXPECTED(Z_ARRVAL_P(stack)->u.v.nIteratorsCount == 0)) {
zval *src_entry;
zend_string *string_key;
- if ((dest->u.flags & HASH_FLAG_PACKED) && (src->u.flags & HASH_FLAG_PACKED)) {
+ if ((HT_FLAGS(dest) & HASH_FLAG_PACKED) && (HT_FLAGS(src) & HASH_FLAG_PACKED)) {
zend_hash_extend(dest, zend_hash_num_elements(dest) + zend_hash_num_elements(src), 1);
ZEND_HASH_FILL_PACKED(dest) {
ZEND_HASH_FOREACH_VAL(src, src_entry) {
/* copy first array */
array_init_size(return_value, count);
dest = Z_ARRVAL_P(return_value);
- if (src->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(src) & HASH_FLAG_PACKED) {
zend_hash_real_init(dest, 1);
ZEND_HASH_FILL_PACKED(dest) {
ZEND_HASH_FOREACH_VAL(src, src_entry) {
/* Initialize return array */
array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(input)));
- if ((Z_ARRVAL_P(input)->u.flags & HASH_FLAG_PACKED) && !preserve_keys) {
+ if ((HT_FLAGS(Z_ARRVAL_P(input)) & HASH_FLAG_PACKED) && !preserve_keys) {
zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
ZEND_HASH_REVERSE_FOREACH_VAL(Z_ARRVAL_P(input), entry) {
}
array_init_size(return_value, pad_size_abs);
- if (Z_ARRVAL_P(input)->u.flags & HASH_FLAG_PACKED) {
+ if (HT_FLAGS(Z_ARRVAL_P(input)) & HASH_FLAG_PACKED) {
zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
if (pad_size < 0) {
hash = Z_ARRVAL_P(arrays[i]);
hash->nNumUsed = array_size;
hash->nInternalPointer = 0;
- repack = !(hash->u.flags & HASH_FLAG_PACKED);
+ repack = !(HT_FLAGS(hash) & HASH_FLAG_PACKED);
for (n = 0, k = 0; k < array_size; k++) {
hash->arData[k] = indirect[k][i];
}
array_init_size(return_value, maxlen);
- zend_hash_real_init(Z_ARRVAL_P(return_value), Z_ARRVAL(arrays[0])->u.flags & HASH_FLAG_PACKED);
+ zend_hash_real_init(Z_ARRVAL_P(return_value), HT_FLAGS(Z_ARRVAL(arrays[0])) & HASH_FLAG_PACKED);
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL(arrays[0]), num_key, str_key, zv) {
fci.retval = &result;
&& zend_hash_num_elements(&Z_OBJCE_P(rval)->properties_info) > 0) {
zend_property_info *existing_propinfo;
zend_string *new_key;
- const char *unmangled_class = NULL;
+ const char *unmangled_class = NULL;
const char *unmangled_prop;
size_t unmangled_prop_len;
zend_string *unmangled;
unmangled = zend_string_init(unmangled_prop, unmangled_prop_len, 0);
existing_propinfo = zend_hash_find_ptr(&Z_OBJCE_P(rval)->properties_info, unmangled);
- if ((existing_propinfo != NULL)
+ if ((existing_propinfo != NULL)
&& (existing_propinfo->flags & ZEND_ACC_PPP_MASK)) {
if (existing_propinfo->flags & ZEND_ACC_PROTECTED) {
new_key = zend_mangle_property_name(
return 0;
}
- zend_hash_extend(ht, zend_hash_num_elements(ht) + elements, (ht->u.flags & HASH_FLAG_PACKED));
+ zend_hash_extend(ht, zend_hash_num_elements(ht) + elements, HT_FLAGS(ht) & HASH_FLAG_PACKED);
if (!process_nested_data(UNSERIALIZE_PASSTHRU, ht, elements, 1)) {
if (has_wakeup) {
ZVAL_DEREF(rval);
{
YYCTYPE yych;
static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
};
if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR;
return 0;
}
- zend_hash_extend(ht, zend_hash_num_elements(ht) + elements, (ht->u.flags & HASH_FLAG_PACKED));
+ zend_hash_extend(ht, zend_hash_num_elements(ht) + elements, HT_FLAGS(ht) & HASH_FLAG_PACKED);
if (!process_nested_data(UNSERIALIZE_PASSTHRU, ht, elements, 1)) {
if (has_wakeup) {
ZVAL_DEREF(rval);