summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_builtin_functions.c3
-rw-r--r--Zend/zend_execute.c14
-rw-r--r--Zend/zend_generators.c15
-rw-r--r--Zend/zend_object_handlers.c9
-rw-r--r--Zend/zend_vm_def.h15
-rw-r--r--Zend/zend_vm_execute.h45
-rw-r--r--ext/curl/curl_file.c3
-rw-r--r--ext/intl/breakiterator/breakiterator_iterators.cpp3
-rw-r--r--ext/intl/common/common_enum.cpp3
-rw-r--r--ext/phar/stream.c3
-rw-r--r--ext/reflection/php_reflection.c15
-rw-r--r--ext/session/session.c3
-rw-r--r--ext/simplexml/sxe.c6
-rw-r--r--ext/spl/spl_array.c6
-rw-r--r--ext/spl/spl_directory.c9
-rw-r--r--ext/spl/spl_dllist.c12
-rw-r--r--ext/spl/spl_fixedarray.c15
-rw-r--r--ext/spl/spl_heap.c15
-rw-r--r--ext/spl/spl_iterators.c41
-rw-r--r--ext/spl/spl_observer.c3
-rw-r--r--ext/standard/array.c46
-rw-r--r--ext/standard/string.c3
22 files changed, 95 insertions, 192 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 591c8af17f..30e6094930 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -466,8 +466,7 @@ ZEND_FUNCTION(func_get_arg)
arg = ZEND_CALL_ARG(ex, requested_offset + 1);
}
if (EXPECTED(!Z_ISUNDEF_P(arg))) {
- ZVAL_DEREF(arg);
- ZVAL_COPY(return_value, arg);
+ ZVAL_COPY_DEREF(return_value, arg);
}
}
/* }}} */
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 097ccc10e1..5012688c6b 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1450,12 +1450,8 @@ static zend_never_inline void zend_post_incdec_overloaded_property(zval *object,
ZVAL_COPY_VALUE(z, value);
}
- if (UNEXPECTED(Z_TYPE_P(z) == IS_REFERENCE)) {
- ZVAL_COPY(EX_VAR(opline->result.var), Z_REFVAL_P(z));
- } else {
- ZVAL_COPY(EX_VAR(opline->result.var), z);
- }
- ZVAL_COPY(&z_copy, EX_VAR(opline->result.var));
+ ZVAL_COPY_DEREF(&z_copy, z);
+ ZVAL_COPY(EX_VAR(opline->result.var), &z_copy);
if (inc) {
increment_function(&z_copy);
} else {
@@ -1499,11 +1495,7 @@ static zend_never_inline void zend_pre_incdec_overloaded_property(zval *object,
}
ZVAL_COPY_VALUE(z, value);
}
- if (UNEXPECTED(Z_TYPE_P(z) == IS_REFERENCE)) {
- ZVAL_COPY(&z_copy, Z_REFVAL_P(z));
- } else {
- ZVAL_COPY(&z_copy, z);
- }
+ ZVAL_COPY_DEREF(&z_copy, z);
if (inc) {
increment_function(&z_copy);
} else {
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 8408cc32f4..c532dfe845 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -887,8 +887,7 @@ ZEND_METHOD(Generator, current)
if (EXPECTED(generator->execute_data != NULL && Z_TYPE(root->value) != IS_UNDEF)) {
zval *value = &root->value;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
}
/* }}} */
@@ -911,8 +910,7 @@ ZEND_METHOD(Generator, key)
if (EXPECTED(generator->execute_data != NULL && Z_TYPE(root->key) != IS_UNDEF)) {
zval *key = &root->key;
- ZVAL_DEREF(key);
- ZVAL_COPY(return_value, key);
+ ZVAL_COPY_DEREF(return_value, key);
}
}
/* }}} */
@@ -967,8 +965,7 @@ ZEND_METHOD(Generator, send)
if (EXPECTED(generator->execute_data)) {
zval *value = &root->value;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
}
/* }}} */
@@ -1001,8 +998,7 @@ ZEND_METHOD(Generator, throw)
if (generator->execute_data) {
zval *value = &root->value;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
} else {
/* If the generator is already closed throw the exception in the
@@ -1101,8 +1097,7 @@ static void zend_generator_iterator_get_key(zend_object_iterator *iterator, zval
if (EXPECTED(Z_TYPE(root->key) != IS_UNDEF)) {
zval *zv = &root->key;
- ZVAL_DEREF(zv);
- ZVAL_COPY(key, zv);
+ ZVAL_COPY_DEREF(key, zv);
} else {
ZVAL_NULL(key);
}
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 97a0dcd817..72c182c7b2 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -848,8 +848,7 @@ ZEND_API zval *zend_std_read_dimension(zval *object, zval *offset, int type, zva
/* [] construct */
ZVAL_NULL(&tmp_offset);
} else {
- ZVAL_DEREF(offset);
- ZVAL_COPY(&tmp_offset, offset);
+ ZVAL_COPY_DEREF(&tmp_offset, offset);
}
ZVAL_COPY(&tmp_object, object);
@@ -897,8 +896,7 @@ ZEND_API void zend_std_write_dimension(zval *object, zval *offset, zval *value)
if (!offset) {
ZVAL_NULL(&tmp_offset);
} else {
- ZVAL_DEREF(offset);
- ZVAL_COPY(&tmp_offset, offset);
+ ZVAL_COPY_DEREF(&tmp_offset, offset);
}
ZVAL_COPY(&tmp_object, object);
zend_call_method_with_2_params(&tmp_object, ce, NULL, "offsetset", NULL, &tmp_offset, value);
@@ -1084,8 +1082,7 @@ ZEND_API void zend_std_unset_dimension(zval *object, zval *offset) /* {{{ */
zval tmp_offset, tmp_object;
if (instanceof_function_ex(ce, zend_ce_arrayaccess, 1)) {
- ZVAL_DEREF(offset);
- ZVAL_COPY(&tmp_offset, offset);
+ ZVAL_COPY_DEREF(&tmp_offset, offset);
ZVAL_COPY(&tmp_object, object);
zend_call_method_with_1_params(&tmp_object, ce, NULL, "offsetunset", NULL, &tmp_offset);
zval_ptr_dtor(&tmp_object);
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 391f096243..8c08e1205c 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -4016,8 +4016,7 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY)
}
}
} else if (OP1_TYPE == IS_CV) {
- ZVAL_DEREF(retval);
- ZVAL_COPY(&generator->retval, retval);
+ ZVAL_COPY_DEREF(&generator->retval, retval);
} else /* if (OP1_TYPE == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(retval))) {
zend_refcounted *ref = Z_COUNTED_P(retval);
@@ -4209,8 +4208,7 @@ ZEND_VM_HOT_HANDLER(117, ZEND_SEND_VAR, VAR|CV, NUM)
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (OP1_TYPE == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (OP1_TYPE == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -4344,8 +4342,7 @@ ZEND_VM_C_LABEL(send_var_by_ref):
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (OP1_TYPE == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (OP1_TYPE == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -4471,8 +4468,7 @@ ZEND_VM_C_LABEL(send_again):
ZVAL_NEW_REF(top, arg);
}
} else {
- ZVAL_DEREF(arg);
- ZVAL_COPY(top, arg);
+ ZVAL_COPY_DEREF(top, arg);
}
ZEND_CALL_NUM_ARGS(EX(call))++;
@@ -6586,8 +6582,7 @@ ZEND_VM_HOT_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY)
}
if (OP1_TYPE == IS_CV) {
- ZVAL_DEREF(value);
- ZVAL_COPY(result, value);
+ ZVAL_COPY_DEREF(result, value);
} else if (OP1_TYPE == IS_VAR) {
if (UNEXPECTED(Z_ISREF_P(value))) {
ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 53012151c6..bb8d9e8df7 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1308,8 +1308,7 @@ send_again:
ZVAL_NEW_REF(top, arg);
}
} else {
- ZVAL_DEREF(arg);
- ZVAL_COPY(top, arg);
+ ZVAL_COPY_DEREF(top, arg);
}
ZEND_CALL_NUM_ARGS(EX(call))++;
@@ -2899,8 +2898,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HA
}
}
} else if (IS_CONST == IS_CV) {
- ZVAL_DEREF(retval);
- ZVAL_COPY(&generator->retval, retval);
+ ZVAL_COPY_DEREF(&generator->retval, retval);
} else /* if (IS_CONST == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(retval))) {
zend_refcounted *ref = Z_COUNTED_P(retval);
@@ -3652,8 +3650,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CON
}
if (IS_CONST == IS_CV) {
- ZVAL_DEREF(value);
- ZVAL_COPY(result, value);
+ ZVAL_COPY_DEREF(result, value);
} else if (IS_CONST == IS_VAR) {
if (UNEXPECTED(Z_ISREF_P(value))) {
ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
@@ -17906,8 +17903,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HAND
}
}
} else if (IS_TMP_VAR == IS_CV) {
- ZVAL_DEREF(retval);
- ZVAL_COPY(&generator->retval, retval);
+ ZVAL_COPY_DEREF(&generator->retval, retval);
} else /* if (IS_TMP_VAR == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(retval))) {
zend_refcounted *ref = Z_COUNTED_P(retval);
@@ -18406,8 +18402,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP
}
if (IS_TMP_VAR == IS_CV) {
- ZVAL_DEREF(value);
- ZVAL_COPY(result, value);
+ ZVAL_COPY_DEREF(result, value);
} else if (IS_TMP_VAR == IS_VAR) {
if (UNEXPECTED(Z_ISREF_P(value))) {
ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
@@ -20719,8 +20714,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HAND
}
}
} else if (IS_VAR == IS_CV) {
- ZVAL_DEREF(retval);
- ZVAL_COPY(&generator->retval, retval);
+ ZVAL_COPY_DEREF(&generator->retval, retval);
} else /* if (IS_VAR == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(retval))) {
zend_refcounted *ref = Z_COUNTED_P(retval);
@@ -20802,8 +20796,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (IS_VAR == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -20977,8 +20970,7 @@ send_var_by_ref:
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (IS_VAR == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -21026,8 +21018,7 @@ send_var_by_ref:
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_VAR == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (IS_VAR == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -21773,8 +21764,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR
}
if (IS_VAR == IS_CV) {
- ZVAL_DEREF(value);
- ZVAL_COPY(result, value);
+ ZVAL_COPY_DEREF(result, value);
} else if (IS_VAR == IS_VAR) {
if (UNEXPECTED(Z_ISREF_P(value))) {
ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
@@ -36870,8 +36860,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDL
}
}
} else if (IS_CV == IS_CV) {
- ZVAL_DEREF(retval);
- ZVAL_COPY(&generator->retval, retval);
+ ZVAL_COPY_DEREF(&generator->retval, retval);
} else /* if (IS_CV == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(retval))) {
zend_refcounted *ref = Z_COUNTED_P(retval);
@@ -36953,8 +36942,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_H
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (IS_CV == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -37028,8 +37016,7 @@ send_var_by_ref:
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (IS_CV == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -37077,8 +37064,7 @@ send_var_by_ref:
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
if (IS_CV == IS_CV) {
- ZVAL_OPT_DEREF(varptr);
- ZVAL_COPY(arg, varptr);
+ ZVAL_COPY_DEREF(arg, varptr);
} else /* if (IS_CV == IS_VAR) */ {
if (UNEXPECTED(Z_ISREF_P(varptr))) {
zend_refcounted *ref = Z_COUNTED_P(varptr);
@@ -37664,8 +37650,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_
}
if (IS_CV == IS_CV) {
- ZVAL_DEREF(value);
- ZVAL_COPY(result, value);
+ ZVAL_COPY_DEREF(result, value);
} else if (IS_CV == IS_VAR) {
if (UNEXPECTED(Z_ISREF_P(value))) {
ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
diff --git a/ext/curl/curl_file.c b/ext/curl/curl_file.c
index 8b476372fa..6242ff8811 100644
--- a/ext/curl/curl_file.c
+++ b/ext/curl/curl_file.c
@@ -78,8 +78,7 @@ static void curlfile_get_property(char *name, size_t name_len, INTERNAL_FUNCTION
return;
}
res = zend_read_property(curl_CURLFile_class, getThis(), name, name_len, 1, &rv);
- ZVAL_DEREF(res);
- ZVAL_COPY(return_value, res);
+ ZVAL_COPY_DEREF(return_value, res);
}
static void curlfile_set_property(char *name, size_t name_len, INTERNAL_FUNCTION_PARAMETERS)
diff --git a/ext/intl/breakiterator/breakiterator_iterators.cpp b/ext/intl/breakiterator/breakiterator_iterators.cpp
index 66ddfee577..c90300155a 100644
--- a/ext/intl/breakiterator/breakiterator_iterators.cpp
+++ b/ext/intl/breakiterator/breakiterator_iterators.cpp
@@ -286,8 +286,7 @@ U_CFUNC PHP_METHOD(IntlPartsIterator, getBreakIterator)
INTLITERATOR_METHOD_FETCH_OBJECT;
zval *biter_zval = &ii->iterator->data;
- ZVAL_DEREF(biter_zval);
- ZVAL_COPY(return_value, biter_zval);
+ ZVAL_COPY_DEREF(return_value, biter_zval);
}
ZEND_BEGIN_ARG_INFO_EX(ainfo_parts_it_void, 0, 0, 0)
diff --git a/ext/intl/common/common_enum.cpp b/ext/intl/common/common_enum.cpp
index a19fa9ddf7..5c5e1ca990 100644
--- a/ext/intl/common/common_enum.cpp
+++ b/ext/intl/common/common_enum.cpp
@@ -219,8 +219,7 @@ static PHP_METHOD(IntlIterator, current)
INTLITERATOR_METHOD_FETCH_OBJECT;
data = ii->iterator->funcs->get_current_data(ii->iterator);
if (data) {
- ZVAL_DEREF(data);
- ZVAL_COPY(return_value, data);
+ ZVAL_COPY_DEREF(return_value, data);
}
}
diff --git a/ext/phar/stream.c b/ext/phar/stream.c
index b1ccd53cc3..ac44dd0682 100644
--- a/ext/phar/stream.c
+++ b/ext/phar/stream.c
@@ -229,8 +229,7 @@ static php_stream * phar_wrapper_open_url(php_stream_wrapper *wrapper, const cha
}
metadata = pzoption;
- ZVAL_DEREF(metadata);
- ZVAL_COPY(&idata->internal_file->metadata, metadata);
+ ZVAL_COPY_DEREF(&idata->internal_file->metadata, metadata);
idata->phar->is_modified = 1;
}
}
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index c29c354365..cba4f1d54a 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -3350,8 +3350,7 @@ ZEND_METHOD(reflection_function, getShortName)
{
RETURN_STRINGL(backslash + 1, Z_STRLEN_P(name) - (backslash - Z_STRVAL_P(name) + 1));
}
- ZVAL_DEREF(name);
- ZVAL_COPY(return_value, name);
+ ZVAL_COPY_DEREF(return_value, name);
}
/* }}} */
@@ -3848,8 +3847,7 @@ ZEND_METHOD(reflection_class, getStaticPropertyValue)
}
return;
} else {
- ZVAL_DEREF(prop);
- ZVAL_COPY(return_value, prop);
+ ZVAL_COPY_DEREF(return_value, prop);
}
}
/* }}} */
@@ -5195,8 +5193,7 @@ ZEND_METHOD(reflection_class, getShortName)
{
RETURN_STRINGL(backslash + 1, Z_STRLEN_P(name) - (backslash - Z_STRVAL_P(name) + 1));
}
- ZVAL_DEREF(name);
- ZVAL_COPY(return_value, name);
+ ZVAL_COPY_DEREF(return_value, name);
}
/* }}} */
@@ -5443,8 +5440,7 @@ ZEND_METHOD(reflection_property, getValue)
if (ref->prop.flags & ZEND_ACC_STATIC) {
member_p = zend_read_static_property_ex(ref->ce, ref->unmangled_name, 0);
if (member_p) {
- ZVAL_DEREF(member_p);
- ZVAL_COPY(return_value, member_p);
+ ZVAL_COPY_DEREF(return_value, member_p);
}
} else {
zval rv;
@@ -5460,8 +5456,7 @@ ZEND_METHOD(reflection_property, getValue)
member_p = zend_read_property_ex(ref->ce, object, ref->unmangled_name, 0, &rv);
if (member_p != &rv) {
- ZVAL_DEREF(member_p);
- ZVAL_COPY(return_value, member_p);
+ ZVAL_COPY_DEREF(return_value, member_p);
} else {
if (Z_ISREF_P(member_p)) {
zend_unwrap_reference(member_p);
diff --git a/ext/session/session.c b/ext/session/session.c
index 504a119e5c..a86f7c25de 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -2982,8 +2982,7 @@ static zend_bool early_find_sid_in(zval *dest, int where, php_session_rfc1867_pr
if ((ppid = zend_hash_str_find(Z_ARRVAL(PG(http_globals)[where]), PS(session_name), progress->sname_len))
&& Z_TYPE_P(ppid) == IS_STRING) {
zval_ptr_dtor(dest);
- ZVAL_DEREF(ppid);
- ZVAL_COPY(dest, ppid);
+ ZVAL_COPY_DEREF(dest, ppid);
return 1;
}
diff --git a/ext/simplexml/sxe.c b/ext/simplexml/sxe.c
index 63d54aab1a..f502d87926 100644
--- a/ext/simplexml/sxe.c
+++ b/ext/simplexml/sxe.c
@@ -82,8 +82,7 @@ PHP_METHOD(ce_SimpleXMLIterator, current)
}
data = &sxe->iter.data;
- ZVAL_DEREF(data);
- ZVAL_COPY(return_value, data);
+ ZVAL_COPY_DEREF(return_value, data);
}
/* }}} */
@@ -172,8 +171,7 @@ PHP_METHOD(ce_SimpleXMLIterator, getChildren)
}
data = &sxe->iter.data;
- ZVAL_DEREF(data);
- ZVAL_COPY(return_value, data);
+ ZVAL_COPY_DEREF(return_value, data);
}
/* {{{ arginfo */
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 3b9ee1a80a..0ed5c55687 100644
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -739,8 +739,7 @@ SPL_METHOD(Array, offsetGet)
}
value = spl_array_read_dimension_ex(0, getThis(), index, BP_VAR_R, return_value);
if (value != return_value) {
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
} /* }}} */
@@ -1578,8 +1577,7 @@ SPL_METHOD(Array, current)
return;
}
}
- ZVAL_DEREF(entry);
- ZVAL_COPY(return_value, entry);
+ ZVAL_COPY_DEREF(return_value, entry);
}
/* }}} */
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index e844ca03a2..90798947a4 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -2132,8 +2132,7 @@ static int spl_filesystem_file_read_csv(spl_filesystem_object *intern, char deli
if (return_value) {
zval_ptr_dtor(return_value);
value = &intern->u.file.current_zval;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
}
return ret;
@@ -2169,8 +2168,7 @@ static int spl_filesystem_file_read_line_ex(zval * this_ptr, spl_filesystem_obje
} else {
zval *value = &retval;
- ZVAL_DEREF(value);
- ZVAL_COPY(&intern->u.file.current_zval, value);
+ ZVAL_COPY_DEREF(&intern->u.file.current_zval, value);
}
zval_ptr_dtor(&retval);
return SUCCESS;
@@ -2433,8 +2431,7 @@ SPL_METHOD(SplFileObject, current)
} else if (!Z_ISUNDEF(intern->u.file.current_zval)) {
zval *value = &intern->u.file.current_zval;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
return;
}
RETURN_FALSE;
diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c
index 55e3c0072a..f50358fd61 100644
--- a/ext/spl/spl_dllist.c
+++ b/ext/spl/spl_dllist.c
@@ -653,8 +653,7 @@ SPL_METHOD(SplDoublyLinkedList, top)
return;
}
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
/* }}} */
@@ -677,8 +676,7 @@ SPL_METHOD(SplDoublyLinkedList, bottom)
return;
}
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
/* }}} */
@@ -798,8 +796,7 @@ SPL_METHOD(SplDoublyLinkedList, offsetGet)
if (element != NULL) {
zval *value = &element->data;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
zend_throw_exception(spl_ce_OutOfRangeException, "Offset invalid", 0);
}
@@ -1121,8 +1118,7 @@ SPL_METHOD(SplDoublyLinkedList, current)
} else {
zval *value = &element->data;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
}
/* }}} */
diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c
index 3690ce6c38..e906c233eb 100644
--- a/ext/spl/spl_fixedarray.c
+++ b/ext/spl/spl_fixedarray.c
@@ -402,8 +402,7 @@ static inline void spl_fixedarray_object_write_dimension_helper(spl_fixedarray_o
if (!Z_ISUNDEF(intern->array.elements[index])) {
zval_ptr_dtor(&(intern->array.elements[index]));
}
- ZVAL_DEREF(value);
- ZVAL_COPY(&intern->array.elements[index], value);
+ ZVAL_COPY_DEREF(&intern->array.elements[index], value);
}
}
/* }}} */
@@ -691,8 +690,7 @@ SPL_METHOD(SplFixedArray, fromArray)
spl_fixedarray_init(&array, tmp);
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(data), num_index, str_index, element) {
- ZVAL_DEREF(element);
- ZVAL_COPY(&array.elements[num_index], element);
+ ZVAL_COPY_DEREF(&array.elements[num_index], element);
} ZEND_HASH_FOREACH_END();
} else if (num > 0 && !save_indexes) {
@@ -702,8 +700,7 @@ SPL_METHOD(SplFixedArray, fromArray)
spl_fixedarray_init(&array, num);
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(data), element) {
- ZVAL_DEREF(element);
- ZVAL_COPY(&array.elements[i], element);
+ ZVAL_COPY_DEREF(&array.elements[i], element);
i++;
} ZEND_HASH_FOREACH_END();
} else {
@@ -788,8 +785,7 @@ SPL_METHOD(SplFixedArray, offsetGet)
value = spl_fixedarray_object_read_dimension_helper(intern, zindex);
if (value) {
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
RETURN_NULL();
}
@@ -983,8 +979,7 @@ SPL_METHOD(SplFixedArray, current)
value = spl_fixedarray_object_read_dimension_helper(intern, &zindex);
if (value) {
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
RETURN_NULL();
}
diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c
index 70370b1665..70b08bf555 100644
--- a/ext/spl/spl_heap.c
+++ b/ext/spl/spl_heap.c
@@ -685,8 +685,7 @@ SPL_METHOD(SplPriorityQueue, extract)
return;
}
- ZVAL_DEREF(value_out);
- ZVAL_COPY(return_value, value_out);
+ ZVAL_COPY_DEREF(return_value, value_out);
zval_ptr_dtor(&value);
}
/* }}} */
@@ -723,8 +722,7 @@ SPL_METHOD(SplPriorityQueue, top)
return;
}
- ZVAL_DEREF(value_out);
- ZVAL_COPY(return_value, value_out);
+ ZVAL_COPY_DEREF(return_value, value_out);
}
/* }}} */
@@ -837,8 +835,7 @@ SPL_METHOD(SplHeap, top)
return;
}
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
/* }}} */
@@ -1026,8 +1023,7 @@ SPL_METHOD(SplHeap, current)
if (!intern->heap->count || Z_ISUNDEF_P(element)) {
RETURN_NULL();
} else {
- ZVAL_DEREF(element);
- ZVAL_COPY(return_value, element);
+ ZVAL_COPY_DEREF(return_value, element);
}
}
/* }}} */
@@ -1053,8 +1049,7 @@ SPL_METHOD(SplPriorityQueue, current)
RETURN_NULL();
}
- ZVAL_DEREF(data);
- ZVAL_COPY(return_value, data);
+ ZVAL_COPY_DEREF(return_value, data);
}
}
/* }}} */
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index 3dcdf1da14..c9f88ad6d9 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -672,8 +672,7 @@ SPL_METHOD(RecursiveIteratorIterator, current)
data = iterator->funcs->get_current_data(iterator);
if (data) {
- ZVAL_DEREF(data);
- ZVAL_COPY(return_value, data);
+ ZVAL_COPY_DEREF(return_value, data);
}
} /* }}} */
@@ -725,8 +724,7 @@ SPL_METHOD(RecursiveIteratorIterator, getSubIterator)
}
value = &object->iterators[level].zobject;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} /* }}} */
/* {{{ proto RecursiveIterator RecursiveIteratorIterator::getInnerIterator()
@@ -742,8 +740,7 @@ SPL_METHOD(RecursiveIteratorIterator, getInnerIterator)
SPL_FETCH_SUB_ELEMENT_ADDR(zobject, object, zobject);
- ZVAL_DEREF(zobject);
- ZVAL_COPY(return_value, zobject);
+ ZVAL_COPY_DEREF(return_value, zobject);
} /* }}} */
/* {{{ proto RecursiveIterator RecursiveIteratorIterator::beginIteration()
@@ -1225,8 +1222,7 @@ SPL_METHOD(RecursiveTreeIterator, current)
SPL_FETCH_SUB_ITERATOR(iterator, object);
data = iterator->funcs->get_current_data(iterator);
if (data) {
- ZVAL_DEREF(data);
- ZVAL_COPY(return_value, data);
+ ZVAL_COPY_DEREF(return_value, data);
return;
} else {
RETURN_NULL();
@@ -1598,10 +1594,9 @@ static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, z
}
if (inc_refcount) {
- ZVAL_COPY(&intern->inner.zobject, zobject);
- } else {
- ZVAL_COPY_VALUE(&intern->inner.zobject, zobject);
+ Z_TRY_ADDREF_P(zobject);
}
+ ZVAL_COPY_VALUE(&intern->inner.zobject, zobject);
intern->inner.ce = dit_type == DIT_IteratorIterator ? ce : Z_OBJCE_P(zobject);
intern->inner.object = Z_OBJ_P(zobject);
@@ -1642,8 +1637,7 @@ SPL_METHOD(dual_it, getInnerIterator)
if (!Z_ISUNDEF(intern->inner.zobject)) {
zval *value = &intern->inner.zobject;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
RETURN_NULL();
}
@@ -1786,8 +1780,7 @@ SPL_METHOD(dual_it, key)
if (Z_TYPE(intern->current.key) != IS_UNDEF) {
zval *value = &intern->current.key;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
RETURN_NULL();
}
@@ -1813,8 +1806,7 @@ SPL_METHOD(dual_it, current)
if (Z_TYPE(intern->current.data) != IS_UNDEF) {
zval *value = &intern->current.data;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
RETURN_NULL();
}
@@ -2864,8 +2856,7 @@ SPL_METHOD(CachingIterator, offsetGet)
return;
}
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
/* }}} */
@@ -3080,8 +3071,7 @@ SPL_METHOD(RecursiveCachingIterator, getChildren)
if (Z_TYPE(intern->u.caching.zchildren) != IS_UNDEF) {
zval *value = &intern->u.caching.zchildren;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
RETURN_NULL();
}
@@ -3185,8 +3175,7 @@ SPL_METHOD(NoRewindIterator, current)
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
data = intern->inner.iterator->funcs->get_current_data(intern->inner.iterator);
if (data) {
- ZVAL_DEREF(data);
- ZVAL_COPY(return_value, data);
+ ZVAL_COPY_DEREF(return_value, data);
}
} /* }}} */
@@ -3411,8 +3400,7 @@ SPL_METHOD(AppendIterator, current)
if (Z_TYPE(intern->current.data) != IS_UNDEF) {
zval *value = &intern->current.data;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} else {
RETURN_NULL();
}
@@ -3496,8 +3484,7 @@ SPL_METHOD(AppendIterator, getArrayIterator)
SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis());
value = &intern->u.append.zarrayit;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
} /* }}} */
ZEND_BEGIN_ARG_INFO(arginfo_append_it_append, 0)
diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c
index 6d81b9326f..dde06d288b 100644
--- a/ext/spl/spl_observer.c
+++ b/ext/spl/spl_observer.c
@@ -464,8 +464,7 @@ SPL_METHOD(SplObjectStorage, offsetGet)
} else {
zval *value = &element->inf;
- ZVAL_DEREF(value);
- ZVAL_COPY(return_value, value);
+ ZVAL_COPY_DEREF(return_value, value);
}
} /* }}} */
diff --git a/ext/standard/array.c b/ext/standard/array.c
index b1ad917640..10831a4227 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1141,8 +1141,7 @@ PHP_FUNCTION(end)
entry = Z_INDIRECT_P(entry);
}
- ZVAL_DEREF(entry);
- ZVAL_COPY(return_value, entry);
+ ZVAL_COPY_DEREF(return_value, entry);
}
}
/* }}} */
@@ -1169,8 +1168,7 @@ PHP_FUNCTION(prev)
entry = Z_INDIRECT_P(entry);
}
- ZVAL_DEREF(entry);
- ZVAL_COPY(return_value, entry);
+ ZVAL_COPY_DEREF(return_value, entry);
}
}
/* }}} */
@@ -1197,8 +1195,7 @@ PHP_FUNCTION(next)
entry = Z_INDIRECT_P(entry);
}
- ZVAL_DEREF(entry);
- ZVAL_COPY(return_value, entry);
+ ZVAL_COPY_DEREF(return_value, entry);
}
}
/* }}} */
@@ -1225,8 +1222,7 @@ PHP_FUNCTION(reset)
entry = Z_INDIRECT_P(entry);
}
- ZVAL_DEREF(entry);
- ZVAL_COPY(return_value, entry);
+ ZVAL_COPY_DEREF(return_value, entry);
}
}
/* }}} */
@@ -1250,8 +1246,7 @@ PHP_FUNCTION(current)
entry = Z_INDIRECT_P(entry);
}
- ZVAL_DEREF(entry);
- ZVAL_COPY(return_value, entry);
+ ZVAL_COPY_DEREF(return_value, entry);
}
/* }}} */
@@ -1289,8 +1284,7 @@ PHP_FUNCTION(min)
RETVAL_NULL();
} else {
if ((result = zend_hash_minmax(Z_ARRVAL(args[0]), php_array_data_compare, 0)) != NULL) {
- ZVAL_DEREF(result);
- ZVAL_COPY(return_value, result);
+ ZVAL_COPY_DEREF(return_value, result);
} else {
php_error_docref(NULL, E_WARNING, "Array must contain at least one element");
RETVAL_FALSE;
@@ -1335,8 +1329,7 @@ PHP_FUNCTION(max)
RETVAL_NULL();
} else {
if ((result = zend_hash_minmax(Z_ARRVAL(args[0]), php_array_data_compare, 1)) != NULL) {
- ZVAL_DEREF(result);
- ZVAL_COPY(return_value, result);
+ ZVAL_COPY_DEREF(return_value, result);
} else {
php_error_docref(NULL, E_WARNING, "Array must contain at least one element");
RETVAL_FALSE;
@@ -1799,10 +1792,9 @@ static zend_long php_extract_if_exists(zend_array *arr, zend_array *symbol_table
zend_throw_error(NULL, "Cannot re-assign $this");
return -1;
}
- ZVAL_DEREF(entry);
ZVAL_DEREF(orig_var);
zval_ptr_dtor(orig_var);
- ZVAL_COPY(orig_var, entry);
+ ZVAL_COPY_DEREF(orig_var, entry);
count++;
}
} ZEND_HASH_FOREACH_END();
@@ -1883,10 +1875,9 @@ static zend_long php_extract_overwrite(zend_array *arr, zend_array *symbol_table
if (zend_string_equals_literal(var_name, "GLOBALS")) {
continue;
}
- ZVAL_DEREF(entry);
ZVAL_DEREF(orig_var);
zval_ptr_dtor(orig_var);
- ZVAL_COPY(orig_var, entry);
+ ZVAL_COPY_DEREF(orig_var, entry);
} else {
ZVAL_DEREF(entry);
Z_TRY_ADDREF_P(entry);
@@ -1970,8 +1961,7 @@ static zend_long php_extract_prefix_if_exists(zend_array *arr, zend_array *symbo
if (Z_TYPE_P(orig_var) == IS_INDIRECT) {
orig_var = Z_INDIRECT_P(orig_var);
if (Z_TYPE_P(orig_var) == IS_UNDEF) {
- ZVAL_DEREF(entry);
- ZVAL_COPY(orig_var, entry);
+ ZVAL_COPY_DEREF(orig_var, entry);
count++;
continue;
}
@@ -2097,8 +2087,7 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
if (Z_TYPE_P(orig_var) == IS_INDIRECT) {
orig_var = Z_INDIRECT_P(orig_var);
if (Z_TYPE_P(orig_var) == IS_UNDEF) {
- ZVAL_DEREF(entry);
- ZVAL_COPY(orig_var, entry);
+ ZVAL_COPY_DEREF(orig_var, entry);
count++;
continue;
}
@@ -2410,8 +2399,7 @@ static zend_long php_extract_skip(zend_array *arr, zend_array *symbol_table) /*
if (Z_TYPE_P(orig_var) == IS_INDIRECT) {
orig_var = Z_INDIRECT_P(orig_var);
if (Z_TYPE_P(orig_var) == IS_UNDEF) {
- ZVAL_DEREF(entry);
- ZVAL_COPY(orig_var, entry);
+ ZVAL_COPY_DEREF(orig_var, entry);
count++;
}
}
@@ -2542,8 +2530,8 @@ static void php_compact_var(HashTable *eg_active_symbol_table, zval *return_valu
if (Z_TYPE_P(entry) == IS_STRING) {
if ((value_ptr = zend_hash_find_ind(eg_active_symbol_table, Z_STR_P(entry))) != NULL) {
ZVAL_DEREF(value_ptr);
- ZVAL_COPY(&data, value_ptr);
- zend_hash_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data);
+ Z_TRY_ADDREF_P(value_ptr);
+ zend_hash_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), value_ptr);
} else if (zend_string_equals_literal(Z_STR_P(entry), "this")) {
zend_object *object = zend_get_this_object(EG(current_execute_data));
if (object) {
@@ -3236,8 +3224,7 @@ PHP_FUNCTION(array_pop)
break;
}
}
- ZVAL_DEREF(val);
- ZVAL_COPY(return_value, val);
+ ZVAL_COPY_DEREF(return_value, val);
if (!p->key && Z_ARRVAL_P(stack)->nNextFreeElement > 0 && p->h >= (zend_ulong)(Z_ARRVAL_P(stack)->nNextFreeElement - 1)) {
Z_ARRVAL_P(stack)->nNextFreeElement = Z_ARRVAL_P(stack)->nNextFreeElement - 1;
@@ -3291,8 +3278,7 @@ PHP_FUNCTION(array_shift)
}
idx++;
}
- ZVAL_DEREF(val);
- ZVAL_COPY(return_value, val);
+ ZVAL_COPY_DEREF(return_value, val);
/* Delete the first value */
if (p->key) {
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 5aea16af97..91f60219f7 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1758,8 +1758,7 @@ PHP_FUNCTION(pathinfo)
} else {
zval *element;
if ((element = zend_hash_get_current_data(Z_ARRVAL(tmp))) != NULL) {
- ZVAL_DEREF(element);
- ZVAL_COPY(return_value, element);
+ ZVAL_COPY_DEREF(return_value, element);
} else {
ZVAL_EMPTY_STRING(return_value);
}