diff options
author | Nikita Popov <nikic@php.net> | 2014-04-09 10:39:22 +0200 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2014-04-09 12:31:21 +0200 |
commit | f485c84a142a28c594dd7bcc3760a406dd4c5883 (patch) | |
tree | 1eefbcbae6f5077f6a1b6972ee6c7a47ca6991f8 /ext | |
parent | 22d3eb3117b1b5c484152c9fec5a74b0e95024ea (diff) | |
download | php-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.c | 10 |
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); } } |