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

Reply via email to