cvs: php-gtk /main php_gtk_util.c

From: Date: Mon, 24 Apr 2006 02:10:40 +0000
Subject: cvs: php-gtk /main php_gtk_util.c
Groups: php.gtk.cvs 
Request: Send a blank email to php-gtk-cvs+get-2256@lists.php.net to get a copy of this message
andrei Mon Apr 24 02:10:40 2006 UTC Modified files: /php-gtk/main php_gtk_util.c Log: Allow passing PHP NULL for objects which will result in C NULL. http://cvs.php.net/viewcvs.cgi/php-gtk/main/php_gtk_util.c?r1=1.53&r2=1.54&diff_format=u Index: php-gtk/main/php_gtk_util.c diff -u php-gtk/main/php_gtk_util.c:1.53 php-gtk/main/php_gtk_util.c:1.54 --- php-gtk/main/php_gtk_util.c:1.53 Fri Mar 31 18:10:22 2006 +++ php-gtk/main/php_gtk_util.c Mon Apr 24 02:10:39 2006 @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id: php_gtk_util.c,v 1.53 2006/03/31 18:10:22 andrei Exp $ */ +/* $Id: php_gtk_util.c,v 1.54 2006/04/24 02:10:39 andrei Exp $ */ #include "php_gtk.h" @@ -61,6 +61,16 @@ { char *spec_walk = *spec; char c = *spec_walk++; + int return_null = 0; + + while (*spec_walk == '/' || *spec_walk == '!') { + if (*spec_walk == '/') { + SEPARATE_ZVAL_IF_NOT_REF(arg); + } else if (*spec_walk == '!' && Z_TYPE_PP(arg) == IS_NULL) { + return_null = 1; + } + spec_walk++; + } switch (c) { @@ -299,14 +309,14 @@ { zval **p = va_arg(*va, zval **); zend_class_entry *ce = va_arg(*va, zend_class_entry *); - if (Z_TYPE_PP(arg) != IS_OBJECT || !instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC)) - return ce->name; - else { - if (*spec_walk == '/') { - SEPARATE_ZVAL(arg); - spec_walk++; - } + if (Z_TYPE_PP(arg) == IS_OBJECT && (!ce || instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC))) { *p = *arg; + } else { + if (return_null) { + *p = NULL; + } else { + return ce ? ce->name : "object"; + } } } break; @@ -319,10 +329,6 @@ sprintf(buf, "%s or null", ce->name); return buf; } else { - if (*spec_walk == '/') { - SEPARATE_ZVAL(arg); - spec_walk++; - } *p = *arg; } } @@ -340,10 +346,6 @@ ret_zval: { zval **p = va_arg(*va, zval **); - if (*spec_walk == '/') { - SEPARATE_ZVAL(arg); - spec_walk++; - } *p = *arg; } break; @@ -408,6 +410,7 @@ case '#': case '/': case '^': + case '!': /* Pass */ break;

« previous php.gtk.cvs (#2256) next »