@ -2138,7 +2138,7 @@ ZEND_VM_C_LABEL(fast_assign_obj):
if ( EXPECTED ( zobj - > properties ! = NULL ) ) {
if ( UNEXPECTED ( GC_REFCOUNT ( zobj - > properties ) > 1 ) ) {
if ( EXPECTED ( ! ( GC_FLAGS ( zobj - > properties ) & IS_ARRAY_IMMUTABLE ) ) ) {
GC_REFCOUNT ( zobj - > properties ) - - ;
GC_DEL REF ( zobj - > properties ) ;
}
zobj - > properties = zend_array_dup ( zobj - > properties ) ;
}
@ -2161,7 +2161,7 @@ ZEND_VM_C_LABEL(fast_assign_obj):
if ( Z_ISREF_P ( value ) ) {
if ( OP_DATA_TYPE = = IS_VAR ) {
zend_reference * ref = Z_REF_P ( value ) ;
if ( - - GC_REFCOUNT ( ref ) = = 0 ) {
if ( GC_DEL REF ( ref ) = = 0 ) {
ZVAL_COPY_VALUE ( & tmp , Z_REFVAL_P ( value ) ) ;
efree_size ( ref , sizeof ( zend_reference ) ) ;
value = & tmp ;
@ -2412,7 +2412,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
# else
if ( UNEXPECTED ( EG ( exception ) ! = NULL ) & & ( call_info & ZEND_CALL_CTOR ) ) {
# endif
GC_REFCOUNT ( object ) - - ;
GC_DEL REF ( object ) ;
zend_object_store_ctor_failed ( object ) ;
}
OBJ_RELEASE ( object ) ;
@ -2443,7 +2443,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
# else
if ( UNEXPECTED ( EG ( exception ) ! = NULL ) & & ( call_info & ZEND_CALL_CTOR ) ) {
# endif
GC_REFCOUNT ( object ) - - ;
GC_DEL REF ( object ) ;
zend_object_store_ctor_failed ( object ) ;
}
OBJ_RELEASE ( object ) ;
@ -3096,7 +3096,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|T
} else if ( OP1_TYPE & ( IS_VAR | IS_TMP_VAR | IS_CV ) ) {
/* CV may be changed indirectly (e.g. when it's a reference) */
call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS ;
GC_REFCOUNT ( obj ) + + ; /* For $this pointer */
GC_ADD REF ( obj ) ; /* For $this pointer */
}
FREE_OP2 ( ) ;
@ -3389,14 +3389,14 @@ ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM)
if ( func - > common . fn_flags & ZEND_ACC_CLOSURE ) {
/* Delay closure destruction until its invocation */
ZEND_ASSERT ( GC_TYPE ( ( zend_object * ) func - > common . prototype ) = = IS_OBJECT ) ;
GC_REFCOUNT ( ( zend_object * ) func - > common . prototype ) + + ;
GC_ADD REF ( ( zend_object * ) func - > common . prototype ) ;
call_info | = ZEND_CALL_CLOSURE ;
if ( func - > common . fn_flags & ZEND_ACC_FAKE_CLOSURE ) {
call_info | = ZEND_CALL_FAKE_CLOSURE ;
}
} else if ( object ) {
call_info | = ZEND_CALL_RELEASE_THIS ;
GC_REFCOUNT ( object ) + + ; /* For $this pointer */
GC_ADD REF ( object ) ; /* For $this pointer */
}
FREE_OP2 ( ) ;
@ -3756,7 +3756,7 @@ ZEND_VM_C_LABEL(fcall_end):
# else
if ( UNEXPECTED ( EG ( exception ) ! = NULL ) & & ( ZEND_CALL_INFO ( call ) & ZEND_CALL_CTOR ) ) {
# endif
GC_REFCOUNT ( object ) - - ;
GC_DEL REF ( object ) ;
zend_object_store_ctor_failed ( object ) ;
}
OBJ_RELEASE ( object ) ;
@ -3874,7 +3874,7 @@ ZEND_VM_HOT_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
retval_ptr = Z_REFVAL_P ( retval_ptr ) ;
ZVAL_COPY_VALUE ( return_value , retval_ptr ) ;
if ( UNEXPECTED ( - - GC_REFCOUNT ( ref ) = = 0 ) ) {
if ( UNEXPECTED ( GC_DEL REF ( ref ) = = 0 ) ) {
efree_size ( ref , sizeof ( zend_reference ) ) ;
} else if ( Z_OPT_REFCOUNTED_P ( retval_ptr ) ) {
Z_ADDREF_P ( retval_ptr ) ;
@ -4049,7 +4049,7 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY)
retval = Z_REFVAL_P ( retval ) ;
ZVAL_COPY_VALUE ( & generator - > retval , retval ) ;
if ( UNEXPECTED ( - - GC_REFCOUNT ( ref ) = = 0 ) ) {
if ( UNEXPECTED ( GC_DEL REF ( ref ) = = 0 ) ) {
efree_size ( ref , sizeof ( zend_reference ) ) ;
} else if ( Z_OPT_REFCOUNTED_P ( retval ) ) {
Z_ADDREF_P ( retval ) ;
@ -4153,7 +4153,7 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, JMP_ADDR)
zval_ptr_dtor ( ex ) ;
ZVAL_OBJ ( ex , EG ( exception ) ) ;
if ( UNEXPECTED ( EG ( exception ) ! = exception ) ) {
GC_REFCOUNT ( EG ( exception ) ) + + ;
GC_ADD REF ( EG ( exception ) ) ;
HANDLE_EXCEPTION ( ) ;
} else {
EG ( exception ) = NULL ;
@ -4235,7 +4235,7 @@ ZEND_VM_HOT_HANDLER(117, ZEND_SEND_VAR, VAR|CV, NUM)
varptr = Z_REFVAL_P ( varptr ) ;
ZVAL_COPY_VALUE ( arg , varptr ) ;
if ( UNEXPECTED ( - - GC_REFCOUNT ( ref ) = = 0 ) ) {
if ( UNEXPECTED ( GC_DEL REF ( ref ) = = 0 ) ) {
efree_size ( ref , sizeof ( zend_reference ) ) ;
} else if ( Z_OPT_REFCOUNTED_P ( arg ) ) {
Z_ADDREF_P ( arg ) ;
@ -4372,7 +4372,7 @@ ZEND_VM_C_LABEL(send_var_by_ref):
varptr = Z_REFVAL_P ( varptr ) ;
ZVAL_COPY_VALUE ( arg , varptr ) ;
if ( UNEXPECTED ( - - GC_REFCOUNT ( ref ) = = 0 ) ) {
if ( UNEXPECTED ( GC_DEL REF ( ref ) = = 0 ) ) {
efree_size ( ref , sizeof ( zend_reference ) ) ;
} else if ( Z_OPT_REFCOUNTED_P ( arg ) ) {
Z_ADDREF_P ( arg ) ;
@ -5184,7 +5184,7 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSE
zend_refcounted * ref = Z_COUNTED_P ( expr_ptr ) ;
expr_ptr = Z_REFVAL_P ( expr_ptr ) ;
if ( UNEXPECTED ( - - GC_REFCOUNT ( ref ) = = 0 ) ) {
if ( UNEXPECTED ( GC_DEL REF ( ref ) = = 0 ) ) {
ZVAL_COPY_VALUE ( & new_expr , expr_ptr ) ;
expr_ptr = & new_expr ;
efree_size ( ref , sizeof ( zend_reference ) ) ;
@ -5430,7 +5430,7 @@ ZEND_VM_HANDLER(196, ZEND_UNSET_CV, CV, UNUSED)
ZVAL_UNDEF ( var ) ;
SAVE_OPLINE ( ) ;
if ( ! - - GC_REFCOUNT ( garbage ) ) {
if ( ! GC_DEL REF ( garbage ) ) {
zval_dtor_func ( garbage ) ;
} else {
gc_check_possible_root ( garbage ) ;
@ -5688,7 +5688,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
if ( Z_OBJ_P ( array_ptr ) - > properties
& & UNEXPECTED ( GC_REFCOUNT ( Z_OBJ_P ( array_ptr ) - > properties ) > 1 ) ) {
if ( EXPECTED ( ! ( GC_FLAGS ( Z_OBJ_P ( array_ptr ) - > properties ) & IS_ARRAY_IMMUTABLE ) ) ) {
GC_REFCOUNT ( Z_OBJ_P ( array_ptr ) - > properties ) - - ;
GC_DEL REF ( Z_OBJ_P ( array_ptr ) - > properties ) ;
}
Z_OBJ_P ( array_ptr ) - > properties = zend_array_dup ( Z_OBJ_P ( array_ptr ) - > properties ) ;
}
@ -5811,7 +5811,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
if ( Z_OBJ_P ( array_ptr ) - > properties
& & UNEXPECTED ( GC_REFCOUNT ( Z_OBJ_P ( array_ptr ) - > properties ) > 1 ) ) {
if ( EXPECTED ( ! ( GC_FLAGS ( Z_OBJ_P ( array_ptr ) - > properties ) & IS_ARRAY_IMMUTABLE ) ) ) {
GC_REFCOUNT ( Z_OBJ_P ( array_ptr ) - > properties ) - - ;
GC_DEL REF ( Z_OBJ_P ( array_ptr ) - > properties ) ;
}
Z_OBJ_P ( array_ptr ) - > properties = zend_array_dup ( Z_OBJ_P ( array_ptr ) - > properties ) ;
}
@ -6050,7 +6050,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
ZVAL_COPY_VALUE_EX ( res , value , gc , value_type ) ;
if ( EXPECTED ( ( value_type & ( IS_TYPE_REFCOUNTED < < Z_TYPE_FLAGS_SHIFT ) ) ! = 0 ) ) {
GC_REFCOUNT ( gc ) + + ;
GC_ADD REF ( gc ) ;
}
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION ( ) ;
@ -6219,7 +6219,7 @@ ZEND_VM_C_LABEL(fe_fetch_w_exit):
zend_reference * ref ;
ref = Z_REF_P ( value ) ;
GC_REFCOUNT ( ref ) + + ;
GC_ADD REF ( ref ) ;
zval_ptr_dtor ( variable_ptr ) ;
ZVAL_REF ( variable_ptr , ref ) ;
}
@ -6669,7 +6669,7 @@ ZEND_VM_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR)
} else if ( OP1_TYPE = = IS_VAR & & ref ) {
zend_reference * r = Z_REF_P ( ref ) ;
if ( UNEXPECTED ( - - GC_REFCOUNT ( r ) = = 0 ) ) {
if ( UNEXPECTED ( GC_DEL REF ( r ) = = 0 ) ) {
efree_size ( r , sizeof ( zend_reference ) ) ;
} else if ( Z_OPT_REFCOUNTED_P ( result ) ) {
Z_ADDREF_P ( result ) ;
@ -6710,7 +6710,7 @@ ZEND_VM_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
} else if ( OP1_TYPE = = IS_VAR & & ref ) {
zend_reference * r = Z_REF_P ( ref ) ;
if ( UNEXPECTED ( - - GC_REFCOUNT ( r ) = = 0 ) ) {
if ( UNEXPECTED ( GC_DEL REF ( r ) = = 0 ) ) {
efree_size ( r , sizeof ( zend_reference ) ) ;
} else if ( Z_OPT_REFCOUNTED_P ( result ) ) {
Z_ADDREF_P ( result ) ;
@ -7607,21 +7607,21 @@ ZEND_VM_C_LABEL(check_indirect):
if ( UNEXPECTED ( ! Z_ISREF_P ( value ) ) ) {
ref = ( zend_reference * ) emalloc ( sizeof ( zend_reference ) ) ;
GC_REFCOUNT ( ref ) = 2 ;
GC_SET_ REFCOUNT ( ref , 2 ) ;
GC_TYPE_INFO ( ref ) = IS_REFERENCE ;
ZVAL_COPY_VALUE ( & ref - > val , value ) ;
Z_REF_P ( value ) = ref ;
Z_TYPE_INFO_P ( value ) = IS_REFERENCE_EX ;
} else {
ref = Z_REF_P ( value ) ;
GC_REFCOUNT ( ref ) + + ;
GC_ADD REF ( ref ) ;
}
variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF ( BP_VAR_W ) ;
if ( UNEXPECTED ( Z_REFCOUNTED_P ( variable_ptr ) ) ) {
zend_refcounted * ref = Z_COUNTED_P ( variable_ptr ) ;
uint32_t refcnt = - - GC_REFCOUNT ( ref ) ;
uint32_t refcnt = GC_DEL REF ( ref ) ;
if ( EXPECTED ( variable_ptr ! = value ) ) {
if ( refcnt = = 0 ) {
@ -7971,7 +7971,7 @@ ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, CONST, REF)
ZEND_ASSERT ( ht ! = NULL ) ;
if ( GC_REFCOUNT ( ht ) > 1 ) {
if ( ! ( GC_FLAGS ( ht ) & IS_ARRAY_IMMUTABLE ) ) {
GC_REFCOUNT ( ht ) - - ;
GC_DEL REF ( ht ) ;
}
EX ( func ) - > op_array . static_variables = ht = zend_array_dup ( ht ) ;
}
@ -7989,7 +7989,7 @@ ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, CONST, REF)
}
if ( UNEXPECTED ( ! Z_ISREF_P ( value ) ) ) {
zend_reference * ref = ( zend_reference * ) emalloc ( sizeof ( zend_reference ) ) ;
GC_REFCOUNT ( ref ) = 2 ;
GC_SET_ REFCOUNT ( ref , 2 ) ;
GC_TYPE_INFO ( ref ) = IS_REFERENCE ;
ZVAL_COPY_VALUE ( & ref - > val , value ) ;
Z_REF_P ( value ) = ref ;
@ -8065,7 +8065,7 @@ ZEND_VM_HANDLER(51, ZEND_MAKE_REF, VAR|CV, UNUSED)
if ( EXPECTED ( ! Z_ISREF_P ( op1 ) ) ) {
ZVAL_MAKE_REF ( op1 ) ;
}
GC_REFCOUNT ( Z_REF_P ( op1 ) ) + + ;
GC_ADD REF ( Z_REF_P ( op1 ) ) ;
ZVAL_REF ( EX_VAR ( opline - > result . var ) , Z_REF_P ( op1 ) ) ;
} else {
ZVAL_COPY_VALUE ( EX_VAR ( opline - > result . var ) , op1 ) ;