if (arg_count) {
array_init_size(return_value, arg_count);
first_extra_arg = ex->func->op_array.num_args;
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
i = 0;
p = ZEND_CALL_ARG(ex, 1);
break;
}
array_init_size(return_value, 4);
- zend_hash_real_init(Z_ARRVAL_P(return_value), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(return_value));
/* add value elements */
ZVAL_DEREF(entry);
zval *p = ZEND_CALL_ARG(call, 1);
array_init_size(arg_array, num_args);
- zend_hash_real_init(Z_ARRVAL_P(arg_array), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(arg_array));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(arg_array)) {
if (call->func->type == ZEND_USER_FUNCTION) {
uint32_t first_extra_arg = MIN(num_args, call->func->op_array.num_args);
if (!ex->func->op_array.last_var) {
return symbol_table;
}
- zend_hash_real_init(symbol_table, 0);
+ zend_hash_real_init_mixed(symbol_table);
/*printf("Cache miss! Initialized %x\n", EG(active_symbol_table));*/
}
if (EXPECTED(ex->func->op_array.last_var)) {
#endif
}
-static zend_always_inline void zend_hash_real_init_ex(HashTable *ht, int packed)
+static zend_always_inline void zend_hash_real_init_packed_ex(HashTable *ht)
{
- HT_ASSERT_RC1(ht);
- 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_FLAGS(ht) |= HASH_FLAG_INITIALIZED | HASH_FLAG_PACKED;
- HT_HASH_RESET_PACKED(ht);
+ HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT));
+ HT_FLAGS(ht) |= HASH_FLAG_INITIALIZED | HASH_FLAG_PACKED;
+ HT_HASH_RESET_PACKED(ht);
+}
+
+static zend_always_inline void zend_hash_real_init_mixed_ex(HashTable *ht)
+{
+ (ht)->nTableMask = -(ht)->nTableSize;
+ HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT));
+ HT_FLAGS(ht) |= HASH_FLAG_INITIALIZED;
+ if (EXPECTED(ht->nTableMask == (uint32_t)-8)) {
+ Bucket *arData = ht->arData;
+
+ HT_HASH_EX(arData, -8) = -1;
+ HT_HASH_EX(arData, -7) = -1;
+ HT_HASH_EX(arData, -6) = -1;
+ HT_HASH_EX(arData, -5) = -1;
+ HT_HASH_EX(arData, -4) = -1;
+ HT_HASH_EX(arData, -3) = -1;
+ HT_HASH_EX(arData, -2) = -1;
+ HT_HASH_EX(arData, -1) = -1;
} else {
- (ht)->nTableMask = -(ht)->nTableSize;
- HT_SET_DATA_ADDR(ht, pemalloc(HT_SIZE(ht), GC_FLAGS(ht) & IS_ARRAY_PERSISTENT));
- HT_FLAGS(ht) |= HASH_FLAG_INITIALIZED;
- if (EXPECTED(ht->nTableMask == (uint32_t)-8)) {
- Bucket *arData = ht->arData;
-
- HT_HASH_EX(arData, -8) = -1;
- HT_HASH_EX(arData, -7) = -1;
- HT_HASH_EX(arData, -6) = -1;
- HT_HASH_EX(arData, -5) = -1;
- HT_HASH_EX(arData, -4) = -1;
- HT_HASH_EX(arData, -3) = -1;
- HT_HASH_EX(arData, -2) = -1;
- HT_HASH_EX(arData, -1) = -1;
- } else {
- HT_HASH_RESET(ht);
- }
+ HT_HASH_RESET(ht);
}
}
-static zend_always_inline void zend_hash_check_init(HashTable *ht, int packed)
+static zend_always_inline void zend_hash_real_init_ex(HashTable *ht, int packed)
{
HT_ASSERT_RC1(ht);
- if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
- zend_hash_real_init_ex(ht, packed);
+ ZEND_ASSERT(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED));
+ if (packed) {
+ zend_hash_real_init_packed_ex(ht);
+ } else {
+ zend_hash_real_init_mixed_ex(ht);
}
}
-#define CHECK_INIT(ht, packed) \
- zend_hash_check_init(ht, packed)
-
static const uint32_t uninitialized_bucket[-HT_MIN_MASK] =
{HT_INVALID_IDX, HT_INVALID_IDX};
zend_hash_real_init_ex(ht, packed);
}
+ZEND_API void ZEND_FASTCALL zend_hash_real_init_packed(HashTable *ht)
+{
+ IS_CONSISTENT(ht);
+
+ HT_ASSERT_RC1(ht);
+ zend_hash_real_init_packed_ex(ht);
+}
+
+ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht)
+{
+ IS_CONSISTENT(ht);
+
+ HT_ASSERT_RC1(ht);
+ zend_hash_real_init_mixed_ex(ht);
+}
+
ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht)
{
void *new_data, *old_data = HT_GET_DATA_ADDR(ht);
if (nSize > ht->nTableSize) {
ht->nTableSize = zend_hash_check_size(nSize);
}
- zend_hash_check_init(ht, packed);
+ zend_hash_real_init(ht, packed);
} else {
if (packed) {
ZEND_ASSERT(HT_FLAGS(ht) & HASH_FLAG_PACKED);
HT_ASSERT_RC1(ht);
if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
- CHECK_INIT(ht, 0);
+ zend_hash_real_init_mixed(ht);
if (!ZSTR_IS_INTERNED(key)) {
zend_string_addref(key);
HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS;
HT_ASSERT_RC1(ht);
if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
- CHECK_INIT(ht, 0);
+ zend_hash_real_init_mixed(ht);
goto add_to_hash;
} else if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
zend_hash_packed_to_hash(ht);
HT_ASSERT_RC1(ht);
if (UNEXPECTED(!(HT_FLAGS(ht) & HASH_FLAG_INITIALIZED))) {
- CHECK_INIT(ht, h < ht->nTableSize);
if (h < ht->nTableSize) {
+ zend_hash_real_init_packed_ex(ht);
p = ht->arData + h;
goto add_to_packed;
}
+ zend_hash_real_init_mixed(ht);
goto add_to_hash;
} else if (HT_FLAGS(ht) & HASH_FLAG_PACKED) {
if (h < ht->nNumUsed) {
_zend_hash_init((ht), (nSize), (pDestructor), (persistent))
ZEND_API void ZEND_FASTCALL zend_hash_real_init(HashTable *ht, zend_bool packed);
+ZEND_API void ZEND_FASTCALL zend_hash_real_init_packed(HashTable *ht);
+ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_to_packed(HashTable *ht);
ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, zend_bool packed);
zobj->properties = zend_new_array(ce->default_properties_count);
if (ce->default_properties_count) {
- zend_hash_real_init(zobj->properties, 0);
+ zend_hash_real_init_mixed(zobj->properties);
ZEND_HASH_FOREACH_PTR(&ce->properties_info, prop_info) {
if (/*prop_info->ce == ce &&*/
(prop_info->flags & ZEND_ACC_STATIC) == 0) {
if (!new_object->properties) {
new_object->properties = zend_new_array(zend_hash_num_elements(old_object->properties));
- zend_hash_real_init(new_object->properties, 0);
+ zend_hash_real_init_mixed(new_object->properties);
} else {
zend_hash_extend(new_object->properties, new_object->properties->nNumUsed + zend_hash_num_elements(old_object->properties), 0);
}
static void zend_init_interned_strings_ht(HashTable *interned_strings, int permanent)
{
zend_hash_init(interned_strings, 1024, NULL, _str_dtor, permanent);
- zend_hash_real_init(interned_strings, 0);
+ zend_hash_real_init_mixed(interned_strings);
}
ZEND_API void zend_interned_strings_init(void)
zval *param;
array_init_size(params, arg_count - arg_num + 1);
- zend_hash_real_init(Z_ARRVAL_P(params), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(params));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT);
} else {
zval *end = p + num_args;
args = zend_new_array(num_args);
- zend_hash_real_init(args, 1);
+ zend_hash_real_init_packed(args);
ZEND_HASH_FILL_PACKED(args) {
do {
ZEND_HASH_FILL_ADD(p);
ht = zend_new_array(result_size);
ZVAL_ARR(EX_VAR(opline->result.var), ht);
- zend_hash_real_init(ht, 1);
+ zend_hash_real_init_packed(ht);
ZEND_HASH_FILL_PACKED(ht) {
zval *p, *q;
uint32_t i = skip;
zval *end = p + num_args;
args = zend_new_array(num_args);
- zend_hash_real_init(args, 1);
+ zend_hash_real_init_packed(args);
ZEND_HASH_FILL_PACKED(args) {
do {
ZEND_HASH_FILL_ADD(p);
zval *param;
array_init_size(params, arg_count - arg_num + 1);
- zend_hash_real_init(Z_ARRVAL_P(params), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(params));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ht = zend_new_array(result_size);
ZVAL_ARR(EX_VAR(opline->result.var), ht);
- zend_hash_real_init(ht, 1);
+ zend_hash_real_init_packed(ht);
ZEND_HASH_FILL_PACKED(ht) {
zval *p, *q;
uint32_t i = skip;
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ht = zend_new_array(result_size);
ZVAL_ARR(EX_VAR(opline->result.var), ht);
- zend_hash_real_init(ht, 1);
+ zend_hash_real_init_packed(ht);
ZEND_HASH_FILL_PACKED(ht) {
zval *p, *q;
uint32_t i = skip;
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
ZVAL_ARR(array, zend_new_array(size));
/* Explicitly initialize array as not-packed if flag is set */
if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(array), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(array));
}
ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
} else {
zend_long n;
array_init_size(return_value, (uint32_t)(start_key + num));
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
Z_ARRVAL_P(return_value)->nNumUsed = (uint32_t)(start_key + num);
Z_ARRVAL_P(return_value)->nNumOfElements = (uint32_t)num;
Z_ARRVAL_P(return_value)->nNextFreeElement = (zend_long)(start_key + num);
} else {
/* create hash */
array_init_size(return_value, (uint32_t)num);
- zend_hash_real_init(Z_ARRVAL_P(return_value), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(return_value));
if (Z_REFCOUNTED_P(val)) {
GC_ADDREF_EX(Z_COUNTED_P(val), (uint32_t)num);
}
} \
size = (uint32_t)_php_math_round(__calc_size, 0, PHP_ROUND_HALF_UP); \
array_init_size(return_value, size); \
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1); \
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value)); \
} while (0)
#define RANGE_CHECK_LONG_INIT_ARRAY(start, end) do { \
} \
size = (uint32_t)(__calc_size + 1); \
array_init_size(return_value, size); \
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1); \
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value)); \
} while (0)
/* {{{ proto array range(mixed low, mixed high[, int step])
}
/* Initialize the return_value as an array. */
array_init_size(return_value, (uint32_t)(((low - high) / lstep) + 1));
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
for (; low >= high; low -= (unsigned int)lstep) {
ZVAL_INTERNED_STR(&tmp, ZSTR_CHAR(low));
goto err;
}
array_init_size(return_value, (uint32_t)(((high - low) / lstep) + 1));
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
for (; low <= high; low += (unsigned int)lstep) {
ZVAL_INTERNED_STR(&tmp, ZSTR_CHAR(low));
if (HT_IS_PACKED(Z_ARRVAL_P(input)) &&
(!preserve_keys ||
(offset == 0 && HT_IS_WITHOUT_HOLES(Z_ARRVAL_P(input))))) {
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(input), entry) {
pos++;
array_init_size(return_value, count);
dest = Z_ARRVAL_P(return_value);
if (HT_FLAGS(src) & HASH_FLAG_PACKED) {
- zend_hash_real_init(dest, 1);
+ zend_hash_real_init_packed(dest);
ZEND_HASH_FILL_PACKED(dest) {
ZEND_HASH_FOREACH_VAL(src, src_entry) {
if (UNEXPECTED(Z_ISREF_P(src_entry) &&
} ZEND_HASH_FILL_END();
} else {
zend_string *string_key;
- zend_hash_real_init(dest, 0);
+ zend_hash_real_init_mixed(dest);
ZEND_HASH_FOREACH_STR_KEY_VAL(src, string_key, src_entry) {
if (UNEXPECTED(Z_ISREF_P(src_entry) &&
Z_REFCOUNT_P(src_entry) == 1)) {
}
} else {
array_init_size(return_value, elem_count);
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
if (HT_IS_PACKED(arrval) && HT_IS_WITHOUT_HOLES(arrval)) {
/* Optimistic case: range(0..n-1) for vector-like packed array */
/* Initialize return array */
array_init_size(return_value, zend_hash_num_elements(arrval));
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
/* Go through input array and add values to the return array */
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
array_init_size(return_value, zend_hash_num_elements(arr_hash));
if (!zkey) {
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
ZEND_HASH_FOREACH_VAL(arr_hash, data) {
ZVAL_DEREF(data);
/* Initialize return array */
array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(input)));
if ((HT_FLAGS(Z_ARRVAL_P(input)) & HASH_FLAG_PACKED) && !preserve_keys) {
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
ZEND_HASH_REVERSE_FOREACH_VAL(Z_ARRVAL_P(input), entry) {
if (UNEXPECTED(Z_ISREF_P(entry) &&
array_init_size(return_value, pad_size_abs);
if (HT_FLAGS(Z_ARRVAL_P(input)) & HASH_FLAG_PACKED) {
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
if (pad_size < 0) {
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
}
/* i = 0; */
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) {
zval zv;
/* We can't use zend_hash_index_find()
PHP_RETURN_HRTIME(t);
} else {
array_init_size(return_value, 2);
- zend_hash_real_init(Z_ARRVAL_P(return_value), 1);
+ zend_hash_real_init_packed(Z_ARRVAL_P(return_value));
add_next_index_long(return_value, (zend_long)(t / (php_hrtime_t)NANO_IN_SEC));
add_next_index_long(return_value, (zend_long)(t % (php_hrtime_t)NANO_IN_SEC));
}
array_init_size(rval, elements);
/* we can't convert from packed to hash during unserialization, because
reference to some zvals might be keept in var_hash (to support references) */
- zend_hash_real_init(Z_ARRVAL_P(rval), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(rval));
} else {
ZVAL_EMPTY_ARRAY(rval);
return finish_nested_data(UNSERIALIZE_PASSTHRU);
array_init_size(rval, elements);
/* we can't convert from packed to hash during unserialization, because
reference to some zvals might be keept in var_hash (to support references) */
- zend_hash_real_init(Z_ARRVAL_P(rval), 0);
+ zend_hash_real_init_mixed(Z_ARRVAL_P(rval));
} else {
ZVAL_EMPTY_ARRAY(rval);
return finish_nested_data(UNSERIALIZE_PASSTHRU);