]> granicus.if.org Git - php/commitdiff
Use generic handlers instead of Z_OBJ
authorStanislav Malyshev <stas@php.net>
Sun, 12 Jan 2003 13:45:50 +0000 (13:45 +0000)
committerStanislav Malyshev <stas@php.net>
Sun, 12 Jan 2003 13:45:50 +0000 (13:45 +0000)
Zend/zend.c

index ff9e818fabfd2670ff48315f42a973b142e1e1f6..4114ba8e277b2da15c3ca322dea6e900f980e9de 100644 (file)
@@ -274,18 +274,31 @@ ZEND_API void zend_print_flat_zval_r(zval *expr)
            break;
        case IS_OBJECT:
            {
-               zend_object *object = Z_OBJ_P(expr);
-
-               if (++object->properties->nApplyCount>1) {
-                   ZEND_PUTS(" *RECURSION*");
-                   object->properties->nApplyCount--;
-                   return;
-               }
-               zend_printf("%s Object (", object->ce->name);
-               print_flat_hash(object->properties);
-               ZEND_PUTS(")");
-               object->properties->nApplyCount--;
-               break;
+                       HashTable *properties = NULL;
+                       char *class_name = NULL;
+                       zend_uint clen;
+                       
+                       if(Z_OBJ_HANDLER_P(expr, get_class_name)) {
+                               Z_OBJ_HANDLER_P(expr, get_class_name)(expr, &class_name, &clen, 0 TSRMLS_CC);
+                       }
+                       if(class_name == NULL) {
+                               class_name = "Unknown Class";
+                       }
+                       zend_printf("%s Object (", class_name);
+                       if(Z_OBJ_HANDLER_P(expr, get_properties)) {
+                               properties = Z_OBJPROP_P(expr);
+                       }
+                       if(properties) {
+                               if (++properties->nApplyCount>1) {
+                                       ZEND_PUTS(" *RECURSION*");
+                                       properties->nApplyCount--;
+                                       return;
+                               }
+                               print_flat_hash(properties);
+                               properties->nApplyCount--;
+                       }
+                       ZEND_PUTS(")");
+                       break;
            }
        default:
            zend_print_variable(expr);
@@ -314,16 +327,29 @@ ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int
                        break;
                case IS_OBJECT:
                        {
-                               zend_object *object = Z_OBJ_P(expr);
-
-                               if (++object->properties->nApplyCount>1) {
-                                       ZEND_PUTS(" *RECURSION*");
-                                       object->properties->nApplyCount--;
-                                       return;
+                               HashTable *properties = NULL;
+                               char *class_name = NULL;
+                               zend_uint clen;
+                               
+                               if(Z_OBJ_HANDLER_P(expr, get_class_name)) {
+                                       Z_OBJ_HANDLER_P(expr, get_class_name)(expr, &class_name, &clen, 0 TSRMLS_CC);
+                               }
+                               if(class_name == NULL) {
+                                       class_name = "Unknown Class";
+                               }
+                               zend_printf("%s Object\n", class_name);
+                               if(Z_OBJ_HANDLER_P(expr, get_properties)) {
+                                       properties = Z_OBJPROP_P(expr);
+                               }
+                               if(properties) {
+                                       if (++properties->nApplyCount>1) {
+                                               ZEND_PUTS(" *RECURSION*");
+                                               properties->nApplyCount--;
+                                               return;
+                                       }
+                                       print_hash(properties, indent);
+                                       properties->nApplyCount--;
                                }
-                               zend_printf("%s Object\n", object->ce->name);
-                               print_hash(object->properties, indent);
-                               object->properties->nApplyCount--;
                                break;
                        }
                default: