mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Merge branch 'PHP-8.2'
* PHP-8.2: Keep consistent EG(current_execute_data) after return from generator (#11380)
This commit is contained in:
@@ -4584,6 +4584,8 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER
|
||||
|
||||
ZEND_OBSERVER_FCALL_END(generator->execute_data, &generator->retval);
|
||||
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
|
||||
/* Close the generator to free up resources */
|
||||
zend_generator_close(generator, 1);
|
||||
|
||||
@@ -7986,6 +7988,7 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca
|
||||
cleanup_live_vars(execute_data, op_num, 0);
|
||||
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
|
||||
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
zend_generator_close(generator, 1);
|
||||
ZEND_VM_RETURN();
|
||||
} else {
|
||||
@@ -8085,6 +8088,7 @@ ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
|
||||
case ZEND_USER_OPCODE_RETURN:
|
||||
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
|
||||
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
zend_generator_close(generator, 1);
|
||||
ZEND_VM_RETURN();
|
||||
} else {
|
||||
|
||||
12
Zend/zend_vm_execute.h
generated
12
Zend/zend_vm_execute.h
generated
@@ -3192,6 +3192,7 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try
|
||||
cleanup_live_vars(execute_data, op_num, 0);
|
||||
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
|
||||
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
zend_generator_close(generator, 1);
|
||||
ZEND_VM_RETURN();
|
||||
} else {
|
||||
@@ -3291,6 +3292,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_
|
||||
case ZEND_USER_OPCODE_RETURN:
|
||||
if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
|
||||
zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
zend_generator_close(generator, 1);
|
||||
ZEND_VM_RETURN();
|
||||
} else {
|
||||
@@ -4621,6 +4623,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HA
|
||||
}
|
||||
}
|
||||
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
|
||||
/* Close the generator to free up resources */
|
||||
zend_generator_close(generator, 1);
|
||||
|
||||
@@ -4666,6 +4670,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER
|
||||
|
||||
zend_observer_fcall_end(generator->execute_data, &generator->retval);
|
||||
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
|
||||
/* Close the generator to free up resources */
|
||||
zend_generator_close(generator, 1);
|
||||
|
||||
@@ -19308,6 +19314,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HAND
|
||||
}
|
||||
}
|
||||
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
|
||||
/* Close the generator to free up resources */
|
||||
zend_generator_close(generator, 1);
|
||||
|
||||
@@ -21974,6 +21982,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HAND
|
||||
}
|
||||
}
|
||||
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
|
||||
/* Close the generator to free up resources */
|
||||
zend_generator_close(generator, 1);
|
||||
|
||||
@@ -39449,6 +39459,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDL
|
||||
}
|
||||
}
|
||||
|
||||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
|
||||
/* Close the generator to free up resources */
|
||||
zend_generator_close(generator, 1);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user