summaryrefslogtreecommitdiff
path: root/Zend/zend_variables.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_variables.c')
-rw-r--r--Zend/zend_variables.c44
1 files changed, 16 insertions, 28 deletions
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index 6e9834475f..de0fa1285b 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -40,15 +40,13 @@ ZEND_API void _zval_dtor_func(zend_refcounted *p ZEND_FILE_LINE_DC)
case IS_ARRAY: {
zend_array *arr = (zend_array*)p;
- if (arr != &EG(symbol_table)) {
- ZEND_ASSERT(GC_REFCOUNT(arr) <= 1);
-
- /* break possible cycles */
- GC_TYPE(arr) = IS_NULL;
- GC_REMOVE_FROM_BUFFER(arr);
- zend_array_destroy(&arr->ht);
- efree_size(arr, sizeof(zend_array));
- }
+ ZEND_ASSERT(GC_REFCOUNT(arr) <= 1);
+
+ /* break possible cycles */
+ GC_TYPE(arr) = IS_NULL;
+ GC_REMOVE_FROM_BUFFER(arr);
+ zend_array_destroy(arr);
+ efree_size(arr, sizeof(zend_array));
break;
}
case IS_CONSTANT_AST: {
@@ -100,13 +98,11 @@ ZEND_API void _zval_dtor_func_for_ptr(zend_refcounted *p ZEND_FILE_LINE_DC)
case IS_ARRAY: {
zend_array *arr = (zend_array*)p;
- if (arr != &EG(symbol_table)) {
- /* break possible cycles */
- GC_TYPE(arr) = IS_NULL;
- GC_REMOVE_FROM_BUFFER(arr);
- zend_array_destroy(&arr->ht);
- efree_size(arr, sizeof(zend_array));
- }
+ /* break possible cycles */
+ GC_TYPE(arr) = IS_NULL;
+ GC_REMOVE_FROM_BUFFER(arr);
+ zend_array_destroy(arr);
+ efree_size(arr, sizeof(zend_array));
break;
}
case IS_CONSTANT_AST: {
@@ -237,16 +233,8 @@ ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC)
CHECK_ZVAL_STRING_REL(Z_STR_P(zvalue));
Z_STR_P(zvalue) = zend_string_dup(Z_STR_P(zvalue), 0);
break;
- case IS_ARRAY: {
- HashTable *ht;
-
- if (Z_ARR_P(zvalue) == &EG(symbol_table)) {
- return; /* do nothing */
- }
- ht = Z_ARRVAL_P(zvalue);
- ZVAL_NEW_ARR(zvalue);
- zend_array_dup(Z_ARRVAL_P(zvalue), ht);
- }
+ case IS_ARRAY:
+ ZVAL_ARR(zvalue, zend_array_dup(Z_ARRVAL_P(zvalue)));
break;
case IS_CONSTANT_AST: {
zend_ast_ref *ast = emalloc(sizeof(zend_ast_ref));
@@ -315,13 +303,13 @@ ZEND_API int zval_copy_static_var(zval *p, int num_args, va_list args, zend_hash
is_ref = Z_CONST_FLAGS_P(p) & IS_LEXICAL_REF;
symbol_table = zend_rebuild_symbol_table();
- p = zend_hash_find(&symbol_table->ht, key->key);
+ p = zend_hash_find(symbol_table, key->key);
if (!p) {
p = &tmp;
ZVAL_NULL(&tmp);
if (is_ref) {
ZVAL_NEW_REF(&tmp, &tmp);
- zend_hash_add_new(&symbol_table->ht, key->key, &tmp);
+ zend_hash_add_new(symbol_table, key->key, &tmp);
Z_ADDREF_P(p);
} else {
zend_error(E_NOTICE,"Undefined variable: %s", key->key->val);