@@ -457,7 +457,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
457457 }
458458 OBJ_RELEASE(object);
459459 } 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)) );
461461 }
462462 EG(vm_stack_top) = (zval*)execute_data;
463463 execute_data = EX(prev_execute_data);
@@ -488,7 +488,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
488488 }
489489 OBJ_RELEASE(object);
490490 } 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)) );
492492 }
493493
494494 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_
530530 }
531531 EG(current_execute_data) = EX(prev_execute_data);
532532 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)) );
534534 }
535535 ZEND_VM_RETURN();
536536 } 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
13611361 }
13621362 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)));
13631363 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) );
13651365 }
13661366 if (Z_TYPE(EX(call)->This) == IS_OBJECT) {
13671367 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
55855585 }
55865586 if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
55875587 /* 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));
55905589 call_info |= ZEND_CALL_CLOSURE;
55915590 if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
55925591 call_info |= ZEND_CALL_FAKE_CLOSURE;
@@ -5598,7 +5597,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONS
55985597
55995598 if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
56005599 if (call_info & ZEND_CALL_CLOSURE) {
5601- zend_object_release((zend_object*) func->common.prototype );
5600+ zend_object_release(ZEND_CLOSURE_OBJECT( func) );
56025601 }
56035602 if (call_info & ZEND_CALL_RELEASE_THIS) {
56045603 zend_object_release(object);
@@ -7796,8 +7795,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV
77967795 }
77977796 if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
77987797 /* 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));
78017799 call_info |= ZEND_CALL_CLOSURE;
78027800 if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
78037801 call_info |= ZEND_CALL_FAKE_CLOSURE;
@@ -7810,7 +7808,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPV
78107808 zval_ptr_dtor_nogc(free_op2);
78117809 if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
78127810 if (call_info & ZEND_CALL_CLOSURE) {
7813- zend_object_release((zend_object*) func->common.prototype );
7811+ zend_object_release(ZEND_CLOSURE_OBJECT( func) );
78147812 }
78157813 if (call_info & ZEND_CALL_RELEASE_THIS) {
78167814 zend_object_release(object);
@@ -10933,8 +10931,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_H
1093310931 }
1093410932 if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
1093510933 /* 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));
1093810935 call_info |= ZEND_CALL_CLOSURE;
1093910936 if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
1094010937 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
1094610943
1094710944 if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
1094810945 if (call_info & ZEND_CALL_CLOSURE) {
10949- zend_object_release((zend_object*) func->common.prototype );
10946+ zend_object_release(ZEND_CLOSURE_OBJECT( func) );
1095010947 }
1095110948 if (call_info & ZEND_CALL_RELEASE_THIS) {
1095210949 zend_object_release(object);
0 commit comments