]> granicus.if.org Git - php/commitdiff
- Missing __tostring() conversion snippets
authorMarcus Boerger <helly@php.net>
Wed, 10 May 2006 19:36:47 +0000 (19:36 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 10 May 2006 19:36:47 +0000 (19:36 +0000)
Zend/zend.c
Zend/zend_API.c

index 669a9becf8231d8e95e98534a979d12c3a1b925f..076d7154c097ae60b6517f38289b93923df9b285 100644 (file)
@@ -221,6 +221,9 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
                        {
                                TSRMLS_FETCH();
 
+                               if(Z_OBJ_HT_P(expr)->cast_object && Z_OBJ_HANDLER_P(expr, cast_object)(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
+                                       break;
+                               }
                                /* Standard PHP objects */
                                if (Z_OBJ_HT_P(expr) == &std_object_handlers || !Z_OBJ_HT_P(expr)->cast_object) {
                                        if (zend_std_cast_object_tostring(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
index e444090c74320ed97c432d6fcf5b00d8d35690f2..c32cbdcd0256b01ef2ea1db6f48a1e578786c9c1 100644 (file)
@@ -366,6 +366,17 @@ static char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, char **sp
                                                                *p = Z_STRVAL_PP(arg);
                                                                break;
                                                        }
+                                                       zval_ptr_dtor(arg);
+                                               }
+                                               /* Standard PHP objects */
+                                               if (Z_OBJ_HT_PP(arg) == &std_object_handlers || !Z_OBJ_HT_PP(arg)->cast_object) {
+                                                       SEPARATE_ZVAL_IF_NOT_REF(arg);
+                                                       if (zend_std_cast_object_tostring(*arg, *arg, IS_STRING TSRMLS_CC) == SUCCESS) {
+                                                               *pl = Z_STRLEN_PP(arg);
+                                                               *p = Z_STRVAL_PP(arg);
+                                                               break;
+                                                       }
+                                                       zval_ptr_dtor(arg);
                                                }
                                        }