From a8a17a72b06e6ea39a70eaf45ad2c3d6668e29ba Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Wed, 1 Nov 2017 10:25:10 +0800 Subject: [PATCH] RC manipulation cleanup --- Zend/zend_builtin_functions.c | 7 +- Zend/zend_compile.c | 2 +- Zend/zend_inheritance.c | 2 +- Zend/zend_vm_def.h | 22 +- Zend/zend_vm_execute.h | 434 +++++++++----------------------- ext/pcntl/pcntl.c | 2 +- ext/pcre/php_pcre.c | 4 +- ext/pdo/pdo_dbh.c | 2 +- ext/reflection/php_reflection.c | 4 +- ext/soap/php_encoding.c | 2 +- ext/spl/spl_heap.c | 6 +- ext/standard/array.c | 69 ++--- ext/standard/basic_functions.c | 6 +- ext/standard/streamsfuncs.c | 4 +- ext/wddx/wddx.c | 2 +- main/php_variables.c | 8 +- 16 files changed, 168 insertions(+), 408 deletions(-) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 04bb9142d2..7190af97a4 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -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); } diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 7a50a010e0..32c5e2e221 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -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); diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 98a3ae6459..a9c468493d 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -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, diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 6449741d12..43e99271c3 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -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); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 88adc1c255..9c405e9054 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -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); diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c index f9ea76de4f..52d107419d 100644 --- a/ext/pcntl/pcntl.c +++ b/ext/pcntl/pcntl.c @@ -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) { diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 24952beb07..ebf84c0c58 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -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) { diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index be5f1e363f..a89276cfce 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -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; diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index ffa5207ed4..6f19fc77fc 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -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); diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 16b15698c5..057a367655 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -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) diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c index 3b179c523f..db8f8d9779 100644 --- a/ext/spl/spl_heap.c +++ b/ext/spl/spl_heap.c @@ -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); diff --git a/ext/standard/array.c b/ext/standard/array.c index 0cd2c5c64a..f40160d3bd 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -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); } } diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 071099c7b9..6b1dbbd2a1 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -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); diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 3cb23b7165..72a429a697 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -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); } /* }}} */ diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c index 556af05112..85b3a6438c 100644 --- a/ext/wddx/wddx.c +++ b/ext/wddx/wddx.c @@ -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); diff --git a/main/php_variables.c b/main/php_variables.c index 1052e16edf..6d0970c85f 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -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); -- 2.40.0