summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_API.h2
-rw-r--r--Zend/zend_builtin_functions.c3
-rw-r--r--Zend/zend_closures.c6
-rw-r--r--Zend/zend_generators.c3
-rw-r--r--Zend/zend_inheritance.c3
-rw-r--r--Zend/zend_interfaces.c3
-rw-r--r--Zend/zend_types.h8
-rw-r--r--Zend/zend_weakrefs.c12
-rw-r--r--ext/date/php_date.c43
-rw-r--r--ext/dom/dom_iterators.c3
-rw-r--r--ext/dom/php_dom.c6
-rw-r--r--ext/intl/breakiterator/breakiterator_iterators.cpp3
-rw-r--r--ext/pdo/pdo_dbh.c6
-rw-r--r--ext/phar/phar_object.c8
-rw-r--r--ext/reflection/php_reflection.c33
-rw-r--r--ext/simplexml/simplexml.c9
-rw-r--r--ext/soap/soap.c6
-rw-r--r--ext/spl/php_spl.c6
-rw-r--r--ext/spl/spl_array.c15
-rw-r--r--ext/spl/spl_directory.c18
-rw-r--r--ext/spl/spl_dllist.c3
-rw-r--r--ext/spl/spl_fixedarray.c3
-rw-r--r--ext/spl/spl_iterators.c3
-rw-r--r--ext/sqlite3/sqlite3.c12
-rw-r--r--ext/standard/array.c3
-rw-r--r--ext/standard/var.c6
-rw-r--r--ext/xml/xml.c3
27 files changed, 89 insertions, 140 deletions
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index 8ed0e20871..bdcdfaea31 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -716,6 +716,7 @@ END_EXTERN_C()
#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)
@@ -740,6 +741,7 @@ END_EXTERN_C()
#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)
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 775bab1504..521c2c32de 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -2069,9 +2069,8 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
}
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));
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index af008c3628..40ebaae0ab 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -283,8 +283,7 @@ static int zend_create_closure_from_callable(zval *return_value, zval *callable,
/* 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;
}
@@ -725,8 +724,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent
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));
}
}
}
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index a74ae530b1..803627f9a1 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -1120,8 +1120,7 @@ zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval *ob
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;
}
diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c
index b6a3a891b2..7cee42085b 100644
--- a/Zend/zend_inheritance.c
+++ b/Zend/zend_inheritance.c
@@ -2416,8 +2416,7 @@ static void check_unrecoverable_load_failure(zend_class_entry *ce) {
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,
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c
index 52d3a8ee19..6ac2721f45 100644
--- a/Zend/zend_interfaces.c
+++ b/Zend/zend_interfaces.c
@@ -211,8 +211,7 @@ static zend_object_iterator *zend_user_it_get_iterator(zend_class_entry *ce, zva
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);
diff --git a/Zend/zend_types.h b/Zend/zend_types.h
index 10a751d1b4..7796979ed8 100644
--- a/Zend/zend_types.h
+++ b/Zend/zend_types.h
@@ -968,6 +968,14 @@ static zend_always_inline uint32_t zval_gc_info(uint32_t gc_type_info) {
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); \
diff --git a/Zend/zend_weakrefs.c b/Zend/zend_weakrefs.c
index db5ffde2fd..b633a57e9f 100644
--- a/Zend/zend_weakrefs.c
+++ b/Zend/zend_weakrefs.c
@@ -189,8 +189,7 @@ static zend_always_inline zend_bool zend_weakref_find(zval *referent, zval *retu
zend_weakref *wr;
found_weakref:
wr = ptr;
- GC_ADDREF(&wr->std);
- ZVAL_OBJ(return_value, &wr->std);
+ RETVAL_OBJ_COPY(&wr->std);
return 1;
}
@@ -221,8 +220,7 @@ static zend_always_inline void zend_weakref_get(zval *weakref, zval *return_valu
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);
}
}
@@ -433,8 +431,7 @@ static HashTable *zend_weakmap_get_properties_for(zend_object *object, zend_prop
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);
@@ -511,8 +508,7 @@ static void zend_weakmap_iterator_get_current_key(zend_object_iterator *obj_iter
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)
diff --git a/ext/date/php_date.c b/ext/date/php_date.c
index a908fed2c7..94e8ab50c7 100644
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@ -1542,8 +1542,7 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval
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);
@@ -2891,8 +2890,7 @@ PHP_FUNCTION(date_modify)
RETURN_FALSE;
}
- Z_ADDREF_P(object);
- ZVAL_OBJ(return_value, Z_OBJ_P(object));
+ RETURN_OBJ_COPY(Z_OBJ_P(object));
}
/* }}} */
@@ -2915,7 +2913,7 @@ PHP_METHOD(DateTimeImmutable, modify)
RETURN_FALSE;
}
- ZVAL_OBJ(return_value, Z_OBJ(new_object));
+ RETURN_OBJ(Z_OBJ(new_object));
}
/* }}} */
@@ -2948,8 +2946,7 @@ PHP_FUNCTION(date_add)
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));
}
/* }}} */
@@ -2967,7 +2964,7 @@ PHP_METHOD(DateTimeImmutable, add)
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));
}
/* }}} */
@@ -3005,8 +3002,7 @@ PHP_FUNCTION(date_sub)
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));
}
/* }}} */
@@ -3024,7 +3020,7 @@ PHP_METHOD(DateTimeImmutable, sub)
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));
}
/* }}} */
@@ -3109,8 +3105,7 @@ PHP_FUNCTION(date_timezone_set)
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));
}
/* }}} */
@@ -3129,7 +3124,7 @@ PHP_METHOD(DateTimeImmutable, setTimezone)
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));
}
/* }}} */
@@ -3196,8 +3191,7 @@ PHP_FUNCTION(date_time_set)
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));
}
/* }}} */
@@ -3216,7 +3210,7 @@ PHP_METHOD(DateTimeImmutable, setTime)
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));
}
/* }}} */
@@ -3246,8 +3240,7 @@ PHP_FUNCTION(date_date_set)
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));
}
/* }}} */
@@ -3266,7 +3259,7 @@ PHP_METHOD(DateTimeImmutable, setDate)
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));
}
/* }}} */
@@ -3300,8 +3293,7 @@ PHP_FUNCTION(date_isodate_set)
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));
}
/* }}} */
@@ -3320,7 +3312,7 @@ PHP_METHOD(DateTimeImmutable, setISODate)
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));
}
/* }}} */
@@ -3349,8 +3341,7 @@ PHP_FUNCTION(date_timestamp_set)
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));
}
/* }}} */
@@ -3369,7 +3360,7 @@ PHP_METHOD(DateTimeImmutable, setTimestamp)
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));
}
/* }}} */
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
index bd83114bd9..c21cc92154 100644
--- a/ext/dom/dom_iterators.c
+++ b/ext/dom/dom_iterators.c
@@ -270,8 +270,7 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
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);
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c
index 9dc50ac287..c90475df1a 100644
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@ -997,8 +997,7 @@ void dom_namednode_iter(dom_object *basenode, int ntype, dom_object *intern, xml
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;
@@ -1136,8 +1135,7 @@ PHP_DOM_EXPORT zend_bool php_dom_create_object(xmlNodePtr obj, zval *return_valu
}
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;
}
diff --git a/ext/intl/breakiterator/breakiterator_iterators.cpp b/ext/intl/breakiterator/breakiterator_iterators.cpp
index c55d9a2d94..7c955a5ecb 100644
--- a/ext/intl/breakiterator/breakiterator_iterators.cpp
+++ b/ext/intl/breakiterator/breakiterator_iterators.cpp
@@ -110,8 +110,7 @@ U_CFUNC zend_object_iterator *_breakiterator_get_iterator(
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;
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index 769fe25f9d..e1d8c5b92c 100644
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -535,8 +535,7 @@ PHP_METHOD(PDO, prepare)
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);
@@ -1073,8 +1072,7 @@ PHP_METHOD(PDO, query)
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);
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index d273e1d519..881ce96cf6 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -2473,7 +2473,7 @@ PHP_METHOD(Phar, convertToExecutable)
phar_obj->archive->is_data = is_data;
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
@@ -2576,7 +2576,7 @@ PHP_METHOD(Phar, convertToData)
phar_obj->archive->is_data = is_data;
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
@@ -3279,7 +3279,7 @@ PHP_METHOD(Phar, compress)
}
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
@@ -3319,7 +3319,7 @@ PHP_METHOD(Phar, decompress)
}
if (ret) {
- ZVAL_OBJ(return_value, ret);
+ RETURN_OBJ(ret);
} else {
RETURN_NULL();
}
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 1f29ff59e4..0a116a0127 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -1275,8 +1275,7 @@ static void reflection_parameter_factory(zend_function *fptr, zval *closure_obje
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);
@@ -1343,8 +1342,7 @@ static void reflection_function_factory(zend_function *function, zval *closure_o
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);
}
@@ -1361,8 +1359,7 @@ static void reflection_method_factory(zend_class_entry *ce, zend_function *metho
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);
@@ -1490,7 +1487,6 @@ ZEND_METHOD(ReflectionFunction, __construct)
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)
@@ -1521,7 +1517,7 @@ ZEND_METHOD(ReflectionFunction, __construct)
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);
}
@@ -1591,8 +1587,7 @@ ZEND_METHOD(ReflectionFunctionAbstract, getClosureThis)
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));
}
}
}
@@ -1632,8 +1627,7 @@ ZEND_METHOD(ReflectionFunction, getClosure)
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);
}
@@ -2100,8 +2094,7 @@ ZEND_METHOD(ReflectionGenerator, __construct)
}
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;
}
/* }}} */
@@ -2217,10 +2210,9 @@ ZEND_METHOD(ReflectionGenerator, getThis)
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();
}
}
/* }}} */
@@ -2239,9 +2231,7 @@ ZEND_METHOD(ReflectionGenerator, getExecutingGenerator)
REFLECTION_CHECK_VALID_GENERATOR(ex)
current = zend_generator_get_current(generator);
- GC_ADDREF(&current->std);
-
- ZVAL_OBJ(return_value, (zend_object *) current);
+ RETURN_OBJ_COPY(&current->std);
}
/* }}} */
@@ -3166,8 +3156,7 @@ ZEND_METHOD(ReflectionMethod, getClosure)
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);
}
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 85372cb53d..20e20e3a2b 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -2216,7 +2216,7 @@ PHP_FUNCTION(simplexml_load_file)
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);
}
/* }}} */
@@ -2270,7 +2270,7 @@ PHP_FUNCTION(simplexml_load_string)
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);
}
/* }}} */
@@ -2419,8 +2419,7 @@ zend_object_iterator *php_sxe_get_iterator(zend_class_entry *ce, zval *object, i
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);
@@ -2568,7 +2567,7 @@ PHP_FUNCTION(simplexml_import_dom)
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();
diff --git a/ext/soap/soap.c b/ext/soap/soap.c
index d2ac5ea662..6356ac7379 100644
--- a/ext/soap/soap.c
+++ b/ext/soap/soap.c
@@ -1049,8 +1049,7 @@ PHP_METHOD(SoapServer, setObject)
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();
}
@@ -1760,8 +1759,7 @@ PHP_METHOD(SoapServer, addSoapHeader)
*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();
}
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c
index ced58ab20d..e2b361fb5b 100644
--- a/ext/spl/php_spl.c
+++ b/ext/spl/php_spl.c
@@ -609,8 +609,7 @@ PHP_FUNCTION(spl_autoload_functions)
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;
@@ -618,8 +617,7 @@ PHP_FUNCTION(spl_autoload_functions)
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));
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index ab263b6195..86a1ad501c 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -189,13 +189,11 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zend_o
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 {
@@ -1173,8 +1171,7 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
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);
@@ -1333,7 +1330,7 @@ PHP_METHOD(ArrayObject, getIterator)
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));
}
/* }}} */
@@ -1652,9 +1649,7 @@ PHP_METHOD(RecursiveArrayIterator, getChildren)
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));
}
}
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index df33ae6548..f30d7fcf7f 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -457,7 +457,7 @@ static spl_filesystem_object *spl_filesystem_object_create_info(spl_filesystem_o
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);
@@ -501,7 +501,7 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
}
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) {
@@ -536,7 +536,7 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
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);
@@ -802,8 +802,7 @@ PHP_METHOD(DirectoryIterator, current)
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));
}
/* }}} */
@@ -1099,8 +1098,7 @@ PHP_METHOD(FilesystemIterator, current)
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));
}
}
/* }}} */
@@ -1645,8 +1643,7 @@ zend_object_iterator *spl_filesystem_dir_get_iterator(zend_class_entry *ce, zval
}
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 */
@@ -1847,8 +1844,7 @@ zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zva
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;
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index 0462c46aa4..adf3d354cc 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -1351,8 +1351,7 @@ zend_object_iterator *spl_dllist_get_iterator(zend_class_entry *ce, zval *object
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;
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 2b86a85d51..63a3ef78fa 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -980,8 +980,7 @@ zend_object_iterator *spl_fixedarray_get_iterator(zend_class_entry *ce, zval *ob
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);
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index a6ccc855c0..8ddd413cf3 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -459,8 +459,7 @@ static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce,
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;
}
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c
index c309d5d545..3102592238 100644
--- a/ext/sqlite3/sqlite3.c
+++ b/ext/sqlite3/sqlite3.c
@@ -534,8 +534,7 @@ PHP_METHOD(SQLite3, prepare)
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) {
@@ -590,8 +589,7 @@ PHP_METHOD(SQLite3, query)
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) {
@@ -1879,8 +1877,7 @@ PHP_METHOD(SQLite3Stmt, execute)
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;
}
@@ -1929,8 +1926,7 @@ PHP_METHOD(SQLite3Stmt, __construct)
}
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) {
diff --git a/ext/standard/array.c b/ext/standard/array.c
index d942cfc184..0a8484f999 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -2479,8 +2479,7 @@ static void php_compact_var(HashTable *eg_active_symbol_table, zval *return_valu
} 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 {
diff --git a/ext/standard/var.c b/ext/standard/var.c
index 5b4fd8fe54..4d47e67e2c 100644
--- a/ext/standard/var.c
+++ b/ext/standard/var.c
@@ -1001,8 +1001,7 @@ again:
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);
@@ -1065,8 +1064,7 @@ again:
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)) {
diff --git a/ext/xml/xml.c b/ext/xml/xml.c
index 19d7238c46..f626dd1636 100644
--- a/ext/xml/xml.c
+++ b/ext/xml/xml.c
@@ -1085,8 +1085,7 @@ PHP_FUNCTION(xml_set_object)
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;
}