summaryrefslogtreecommitdiff
path: root/Zend/zend_builtin_functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_builtin_functions.c')
-rw-r--r--Zend/zend_builtin_functions.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index e8e4c54e9c..cbbdd1e681 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -582,7 +582,6 @@ ZEND_FUNCTION(each)
{
zval *array, *entry, tmp;
ulong num_key;
- zval *inserted_pointer;
HashTable *target_hash;
zend_string *key;
@@ -609,7 +608,8 @@ ZEND_FUNCTION(each)
}
break;
}
- array_init(return_value);
+ array_init_size(return_value, 4);
+ zend_hash_real_init(Z_ARRVAL_P(return_value), 0);
/* add value elements */
if (Z_ISREF_P(entry)) {
@@ -620,17 +620,18 @@ ZEND_FUNCTION(each)
if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
}
- zend_hash_index_update(Z_ARRVAL_P(return_value), 1, entry);
+ zend_hash_index_add_new(Z_ARRVAL_P(return_value), 1, entry);
zend_hash_str_add_new(Z_ARRVAL_P(return_value), "value", sizeof("value")-1, entry);
/* add the key elements */
if (zend_hash_get_current_key(target_hash, &key, &num_key, 0) == HASH_KEY_IS_STRING) {
- inserted_pointer = add_get_index_str(return_value, 0, STR_COPY(key));
+ ZVAL_STR(&tmp, STR_COPY(key));
+ if (Z_REFCOUNTED(tmp)) Z_ADDREF(tmp);
} else {
- inserted_pointer = add_get_index_long(return_value, 0, num_key);
+ ZVAL_LONG(&tmp, num_key);
}
- zend_hash_str_add_new(Z_ARRVAL_P(return_value), "key", sizeof("key")-1, inserted_pointer);
- if (Z_REFCOUNTED_P(inserted_pointer)) Z_ADDREF_P(inserted_pointer);
+ zend_hash_index_add_new(Z_ARRVAL_P(return_value), 0, &tmp);
+ zend_hash_str_add_new(Z_ARRVAL_P(return_value), "key", sizeof("key")-1, &tmp);
zend_hash_move_forward(target_hash);
}
/* }}} */