summaryrefslogtreecommitdiff
path: root/Zend/zend_variables.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-04-04 02:52:53 +0400
committerDmitry Stogov <dmitry@zend.com>2014-04-04 02:52:53 +0400
commit58f0f2503c0c1e8733615a582836a96b2f04a41a (patch)
tree4371c223a1af3c12d87a1e514386bfe05e9c819d /Zend/zend_variables.h
parent58871730c84b736b750b9dca681a8246feacf443 (diff)
downloadphp-git-58f0f2503c0c1e8733615a582836a96b2f04a41a.tar.gz
Various VM optimizations
Diffstat (limited to 'Zend/zend_variables.h')
-rw-r--r--Zend/zend_variables.h14
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)