summaryrefslogtreecommitdiff
path: root/Zend/zend_inheritance.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-12-26 13:30:25 +0300
committerDmitry Stogov <dmitry@zend.com>2017-12-26 13:30:25 +0300
commitefcbea43455ca4e27ec6fc5ce2f3a740a981247e (patch)
treedf357ac8a9c23e56205b67684772c8c8005c640c /Zend/zend_inheritance.c
parent05cb472a88ce8313e6e91b75e74f1c1c5de25daf (diff)
downloadphp-git-efcbea43455ca4e27ec6fc5ce2f3a740a981247e.tar.gz
Cheaper reference construction
Diffstat (limited to 'Zend/zend_inheritance.c')
-rw-r--r--Zend/zend_inheritance.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index ef83622ba8..47750b8f3c 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -896,18 +896,24 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
do {
dst--;
src--;
- ZVAL_MAKE_REF(src);
- ZVAL_COPY_VALUE(dst, src);
- Z_ADDREF_P(dst);
+ if (Z_ISREF_P(src)) {
+ Z_ADDREF_P(src);
+ } else {
+ ZVAL_MAKE_REF_EX(src, 2);
+ }
+ ZVAL_REF(dst, Z_REF_P(src));
} while (dst != end);
} else if (ce->type == ZEND_USER_CLASS) {
src = parent_ce->default_static_members_table + parent_ce->default_static_members_count;
do {
dst--;
src--;
- ZVAL_MAKE_REF(src);
- ZVAL_COPY_VALUE(dst, src);
- Z_ADDREF_P(dst);
+ if (Z_ISREF_P(src)) {
+ Z_ADDREF_P(src);
+ } else {
+ ZVAL_MAKE_REF_EX(src, 2);
+ }
+ ZVAL_REF(dst, Z_REF_P(src));
if (Z_TYPE_P(Z_REFVAL_P(dst)) == IS_CONSTANT_AST) {
ce->ce_flags &= ~ZEND_ACC_CONSTANTS_UPDATED;
}