logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

cvs: ZendEngine2 / zend_API.c: msg#00072

Subject: cvs: ZendEngine2 / zend_API.c
andrei          Wed Jul 19 18:21:05 2006 UTC

  Modified files:              
    /ZendEngine2        zend_API.c 
  Log:
  Fix usage of 'return_null' option in parameter parsing.
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_API.c?r1=1.384&r2=1.385&diff_format=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.384 ZendEngine2/zend_API.c:1.385
--- ZendEngine2/zend_API.c:1.384        Wed Jul 19 17:51:49 2006
+++ ZendEngine2/zend_API.c      Wed Jul 19 18:21:04 2006
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.c,v 1.384 2006/07/19 17:51:49 andrei Exp $ */
+/* $Id: zend_API.c,v 1.385 2006/07/19 18:21:04 andrei Exp $ */
 
 #include "zend.h"
 #include "zend_execute.h"
@@ -634,14 +634,14 @@
                case 'r':
                        {
                                zval **p = va_arg(*va, zval **);
-                               if (Z_TYPE_PP(arg) != IS_RESOURCE) {
-                                       if (Z_TYPE_PP(arg) == IS_NULL && 
return_null) {
-                                               *p = NULL;
-                                       } else {
-                                               return "resource";
-                                       }
-                               } else {
+                               if (return_null) {
+                                       *p = NULL;
+                                       break;
+                               }
+                               if (Z_TYPE_PP(arg) == IS_RESOURCE) {
                                        *p = *arg;
+                               } else {
+                                       return "resource";
                                }
                        }
                        break;
@@ -649,14 +649,14 @@
                case 'a':
                        {
                                zval **p = va_arg(*va, zval **);
-                               if (Z_TYPE_PP(arg) != IS_ARRAY) {
-                                       if (Z_TYPE_PP(arg) == IS_NULL && 
return_null) {
-                                               *p = NULL;
-                                       } else {
-                                               return "array";
-                                       }
-                               } else {
+                               if (return_null) {
+                                       *p = NULL;
+                                       break;
+                               }
+                               if (Z_TYPE_PP(arg) == IS_ARRAY) {
                                        *p = *arg;
+                               } else {
+                                       return "array";
                                }
                        }
                        break;
@@ -664,14 +664,14 @@
                case 'h':
                        {
                                HashTable **p = va_arg(*va, HashTable **);
-                               if (Z_TYPE_PP(arg) != IS_ARRAY) {
-                                       if (Z_TYPE_PP(arg) == IS_NULL && 
return_null) {
-                                               *p = NULL;
-                                       } else {
-                                               return "array";
-                                       }
-                               } else {
+                               if (return_null) {
+                                       *p = NULL;
+                                       break;
+                               }
+                               if (Z_TYPE_PP(arg) == IS_ARRAY) {
                                        *p = Z_ARRVAL_PP(arg);
+                               } else {
+                                       return "array";
                                }
                        }
                        break;
@@ -679,14 +679,14 @@
                case 'o':
                        {
                                zval **p = va_arg(*va, zval **);
-                               if (Z_TYPE_PP(arg) != IS_OBJECT) {
-                                       if (Z_TYPE_PP(arg) == IS_NULL && 
return_null) {
-                                               *p = NULL;
-                                       } else {
-                                               return "object";
-                                       }
-                               } else {
+                               if (return_null) {
+                                       *p = NULL;
+                                       break;
+                               }
+                               if (Z_TYPE_PP(arg) == IS_OBJECT) {
                                        *p = *arg;
+                               } else {
+                                       return "object";
                                }
                        }
                        break;
@@ -696,15 +696,17 @@
                                zval **p = va_arg(*va, zval **);
                                zend_class_entry *ce = va_arg(*va, 
zend_class_entry *);
 
+                               if (return_null) {
+                                       *p = NULL;
+                                       break;
+                               }
                                if (Z_TYPE_PP(arg) == IS_OBJECT &&
                                                (!ce || 
instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC))) {
                                        *p = *arg;
                                } else {
-                                       if (Z_TYPE_PP(arg) == IS_NULL && 
return_null) {
-                                               *p = NULL;
-                                       } else if (ce) {
+                                       if (ce) {
                                                *ret_type = 
UG(unicode)?IS_UNICODE:IS_STRING;
-                                               return ce->name.s;
+                                               return ce->name.v;
                                        } else {
                                                return "object";
                                        }
@@ -717,7 +719,7 @@
                                zend_class_entry **lookup, **pce = va_arg(*va, 
zend_class_entry **);
                                zend_class_entry *ce_base = *pce;
 
-                               if (return_null && Z_TYPE_PP(arg) == IS_NULL) {
+                               if (return_null) {
                                        *pce = NULL;
                                        break;
                                }
@@ -728,7 +730,7 @@
                                        *pce = *lookup;
                                }
                                if (ce_base) {
-                                       if ((!*pce || 
!instanceof_function(*pce, ce_base TSRMLS_CC)) && !return_null) {
+                                       if ((!*pce || 
!instanceof_function(*pce, ce_base TSRMLS_CC))) {
                                                char *space;
                                                zstr class_name = 
get_active_class_name(&space TSRMLS_CC);
                                                zend_error(E_WARNING, "%v%s%v() 
expects parameter %d to be a class name derived from %v, '%v' given",
@@ -756,12 +758,14 @@
                                zend_fcall_info       *fci = va_arg(*va, 
zend_fcall_info *);
                                zend_fcall_info_cache *fcc = va_arg(*va, 
zend_fcall_info_cache *);
 
-                               if (zend_fcall_info_init(*arg, fci, fcc 
TSRMLS_CC) == SUCCESS) {
-                                       break;
-                               } else if (return_null) {
+                               if (return_null) {
                                        fci->size = 0;
                                        fcc->initialized = 0;
                                        break;
+                               } 
+
+                               if (zend_fcall_info_init(*arg, fci, fcc 
TSRMLS_CC) == SUCCESS) {
+                                       break;
                                } else {
                                        return "valid callback";
                                }
@@ -770,23 +774,25 @@
                case 'z':
                        {
                                zval **p = va_arg(*va, zval **);
-                               if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
+                               if (return_null) {
                                        *p = NULL;
                                } else {
                                        *p = *arg;
                                }
                        }
                        break;
+
                case 'Z':
                        {
                                zval ***p = va_arg(*va, zval ***);
-                               if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
+                               if (return_null) {
                                        *p = NULL;
                                } else {
                                        *p = arg;
                                }
                        }
                        break;
+
                default:
                        return "unknown";
        }

-- 
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




<Prev in Thread] Current Thread [Next in Thread>