diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2013-10-28 13:19:08 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2013-10-28 13:19:08 +0400 |
| commit | 9bbdc90ed251ec18b861a1913d01f0264e447afc (patch) | |
| tree | d06818e1bda5afdc5a320e3bf2e935d7f77b2860 /Zend/zend_builtin_functions.c | |
| parent | 8962f3ff0c76c5710f5e14d6f342f44498ff882b (diff) | |
| parent | 91b8a6752e2d987ff7b1ee10c343dcba13c94914 (diff) | |
| download | php-git-9bbdc90ed251ec18b861a1913d01f0264e447afc.tar.gz | |
Merge branch 'PHP-5.5'
* PHP-5.5:
Improved performance of func_get_args() by eliminating useless copying
Conflicts:
NEWS
Diffstat (limited to 'Zend/zend_builtin_functions.c')
| -rw-r--r-- | Zend/zend_builtin_functions.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index ed136f5e12..2d2a865c10 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -461,12 +461,17 @@ ZEND_FUNCTION(func_get_args) array_init_size(return_value, arg_count); for (i=0; i<arg_count; i++) { - zval *element; + zval *element, *arg; - ALLOC_ZVAL(element); - *element = **((zval **) (p-(arg_count-i))); - zval_copy_ctor(element); - INIT_PZVAL(element); + arg = *((zval **) (p-(arg_count-i))); + if (!Z_ISREF_P(arg)) { + element = arg; + Z_ADDREF_P(element); + } else { + ALLOC_ZVAL(element); + INIT_PZVAL_COPY(element, arg); + zval_copy_ctor(element); + } zend_hash_next_index_insert(return_value->value.ht, &element, sizeof(zval *), NULL); } } |
