cvs: php-src /ext/standard php_incomplete_class.h var.c

From: Date: Tue, 28 Jun 2005 09:46:30 +0000
Subject: cvs: php-src /ext/standard php_incomplete_class.h var.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-32532@lists.php.net to get a copy of this message
stas Tue Jun 28 05:46:30 2005 EDT Modified files: /php-src/ext/standard php_incomplete_class.h var.c Log: fix handling of non-PHP classes (John Coggeshall) http://cvs.php.net/diff.php/php-src/ext/standard/php_incomplete_class.h?r1=1.13&r2=1.14&ty=u Index: php-src/ext/standard/php_incomplete_class.h diff -u php-src/ext/standard/php_incomplete_class.h:1.13 php-src/ext/standard/php_incomplete_class.h:1.14 --- php-src/ext/standard/php_incomplete_class.h:1.13 Thu Mar 18 11:54:36 2004 +++ php-src/ext/standard/php_incomplete_class.h Tue Jun 28 05:46:30 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_incomplete_class.h,v 1.13 2004/03/18 16:54:36 dmitry Exp $ */ +/* $Id: php_incomplete_class.h,v 1.14 2005/06/28 09:46:30 stas Exp $ */ #ifndef PHP_INCOMPLETE_CLASS_H #define PHP_INCOMPLETE_CLASS_H @@ -26,18 +26,18 @@ #define PHP_IC_ENTRY \ BG(incomplete_class) -#define PHP_SET_CLASS_ATTRIBUTES(struc) \ - /* OBJECTS_FIXME: Fix for new object model */ \ - if (Z_OBJCE_P(struc) == BG(incomplete_class)) { \ - class_name = php_lookup_class_name(struc, &name_len); \ - free_class_name = 1; \ +#define PHP_SET_CLASS_ATTRIBUTES(struc) \ + /* OBJECTS_FIXME: Fix for new object model */ \ + if (Z_OBJ_HT_P(struc)->get_class_entry && \ + Z_OBJCE_P(struc) == BG(incomplete_class)) { \ + class_name = php_lookup_class_name(struc, &name_len); \ + free_class_name = 1; \ incomplete_class = 1; \ - } else { \ - class_name = Z_OBJCE_P(struc)->name; \ - name_len = Z_OBJCE_P(struc)->name_length; \ + } else { \ + free_class_name = !zend_get_object_classname(struc, &class_name, &name_len);\ } -#define PHP_CLEANUP_CLASS_ATTRIBUTES() \ +#define PHP_CLEANUP_CLASS_ATTRIBUTES() \ if (free_class_name) efree(class_name) #define PHP_CLASS_ATTRIBUTES \ http://cvs.php.net/diff.php/php-src/ext/standard/var.c?r1=1.200&r2=1.201&ty=u Index: php-src/ext/standard/var.c diff -u php-src/ext/standard/var.c:1.200 php-src/ext/standard/var.c:1.201 --- php-src/ext/standard/var.c:1.200 Wed Jun 8 11:48:12 2005 +++ php-src/ext/standard/var.c Tue Jun 28 05:46:30 2005 @@ -18,7 +18,8 @@ +----------------------------------------------------------------------+ */ -/* $Id: var.c,v 1.200 2005/06/08 15:48:12 dmitry Exp $ */ +/* $Id: var.c,v 1.201 2005/06/28 09:46:30 stas Exp $ */ + /* {{{ includes @@ -463,7 +464,7 @@ /* relies on "(long)" being a perfect hash function for data pointers, however the actual identity of an object has had to be determined by its object handle and the class entry since 5.0. */ - if (Z_TYPE_P(var) == IS_OBJECT) { + if ((Z_TYPE_P(var) == IS_OBJECT) && Z_OBJ_HT_P(var)->get_class_entry) { p = smart_str_print_long(id + sizeof(id) - 1, (((unsigned long)Z_OBJCE_P(var) << 5) | ((unsigned long)Z_OBJCE_P(var) >> (sizeof(long) * 8 - 5))) @@ -670,13 +671,18 @@ zval *retval_ptr = NULL; zval fname; int res; + zend_class_entry *ce = NULL; + + if(Z_OBJ_HT_PP(struc)->get_class_entry) { + ce = Z_OBJCE_PP(struc); + } - if(Z_OBJCE_PP(struc)->serialize != NULL) { + if(ce && ce->serialize != NULL) { /* has custom handler */ unsigned char *serialized_data = NULL; zend_uint serialized_length; - if(Z_OBJCE_PP(struc)->serialize(*struc, &serialized_data, &serialized_length, (zend_serialize_data *)var_hash TSRMLS_CC) == SUCCESS) { + if(ce->serialize(*struc, &serialized_data, &serialized_length, (zend_serialize_data *)var_hash TSRMLS_CC) == SUCCESS) { smart_str_appendl(buf, "C:", 2); smart_str_append_long(buf, Z_OBJCE_PP(struc)->name_length); smart_str_appendl(buf, ":\"", 2); @@ -696,8 +702,8 @@ return; } - if (Z_OBJCE_PP(struc) != PHP_IC_ENTRY && - zend_hash_exists(&Z_OBJCE_PP(struc)->function_table, "__sleep", sizeof("__sleep"))) { + if (ce && ce != PHP_IC_ENTRY && + zend_hash_exists(&ce->function_table, "__sleep", sizeof("__sleep"))) { INIT_PZVAL(&fname); ZVAL_STRINGL(&fname, "__sleep", sizeof("__sleep") - 1, 0); res = call_user_function_ex(CG(function_table), struc, &fname,

« previous php.cvs (#32532) next »