For the common ZVAL_OBJ + GC_ADDREF pattern.
This mirrors the existing ZVAL_STR_COPY API.
#define RETVAL_ARR(r) ZVAL_ARR(return_value, r)
#define RETVAL_EMPTY_ARRAY() ZVAL_EMPTY_ARRAY(return_value)
#define RETVAL_OBJ(r) ZVAL_OBJ(return_value, r)
+#define RETVAL_OBJ_COPY(r) ZVAL_OBJ_COPY(return_value, r)
#define RETVAL_COPY(zv) ZVAL_COPY(return_value, zv)
#define RETVAL_COPY_VALUE(zv) ZVAL_COPY_VALUE(return_value, zv)
#define RETVAL_ZVAL(zv, copy, dtor) ZVAL_ZVAL(return_value, zv, copy, dtor)
#define RETURN_ARR(r) do { RETVAL_ARR(r); return; } while (0)
#define RETURN_EMPTY_ARRAY() do { RETVAL_EMPTY_ARRAY(); return; } while (0)
#define RETURN_OBJ(r) do { RETVAL_OBJ(r); return; } while (0)
+#define RETURN_OBJ_COPY(r) do { RETVAL_OBJ_COPY(r); return; } while (0)
#define RETURN_COPY(zv) do { RETVAL_COPY(zv); return; } while (0)
#define RETURN_COPY_VALUE(zv) do { RETVAL_COPY_VALUE(zv); return; } while (0)
#define RETURN_ZVAL(zv, copy, dtor) do { RETVAL_ZVAL(zv, copy, dtor); return; } while (0)
}
zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_CLASS), &tmp);
if ((options & DEBUG_BACKTRACE_PROVIDE_OBJECT) != 0) {
- ZVAL_OBJ(&tmp, object);
+ ZVAL_OBJ_COPY(&tmp, object);
zend_hash_add_new(Z_ARRVAL(stack_frame), ZSTR_KNOWN(ZEND_STR_OBJECT), &tmp);
- Z_ADDREF(tmp);
}
ZVAL_INTERNED_STR(&tmp, ZSTR_KNOWN(ZEND_STR_OBJECT_OPERATOR));
/* For Closure::fromCallable([$closure, "__invoke"]) return $closure. */
if (fcc.object && fcc.object->ce == zend_ce_closure
&& zend_string_equals_literal(mptr->common.function_name, "__invoke")) {
- ZVAL_OBJ(return_value, fcc.object);
- GC_ADDREF(fcc.object);
+ RETVAL_OBJ_COPY(fcc.object);
zend_free_trampoline(mptr);
return SUCCESS;
}
if (scope) {
closure->func.common.fn_flags |= ZEND_ACC_PUBLIC;
if (this_ptr && Z_TYPE_P(this_ptr) == IS_OBJECT && (closure->func.common.fn_flags & ZEND_ACC_STATIC) == 0) {
- Z_ADDREF_P(this_ptr);
- ZVAL_OBJ(&closure->this_ptr, Z_OBJ_P(this_ptr));
+ ZVAL_OBJ_COPY(&closure->this_ptr, Z_OBJ_P(this_ptr));
}
}
}
zend_iterator_init(iterator);
iterator->funcs = &zend_generator_iterator_functions;
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->data, Z_OBJ_P(object));
return iterator;
}
zend_string *exception_str;
zval exception_zv;
ZEND_ASSERT(EG(exception) && "Exception must have been thrown");
- ZVAL_OBJ(&exception_zv, EG(exception));
- Z_ADDREF(exception_zv);
+ ZVAL_OBJ_COPY(&exception_zv, EG(exception));
zend_clear_exception();
exception_str = zval_get_string(&exception_zv);
zend_error_noreturn(E_ERROR,
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->it.data, Z_OBJ_P(object));
iterator->it.funcs = &zend_interface_iterator_funcs_iterator;
iterator->ce = Z_OBJCE_P(object);
ZVAL_UNDEF(&iterator->value);
Z_TYPE_INFO_P(__z) = IS_OBJECT_EX; \
} while (0)
+#define ZVAL_OBJ_COPY(z, o) do { \
+ zval *__z = (z); \
+ zend_object *__o = (o); \
+ GC_ADDREF(__o); \
+ Z_OBJ_P(__z) = __o; \
+ Z_TYPE_INFO_P(__z) = IS_OBJECT_EX; \
+ } while (0)
+
#define ZVAL_RES(z, r) do { \
zval *__z = (z); \
Z_RES_P(__z) = (r); \
zend_weakref *wr;
found_weakref:
wr = ptr;
- GC_ADDREF(&wr->std);
- ZVAL_OBJ(return_value, &wr->std);
+ RETVAL_OBJ_COPY(&wr->std);
return 1;
}
zend_weakref *wr = zend_weakref_fetch(weakref);
if (wr->referent) {
- ZVAL_OBJ(return_value, wr->referent);
- Z_ADDREF_P(return_value);
+ RETVAL_OBJ_COPY(wr->referent);
}
}
zval obj_zv;
array_init(&pair);
- ZVAL_OBJ(&obj_zv, (zend_object *) obj_addr);
- Z_ADDREF(obj_zv);
+ ZVAL_OBJ_COPY(&obj_zv, (zend_object *) obj_addr);
add_assoc_zval(&pair, "key", &obj_zv);
Z_TRY_ADDREF_P(val);
add_assoc_zval(&pair, "value", val);
ZEND_ASSERT(0 && "Must have integer key");
}
- ZVAL_OBJ(key, (zend_object *) num_key);
- Z_ADDREF_P(key);
+ ZVAL_OBJ_COPY(key, (zend_object *) num_key);
}
static void zend_weakmap_iterator_move_forward(zend_object_iterator *obj_iter)
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &date_period_it_funcs;
iterator->object = Z_PHPPERIOD_P(object);
ZVAL_UNDEF(&iterator->current);
RETURN_FALSE;
}
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
RETURN_FALSE;
}
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
php_date_add(object, interval, return_value);
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
date_clone_immutable(object, &new_object);
php_date_add(&new_object, interval, return_value);
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
php_date_sub(object, interval, return_value);
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
date_clone_immutable(object, &new_object);
php_date_sub(&new_object, interval, return_value);
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
php_date_timezone_set(object, timezone_object, return_value);
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
date_clone_immutable(object, &new_object);
php_date_timezone_set(&new_object, timezone_object, return_value);
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
php_date_time_set(object, h, i, s, ms, return_value);
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
date_clone_immutable(object, &new_object);
php_date_time_set(&new_object, h, i, s, ms, return_value);
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
php_date_date_set(object, y, m, d, return_value);
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
date_clone_immutable(object, &new_object);
php_date_date_set(&new_object, y, m, d, return_value);
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
php_date_isodate_set(object, y, w, d, return_value);
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
date_clone_immutable(object, &new_object);
php_date_isodate_set(&new_object, y, w, d, return_value);
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
php_date_timestamp_set(object, timestamp, return_value);
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
date_clone_immutable(object, &new_object);
php_date_timestamp_set(&new_object, timestamp, return_value);
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
iterator = emalloc(sizeof(php_dom_iterator));
zend_iterator_init(&iterator->intern);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &php_dom_iterator_funcs;
ZVAL_UNDEF(&iterator->curobj);
ZEND_ASSERT(basenode != NULL);
- ZVAL_OBJ(&mapptr->baseobj_zv, &basenode->std);
- Z_ADDREF(mapptr->baseobj_zv);
+ ZVAL_OBJ_COPY(&mapptr->baseobj_zv, &basenode->std);
mapptr->baseobj = basenode;
mapptr->nodetype = ntype;
}
if ((intern = (dom_object *) php_dom_object_get_data((void *) obj))) {
- GC_ADDREF(&intern->std);
- ZVAL_OBJ(return_value, &intern->std);
+ ZVAL_OBJ_COPY(return_value, &intern->std);
return 1;
}
zoi_with_current *zoi_iter = static_cast<zoi_with_current*>(emalloc(sizeof *zoi_iter));
zend_iterator_init(&zoi_iter->zoi);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&zoi_iter->zoi.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&zoi_iter->zoi.data, Z_OBJ_P(object));
zoi_iter->zoi.funcs = &breakiterator_iterator_funcs;
zoi_iter->zoi.index = 0;
zoi_iter->destroy_it = _breakiterator_destroy_it;
stmt->default_fetch_type = dbh->default_fetch_type;
stmt->dbh = dbh;
/* give it a reference to me */
- ZVAL_OBJ(&stmt->database_object_handle, &dbh_obj->std);
- Z_ADDREF(stmt->database_object_handle);
+ ZVAL_OBJ_COPY(&stmt->database_object_handle, &dbh_obj->std);
/* we haven't created a lazy object yet */
ZVAL_UNDEF(&stmt->lazy_object_ref);
stmt->active_query_stringlen = statement_len;
stmt->dbh = dbh;
/* give it a reference to me */
- ZVAL_OBJ(&stmt->database_object_handle, &dbh_obj->std);
- Z_ADDREF(stmt->database_object_handle);
+ ZVAL_OBJ_COPY(&stmt->database_object_handle, &dbh_obj->std);
/* we haven't created a lazy object yet */
ZVAL_UNDEF(&stmt->lazy_object_ref);
phar_obj->archive->is_data = is_data;
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
phar_obj->archive->is_data = is_data;
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
}
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
}
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
intern->ref_type = REF_TYPE_PARAMETER;
intern->ce = fptr->common.scope;
if (closure_object) {
- Z_ADDREF_P(closure_object);
- ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure_object));
+ ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure_object));
}
prop_name = reflection_prop_name(object);
intern->ref_type = REF_TYPE_FUNCTION;
intern->ce = NULL;
if (closure_object) {
- Z_ADDREF_P(closure_object);
- ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure_object));
+ ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure_object));
}
ZVAL_STR_COPY(reflection_prop_name(object), function->common.function_name);
}
intern->ref_type = REF_TYPE_FUNCTION;
intern->ce = ce;
if (closure_object) {
- Z_ADDREF_P(closure_object);
- ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure_object));
+ ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure_object));
}
ZVAL_STR_COPY(reflection_prop_name(object), method->common.function_name);
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "O", &closure, zend_ce_closure) == SUCCESS) {
fptr = (zend_function*)zend_get_closure_method_def(closure);
- Z_ADDREF_P(closure);
} else {
ALLOCA_FLAG(use_heap)
intern->ptr = fptr;
intern->ref_type = REF_TYPE_FUNCTION;
if (closure) {
- ZVAL_OBJ(&intern->obj, Z_OBJ_P(closure));
+ ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(closure));
} else {
ZVAL_UNDEF(&intern->obj);
}
if (!Z_ISUNDEF(intern->obj)) {
closure_this = zend_get_closure_this_ptr(&intern->obj);
if (!Z_ISUNDEF_P(closure_this)) {
- Z_ADDREF_P(closure_this);
- ZVAL_OBJ(return_value, Z_OBJ_P(closure_this));
+ RETURN_OBJ_COPY(Z_OBJ_P(closure_this));
}
}
}
if (!Z_ISUNDEF(intern->obj)) {
/* Closures are immutable objects */
- Z_ADDREF(intern->obj);
- ZVAL_OBJ(return_value, Z_OBJ(intern->obj));
+ RETURN_OBJ_COPY(Z_OBJ(intern->obj));
} else {
zend_create_fake_closure(return_value, fptr, NULL, NULL, NULL);
}
}
intern->ref_type = REF_TYPE_GENERATOR;
- Z_ADDREF_P(generator);
- ZVAL_OBJ(&intern->obj, Z_OBJ_P(generator));
+ ZVAL_OBJ_COPY(&intern->obj, Z_OBJ_P(generator));
intern->ce = zend_ce_generator;
}
/* }}} */
REFLECTION_CHECK_VALID_GENERATOR(ex)
if (Z_TYPE(ex->This) == IS_OBJECT) {
- Z_ADDREF(ex->This);
- ZVAL_OBJ(return_value, Z_OBJ(ex->This));
+ RETURN_OBJ_COPY(Z_OBJ(ex->This));
} else {
- ZVAL_NULL(return_value);
+ RETURN_NULL();
}
}
/* }}} */
REFLECTION_CHECK_VALID_GENERATOR(ex)
current = zend_generator_get_current(generator);
- GC_ADDREF(¤t->std);
-
- ZVAL_OBJ(return_value, (zend_object *) current);
+ RETURN_OBJ_COPY(¤t->std);
}
/* }}} */
if (Z_OBJCE_P(obj) == zend_ce_closure &&
(mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))
{
- Z_ADDREF_P(obj);
- ZVAL_OBJ(return_value, Z_OBJ_P(obj));
+ RETURN_OBJ_COPY(Z_OBJ_P(obj));
} else {
zend_create_fake_closure(return_value, mptr, mptr->common.scope, Z_OBJCE_P(obj), obj);
}
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp);
php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL);
- ZVAL_OBJ(return_value, &sxe->zo);
+ RETURN_OBJ(&sxe->zo);
}
/* }}} */
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, docp);
php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, xmlDocGetRootElement(docp), NULL);
- ZVAL_OBJ(return_value, &sxe->zo);
+ RETURN_OBJ(&sxe->zo);
}
/* }}} */
iterator = emalloc(sizeof(php_sxe_iterator));
zend_iterator_init(&iterator->intern);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &php_sxe_iterator_funcs;
iterator->sxe = Z_SXEOBJ_P(object);
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe, nodep->doc);
php_libxml_increment_node_ptr((php_libxml_node_object *)sxe, nodep, NULL);
- ZVAL_OBJ(return_value, &sxe->zo);
+ RETURN_OBJ(&sxe->zo);
} else {
php_error_docref(NULL, E_WARNING, "Invalid Nodetype to import");
RETVAL_NULL();
service->type = SOAP_OBJECT;
- Z_ADDREF_P(obj);
- ZVAL_OBJ(&service->soap_object, Z_OBJ_P(obj));
+ ZVAL_OBJ_COPY(&service->soap_object, Z_OBJ_P(obj));
SOAP_SERVER_END_CODE();
}
*p = emalloc(sizeof(soapHeader));
memset(*p, 0, sizeof(soapHeader));
ZVAL_NULL(&(*p)->function_name);
- Z_ADDREF_P(fault);
- ZVAL_OBJ(&(*p)->retval, Z_OBJ_P(fault));
+ ZVAL_OBJ_COPY(&(*p)->retval, Z_OBJ_P(fault));
SOAP_SERVER_END_CODE();
}
ZEND_HASH_FOREACH_PTR(SPL_G(autoload_functions), alfi) {
if (alfi->closure) {
zval obj_zv;
- ZVAL_OBJ(&obj_zv, alfi->closure);
- Z_ADDREF(obj_zv);
+ ZVAL_OBJ_COPY(&obj_zv, alfi->closure);
add_next_index_zval(return_value, &obj_zv);
} else if (alfi->func_ptr->common.scope) {
zval tmp;
array_init(&tmp);
if (alfi->obj) {
zval obj_zv;
- ZVAL_OBJ(&obj_zv, alfi->obj);
- Z_ADDREF(obj_zv);
+ ZVAL_OBJ_COPY(&obj_zv, alfi->obj);
add_next_index_zval(&tmp, &obj_zv);
} else {
add_next_index_str(&tmp, zend_string_copy(alfi->ce->name));
zend_array_dup(spl_array_get_hash_table(other)));
} else {
ZEND_ASSERT(orig->handlers == &spl_handler_ArrayIterator);
- GC_ADDREF(orig);
- ZVAL_OBJ(&intern->array, orig);
+ ZVAL_OBJ_COPY(&intern->array, orig);
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
}
} else {
- GC_ADDREF(orig);
- ZVAL_OBJ(&intern->array, orig);
+ ZVAL_OBJ_COPY(&intern->array, orig);
intern->ar_flags |= SPL_ARRAY_USE_OTHER;
}
} else {
zend_iterator_init(&iterator->it);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->it.data, Z_OBJ_P(object));
iterator->it.funcs = &spl_array_it_funcs;
iterator->ce = ce;
ZVAL_UNDEF(&iterator->value);
RETURN_THROWS();
}
- ZVAL_OBJ(return_value, spl_array_object_new_ex(intern->ce_get_iterator, Z_OBJ_P(object), 0));
+ RETURN_OBJ(spl_array_object_new_ex(intern->ce_get_iterator, Z_OBJ_P(object), 0));
}
/* }}} */
return;
}
if (instanceof_function(Z_OBJCE_P(entry), Z_OBJCE_P(ZEND_THIS))) {
- ZVAL_OBJ(return_value, Z_OBJ_P(entry));
- Z_ADDREF_P(return_value);
- return;
+ RETURN_OBJ_COPY(Z_OBJ_P(entry));
}
}
zend_update_class_constants(ce);
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
ZVAL_STRINGL(&arg1, file_path, file_path_len);
}
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
spl_filesystem_object_get_file_name(source);
if (ce->constructor->common.scope != spl_ce_SplFileInfo) {
intern = spl_filesystem_from_obj(spl_filesystem_object_new_ex(ce));
- ZVAL_OBJ(return_value, &intern->std);
+ RETVAL_OBJ(&intern->std);
spl_filesystem_object_get_file_name(source);
if (zend_parse_parameters_none() == FAILURE) {
RETURN_THROWS();
}
- ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
- Z_ADDREF_P(return_value);
+ RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
}
/* }}} */
spl_filesystem_object_get_file_name(intern);
spl_filesystem_object_create_type(0, intern, SPL_FS_INFO, NULL, return_value);
} else {
- ZVAL_OBJ(return_value, Z_OBJ_P(ZEND_THIS));
- Z_ADDREF_P(return_value);
+ RETURN_OBJ_COPY(Z_OBJ_P(ZEND_THIS));
}
}
/* }}} */
}
dir_object = Z_SPLFILESYSTEM_P(object);
iterator = spl_filesystem_object_to_iterator(dir_object);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &spl_filesystem_dir_it_funcs;
/* ->current must be initialized; rewind doesn't set it and valid
* doesn't check whether it's set */
dir_object = Z_SPLFILESYSTEM_P(object);
iterator = spl_filesystem_object_to_iterator(dir_object);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(object));
iterator->intern.funcs = &spl_filesystem_tree_it_funcs;
return &iterator->intern;
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.it.data, Z_OBJ_P(object));
iterator->intern.it.funcs = &spl_dllist_it_funcs;
iterator->intern.ce = ce;
iterator->traverse_position = dllist_object->traverse_position;
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(object);
- ZVAL_OBJ(&iterator->intern.it.data, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&iterator->intern.it.data, Z_OBJ_P(object));
iterator->intern.it.funcs = &spl_fixedarray_it_funcs;
iterator->intern.ce = ce;
ZVAL_UNDEF(&iterator->intern.value);
zend_iterator_init((zend_object_iterator*)iterator);
- Z_ADDREF_P(zobject);
- ZVAL_OBJ(&iterator->intern.data, Z_OBJ_P(zobject));
+ ZVAL_OBJ_COPY(&iterator->intern.data, Z_OBJ_P(zobject));
iterator->intern.funcs = &spl_recursive_it_iterator_funcs;
return (zend_object_iterator*)iterator;
}
object_init_ex(return_value, php_sqlite3_stmt_entry);
stmt_obj = Z_SQLITE3_STMT_P(return_value);
stmt_obj->db_obj = db_obj;
- Z_ADDREF_P(object);
- ZVAL_OBJ(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
errcode = sqlite3_prepare_v2(db_obj->db, ZSTR_VAL(sql), ZSTR_LEN(sql), &(stmt_obj->stmt), NULL);
if (errcode != SQLITE_OK) {
object_init_ex(&stmt, php_sqlite3_stmt_entry);
stmt_obj = Z_SQLITE3_STMT_P(&stmt);
stmt_obj->db_obj = db_obj;
- Z_ADDREF_P(object);
- ZVAL_OBJ(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&stmt_obj->db_obj_zval, Z_OBJ_P(object));
return_code = sqlite3_prepare_v2(db_obj->db, ZSTR_VAL(sql), ZSTR_LEN(sql), &(stmt_obj->stmt), NULL);
if (return_code != SQLITE_OK) {
result->is_prepared_statement = 1;
result->db_obj = stmt_obj->db_obj;
result->stmt_obj = stmt_obj;
- Z_ADDREF_P(object);
- ZVAL_OBJ(&result->stmt_obj_zval, Z_OBJ_P(object));
+ ZVAL_OBJ_COPY(&result->stmt_obj_zval, Z_OBJ_P(object));
break;
}
}
stmt_obj->db_obj = db_obj;
- Z_ADDREF_P(db_zval);
- ZVAL_OBJ(&stmt_obj->db_obj_zval, Z_OBJ_P(db_zval));
+ ZVAL_OBJ_COPY(&stmt_obj->db_obj_zval, Z_OBJ_P(db_zval));
errcode = sqlite3_prepare_v2(db_obj->db, ZSTR_VAL(sql), ZSTR_LEN(sql), &(stmt_obj->stmt), NULL);
if (errcode != SQLITE_OK) {
} else if (zend_string_equals_literal(Z_STR_P(entry), "this")) {
zend_object *object = zend_get_this_object(EG(current_execute_data));
if (object) {
- GC_ADDREF(object);
- ZVAL_OBJ(&data, object);
+ ZVAL_OBJ_COPY(&data, object);
zend_hash_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data);
}
} else {
zval *data;
zend_ulong index;
- Z_ADDREF_P(struc);
- ZVAL_OBJ(&obj, Z_OBJ_P(struc));
+ ZVAL_OBJ_COPY(&obj, Z_OBJ_P(struc));
if (php_var_serialize_call_magic_serialize(&retval, &obj) == FAILURE) {
if (!EG(exception)) {
smart_str_appendl(buf, "N;", 2);
if (ce != PHP_IC_ENTRY && zend_hash_str_exists(&ce->function_table, "__sleep", sizeof("__sleep")-1)) {
zval retval, tmp;
- Z_ADDREF_P(struc);
- ZVAL_OBJ(&tmp, Z_OBJ_P(struc));
+ ZVAL_OBJ_COPY(&tmp, Z_OBJ_P(struc));
if (php_var_serialize_call_sleep(&retval, &tmp) == FAILURE) {
if (!EG(exception)) {
parser = Z_XMLPARSER_P(pind);
zval_ptr_dtor(&parser->object);
- Z_ADDREF_P(mythis);
- ZVAL_OBJ(&parser->object, Z_OBJ_P(mythis));
+ ZVAL_OBJ_COPY(&parser->object, Z_OBJ_P(mythis));
RETVAL_TRUE;
}