]> granicus.if.org Git - php/commitdiff
Improve call_user_function performance
authorXinchen Hui <laruence@php.net>
Mon, 26 May 2014 09:16:22 +0000 (17:16 +0800)
committerXinchen Hui <laruence@php.net>
Mon, 26 May 2014 09:16:22 +0000 (17:16 +0800)
params are all zval * now, and retval will be initialized in
zend_call_function.

maybe we can make call_user_function as a macro proxy to
call_user_function_ex later.

Zend/zend_execute_API.c

index 2b62f2e844cb0a549c57d0353ea09f0569c4163c..0a21e06b854bb44df74131cff41cdfb10f0264ad 100644 (file)
@@ -626,24 +626,7 @@ ZEND_API int zval_update_constant(zval *pp, zend_bool inline_change TSRMLS_DC) /
 
 int call_user_function(HashTable *function_table, zval *object, zval *function_name, zval *retval_ptr, zend_uint param_count, zval params[] TSRMLS_DC) /* {{{ */
 {
-       zval *params_array;
-       zend_uint i;
-       int ex_retval;
-
-       if (param_count) {
-               params_array = (zval *) emalloc(sizeof(zval) * param_count);
-               for (i=0; i<param_count; i++) {
-                       ZVAL_COPY_VALUE(&params_array[i], &params[i]);
-               }
-       } else {
-               params_array = NULL;
-       }
-       ZVAL_UNDEF(retval_ptr);
-       ex_retval = call_user_function_ex(function_table, object, function_name, retval_ptr, param_count, params_array, 1, NULL TSRMLS_CC);
-       if (params_array) {
-               efree(params_array);
-       }
-       return ex_retval;
+       return call_user_function_ex(function_table, object, function_name, retval_ptr, param_count, params, 1, NULL TSRMLS_CC);
 }
 /* }}} */