diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-02-19 12:03:01 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-02-19 12:03:01 +0400 |
| commit | 9067dbcd0d8d8bed6c723d274b162182f33281ea (patch) | |
| tree | 2fedfa4a81b1c495979acdce75d0898e5d406aae /Zend/zend_object_handlers.c | |
| parent | 6a3a33405b4dbe55a2ca70b1162a79125b6dd2d6 (diff) | |
| download | php-git-9067dbcd0d8d8bed6c723d274b162182f33281ea.tar.gz | |
Use better data structures (incomplete)
Diffstat (limited to 'Zend/zend_object_handlers.c')
| -rw-r--r-- | Zend/zend_object_handlers.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 6d58cb7d26..7cb16e18bd 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -566,12 +566,14 @@ found: } else { zval garbage; - ZVAL_COPY_VALUE(&garbage, Z_REFVAL_P(variable_ptr)); + ZVAL_COPY_VALUE(&garbage, variable_ptr); /* if we assign referenced variable, we should separate it */ - Z_ADDREF_P(value); - if (Z_ISREF_P(value)) { - SEPARATE_ZVAL(value); + if (IS_REFCOUNTED(Z_TYPE_P(value))) { + Z_ADDREF_P(value); + if (Z_ISREF_P(value)) { + SEPARATE_ZVAL(value); + } } ZVAL_COPY_VALUE(variable_ptr, value); zval_ptr_dtor(&garbage); @@ -605,9 +607,11 @@ found: } } else if (EXPECTED(property_info != NULL)) { /* if we assign referenced variable, we should separate it */ - Z_ADDREF_P(value); - if (Z_ISREF_P(value)) { - SEPARATE_ZVAL(value); + if (IS_REFCOUNTED(Z_TYPE_P(value))) { + Z_ADDREF_P(value); + if (Z_ISREF_P(value)) { + SEPARATE_ZVAL(value); + } } if (EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) && property_info->offset >= 0) { |
