]> granicus.if.org Git - php/commitdiff
- Use object handler get in the same way as the rest of the engine does
authorMarcus Boerger <helly@php.net>
Thu, 2 Mar 2006 00:40:19 +0000 (00:40 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 2 Mar 2006 00:40:19 +0000 (00:40 +0000)
Zend/zend.c

index e01263a5d3ecfb73fca88e69f2f392e8bbbeeaca..5053ed22ebe18feab07d0083f24457c4eadefd15 100644 (file)
@@ -358,16 +358,19 @@ ZEND_API void zend_make_string_zval(zval *expr, zval *expr_copy, int *use_copy)
                                }
                                if (Z_OBJ_HANDLER_P(expr, get)) {
                                        zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
+
+                                       z->refcount++;
                                        if(Z_TYPE_P(z) != IS_OBJECT) {
                                                zend_make_string_zval(z, expr_copy, use_copy);
                                                if (*use_copy) {
-                                                       FREE_ZVAL(z);
+                                                       zval_ptr_dtor(&z);
                                                } else {
                                                        ZVAL_ZVAL(expr_copy, z, 0, 1);
                                                        *use_copy = 1;
                                                }
                                                return;
                                        }
+                                       zval_ptr_dtor(&z);
                                }
                                zend_error(EG(exception) ? E_ERROR : E_RECOVERABLE_ERROR, "Object of class %v could not be converted to string", Z_OBJCE_P(expr)->name);
                                ZVAL_EMPTY_STRING(expr_copy);
@@ -424,16 +427,19 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
                        }
                        if (Z_OBJ_HANDLER_P(expr, get)) {
                                zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
+                               
+                               z->refcount++;
                                if(Z_TYPE_P(z) != IS_OBJECT) {
                                        zend_make_printable_zval(z, expr_copy, use_copy);
                                        if (*use_copy) {
-                                               FREE_ZVAL(z);
+                                               zval_ptr_dtor(&z);
                                        } else {
                                                ZVAL_ZVAL(expr_copy, z, 0, 1);
                                                *use_copy = 1;
                                        }
                                        return;
                                }
+                               zval_ptr_dtor(&z);
                        }
                        zend_error(EG(exception) ? E_ERROR : E_RECOVERABLE_ERROR, "Object of class %v could not be converted to string", Z_OBJCE_P(expr)->name);
                        ZVAL_EMPTY_STRING(expr_copy);
@@ -473,16 +479,19 @@ ZEND_API void zend_make_unicode_zval(zval *expr, zval *expr_copy, int *use_copy)
                        }
                        if (Z_OBJ_HANDLER_P(expr, get)) {
                                zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC);
+
+                               z->refcount++;
                                if(Z_TYPE_P(z) != IS_OBJECT) {
                                        zend_make_unicode_zval(z, expr_copy, use_copy);
                                        if (*use_copy) {
-                                               FREE_ZVAL(z);
+                                               zval_ptr_dtor(&z);
                                        } else {
                                                ZVAL_ZVAL(expr_copy, z, 0, 1);
                                                *use_copy = 1;
                                        }
                                        return;
                                }
+                               zval_ptr_dtor(&z);
                        }
                        zend_error(EG(exception) ? E_ERROR : E_RECOVERABLE_ERROR, "Object of class %v could not be converted to string", Z_OBJCE_P(expr)->name);
                        ZVAL_EMPTY_UNICODE(expr_copy);