diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-06-05 16:04:11 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-06-05 16:04:11 +0400 |
commit | c1965f58d4dd3970912dcd6a63ccd5860bae1a97 (patch) | |
tree | 15b4a94e8e8405f791438c468ad4eb03f60c4079 /Zend/zend_compile.c | |
parent | 3d87391cc06fe87344536e88ac74ded22b0195cf (diff) | |
download | php-git-c1965f58d4dd3970912dcd6a63ccd5860bae1a97.tar.gz |
Use reference counting instead of zval duplication
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r-- | Zend/zend_compile.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index fda1c7606e..c84937b645 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3793,7 +3793,7 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent } } for (i = 0; i < parent_ce->default_static_members_count; i++) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(&CE_STATIC_MEMBERS(parent_ce)[i]); + ZVAL_MAKE_REF(&CE_STATIC_MEMBERS(parent_ce)[i]); ce->default_static_members_table[i] = CE_STATIC_MEMBERS(parent_ce)[i]; Z_ADDREF(ce->default_static_members_table[i]); } @@ -3811,7 +3811,7 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent } } for (i = 0; i < parent_ce->default_static_members_count; i++) { - SEPARATE_ZVAL_TO_MAKE_IS_REF(&parent_ce->default_static_members_table[i]); + ZVAL_MAKE_REF(&parent_ce->default_static_members_table[i]); ce->default_static_members_table[i] = parent_ce->default_static_members_table[i]; Z_ADDREF(ce->default_static_members_table[i]); } @@ -3896,9 +3896,7 @@ static int do_inherit_iface_constant(zval *zv TSRMLS_DC, int num_args, va_list a zend_class_entry *iface = va_arg(args, zend_class_entry *); if (hash_key->key && do_inherit_constant_check(&ce->constants_table, zv, hash_key, iface)) { - if (!Z_ISREF_P(zv)) { - ZVAL_NEW_REF(zv, zv); - } + ZVAL_MAKE_REF(zv); Z_ADDREF_P(zv); zend_hash_update(&ce->constants_table, hash_key->key, zv); } @@ -7524,6 +7522,9 @@ void zend_do_constant_expression(znode *result, zend_ast *ast TSRMLS_DC) /* {{{ if (ast->kind == ZEND_CONST) { ZVAL_COPY_VALUE(&result->u.constant, &ast->u.val); efree(ast); + if (Z_TYPE(result->u.constant) == IS_ARRAY) { + zend_make_immutable_array_r(&result->u.constant TSRMLS_CC); + } } else if (zend_ast_is_ct_constant(ast)) { zend_ast_evaluate(&result->u.constant, ast, NULL TSRMLS_CC); zend_ast_destroy(ast); |