summaryrefslogtreecommitdiff
path: root/Zend/zend_variables.h
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2014-02-12 22:15:08 +0800
committerXinchen Hui <laruence@gmail.com>2014-02-12 22:15:08 +0800
commitd3954f16d3c5ea03031951f2c7c3c99944e740ee (patch)
tree32db3edd00a1bda858bea3a8245565472a7839f6 /Zend/zend_variables.h
parentbe82a077769641331ee5914c60df44ba3f862aff (diff)
downloadphp-git-d3954f16d3c5ea03031951f2c7c3c99944e740ee.tar.gz
Use better data structures (incomplete) -- stash for today work
Diffstat (limited to 'Zend/zend_variables.h')
-rw-r--r--Zend/zend_variables.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h
index 9ce1312b0d..19b8add917 100644
--- a/Zend/zend_variables.h
+++ b/Zend/zend_variables.h
@@ -35,6 +35,20 @@ static zend_always_inline void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
_zval_dtor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
}
+static zend_always_inline void _zval_clear(zval *zval_ptr, zend_bool reset ZEND_FILE_LINE_DC)
+{
+ if (!Z_REFCOUNTED_P(zval_ptr)) {
+ return;
+ }
+ Z_DELREF_P(zval_ptr);
+ if (Z_REFCOUNT_P(zval_ptr) == 0) {
+ _zval_dtor_func(zval_ptr ZEND_FILE_LINE_RELAY_CC);
+ if (reset) {
+ ZVAL_UNDEF(zval_ptr);
+ }
+ }
+}
+
ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC);
static zend_always_inline void _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
@@ -55,6 +69,9 @@ ZEND_API void _zval_dtor_wrapper(zval *zvalue);
#define zval_copy_ctor(zvalue) _zval_copy_ctor((zvalue) ZEND_FILE_LINE_CC)
#define zval_dtor(zvalue) _zval_dtor((zvalue) ZEND_FILE_LINE_CC)
#define zval_ptr_dtor(zval_ptr) _zval_ptr_dtor((zval_ptr) ZEND_FILE_LINE_CC)
+#define zval_clear_ex(zval_ptr, reset) _zval_clear((zval_ptr), (reset) ZEND_FILE_LINE_CC)
+#define zval_release(zval_ptr) zval_clear_ex((zval_ptr), 0 ZEND_FILE_LINE_CC)
+#define zval_clear(zval_ptr) zval_clear_ex((zval_ptr), 1 ZEND_FILE_LINE_CC)
#define zval_internal_dtor(zvalue) _zval_internal_dtor((zvalue) ZEND_FILE_LINE_CC)
#define zval_internal_ptr_dtor(zvalue) _zval_internal_ptr_dtor((zvalue) ZEND_FILE_LINE_CC)
#define zval_dtor_wrapper _zval_dtor_wrapper