diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2017-12-26 13:30:25 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2017-12-26 13:30:25 +0300 |
| commit | efcbea43455ca4e27ec6fc5ce2f3a740a981247e (patch) | |
| tree | df357ac8a9c23e56205b67684772c8c8005c640c /Zend/zend_inheritance.c | |
| parent | 05cb472a88ce8313e6e91b75e74f1c1c5de25daf (diff) | |
| download | php-git-efcbea43455ca4e27ec6fc5ce2f3a740a981247e.tar.gz | |
Cheaper reference construction
Diffstat (limited to 'Zend/zend_inheritance.c')
| -rw-r--r-- | Zend/zend_inheritance.c | 18 |
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; } |
