summaryrefslogtreecommitdiff
path: root/ext/standard/var.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/var.c')
-rw-r--r--ext/standard/var.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/ext/standard/var.c b/ext/standard/var.c
index 77b290a6cc..f6b6bcf47f 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -82,7 +82,6 @@ PHPAPI void php_var_dump(zval *struc, int level) /* {{{ */
{
HashTable *myht;
zend_string *class_name;
- int is_temp;
int is_ref = 0;
zend_ulong num;
zend_string *key;
@@ -145,7 +144,7 @@ again:
}
Z_PROTECT_RECURSION_P(struc);
- myht = Z_OBJDEBUG_P(struc, is_temp);
+ myht = zend_get_properties_for(struc, ZEND_PROP_PURPOSE_DEBUG);
class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc));
php_printf("%sobject(%s)#%d (%d) {\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_array_count(myht) : 0);
zend_string_release_ex(class_name, 0);
@@ -158,10 +157,7 @@ again:
ZEND_HASH_FOREACH_KEY_VAL_IND(myht, num, key, val) {
php_object_property_dump(val, num, key, level);
} ZEND_HASH_FOREACH_END();
- if (is_temp) {
- zend_hash_destroy(myht);
- efree(myht);
- }
+ zend_release_properties(myht);
}
if (level > 1) {
php_printf("%*c", level-1, ' ');
@@ -249,7 +245,6 @@ PHPAPI void php_debug_zval_dump(zval *struc, int level) /* {{{ */
{
HashTable *myht = NULL;
zend_string *class_name;
- int is_temp = 0;
int is_ref = 0;
zend_ulong index;
zend_string *key;
@@ -299,20 +294,17 @@ again:
if (level > 1 && !(GC_FLAGS(myht) & GC_IMMUTABLE)) {
GC_UNPROTECT_RECURSION(myht);
}
- if (is_temp) {
- zend_hash_destroy(myht);
- efree(myht);
- }
if (level > 1) {
php_printf("%*c", level - 1, ' ');
}
PUTS("}\n");
break;
case IS_OBJECT:
- myht = Z_OBJDEBUG_P(struc, is_temp);
+ myht = zend_get_properties_for(struc, ZEND_PROP_PURPOSE_DEBUG);
if (myht) {
if (GC_IS_RECURSIVE(myht)) {
PUTS("*RECURSION*\n");
+ zend_release_properties(myht);
return;
}
GC_PROTECT_RECURSION(myht);
@@ -325,10 +317,7 @@ again:
zval_object_property_dump(val, index, key, level);
} ZEND_HASH_FOREACH_END();
GC_UNPROTECT_RECURSION(myht);
- if (is_temp) {
- zend_hash_destroy(myht);
- efree(myht);
- }
+ zend_release_properties(myht);
}
if (level > 1) {
php_printf("%*c", level - 1, ' ');
@@ -510,11 +499,12 @@ again:
break;
case IS_OBJECT:
- myht = Z_OBJPROP_P(struc);
+ myht = zend_get_properties_for(struc, ZEND_PROP_PURPOSE_VAR_EXPORT);
if (myht) {
if (GC_IS_RECURSIVE(myht)) {
smart_str_appendl(buf, "NULL", 4);
zend_error(E_WARNING, "var_export does not handle circular references");
+ zend_release_properties(myht);
return;
} else {
GC_PROTECT_RECURSION(myht);
@@ -538,6 +528,7 @@ again:
php_object_element_export(val, index, key, level, buf);
} ZEND_HASH_FOREACH_END();
GC_UNPROTECT_RECURSION(myht);
+ zend_release_properties(myht);
}
if (level > 1) {
buffer_append_spaces(buf, level - 1);
@@ -743,7 +734,7 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt
smart_str_appendl(buf, ":{", 2);
ZVAL_NULL(&nval);
- propers = Z_OBJPROP_P(struc);
+ propers = zend_get_properties_for(struc, ZEND_PROP_PURPOSE_SERIALIZE);
ZEND_HASH_FOREACH_STR_KEY(&names, name) {
zend_string *prot_name, *priv_name;
@@ -809,6 +800,7 @@ undef_prop:
smart_str_appendc(buf, '}');
zend_hash_destroy(&names);
+ zend_release_properties(propers);
}
/* }}} */
@@ -925,7 +917,7 @@ again:
i = zend_array_count(myht);
} else {
incomplete_class = php_var_serialize_class_name(buf, struc);
- myht = Z_OBJPROP_P(struc);
+ myht = zend_get_properties_for(struc, ZEND_PROP_PURPOSE_SERIALIZE);
/* count after serializing name, since php_var_serialize_class_name
* changes the count if the variable is incomplete class */
i = zend_array_count(myht);
@@ -978,6 +970,9 @@ again:
} ZEND_HASH_FOREACH_END();
}
smart_str_appendc(buf, '}');
+ if (Z_TYPE_P(struc) == IS_OBJECT) {
+ zend_release_properties(myht);
+ }
return;
}
case IS_REFERENCE: