summaryrefslogtreecommitdiff
path: root/Zend/zend_builtin_functions.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2013-10-28 13:19:08 +0400
committerDmitry Stogov <dmitry@zend.com>2013-10-28 13:19:08 +0400
commit9bbdc90ed251ec18b861a1913d01f0264e447afc (patch)
treed06818e1bda5afdc5a320e3bf2e935d7f77b2860 /Zend/zend_builtin_functions.c
parent8962f3ff0c76c5710f5e14d6f342f44498ff882b (diff)
parent91b8a6752e2d987ff7b1ee10c343dcba13c94914 (diff)
downloadphp-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.c15
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);
}
}