_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)
#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
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);
}
}
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) {
return;
} else {
zend_clear_exception(TSRMLS_C);
- zval_release(&child);
+ zval_ptr_dtor(&child);
object->iterators[object->level].state = RS_NEXT;
goto 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;
}
}
}
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 */
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);
}
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);
}
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;
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;
} 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);
} 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);
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 {
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 {
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;
}