stas Tue Jun 28 05:17:21 2005 EDT
Modified files: (Branch: PHP_5_0)
/php-src/ext/standard var.c php_incomplete_class.h
Log:
fix non-PHP object handling (from John Coggeshall)
http://cvs.php.net/diff.php/php-src/ext/standard/var.c?r1=1.191.2.7&r2=1.191.2.8&ty=u
Index: php-src/ext/standard/var.c
diff -u php-src/ext/standard/var.c:1.191.2.7
php-src/ext/standard/var.c:1.191.2.8
--- php-src/ext/standard/var.c:1.191.2.7 Wed Jun 8 11:48:26 2005
+++ php-src/ext/standard/var.c Tue Jun 28 05:17:19 2005
@@ -18,7 +18,8 @@
+----------------------------------------------------------------------+
*/
-/* $Id: var.c,v 1.191.2.7 2005/06/08 15:48:26 dmitry Exp $ */
+/* $Id: var.c,v 1.191.2.8 2005/06/28 09:17:19 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 !=
NULL) {
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)))
@@ -671,7 +672,7 @@
zval fname;
int res;
- if (Z_OBJCE_PP(struc) != PHP_IC_ENTRY &&
+ if (Z_OBJ_HT_PP(struc)->get_class_entry &&
Z_OBJCE_PP(struc) != PHP_IC_ENTRY &&
zend_hash_exists(&Z_OBJCE_PP(struc)->function_table, "__sleep",
sizeof("__sleep"))) {
INIT_PZVAL(&fname);
ZVAL_STRINGL(&fname, "__sleep",
sizeof("__sleep") - 1, 0);
http://cvs.php.net/diff.php/php-src/ext/standard/php_incomplete_class.h?r1=1.13&r2=1.13.2.1&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.13.2.1
--- 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:17:19 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.13.2.1 2005/06/28 09:17:19 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
\
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php