diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-04-03 15:26:23 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-04-03 15:26:23 +0400 |
commit | 76cc99fe60d1e446a0250b4d778f02bcdbd7fc09 (patch) | |
tree | 51b80d5b6c401bebee6c01d28423018a10edb232 /Zend/zend_variables.h | |
parent | d8099d0468426dbee59f540048376653535270ce (diff) | |
download | php-git-76cc99fe60d1e446a0250b4d778f02bcdbd7fc09.tar.gz |
Refactored ZVAL flags usage to simplify various checks (e.g. Z_REFCOUNTED(), candidate for GC, etc)
Diffstat (limited to 'Zend/zend_variables.h')
-rw-r--r-- | Zend/zend_variables.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h index c62a194e21..37accac191 100644 --- a/Zend/zend_variables.h +++ b/Zend/zend_variables.h @@ -38,12 +38,17 @@ static zend_always_inline void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC) ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC); +#define zval_copy_ctor_func(zv) _zval_copy_ctor_func(zv ZEND_FILE_LINE_CC) + static zend_always_inline void _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC) { - if (!Z_REFCOUNTED_P(zvalue)) { - return; + if (Z_REFCOUNTED_P(zvalue)) { + if (Z_TYPE_FLAGS_P(zvalue) & IS_TYPE_COPYABLE) { + _zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC); + } else { + Z_ADDREF_P(zvalue); + } } - _zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC); } ZEND_API int zval_copy_static_var(zval *p TSRMLS_DC, int num_args, va_list args, zend_hash_key *key); |