diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-04-04 02:52:53 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-04-04 02:52:53 +0400 |
commit | 58f0f2503c0c1e8733615a582836a96b2f04a41a (patch) | |
tree | 4371c223a1af3c12d87a1e514386bfe05e9c819d /Zend/zend_variables.h | |
parent | 58871730c84b736b750b9dca681a8246feacf443 (diff) | |
download | php-git-58f0f2503c0c1e8733615a582836a96b2f04a41a.tar.gz |
Various VM optimizations
Diffstat (limited to 'Zend/zend_variables.h')
-rw-r--r-- | Zend/zend_variables.h | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Zend/zend_variables.h b/Zend/zend_variables.h index 37accac191..848efa3bf4 100644 --- a/Zend/zend_variables.h +++ b/Zend/zend_variables.h @@ -43,7 +43,18 @@ 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) { if (Z_REFCOUNTED_P(zvalue)) { - if (Z_TYPE_FLAGS_P(zvalue) & IS_TYPE_COPYABLE) { + if (Z_COPYABLE_P(zvalue)) { + _zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC); + } else { + Z_ADDREF_P(zvalue); + } + } +} + +static zend_always_inline void _zval_opt_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC) +{ + if (Z_OPT_REFCOUNTED_P(zvalue)) { + if (Z_OPT_COPYABLE_P(zvalue)) { _zval_copy_ctor_func(zvalue ZEND_FILE_LINE_RELAY_CC); } else { Z_ADDREF_P(zvalue); @@ -60,6 +71,7 @@ ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC); ZEND_API void _zval_internal_ptr_dtor(zval *zvalue ZEND_FILE_LINE_DC); ZEND_API void _zval_dtor_wrapper(zval *zvalue); #define zval_copy_ctor(zvalue) _zval_copy_ctor((zvalue) ZEND_FILE_LINE_CC) +#define zval_opt_copy_ctor(zvalue) _zval_opt_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_internal_dtor(zvalue) _zval_internal_dtor((zvalue) ZEND_FILE_LINE_CC) |