]> granicus.if.org Git - php/commitdiff
- MFB: New parameter parsing API
authorFelipe Pena <felipe@php.net>
Mon, 18 Aug 2008 19:42:39 +0000 (19:42 +0000)
committerFelipe Pena <felipe@php.net>
Mon, 18 Aug 2008 19:42:39 +0000 (19:42 +0000)
- Fixed tests

ext/reflection/php_reflection.c
ext/reflection/tests/ReflectionMethod_invoke_basic.phpt
ext/reflection/tests/property_exists.phpt

index f22f75aed69fc1d0d3ceebbaac4e2649371de26f..d8ea725ee96c0bed22b0309ebc760bd1aad8cb3b 100644 (file)
@@ -1659,9 +1659,8 @@ ZEND_METHOD(reflection_function, getClosure)
 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;
@@ -1670,10 +1669,8 @@ ZEND_METHOD(reflection_function, invoke)
        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);
@@ -1682,7 +1679,7 @@ ZEND_METHOD(reflection_function, invoke)
        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;
 
@@ -2497,22 +2494,16 @@ ZEND_METHOD(reflection_method, getClosure)
 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);
 
@@ -2533,10 +2524,8 @@ ZEND_METHOD(reflection_method, invoke)
                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
@@ -2571,7 +2560,7 @@ ZEND_METHOD(reflection_method, invoke)
        fci.symbol_table = NULL;
        fci.object_pp = object_pp;
        fci.retval_ptr_ptr = &retval_ptr;
-       fci.param_count = argc-1;
+       fci.param_count = num_args-1;
        fci.params = params+1;
        fci.no_separation = 1;
 
@@ -3767,14 +3756,14 @@ ZEND_METHOD(reflection_class, newInstance)
        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;
 
@@ -3783,9 +3772,10 @@ ZEND_METHOD(reflection_class, newInstance)
                        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;
                }
 
@@ -3797,7 +3787,7 @@ ZEND_METHOD(reflection_class, newInstance)
                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;
 
@@ -3818,7 +3808,10 @@ ZEND_METHOD(reflection_class, newInstance)
                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 {
index 74c3ea04fe42eab576e77b6de7b72a1d9251fe15..baec6fac0120b1c1d9a9d6d02aa31e9bdf576d19 100644 (file)
@@ -91,8 +91,8 @@ NULL
 
 Static method:
 
-Warning: Invoke() expects at least one parameter, none given in %sReflectionMethod_invoke_basic.php on line %d
-bool(false)
+Warning: ReflectionMethod::invoke() expects at least 1 parameter, 0 given in %sReflectionMethod_invoke_basic.php on line %d
+NULL
 Called staticMethod()
 
 Notice: Undefined variable: this in %sReflectionMethod_invoke_basic.php on line %d
index aa8e1142482d6f76113c3e29ab3c042f3af0248e..c74b775bb7281e2cc98e6c72473bab78e14ee5c0 100755 (executable)
@@ -108,9 +108,9 @@ bool(true)
 obj(A)::$a
 bool(true)
 obj(A)::$b
-bool(false)
+bool(true)
 obj(A)::$c
-bool(false)
+bool(true)
 obj(A)::$d
 bool(false)
 obj(A)::$e
@@ -130,9 +130,9 @@ bool(false)
 A::$a
 bool(true)
 A::$b
-bool(false)
+bool(true)
 A::$c
-bool(false)
+bool(true)
 A::$d
 bool(false)
 A::$e
@@ -152,9 +152,9 @@ bool(false)
 B::$a
 bool(true)
 B::$b
-bool(false)
+bool(true)
 B::$c
-bool(false)
+bool(true)
 B::$d
 bool(false)
 B::$e
@@ -174,11 +174,11 @@ bool(false)
 C::$a
 bool(true)
 C::$b
-bool(false)
+bool(true)
 C::$c
 bool(false)
 C::$d
-bool(false)
+bool(true)
 C::$e
 bool(false)
 ===C===
@@ -196,11 +196,11 @@ bool(false)
 obj(C)::$a
 bool(true)
 obj(C)::$b
-bool(false)
+bool(true)
 obj(C)::$c
 bool(false)
 obj(C)::$d
-bool(false)
+bool(true)
 obj(C)::$e
 bool(false)
 ===PROBLEMS===