ht->nNumOfElements = source->nNumOfElements;
ht->nNextFreeElement = source->nNextFreeElement;
ht->pDestructor = NULL;
- HT_FLAGS(ht) = (HT_FLAGS(source) & HASH_FLAG_INITIALIZED);
+ HT_FLAGS(ht) = (HT_FLAGS(source) & (HASH_FLAG_INITIALIZED | HASH_FLAG_STATIC_KEYS));
ht->nInternalPointer = source->nNumOfElements ? 0 : HT_INVALID_IDX;
if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
ht->nNumOfElements = source->nNumOfElements;
ht->nNextFreeElement = source->nNextFreeElement;
ht->pDestructor = ZEND_FUNCTION_DTOR;
- HT_FLAGS(ht) = (HT_FLAGS(source) & HASH_FLAG_INITIALIZED);
+ HT_FLAGS(ht) = (HT_FLAGS(source) & (HASH_FLAG_INITIALIZED | HASH_FLAG_STATIC_KEYS));
ht->nInternalPointer = source->nNumOfElements ? 0 : HT_INVALID_IDX;
if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
ht->nNumOfElements = source->nNumOfElements;
ht->nNextFreeElement = source->nNextFreeElement;
ht->pDestructor = NULL;
- HT_FLAGS(ht) = (HT_FLAGS(source) & HASH_FLAG_INITIALIZED);
+ HT_FLAGS(ht) = (HT_FLAGS(source) & (HASH_FLAG_INITIALIZED | HASH_FLAG_STATIC_KEYS));
ht->nInternalPointer = source->nNumOfElements ? 0 : HT_INVALID_IDX;
if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
uint32_t idx, nIndex;
Bucket *p;
+ HT_FLAGS(ht) |= HASH_FLAG_STATIC_KEYS;
+
if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
return;
uint32_t idx, nIndex;
Bucket *p;
+ HT_FLAGS(ht) |= HASH_FLAG_STATIC_KEYS;
+
if (!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED)) {
HT_SET_DATA_ADDR(ht, &uninitialized_bucket);
return;
Z_TYPE_FLAGS_P(z) = 0;
GC_SET_REFCOUNT(Z_COUNTED_P(z), 2);
GC_ADD_FLAGS(Z_COUNTED_P(z), IS_ARRAY_IMMUTABLE);
- 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);
- HT_FLAGS(op_array->static_variables) |= HASH_FLAG_STATIC_KEYS;
}
}