summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorNikita Popov <nikic@php.net>2014-04-09 10:39:22 +0200
committerNikita Popov <nikic@php.net>2014-04-09 12:31:21 +0200
commitf485c84a142a28c594dd7bcc3760a406dd4c5883 (patch)
tree1eefbcbae6f5077f6a1b6972ee6c7a47ca6991f8 /ext
parent22d3eb3117b1b5c484152c9fec5a74b0e95024ea (diff)
downloadphp-git-f485c84a142a28c594dd7bcc3760a406dd4c5883.tar.gz
Don't always separate splice replacement array
Only perform separation when a typecast is done. Avoids doing a full hash copy in many cases.
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/array.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index a46b97b93d..7b2b1c5589 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1948,7 +1948,7 @@ PHP_FUNCTION(array_unshift)
PHP_FUNCTION(array_splice)
{
zval *array, /* Input array */
- *repl_array = NULL, /* Replacement array */
+ **repl_array = NULL, /* Replacement array */
***repl = NULL; /* Replacement elements */
HashTable *rem_hash = NULL; /* Removed elements' hash */
Bucket *p; /* Bucket used for traversing hash */
@@ -1958,7 +1958,7 @@ PHP_FUNCTION(array_splice)
repl_num = 0; /* Number of replacement elements */
int num_in; /* Number of elements in the input array */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|lz/", &array, &offset, &length, &repl_array) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "al|lZ", &array, &offset, &length, &repl_array) == FAILURE) {
return;
}
@@ -1970,12 +1970,12 @@ PHP_FUNCTION(array_splice)
if (repl_array) {
/* Make sure the last argument, if passed, is an array */
- convert_to_array(repl_array);
+ convert_to_array_ex(repl_array);
/* Create the array of replacement elements */
- repl_num = zend_hash_num_elements(Z_ARRVAL_P(repl_array));
+ repl_num = zend_hash_num_elements(Z_ARRVAL_PP(repl_array));
repl = (zval ***)safe_emalloc(repl_num, sizeof(zval **), 0);
- for (p = Z_ARRVAL_P(repl_array)->pListHead, i = 0; p; p = p->pListNext, i++) {
+ for (p = Z_ARRVAL_PP(repl_array)->pListHead, i = 0; p; p = p->pListNext, i++) {
repl[i] = ((zval **)p->pData);
}
}