1
0
mirror of https://github.com/php/php-src.git synced 2026-04-25 00:48:25 +02:00

Reverted zval_clear() and zval_release() back to zval_ptr_dtor()

This commit is contained in:
Dmitry Stogov
2014-02-12 22:51:19 +04:00
parent d3954f16d3
commit 7a9348f45d
2 changed files with 16 additions and 33 deletions
-17
View File
@@ -35,20 +35,6 @@ static zend_always_inline void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
_zval_dtor_func(zvalue ZEND_FILE_LINE_RELAY_CC);
}
static zend_always_inline void _zval_clear(zval *zval_ptr, zend_bool reset ZEND_FILE_LINE_DC)
{
if (!Z_REFCOUNTED_P(zval_ptr)) {
return;
}
Z_DELREF_P(zval_ptr);
if (Z_REFCOUNT_P(zval_ptr) == 0) {
_zval_dtor_func(zval_ptr ZEND_FILE_LINE_RELAY_CC);
if (reset) {
ZVAL_UNDEF(zval_ptr);
}
}
}
ZEND_API void _zval_copy_ctor_func(zval *zvalue ZEND_FILE_LINE_DC);
static zend_always_inline void _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
@@ -69,9 +55,6 @@ ZEND_API void _zval_dtor_wrapper(zval *zvalue);
#define zval_copy_ctor(zvalue) _zval_copy_ctor((zvalue) ZEND_FILE_LINE_CC)
#define zval_dtor(zvalue) _zval_dtor((zvalue) ZEND_FILE_LINE_CC)
#define zval_ptr_dtor(zval_ptr) _zval_ptr_dtor((zval_ptr) ZEND_FILE_LINE_CC)
#define zval_clear_ex(zval_ptr, reset) _zval_clear((zval_ptr), (reset) ZEND_FILE_LINE_CC)
#define zval_release(zval_ptr) zval_clear_ex((zval_ptr), 0 ZEND_FILE_LINE_CC)
#define zval_clear(zval_ptr) zval_clear_ex((zval_ptr), 1 ZEND_FILE_LINE_CC)
#define zval_internal_dtor(zvalue) _zval_internal_dtor((zvalue) ZEND_FILE_LINE_CC)
#define zval_internal_ptr_dtor(zvalue) _zval_internal_ptr_dtor((zvalue) ZEND_FILE_LINE_CC)
#define zval_dtor_wrapper _zval_dtor_wrapper
+16 -16
View File
@@ -148,12 +148,12 @@ static void spl_recursive_it_dtor(zend_object_iterator *_iter TSRMLS_DC)
while (object->level > 0) {
sub_iter = object->iterators[object->level].iterator;
sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
zval_clear(&object->iterators[object->level--].zobject);
zval_ptr_dtor(&object->iterators[object->level--].zobject);
}
object->iterators = erealloc(object->iterators, sizeof(spl_sub_iterator));
object->level = 0;
zval_clear(&iter->zobject);
zval_ptr_dtor(&iter->zobject);
efree(iter);
}
@@ -250,7 +250,7 @@ next_step:
}
if (Z_TYPE(retval) != IS_UNDEF) {
has_children = zend_is_true(&retval TSRMLS_CC);
zval_release(&retval);
zval_ptr_dtor(&retval);
if (has_children) {
if (object->max_depth == -1 || object->max_depth > object->level) {
switch (object->mode) {
@@ -308,7 +308,7 @@ next_step:
return;
} else {
zend_clear_exception(TSRMLS_C);
zval_release(&child);
zval_ptr_dtor(&child);
object->iterators[object->level].state = RS_NEXT;
goto next_step;
}
@@ -316,7 +316,7 @@ next_step:
if (Z_TYPE(child) == IS_UNDEF || Z_TYPE(child) != IS_OBJECT ||
!((ce = Z_OBJCE(child)) && instanceof_function(ce, spl_ce_RecursiveIterator TSRMLS_CC))) {
zval_release(&child);
zval_ptr_dtor(&child);
zend_throw_exception(spl_ce_UnexpectedValueException, "Objects returned by RecursiveIterator::getChildren() must implement RecursiveIterator", 0 TSRMLS_CC);
return;
}
@@ -361,7 +361,7 @@ next_step:
}
}
iterator->funcs->dtor(iterator TSRMLS_CC);
zval_clear(&object->iterators[object->level].zobject);
zval_ptr_dtor(&object->iterators[object->level].zobject);
object->level--;
} else {
return; /* done completeley */
@@ -380,7 +380,7 @@ static void spl_recursive_it_rewind_ex(spl_recursive_it_object *object, zval *zt
while (object->level) {
sub_iter = object->iterators[object->level].iterator;
sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
zval_clear(&object->iterators[object->level--].zobject);
zval_ptr_dtor(&object->iterators[object->level--].zobject);
if (!EG(exception) && (!object->endChildren || object->endChildren->common.scope != spl_ce_RecursiveIteratorIterator)) {
zend_call_method_with_0_params(zthis, object->ce, &object->endChildren, "endchildren", NULL);
}
@@ -471,7 +471,7 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla
ZVAL_LONG(&caching_it_flags, CIT_CATCH_GET_CHILD);
}
spl_instantiate_arg_ex2(spl_ce_RecursiveCachingIterator, &caching_it, iterator, &caching_it_flags TSRMLS_CC);
zval_release(&caching_it_flags);
zval_ptr_dtor(&caching_it_flags);
if (inc_refcount == 0 && iterator) {
zval_ptr_dtor(iterator);
}
@@ -562,7 +562,7 @@ static void spl_recursive_it_it_construct(INTERNAL_FUNCTION_PARAMETERS, zend_cla
while (intern->level >= 0) {
sub_iter = intern->iterators[intern->level].iterator;
sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
zval_clear(&intern->iterators[intern->level--].zobject);
zval_ptr_dtor(&intern->iterators[intern->level--].zobject);
}
efree(intern->iterators);
intern->iterators = NULL;
@@ -861,7 +861,7 @@ static void spl_RecursiveIteratorIterator_dtor(zend_object *_object TSRMLS_DC)
while (object->level >= 0) {
sub_iter = object->iterators[object->level].iterator;
sub_iter->funcs->dtor(sub_iter TSRMLS_CC);
zval_clear(&object->iterators[object->level--].zobject);
zval_ptr_dtor(&object->iterators[object->level--].zobject);
}
efree(object->iterators);
object->iterators = NULL;
@@ -982,7 +982,7 @@ static void spl_recursive_tree_iterator_get_prefix(spl_recursive_it_object *obje
} else {
smart_str_appendl(&str, object->prefix[2].c, object->prefix[2].len);
}
zval_release(&has_next);
zval_ptr_dtor(&has_next);
}
}
zend_call_method_with_0_params(&object->iterators[level].zobject, object->iterators[level].ce, NULL, "hasnext", &has_next);
@@ -992,7 +992,7 @@ static void spl_recursive_tree_iterator_get_prefix(spl_recursive_it_object *obje
} else {
smart_str_appendl(&str, object->prefix[4].c, object->prefix[4].len);
}
zval_release(&has_next);
zval_ptr_dtor(&has_next);
}
smart_str_appendl(&str, object->prefix[5].c, object->prefix[5].len);
@@ -2588,7 +2588,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
zval retval, *zchildren, zflags;
zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
if (EG(exception)) {
zval_release(&retval);
zval_ptr_dtor(&retval);
if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
zend_clear_exception(TSRMLS_C);
} else {
@@ -2598,11 +2598,11 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
if (zend_is_true(&retval TSRMLS_CC)) {
zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren);
if (EG(exception)) {
zval_release(&zchildren);
zval_ptr_dtor(&zchildren);
if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
zend_clear_exception(TSRMLS_C);
} else {
zval_release(&retval);
zval_ptr_dtor(&retval);
return;
}
} else {
@@ -3570,7 +3570,7 @@ static int spl_iterator_func_apply(zend_object_iterator *iter, void *puser TSRML
zend_fcall_info_call(&apply_info->fci, &apply_info->fcc, &retval, NULL TSRMLS_CC);
if (Z_TYPE(retval) != IS_UNDEF) {
result = zend_is_true(retval TSRMLS_CC) ? ZEND_HASH_APPLY_KEEP : ZEND_HASH_APPLY_STOP;
zval_release(&retval);
zval_ptr_dtor(&retval);
} else {
result = ZEND_HASH_APPLY_STOP;
}