diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-02-28 11:03:05 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-02-28 11:03:05 +0400 |
commit | 54095e8c564e1a5ddb4457cfa47874523e6eda6e (patch) | |
tree | 8413853aa15dd59720fa3a54081bcf2c63d15248 /Zend/zend_variables.c | |
parent | 855a030b7b49db58cc203f2ecdc6bdfadf3ed539 (diff) | |
download | php-git-54095e8c564e1a5ddb4457cfa47874523e6eda6e.tar.gz |
Converting from reference to regular value
Diffstat (limited to 'Zend/zend_variables.c')
-rw-r--r-- | Zend/zend_variables.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c index a3d768d6d3..5292cf9f0c 100644 --- a/Zend/zend_variables.c +++ b/Zend/zend_variables.c @@ -187,11 +187,26 @@ ZEND_API void _zval_internal_dtor_for_ptr(zval *zvalue ZEND_FILE_LINE_DC) ZEND_API void zval_add_ref(zval *p) { - if (Z_REFCOUNTED_P(p)) { + if (Z_REFCOUNTED_P(p)) { Z_ADDREF_P(p); } } +ZEND_API void zval_add_ref_unref(zval *p) +{ + if (Z_REFCOUNTED_P(p)) { + if (Z_ISREF_P(p)) { + if (Z_REFCOUNT_P(p) == 1) { + zval *q = Z_REFVAL_P(p); + ZVAL_DUP(p, q); + } else { + Z_ADDREF_P(p); + } + } else { + Z_ADDREF_P(p); + } + } +} ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC) { |