summaryrefslogtreecommitdiff
path: root/Zend/zend_variables.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-04-03 15:26:23 +0400
committerDmitry Stogov <dmitry@zend.com>2014-04-03 15:26:23 +0400
commit76cc99fe60d1e446a0250b4d778f02bcdbd7fc09 (patch)
tree51b80d5b6c401bebee6c01d28423018a10edb232 /Zend/zend_variables.h
parentd8099d0468426dbee59f540048376653535270ce (diff)
downloadphp-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.h11
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);