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, "+", &params, 
&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, "+", &params, 
&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, "*", 
&params, &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

Reply via email to