felipe Sat Jun 21 02:41:27 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/reflection php_reflection.c /php-src/ext/reflection/tests ReflectionMethod_invoke_basic.phpt /php-src/main main.c Log: - New parameter parsing API http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/php_reflection.c?r1=1.164.2.33.2.45.2.15&r2=1.164.2.33.2.45.2.16&diff_format=u Index: php-src/ext/reflection/php_reflection.c diff -u php-src/ext/reflection/php_reflection.c:1.164.2.33.2.45.2.15 php-src/ext/reflection/php_reflection.c:1.164.2.33.2.45.2.16 --- php-src/ext/reflection/php_reflection.c:1.164.2.33.2.45.2.15 Sun Jun 1 03:11:37 2008 +++ php-src/ext/reflection/php_reflection.c Sat Jun 21 02:41:27 2008 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_reflection.c,v 1.164.2.33.2.45.2.15 2008/06/01 03:11:37 felipe Exp $ */ +/* $Id: php_reflection.c,v 1.164.2.33.2.45.2.16 2008/06/21 02:41:27 felipe Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -1567,9 +1567,8 @@ ZEND_METHOD(reflection_function, invoke) { zval *retval_ptr; - zval ***params; - int result; - int argc = ZEND_NUM_ARGS(); + zval ***params = NULL; + int result, num_args = 0; zend_fcall_info fci; zend_fcall_info_cache fcc; reflection_object *intern; @@ -1578,10 +1577,8 @@ METHOD_NOTSTATIC(reflection_function_ptr); GET_REFLECTION_OBJECT_PTR(fptr); - params = safe_emalloc(sizeof(zval **), argc, 0); - if (zend_get_parameters_array_ex(argc, params) == FAILURE) { - efree(params); - RETURN_FALSE; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", ¶ms, &num_args) == FAILURE) { + return; } fci.size = sizeof(fci); @@ -1590,7 +1587,7 @@ fci.symbol_table = NULL; fci.object_pp = NULL; fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc; + fci.param_count = num_args; fci.params = params; fci.no_separation = 1; @@ -2298,23 +2295,17 @@ ZEND_METHOD(reflection_method, invoke) { zval *retval_ptr; - zval ***params; + zval ***params = NULL; zval **object_pp; reflection_object *intern; zend_function *mptr; - int argc = ZEND_NUM_ARGS(); - int result; + int result, num_args = 0; zend_fcall_info fci; zend_fcall_info_cache fcc; zend_class_entry *obj_ce; METHOD_NOTSTATIC(reflection_method_ptr); - if (argc < 1) { - zend_error(E_WARNING, "Invoke() expects at least one parameter, none given"); - RETURN_FALSE; - } - GET_REFLECTION_OBJECT_PTR(mptr); if (!(mptr->common.fn_flags & ZEND_ACC_PUBLIC) || @@ -2333,10 +2324,8 @@ return; } - params = safe_emalloc(sizeof(zval **), argc, 0); - if (zend_get_parameters_array_ex(argc, params) == FAILURE) { - efree(params); - RETURN_FALSE; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "+", ¶ms, &num_args) == FAILURE) { + return; } /* In case this is a static method, we should'nt pass an object_pp @@ -2349,15 +2338,18 @@ object_pp = NULL; obj_ce = NULL; } else { - if ((Z_TYPE_PP(params[0]) != IS_OBJECT)) { + if (Z_TYPE_PP(params[0]) != IS_OBJECT) { efree(params); _DO_THROW("Non-object passed to Invoke()"); /* Returns from this function */ } + obj_ce = Z_OBJCE_PP(params[0]); if (!instanceof_function(obj_ce, mptr->common.scope TSRMLS_CC)) { - efree(params); + if (params) { + efree(params); + } _DO_THROW("Given object is not an instance of the class this method was declared in"); /* Returns from this function */ } @@ -2371,8 +2363,8 @@ fci.symbol_table = NULL; fci.object_pp = object_pp; fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc-1; - fci.params = params+1; + fci.param_count = num_args - 1; + fci.params = params + 1; fci.no_separation = 1; fcc.initialized = 1; @@ -2382,7 +2374,9 @@ result = zend_call_function(&fci, &fcc TSRMLS_CC); - efree(params); + if (params) { + efree(params); + } if (result == FAILURE) { zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC, @@ -3416,14 +3410,14 @@ zval *retval_ptr = NULL; reflection_object *intern; zend_class_entry *ce; - int argc = ZEND_NUM_ARGS(); METHOD_NOTSTATIC(reflection_class_ptr); GET_REFLECTION_OBJECT_PTR(ce); /* Run the constructor if there is one */ if (ce->constructor) { - zval ***params; + zval ***params = NULL; + int num_args = 0; zend_fcall_info fci; zend_fcall_info_cache fcc; @@ -3432,9 +3426,10 @@ return; } - params = safe_emalloc(sizeof(zval **), argc, 0); - if (zend_get_parameters_array_ex(argc, params) == FAILURE) { - efree(params); + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "*", ¶ms, &num_args) == FAILURE) { + if (params) { + efree(params); + } RETURN_FALSE; } @@ -3446,7 +3441,7 @@ fci.symbol_table = NULL; fci.object_pp = &return_value; fci.retval_ptr_ptr = &retval_ptr; - fci.param_count = argc; + fci.param_count = num_args; fci.params = params; fci.no_separation = 1; @@ -3456,7 +3451,9 @@ fcc.object_pp = &return_value; if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) { - efree(params); + if (params) { + efree(params); + } if (retval_ptr) { zval_ptr_dtor(&retval_ptr); } @@ -3466,7 +3463,9 @@ if (retval_ptr) { zval_ptr_dtor(&retval_ptr); } - efree(params); + if (params) { + efree(params); + } } else if (!ZEND_NUM_ARGS()) { object_init_ex(return_value, ce); } else { @@ -4944,7 +4943,7 @@ php_info_print_table_start(); php_info_print_table_header(2, "Reflection", "enabled"); - php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.45.2.15 2008/06/01 03:11:37 felipe Exp $"); + php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.164.2.33.2.45.2.16 2008/06/21 02:41:27 felipe Exp $"); php_info_print_table_end(); } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt?r1=1.1.4.3&r2=1.1.4.4&diff_format=u Index: php-src/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt diff -u php-src/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt:1.1.4.3 php-src/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt:1.1.4.4 --- php-src/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt:1.1.4.3 Sat May 24 13:34:22 2008 +++ php-src/ext/reflection/tests/ReflectionMethod_invoke_basic.phpt Sat Jun 21 02:41:27 2008 @@ -91,8 +91,8 @@ Static method: -Warning: Invoke() expects at least one parameter, none given in %s on line %d -bool(false) +Warning: ReflectionMethod::invoke() expects at least 1 parameter, 0 given in %s on line %d +NULL Called staticMethod() Notice: Undefined variable: this in %s on line %d http://cvs.php.net/viewvc.cgi/php-src/main/main.c?r1=1.640.2.23.2.57.2.22&r2=1.640.2.23.2.57.2.23&diff_format=u Index: php-src/main/main.c diff -u php-src/main/main.c:1.640.2.23.2.57.2.22 php-src/main/main.c:1.640.2.23.2.57.2.23 --- php-src/main/main.c:1.640.2.23.2.57.2.22 Wed May 21 15:55:31 2008 +++ php-src/main/main.c Sat Jun 21 02:41:27 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: main.c,v 1.640.2.23.2.57.2.22 2008/05/21 15:55:31 pajoye Exp $ */ +/* $Id: main.c,v 1.640.2.23.2.57.2.23 2008/06/21 02:41:27 felipe Exp $ */ /* {{{ includes */ @@ -1033,8 +1033,8 @@ RETURN_FALSE; } - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &new_timeout) == FAILURE) { - WRONG_PARAM_COUNT; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &new_timeout) == FAILURE) { + return; } convert_to_string_ex(new_timeout);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php