]> granicus.if.org Git - php/commitdiff
RC manipulation cleanup
authorXinchen Hui <laruence@gmail.com>
Wed, 1 Nov 2017 02:25:10 +0000 (10:25 +0800)
committerXinchen Hui <laruence@gmail.com>
Wed, 1 Nov 2017 02:25:10 +0000 (10:25 +0800)
16 files changed:
Zend/zend_builtin_functions.c
Zend/zend_compile.c
Zend/zend_inheritance.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
ext/pcntl/pcntl.c
ext/pcre/php_pcre.c
ext/pdo/pdo_dbh.c
ext/reflection/php_reflection.c
ext/soap/php_encoding.c
ext/spl/spl_heap.c
ext/standard/array.c
ext/standard/basic_functions.c
ext/standard/streamsfuncs.c
ext/wddx/wddx.c
main/php_variables.c

index 04bb9142d272865131bd7b0aff010fb22cfb28ee..7190af97a48b73e0420a47e965a2763c21d08b18 100644 (file)
@@ -648,15 +648,16 @@ ZEND_FUNCTION(each)
 
        /* add value elements */
        ZVAL_DEREF(entry);
-       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
-       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
+       if (Z_REFCOUNTED_P(entry)) {
+               GC_ADDREF_EX(Z_COUNTED_P(entry), 2);
+       }
        zend_hash_index_add_new(Z_ARRVAL_P(return_value), 1, entry);
        zend_hash_add_new(Z_ARRVAL_P(return_value), ZSTR_KNOWN(ZEND_STR_VALUE), entry);
 
        /* add the key elements */
        if (zend_hash_get_current_key(target_hash, &key, &num_key) == HASH_KEY_IS_STRING) {
                ZVAL_STR_COPY(&tmp, key);
-               if (Z_REFCOUNTED(tmp)) Z_ADDREF(tmp);
+               Z_TRY_ADDREF(tmp);
        } else {
                ZVAL_LONG(&tmp, num_key);
        }
index 7a50a010e070e2f5d466383f17afe787e6c0f60f..32c5e2e221504c9f7c2fb1aad3276139bb35df4e 100644 (file)
@@ -6961,7 +6961,7 @@ static zend_bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */
                zend_ast *key_ast = elem_ast->child[1];
 
                zval *value = zend_ast_get_zval(value_ast);
-               if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+               Z_TRY_ADDREF_P(value);
 
                if (key_ast) {
                        zval *key = zend_ast_get_zval(key_ast);
index 98a3ae6459242916b6e053a2437f4cc450bfd16e..a9c468493d349e4b521b641b0b99fe7c1f18d8f0 100644 (file)
@@ -1619,8 +1619,8 @@ static void zend_do_traits_property_binding(zend_class_entry *ce) /* {{{ */
                        } else {
                                prop_value = &ce->traits[i]->default_properties_table[OBJ_PROP_TO_NUM(property_info->offset)];
                        }
-                       if (Z_REFCOUNTED_P(prop_value)) Z_ADDREF_P(prop_value);
 
+                       Z_TRY_ADDREF_P(prop_value);
                        doc_comment = property_info->doc_comment ? zend_string_copy(property_info->doc_comment) : NULL;
                        zend_declare_property_ex(ce, prop_name,
                                                                         prop_value, flags,
index 6449741d127edd55e22f02723d1b1ff522449f0d..43e99271c365638f8ec71fefdaacdcf2ceacc779 100644 (file)
@@ -2167,15 +2167,11 @@ ZEND_VM_C_LABEL(fast_assign_obj):
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (OP_DATA_TYPE == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -3912,7 +3908,7 @@ ZEND_VM_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC)
 
                                ZVAL_NEW_REF(EX(return_value), retval_ptr);
                                if (OP1_TYPE == IS_CONST) {
-                                       if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+                                       Z_TRY_ADDREF_P(retval_ptr);
                                }
                        }
                        break;
@@ -4097,7 +4093,7 @@ ZEND_VM_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY)
 
        zend_exception_save();
        if (OP1_TYPE != IS_TMP_VAR) {
-               if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+               Z_TRY_ADDREF_P(value);
        }
 
        zend_throw_exception_object(value);
@@ -4512,7 +4508,7 @@ ZEND_VM_C_LABEL(send_again):
                                if (Z_ISREF_P(arg)) {
                                        ZVAL_DUP(arg, Z_REFVAL_P(arg));
                                } else {
-                                       if (Z_REFCOUNTED_P(arg)) Z_ADDREF_P(arg);
+                                       Z_TRY_ADDREF_P(arg);
                                }
 
                                zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
@@ -5152,14 +5148,10 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSE
                if (OP1_TYPE == IS_TMP_VAR) {
                        /* pass */
                } else if (OP1_TYPE == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (OP1_TYPE == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (OP1_TYPE == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
index 88adc1c2552ad828fceb7e5a017dd049991f9d1d..9c405e90541579b0ee8070369702849f3efed89b 100644 (file)
@@ -1296,7 +1296,7 @@ send_again:
                                if (Z_ISREF_P(arg)) {
                                        ZVAL_DUP(arg, Z_REFVAL_P(arg));
                                } else {
-                                       if (Z_REFCOUNTED_P(arg)) Z_ADDREF_P(arg);
+                                       Z_TRY_ADDREF_P(arg);
                                }
 
                                zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
@@ -2962,7 +2962,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDL
 
                                ZVAL_NEW_REF(EX(return_value), retval_ptr);
                                if (IS_CONST == IS_CONST) {
-                                       if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+                                       Z_TRY_ADDREF_P(retval_ptr);
                                }
                        }
                        break;
@@ -3070,7 +3070,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_
 
        zend_exception_save();
        if (IS_CONST != IS_TMP_VAR) {
-               if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+               Z_TRY_ADDREF_P(value);
        }
 
        zend_throw_exception_object(value);
@@ -5843,14 +5843,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C
                if (IS_CONST == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CONST == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CONST == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CONST == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -7623,14 +7619,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_U
                if (IS_CONST == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CONST == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CONST == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CONST == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -9903,14 +9895,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C
                if (IS_CONST == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CONST == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CONST == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CONST == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -11915,14 +11903,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_T
                if (IS_CONST == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CONST == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CONST == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CONST == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -12776,7 +12760,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER
 
                                ZVAL_NEW_REF(EX(return_value), retval_ptr);
                                if (IS_TMP_VAR == IS_CONST) {
-                                       if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+                                       Z_TRY_ADDREF_P(retval_ptr);
                                }
                        }
                        break;
@@ -12884,7 +12868,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OP
 
        zend_exception_save();
        if (IS_TMP_VAR != IS_TMP_VAR) {
-               if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+               Z_TRY_ADDREF_P(value);
        }
 
        zend_throw_exception_object(value);
@@ -13883,14 +13867,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CON
                if (IS_TMP_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_TMP_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_TMP_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_TMP_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -14608,14 +14588,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNU
                if (IS_TMP_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_TMP_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_TMP_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_TMP_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -15251,14 +15227,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_
                if (IS_TMP_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_TMP_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_TMP_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_TMP_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -15794,14 +15766,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP
                if (IS_TMP_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_TMP_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_TMP_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_TMP_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -16204,7 +16172,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER
 
                                ZVAL_NEW_REF(EX(return_value), retval_ptr);
                                if (IS_VAR == IS_CONST) {
-                                       if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+                                       Z_TRY_ADDREF_P(retval_ptr);
                                }
                        }
                        break;
@@ -16313,7 +16281,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OP
 
        zend_exception_save();
        if (IS_VAR != IS_TMP_VAR) {
-               if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+               Z_TRY_ADDREF_P(value);
        }
 
        zend_throw_exception_object(value);
@@ -18687,15 +18655,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -18845,15 +18809,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -19003,15 +18963,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -19161,15 +19117,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -19881,14 +19833,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CON
                if (IS_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -21633,14 +21581,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNU
                if (IS_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -23015,15 +22959,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -23173,15 +23113,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -23331,15 +23267,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -23489,15 +23421,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -24192,14 +24120,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_
                if (IS_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -25637,15 +25561,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -25795,15 +25715,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -25953,15 +25869,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -26111,15 +26023,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -26701,14 +26609,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP
                if (IS_VAR == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_VAR == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_VAR == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_VAR == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -27804,15 +27708,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -27962,15 +27862,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -28120,15 +28016,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -28278,15 +28170,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -30441,15 +30329,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -30599,15 +30483,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -30757,15 +30637,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -30915,15 +30791,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -32201,15 +32073,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -32359,15 +32227,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -32517,15 +32381,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -32675,15 +32535,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -33676,7 +33532,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(
 
                                ZVAL_NEW_REF(EX(return_value), retval_ptr);
                                if (IS_CV == IS_CONST) {
-                                       if (Z_REFCOUNTED_P(retval_ptr)) Z_ADDREF_P(retval_ptr);
+                                       Z_TRY_ADDREF_P(retval_ptr);
                                }
                        }
                        break;
@@ -33784,7 +33640,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPC
 
        zend_exception_save();
        if (IS_CV != IS_TMP_VAR) {
-               if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+               Z_TRY_ADDREF_P(value);
        }
 
        zend_throw_exception_object(value);
@@ -36779,15 +36635,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -36937,15 +36789,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -37095,15 +36943,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -37253,15 +37097,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -38046,14 +37886,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONS
                if (IS_CV == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CV == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CV == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CV == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -40744,14 +40580,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUS
                if (IS_CV == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CV == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CV == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CV == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -43254,15 +43086,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -43412,15 +43240,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -43570,15 +43394,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -43728,15 +43548,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -44577,14 +44393,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_H
                if (IS_CV == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CV == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CV == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CV == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
@@ -46969,15 +46781,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CONST == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -47127,15 +46935,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_TMP_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -47285,15 +47089,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_VAR == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -47443,15 +47243,11 @@ fast_assign_obj:
                                                                value = &tmp;
                                                        } else {
                                                                value = Z_REFVAL_P(value);
-                                                               if (Z_REFCOUNTED_P(value)) {
-                                                                       Z_ADDREF_P(value);
-                                                               }
+                                                               Z_TRY_ADDREF_P(value);
                                                        }
                                                } else {
                                                        value = Z_REFVAL_P(value);
-                                                       if (Z_REFCOUNTED_P(value)) {
-                                                               Z_ADDREF_P(value);
-                                                       }
+                                                       Z_TRY_ADDREF_P(value);
                                                }
                                        } else if (IS_CV == IS_CV && Z_REFCOUNTED_P(value)) {
                                                Z_ADDREF_P(value);
@@ -48181,14 +47977,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPV
                if (IS_CV == IS_TMP_VAR) {
                        /* pass */
                } else if (IS_CV == IS_CONST) {
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else if (IS_CV == IS_CV) {
                        ZVAL_DEREF(expr_ptr);
-                       if (Z_REFCOUNTED_P(expr_ptr)) {
-                               Z_ADDREF_P(expr_ptr);
-                       }
+                       Z_TRY_ADDREF_P(expr_ptr);
                } else /* if (IS_CV == IS_VAR) */ {
                        if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
                                zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
index f9ea76de4ff863b4a55746e67d7400e0ecf856bc..52d107419d71fd0bee8530ed7977bb3ee957325b 100644 (file)
@@ -1040,7 +1040,7 @@ PHP_FUNCTION(pcntl_signal)
 
        /* Add the function name to our signal table */
        if (zend_hash_index_update(&PCNTL_G(php_signal_table), signo, handle)) {
-               if (Z_REFCOUNTED_P(handle)) Z_ADDREF_P(handle);
+               Z_TRY_ADDREF_P(handle);
        }
 
        if (php_signal4(signo, pcntl_signal_handler, (int) restart_syscalls, 1) == (Sigfunc *)SIG_ERR) {
index 24952beb07a696f223db0c13bdc7f8ec811bbc98..ebf84c0c58c8132be19d30cd93e98d539fb042be 100644 (file)
@@ -2602,9 +2602,7 @@ PHPAPI void  php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
 
                /* If the entry fits our requirements */
                if ((count > 0 && !invert) || (count == PCRE_ERROR_NOMATCH && invert)) {
-                       if (Z_REFCOUNTED_P(entry)) {
-                               Z_ADDREF_P(entry);
-                       }
+                       Z_TRY_ADDREF_P(entry);
 
                        /* Add to return array */
                        if (string_key) {
index be5f1e363fa871f3c54f2f4351cfa98f908fc2fb..a89276cfcecc15b6201e25bfc48f19d799e45388 100644 (file)
@@ -880,7 +880,7 @@ static PHP_METHOD(PDO, getAttribute)
                        array_init(return_value);
                        add_next_index_str(return_value, zend_string_copy(dbh->def_stmt_ce->name));
                        if (!Z_ISUNDEF(dbh->def_stmt_ctor_args)) {
-                               if (Z_REFCOUNTED(dbh->def_stmt_ctor_args)) Z_ADDREF(dbh->def_stmt_ctor_args);
+                               Z_TRY_ADDREF(dbh->def_stmt_ctor_args);
                                add_next_index_zval(return_value, &dbh->def_stmt_ctor_args);
                        }
                        return;
index ffa5207ed426c72ae72b9156f36028a4bce15c17..6f19fc77fcfb1e077816b9061df24e0ded282b64 100644 (file)
@@ -48,7 +48,7 @@
                zval member; \
                ZVAL_STR(&member, name); \
                zend_std_write_property(object, &member, value, NULL); \
-               if (Z_REFCOUNTED_P(value)) Z_DELREF_P(value); \
+               Z_TRY_DELREF_P(value); \
                zval_ptr_dtor(&member); \
        } while (0)
 
@@ -4762,7 +4762,7 @@ ZEND_METHOD(reflection_class, newInstance)
                }
 
                for (i = 0; i < num_args; i++) {
-                       if (Z_REFCOUNTED(params[i])) Z_ADDREF(params[i]);
+                       Z_TRY_ADDREF(params[i]);
                }
 
                fci.size = sizeof(fci);
index 16b15698c52ce74ed1f846c4da783fa0669a8cfa..057a367655d08ba2714592cae6fcba6680780e5b 100644 (file)
@@ -1169,7 +1169,7 @@ static xmlNodePtr to_xml_null(encodeTypePtr type, zval *data, int style, xmlNode
 static void set_zval_property(zval* object, char* name, zval* val)
 {
        zend_update_property(Z_OBJCE_P(object), object, name, strlen(name), val);
-       if (Z_REFCOUNTED_P(val)) Z_DELREF_P(val);
+       Z_TRY_DELREF_P(val);
 }
 
 static zval* get_zval_property(zval* object, char* name, zval *rv)
index 3b179c523f73b00c3c0f66fac4e6bee8dbf2ab98..db8f8d977918cb1fb7fd0db04bcc96fc9c08a10c 100644 (file)
@@ -590,7 +590,7 @@ SPL_METHOD(SplHeap, insert)
                return;
        }
 
-       if (Z_REFCOUNTED_P(value)) Z_ADDREF_P(value);
+       Z_TRY_ADDREF_P(value);
        spl_ptr_heap_insert(intern->heap, value, getThis());
 
        RETURN_TRUE;
@@ -641,8 +641,8 @@ SPL_METHOD(SplPriorityQueue, insert)
                return;
        }
 
-       if (Z_REFCOUNTED_P(data)) Z_ADDREF_P(data);
-       if (Z_REFCOUNTED_P(priority)) Z_ADDREF_P(priority);
+       Z_TRY_ADDREF_P(data);
+       Z_TRY_ADDREF_P(priority);
 
        array_init(&elem);
        add_assoc_zval_ex(&elem, "data", sizeof("data") - 1, data);
index 0cd2c5c64af2462eda8c71f2921b9fe1a238c500..f40160d3bd482f6cb3b2a91a69f9fdb942dc0983 100644 (file)
@@ -1807,10 +1807,9 @@ static zend_long php_extract_if_exists(zend_array *arr, zend_array *symbol_table
                                continue;
                        }
                        ZVAL_DEREF(entry);
-                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
                        ZVAL_DEREF(orig_var);
                        zval_ptr_dtor(orig_var);
-                       ZVAL_COPY_VALUE(orig_var, entry);
+                       ZVAL_COPY(orig_var, entry);
                        count++;
                }
        } ZEND_HASH_FOREACH_END();
@@ -1894,13 +1893,12 @@ static zend_long php_extract_overwrite(zend_array *arr, zend_array *symbol_table
                                continue;
                        }
                        ZVAL_DEREF(entry);
-                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
                        ZVAL_DEREF(orig_var);
                        zval_ptr_dtor(orig_var);
-                       ZVAL_COPY_VALUE(orig_var, entry);
+                       ZVAL_COPY(orig_var, entry);
                } else {
                        ZVAL_DEREF(entry);
-                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
+                       Z_TRY_ADDREF_P(entry);
                        zend_hash_add_new(symbol_table, var_name, entry);
                }
                count++;
@@ -1980,8 +1978,7 @@ static zend_long php_extract_prefix_if_exists(zend_array *arr, zend_array *symbo
                                orig_var = Z_INDIRECT_P(orig_var);
                                if (Z_TYPE_P(orig_var) == IS_UNDEF) {
                                        ZVAL_DEREF(entry);
-                                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
-                                       ZVAL_COPY_VALUE(orig_var, entry);
+                                       ZVAL_COPY(orig_var, entry);
                                        count++;
                                        continue;
                                }
@@ -1995,15 +1992,15 @@ static zend_long php_extract_prefix_if_exists(zend_array *arr, zend_array *symbo
                                        }
                                } else {
                                        ZVAL_DEREF(entry);
-                                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
                                        if ((orig_var = zend_hash_find(symbol_table, Z_STR(final_name))) != NULL) {
                                                if (Z_TYPE_P(orig_var) == IS_INDIRECT) {
                                                        orig_var = Z_INDIRECT_P(orig_var);
                                                }
                                                ZVAL_DEREF(orig_var);
                                                zval_ptr_dtor(orig_var);
-                                               ZVAL_COPY_VALUE(orig_var, entry);
+                                               ZVAL_COPY(orig_var, entry);
                                        } else {
+                                               Z_TRY_ADDREF_P(entry);
                                                zend_hash_add_new(symbol_table, Z_STR(final_name), entry);
                                        }
                                        count++;
@@ -2108,8 +2105,7 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
                                orig_var = Z_INDIRECT_P(orig_var);
                                if (Z_TYPE_P(orig_var) == IS_UNDEF) {
                                        ZVAL_DEREF(entry);
-                                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
-                                       ZVAL_COPY_VALUE(orig_var, entry);
+                                       ZVAL_COPY(orig_var, entry);
                                        count++;
                                        continue;
                                }
@@ -2123,15 +2119,15 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
                                        }
                                } else {
                                        ZVAL_DEREF(entry);
-                                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
                                        if ((orig_var = zend_hash_find(symbol_table, Z_STR(final_name))) != NULL) {
                                                if (Z_TYPE_P(orig_var) == IS_INDIRECT) {
                                                        orig_var = Z_INDIRECT_P(orig_var);
                                                }
                                                ZVAL_DEREF(orig_var);
                                                zval_ptr_dtor(orig_var);
-                                               ZVAL_COPY_VALUE(orig_var, entry);
+                                               ZVAL_COPY(orig_var, entry);
                                        } else {
+                                               Z_TRY_ADDREF_P(entry);
                                                zend_hash_add_new(symbol_table, Z_STR(final_name), entry);
                                        }
                                        count++;
@@ -2150,7 +2146,7 @@ static zend_long php_extract_prefix_same(zend_array *arr, zend_array *symbol_tab
                                continue;
                        }
                        ZVAL_DEREF(entry);
-                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
+                       Z_TRY_ADDREF_P(entry);
                        zend_hash_add_new(symbol_table, var_name, entry);
                        count++;
                }
@@ -2234,15 +2230,15 @@ static zend_long php_extract_prefix_all(zend_array *arr, zend_array *symbol_tabl
                                }
                        } else {
                                ZVAL_DEREF(entry);
-                               if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
                                if ((orig_var = zend_hash_find(symbol_table, Z_STR(final_name))) != NULL) {
                                        if (Z_TYPE_P(orig_var) == IS_INDIRECT) {
                                                orig_var = Z_INDIRECT_P(orig_var);
                                        }
                                        ZVAL_DEREF(orig_var);
                                        zval_ptr_dtor(orig_var);
-                                       ZVAL_COPY_VALUE(orig_var, entry);
+                                       ZVAL_COPY(orig_var, entry);
                                } else {
+                                       Z_TRY_ADDREF_P(entry);
                                        zend_hash_add_new(symbol_table, Z_STR(final_name), entry);
                                }
                                count++;
@@ -2344,15 +2340,15 @@ static zend_long php_extract_prefix_invalid(zend_array *arr, zend_array *symbol_
                        }
                } else {
                        ZVAL_DEREF(entry);
-                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
                        if ((orig_var = zend_hash_find(symbol_table, Z_STR(final_name))) != NULL) {
                                if (Z_TYPE_P(orig_var) == IS_INDIRECT) {
                                        orig_var = Z_INDIRECT_P(orig_var);
                                }
                                ZVAL_DEREF(orig_var);
                                zval_ptr_dtor(orig_var);
-                               ZVAL_COPY_VALUE(orig_var, entry);
+                               ZVAL_COPY(orig_var, entry);
                        } else {
+                               Z_TRY_ADDREF_P(entry);
                                zend_hash_add_new(symbol_table, Z_STR(final_name), entry);
                        }
                        count++;
@@ -2435,14 +2431,13 @@ static zend_long php_extract_skip(zend_array *arr, zend_array *symbol_table) /*
                                orig_var = Z_INDIRECT_P(orig_var);
                                if (Z_TYPE_P(orig_var) == IS_UNDEF) {
                                        ZVAL_DEREF(entry);
-                                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
-                                       ZVAL_COPY_VALUE(orig_var, entry);
+                                       ZVAL_COPY(orig_var, entry);
                                        count++;
                                }
                        }
                } else {
                        ZVAL_DEREF(entry);
-                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
+                       Z_TRY_ADDREF_P(entry);
                        zend_hash_add_new(symbol_table, var_name, entry);
                        count++;
                }
@@ -3098,9 +3093,7 @@ static void php_splice(HashTable *in_hash, zend_long offset, zend_long length, H
                        if (Z_TYPE(p->val) == IS_UNDEF) continue;
                        pos++;
                        entry = &p->val;
-                       if (Z_REFCOUNTED_P(entry)) {
-                               Z_ADDREF_P(entry);
-                       }
+                       Z_TRY_ADDREF_P(entry);
                        if (p->key == NULL) {
                                zend_hash_next_index_insert_new(removed, entry);
                                zend_hash_index_del(in_hash, p->h);
@@ -3136,7 +3129,7 @@ static void php_splice(HashTable *in_hash, zend_long offset, zend_long length, H
        /* If there are entries to insert.. */
        if (replace) {
                ZEND_HASH_FOREACH_VAL_IND(replace, entry) {
-                       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
+                       Z_TRY_ADDREF_P(entry);
                        zend_hash_next_index_insert_new(&out_hash, entry);
                        pos++;
                } ZEND_HASH_FOREACH_END();
@@ -3200,7 +3193,7 @@ PHP_FUNCTION(array_push)
                ZVAL_COPY(&new_var, &args[i]);
 
                if (zend_hash_next_index_insert(Z_ARRVAL_P(stack), &new_var) == NULL) {
-                       if (Z_REFCOUNTED(new_var)) Z_DELREF(new_var);
+                       Z_TRY_DELREF(new_var);
                        php_error_docref(NULL, E_WARNING, "Cannot add element to the array as the next element is already occupied");
                        RETURN_FALSE;
                }
@@ -3397,9 +3390,7 @@ PHP_FUNCTION(array_unshift)
 
        zend_hash_init(&new_hash, zend_hash_num_elements(Z_ARRVAL_P(stack)) + argc, NULL, ZVAL_PTR_DTOR, 0);
        for (i = 0; i < argc; i++) {
-               if (Z_REFCOUNTED(args[i])) {
-                       Z_ADDREF(args[i]);
-               }
+               Z_TRY_ADDREF(args[i]);
                zend_hash_next_index_insert_new(&new_hash, &args[i]);
        }
        if (EXPECTED(Z_ARRVAL_P(stack)->u.v.nIteratorsCount == 0)) {
@@ -3668,9 +3659,7 @@ PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src) /* {{{ */
                                                return 0;
                                        }
                                } else {
-                                       if (Z_REFCOUNTED_P(src_entry)) {
-                                               Z_ADDREF_P(src_entry);
-                                       }
+                                       Z_TRY_ADDREF_P(src_entry);
                                        zend_hash_next_index_insert(Z_ARRVAL_P(dest_zval), src_zval);
                                }
                                zval_ptr_dtor(&tmp);
@@ -4662,9 +4651,7 @@ static void php_array_intersect_key(INTERNAL_FUNCTION_PARAMETERS, int data_compa
                                }
                        }
                        if (ok) {
-                               if (Z_REFCOUNTED_P(val)) {
-                                       Z_ADDREF_P(val);
-                               }
+                               Z_TRY_ADDREF_P(val);
                                zend_hash_index_update(Z_ARRVAL_P(return_value), p->h, val);
                        }
                } else {
@@ -4679,9 +4666,7 @@ static void php_array_intersect_key(INTERNAL_FUNCTION_PARAMETERS, int data_compa
                                }
                        }
                        if (ok) {
-                               if (Z_REFCOUNTED_P(val)) {
-                                       Z_ADDREF_P(val);
-                               }
+                               Z_TRY_ADDREF_P(val);
                                zend_hash_update(Z_ARRVAL_P(return_value), p->key, val);
                        }
                }
@@ -5078,9 +5063,7 @@ static void php_array_diff_key(INTERNAL_FUNCTION_PARAMETERS, int data_compare_ty
                                }
                        }
                        if (ok) {
-                               if (Z_REFCOUNTED_P(val)) {
-                                       Z_ADDREF_P(val);
-                               }
+                               Z_TRY_ADDREF_P(val);
                                zend_hash_index_update(Z_ARRVAL_P(return_value), p->h, val);
                        }
                } else {
@@ -5095,9 +5078,7 @@ static void php_array_diff_key(INTERNAL_FUNCTION_PARAMETERS, int data_compare_ty
                                }
                        }
                        if (ok) {
-                               if (Z_REFCOUNTED_P(val)) {
-                                       Z_ADDREF_P(val);
-                               }
+                               Z_TRY_ADDREF_P(val);
                                zend_hash_update(Z_ARRVAL_P(return_value), p->key, val);
                        }
                }
index 071099c7b90f512f4f4b4113ce119dcc0b7848af..6b1dbbd2a11907357bb5011c7baa0dba1eec3b5d 100644 (file)
@@ -5126,7 +5126,7 @@ PHP_FUNCTION(register_shutdown_function)
                }
 
                for (i = 0; i < shutdown_function_entry.arg_count; i++) {
-                       if (Z_REFCOUNTED(shutdown_function_entry.arguments[i])) Z_ADDREF(shutdown_function_entry.arguments[i]);
+                       Z_TRY_ADDREF(shutdown_function_entry.arguments[i]);
                }
                zend_hash_next_index_insert_mem(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry));
        }
@@ -5776,9 +5776,7 @@ PHP_FUNCTION(register_tick_function)
        }
 
        for (i = 0; i < tick_fe.arg_count; i++) {
-               if (Z_REFCOUNTED(tick_fe.arguments[i])) {
-                       Z_ADDREF(tick_fe.arguments[i]);
-               }
+               Z_TRY_ADDREF(tick_fe.arguments[i]);
        }
 
        zend_llist_add_element(BG(user_tick_functions), &tick_fe);
index 3cb23b7165a6cb723090e498763e21df14609fff..72a429a697a2ec840cd4037c49c67c34a72b1e73 100644 (file)
@@ -1075,10 +1075,10 @@ PHP_FUNCTION(stream_context_get_params)
 
        array_init(return_value);
        if (context->notifier && Z_TYPE(context->notifier->ptr) != IS_UNDEF && context->notifier->func == user_space_stream_notifier) {
+               Z_TRY_ADDREF(context->notifier->ptr);
                add_assoc_zval_ex(return_value, "notification", sizeof("notification")-1, &context->notifier->ptr);
-               if (Z_REFCOUNTED(context->notifier->ptr)) Z_ADDREF(context->notifier->ptr);
        }
-       if (Z_REFCOUNTED(context->options)) Z_ADDREF(context->options);
+       Z_TRY_ADDREF(context->options);
        add_assoc_zval_ex(return_value, "options", sizeof("options")-1, &context->options);
 }
 /* }}} */
index 556af05112aee69294ddab350efcc57f8332a5ba..85b3a6438c8bdc7c497990ab83add7d39d7c7a5f 100644 (file)
@@ -315,7 +315,7 @@ PS_SERIALIZER_DECODE_FUNC(wddx)
                                zend_string_addref(key);
                        }
                        if (php_set_session_var(key, ent, NULL)) {
-                               if (Z_REFCOUNTED_P(ent)) Z_ADDREF_P(ent);
+                               Z_TRY_ADDREF_P(ent);
                        }
                        PS_ADD_VAR(key);
                        zend_string_release(key);
index 1052e16edf315cad681b781adb5b2b98d07ef0b1..6d0970c85fc6007b47d26d2f3554e8bc0dac034d 100644 (file)
@@ -663,15 +663,13 @@ static void php_autoglobal_merge(HashTable *dest, HashTable *src)
                        || (string_key && (dest_entry = zend_hash_find(dest, string_key)) == NULL)
                        || (string_key == NULL && (dest_entry = zend_hash_index_find(dest, num_key)) == NULL)
                        || Z_TYPE_P(dest_entry) != IS_ARRAY) {
-                       if (Z_REFCOUNTED_P(src_entry)) {
-                               Z_ADDREF_P(src_entry);
-                       }
+                       Z_TRY_ADDREF_P(src_entry);
                        if (string_key) {
                                if (!globals_check || ZSTR_LEN(string_key) != sizeof("GLOBALS") - 1
                                                || memcmp(ZSTR_VAL(string_key), "GLOBALS", sizeof("GLOBALS") - 1)) {
                                        zend_hash_update(dest, string_key, src_entry);
-                               } else if (Z_REFCOUNTED_P(src_entry)) {
-                                       Z_DELREF_P(src_entry);
+                               } else {
+                                       Z_TRY_DELREF_P(src_entry);
                                }
                        } else {
                                zend_hash_index_update(dest, num_key, src_entry);