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