summaryrefslogtreecommitdiff
path: root/Zend/zend_variables.c
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2016-05-05 23:31:57 +0200
committerBob Weinand <bobwei9@hotmail.com>2016-05-05 23:31:57 +0200
commitbac6fdb0c52c924e726c5a78de8858bf27b6586b (patch)
tree627f2ec8d91955e99456783aebd94ac5d4236f32 /Zend/zend_variables.c
parent59f35c0ca9abfa72c5393f6c0350759a3f6512d8 (diff)
downloadphp-git-bac6fdb0c52c924e726c5a78de8858bf27b6586b.tar.gz
Refactor zval cleanup into single function
Also use zval_ptr_dtor_nogc() everywhere in Zend in favor of zval_dtor()
Diffstat (limited to 'Zend/zend_variables.c')
-rw-r--r--Zend/zend_variables.c100
1 files changed, 24 insertions, 76 deletions
diff --git a/Zend/zend_variables.c b/Zend/zend_variables.c
index 01b68c25a4..76b26864ca 100644
--- a/Zend/zend_variables.c
+++ b/Zend/zend_variables.c
@@ -30,10 +30,6 @@
ZEND_API void ZEND_FASTCALL _zval_dtor_func(zend_refcounted *p ZEND_FILE_LINE_DC)
{
- if (--GC_REFCOUNT(p)) {
- return;
- }
-
switch (GC_TYPE(p)) {
case IS_STRING:
case IS_CONSTANT: {
@@ -79,61 +75,13 @@ ZEND_API void ZEND_FASTCALL _zval_dtor_func(zend_refcounted *p ZEND_FILE_LINE_DC
}
}
-ZEND_API void ZEND_FASTCALL _zval_dtor_func_for_ptr(zend_refcounted *p ZEND_FILE_LINE_DC)
-{
- switch (GC_TYPE(p)) {
- case IS_STRING:
- case IS_CONSTANT: {
- zend_string *str = (zend_string*)p;
- CHECK_ZVAL_STRING_REL(str);
- zend_string_free(str);
- break;
- }
- case IS_ARRAY: {
- zend_array *arr = (zend_array*)p;
-
- zend_array_destroy(arr);
- break;
- }
- case IS_CONSTANT_AST: {
- zend_ast_ref *ast = (zend_ast_ref*)p;
-
- zend_ast_destroy_and_free(ast->ast);
- efree_size(ast, sizeof(zend_ast_ref));
- break;
- }
- case IS_OBJECT: {
- zend_object *obj = (zend_object*)p;
-
- zend_objects_store_del(obj);
- break;
- }
- case IS_RESOURCE: {
- zend_resource *res = (zend_resource*)p;
-
- /* destroy resource */
- zend_list_free(res);
- break;
- }
- case IS_REFERENCE: {
- zend_reference *ref = (zend_reference*)p;
-
- i_zval_ptr_dtor(&ref->val ZEND_FILE_LINE_RELAY_CC);
- efree_size(ref, sizeof(zend_reference));
- break;
- }
- default:
- break;
- }
-}
-
-ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC)
+ZEND_API void _zval_internal_dtor(zval *zval_ptr ZEND_FILE_LINE_DC)
{
- switch (Z_TYPE_P(zvalue)) {
+ switch (Z_TYPE_P(zval_ptr)) {
case IS_STRING:
case IS_CONSTANT:
- CHECK_ZVAL_STRING_REL(Z_STR_P(zvalue));
- zend_string_release(Z_STR_P(zvalue));
+ CHECK_ZVAL_STRING_REL(Z_STR_P(zval_ptr));
+ zend_string_release(Z_STR_P(zval_ptr));
break;
case IS_ARRAY:
case IS_CONSTANT_AST:
@@ -142,7 +90,7 @@ ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC)
zend_error_noreturn(E_CORE_ERROR, "Internal zval's can't be arrays, objects or resources");
break;
case IS_REFERENCE: {
- zend_reference *ref = (zend_reference*)Z_REF_P(zvalue);
+ zend_reference *ref = (zend_reference*)Z_REF_P(zval_ptr);
zval_internal_ptr_dtor(&ref->val);
free(ref);
@@ -158,13 +106,13 @@ ZEND_API void _zval_internal_dtor(zval *zvalue ZEND_FILE_LINE_DC)
}
}
-ZEND_API void _zval_internal_dtor_for_ptr(zval *zvalue ZEND_FILE_LINE_DC)
+ZEND_API void _zval_internal_dtor_for_ptr(zval *zval_ptr ZEND_FILE_LINE_DC)
{
- switch (Z_TYPE_P(zvalue)) {
+ switch (Z_TYPE_P(zval_ptr)) {
case IS_STRING:
case IS_CONSTANT:
- CHECK_ZVAL_STRING_REL(Z_STR_P(zvalue));
- zend_string_free(Z_STR_P(zvalue));
+ CHECK_ZVAL_STRING_REL(Z_STR_P(zval_ptr));
+ zend_string_free(Z_STR_P(zval_ptr));
break;
case IS_ARRAY:
case IS_CONSTANT_AST:
@@ -173,7 +121,7 @@ ZEND_API void _zval_internal_dtor_for_ptr(zval *zvalue ZEND_FILE_LINE_DC)
zend_error_noreturn(E_CORE_ERROR, "Internal zval's can't be arrays, objects or resources");
break;
case IS_REFERENCE: {
- zend_reference *ref = (zend_reference*)Z_REF_P(zvalue);
+ zend_reference *ref = (zend_reference*)Z_REF_P(zval_ptr);
zval_internal_ptr_dtor(&ref->val);
free(ref);
@@ -215,17 +163,17 @@ ZEND_API void zval_add_ref_unref(zval *p)
}
}
-ZEND_API void ZEND_FASTCALL _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC)
+ZEND_API void ZEND_FASTCALL _zval_copy_ctor_func(zval *zval_ptr ZEND_FILE_LINE_DC)
{
- if (EXPECTED(Z_TYPE_P(zvalue) == IS_ARRAY)) {
- ZVAL_ARR(zvalue, zend_array_dup(Z_ARRVAL_P(zvalue)));
- } else if (EXPECTED(Z_TYPE_P(zvalue) == IS_STRING) ||
- EXPECTED(Z_TYPE_P(zvalue) == IS_CONSTANT)) {
- CHECK_ZVAL_STRING_REL(Z_STR_P(zvalue));
- Z_STR_P(zvalue) = zend_string_dup(Z_STR_P(zvalue), 0);
- } else if (EXPECTED(Z_TYPE_P(zvalue) == IS_CONSTANT_AST)) {
- zend_ast *copy = zend_ast_copy(Z_ASTVAL_P(zvalue));
- ZVAL_NEW_AST(zvalue, copy);
+ if (EXPECTED(Z_TYPE_P(zval_ptr) == IS_ARRAY)) {
+ ZVAL_ARR(zval_ptr, zend_array_dup(Z_ARRVAL_P(zval_ptr)));
+ } else if (EXPECTED(Z_TYPE_P(zval_ptr) == IS_STRING) ||
+ EXPECTED(Z_TYPE_P(zval_ptr) == IS_CONSTANT)) {
+ CHECK_ZVAL_STRING_REL(Z_STR_P(zval_ptr));
+ Z_STR_P(zval_ptr) = zend_string_dup(Z_STR_P(zval_ptr), 0);
+ } else if (EXPECTED(Z_TYPE_P(zval_ptr) == IS_CONSTANT_AST)) {
+ zend_ast *copy = zend_ast_copy(Z_ASTVAL_P(zval_ptr));
+ ZVAL_NEW_AST(zval_ptr, copy);
}
}
@@ -236,16 +184,16 @@ ZEND_API size_t zend_print_variable(zval *var)
}
-ZEND_API void _zval_dtor_wrapper(zval *zvalue)
+ZEND_API void _zval_dtor_wrapper(zval *zval_ptr)
{
- zval_dtor(zvalue);
+ zval_dtor(zval_ptr);
}
#if ZEND_DEBUG
-ZEND_API void _zval_internal_dtor_wrapper(zval *zvalue)
+ZEND_API void _zval_internal_dtor_wrapper(zval *zval_ptr)
{
- zval_internal_dtor(zvalue);
+ zval_internal_dtor(zval_ptr);
}