]> granicus.if.org Git - php/commitdiff
try get handler on printable conversion
authorStanislav Malyshev <stas@php.net>
Sun, 28 Mar 2004 12:06:10 +0000 (12:06 +0000)
committerStanislav Malyshev <stas@php.net>
Sun, 28 Mar 2004 12:06:10 +0000 (12:06 +0000)
Zend/zend.c

index 7497c153f06885290ba4bb98296814903ec63199..5d177bd8283b62b3d047dd46e675def9a0154e22 100644 (file)
@@ -225,9 +225,19 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
                                        zend_error(E_NOTICE, "Object of class %s could not be converted to string", Z_OBJCE_P(expr)->name);
                                }
 #endif
-                               if (expr->value.obj.handlers->cast_object &&
-                                       expr->value.obj.handlers->cast_object(expr, expr_copy, IS_STRING, 0 TSRMLS_CC) == SUCCESS) {
-                                       break;
+                               if (Z_OBJ_HANDLER_P(expr, cast_object)) {
+                                       if(Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING, 0 TSRMLS_CC) == SUCCESS) {
+                                               break;
+                                       }
+                               } else {
+                                       if(Z_OBJ_HANDLER_P(expr, get)) {
+                                               zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
+                                               if(Z_TYPE_P(z) != IS_OBJECT) {
+                                                       zend_make_printable_zval(z, expr_copy, use_copy);
+                                                       FREE_ZVAL(z);
+                                                       return;
+                                               }
+                                       }
                                }
                                if (EG(exception)) {
                                        zval_dtor(expr_copy);