@@ -457,7 +457,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
457
457
}
458
458
OBJ_RELEASE(object);
459
459
} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
460
- OBJ_RELEASE((zend_object*)execute_data-> func->op_array.prototype );
460
+ OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX( func)) );
461
461
}
462
462
EG(vm_stack_top) = (zval*)execute_data;
463
463
execute_data = EX(prev_execute_data);
@@ -488,7 +488,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
488
488
}
489
489
OBJ_RELEASE(object);
490
490
} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
491
- OBJ_RELEASE((zend_object*)execute_data-> func->op_array.prototype );
491
+ OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX( func)) );
492
492
}
493
493
494
494
zend_vm_stack_free_extra_args_ex(call_info, execute_data);
@@ -530,7 +530,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
530
530
}
531
531
EG(current_execute_data) = EX(prev_execute_data);
532
532
if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
533
- OBJ_RELEASE((zend_object*) EX(func)->op_array.prototype );
533
+ OBJ_RELEASE(ZEND_CLOSURE_OBJECT( EX(func)) );
534
534
}
535
535
ZEND_VM_RETURN();
536
536
} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
@@ -1361,7 +1361,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_O
1361
1361
}
1362
1362
zend_internal_type_error(EX_USES_STRICT_TYPES(), "call_user_func_array() expects parameter 2 to be array, %s given", zend_get_type_by_const(Z_TYPE_P(args)));
1363
1363
if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) {
1364
- OBJ_RELEASE((zend_object*) EX(call)->func->common.prototype );
1364
+ OBJ_RELEASE(ZEND_CLOSURE_OBJECT( EX(call)->func) );
1365
1365
}
1366
1366
if (Z_TYPE(EX(call)->This) == IS_OBJECT) {
1367
1367
OBJ_RELEASE(Z_OBJ(EX(call)->This));
@@ -5585,8 +5585,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS
5585
5585
}
5586
5586
if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
5587
5587
/* Delay closure destruction until its invocation */
5588
- ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
5589
- GC_ADDREF((zend_object*)func->common.prototype);
5588
+ GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
5590
5589
call_info |= ZEND_CALL_CLOSURE;
5591
5590
if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
5592
5591
call_info |= ZEND_CALL_FAKE_CLOSURE;
@@ -5598,7 +5597,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS
5598
5597
5599
5598
if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
5600
5599
if (call_info & ZEND_CALL_CLOSURE) {
5601
- zend_object_release((zend_object*) func->common.prototype );
5600
+ zend_object_release(ZEND_CLOSURE_OBJECT( func) );
5602
5601
}
5603
5602
if (call_info & ZEND_CALL_RELEASE_THIS) {
5604
5603
zend_object_release(object);
@@ -7796,8 +7795,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV
7796
7795
}
7797
7796
if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
7798
7797
/* Delay closure destruction until its invocation */
7799
- ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
7800
- GC_ADDREF((zend_object*)func->common.prototype);
7798
+ GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
7801
7799
call_info |= ZEND_CALL_CLOSURE;
7802
7800
if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
7803
7801
call_info |= ZEND_CALL_FAKE_CLOSURE;
@@ -7810,7 +7808,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV
7810
7808
zval_ptr_dtor_nogc(free_op2);
7811
7809
if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
7812
7810
if (call_info & ZEND_CALL_CLOSURE) {
7813
- zend_object_release((zend_object*) func->common.prototype );
7811
+ zend_object_release(ZEND_CLOSURE_OBJECT( func) );
7814
7812
}
7815
7813
if (call_info & ZEND_CALL_RELEASE_THIS) {
7816
7814
zend_object_release(object);
@@ -10933,8 +10931,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H
10933
10931
}
10934
10932
if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
10935
10933
/* Delay closure destruction until its invocation */
10936
- ZEND_ASSERT(GC_TYPE((zend_object*)func->common.prototype) == IS_OBJECT);
10937
- GC_ADDREF((zend_object*)func->common.prototype);
10934
+ GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
10938
10935
call_info |= ZEND_CALL_CLOSURE;
10939
10936
if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
10940
10937
call_info |= ZEND_CALL_FAKE_CLOSURE;
@@ -10946,7 +10943,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H
10946
10943
10947
10944
if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
10948
10945
if (call_info & ZEND_CALL_CLOSURE) {
10949
- zend_object_release((zend_object*) func->common.prototype );
10946
+ zend_object_release(ZEND_CLOSURE_OBJECT( func) );
10950
10947
}
10951
10948
if (call_info & ZEND_CALL_RELEASE_THIS) {
10952
10949
zend_object_release(object);
0 commit comments