From: Dmitry Stogov Date: Mon, 9 Jul 2018 09:46:46 +0000 (+0300) Subject: Uze ZVAL_COPY_DEREF() instead of ZVAL_DEREF() and ZVAL_COPY() X-Git-Tag: php-7.3.0alpha4~68 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=67b4c3379a1c7f8a34522972c9cb3adf3776bc4a;p=php Uze ZVAL_COPY_DEREF() instead of ZVAL_DEREF() and ZVAL_COPY() --- 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); }