]> granicus.if.org Git - php/commitdiff
Uze ZVAL_COPY_DEREF() instead of ZVAL_DEREF() and ZVAL_COPY()
authorDmitry Stogov <dmitry@zend.com>
Mon, 9 Jul 2018 09:46:46 +0000 (12:46 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 9 Jul 2018 09:46:46 +0000 (12:46 +0300)
22 files changed:
Zend/zend_builtin_functions.c
Zend/zend_execute.c
Zend/zend_generators.c
Zend/zend_object_handlers.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/curl/curl_file.c
ext/intl/breakiterator/breakiterator_iterators.cpp
ext/intl/common/common_enum.cpp
ext/phar/stream.c
ext/reflection/php_reflection.c
ext/session/session.c
ext/simplexml/sxe.c
ext/spl/spl_array.c
ext/spl/spl_directory.c
ext/spl/spl_dllist.c
ext/spl/spl_fixedarray.c
ext/spl/spl_heap.c
ext/spl/spl_iterators.c
ext/spl/spl_observer.c
ext/standard/array.c
ext/standard/string.c

index 591c8af17f6000d637e8df8251449d8d878c05ae..30e60949308f2698cad8d329b98a4dfd151f5e0c 100644 (file)
@@ -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);
        }
 }
 /* }}} */
index 097ccc10e19d9e410dd4be01163ffab632136431..5012688c6ba68cf3952a0316517510c5f1482534 100644 (file)
@@ -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 {
index 8408cc32f47f77ed80970deee3c26e66ec096b75..c532dfe8459d84a80391110aeca9f7f22049fb08 100644 (file)
@@ -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);
        }
index 97a0dcd8170406ddc7992d120cffc07e0cae1a24..72c182c7b2ae066ad39b0f5435b130ab9fd7f57f 100644 (file)
@@ -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);
index 391f096243f41b47ed4ce980235021dad3a0f1c1..8c08e1205c3ebdaa89a3410dabe3039b2d177c22 100644 (file)
@@ -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));
index 53012151c6d9e2532c29e000ed8e99016fac6fd7..bb8d9e8df797fdb03321796d9dd7bae98fb8857e 100644 (file)
@@ -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));
index 8b476372fa77114d8a3a5538c2a6474f1df6925e..6242ff8811c3ce37d5a56400ab12baebf207b2f9 100644 (file)
@@ -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)
index 66ddfee5776f913e51c1cc5df4fcedc000e54845..c90300155abc6835369710d5bfd1d9b87d1eed64 100644 (file)
@@ -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)
index a19fa9ddf773f48bc09c2f438f6aa0ddb91747d7..5c5e1ca9906085c7de02b65e60359883f10dba14 100644 (file)
@@ -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);
        }
 }
 
index b1ccd53cc36d3da5396d7769c229b21b5275132b..ac44dd0682012c7f0976f74e70f885473cb723ed 100644 (file)
@@ -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;
                        }
                }
index c29c354365c77b5ab818131afd1343ee9d5f7acb..cba4f1d54a4ecb56bc40fcc0c882659816f776fa 100644 (file)
@@ -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);
index 504a119e5cc5356a3caf8fe1c6270588e0e8d108..a86f7c25de284cfe303667c5eb9c85baa450df8c 100644 (file)
@@ -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;
        }
 
index 63d54aab1ac2641764ff7112e6d2a4868a556442..f502d8792666df5d4cdadfb2c2e77a609faef90b 100644 (file)
@@ -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 */
index 3b9ee1a80ae9b464288974db3f5da3974e52d133..0ed5c5568787a6f551464fdc4560f013ceb0c11a 100644 (file)
@@ -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);
 }
 /* }}} */
 
index e844ca03a28c060dbd3ddfd027e0430c1006f32d..90798947a4911f0926f041cce037ee9a8edbfbc6 100644 (file)
@@ -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;
index 55e3c0072a6ff3486b143d73875bf80439e55b19..f50358fd61254da68f3da0d1967d7a35b62e380f 100644 (file)
@@ -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);
        }
 }
 /* }}} */
index 3690ce6c383b0535f0658818c3f84c10df2d215a..e906c233eb8b3f5a1a15ce537b8d2ee51bd8510f 100644 (file)
@@ -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();
        }
index 70370b1665711ca9f4ad32d77b3199dacf19494c..70b08bf55533b9f50c133f958a5ecc8e6dddf8c7 100644 (file)
@@ -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);
        }
 }
 /* }}} */
index 3dcdf1da1428babfddcede5be99ede0ae57b5abc..c9f88ad6d9cba9bbcd438cf6894f4d106b457b3b 100644 (file)
@@ -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)
index 6d81b9326f9e6d550af5ad63c3fb13a75b86d5b4..dde06d288bf904aebaf29999e8d9bf58bc7c8255 100644 (file)
@@ -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);
        }
 } /* }}} */
 
index b1ad9176401178ecccf768d74afd0af9f61b4654..10831a4227a1f51dd890eee0c001e758432c2609 100644 (file)
@@ -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) {
index 5aea16af97e08643c10cc57844a391f5c3fa9fd7..91f60219f750f07ee8e4b4aa47e98a56769fb8e4 100644 (file)
@@ -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);
                }