From: Dmitry Stogov Date: Mon, 16 May 2016 08:51:29 +0000 (+0300) Subject: Revert "Check if generator object is created by GENERATOR_CREATE when throw exception... X-Git-Tag: php-7.1.0alpha1~123 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=414c4c677607c1f36473afe73812c32aa91af340;p=php Revert "Check if generator object is created by GENERATOR_CREATE when throw exceptions from generator function." This reverts commit a9b517c6143a8fab3f704448022e7381b02090ba. --- diff --git a/Zend/tests/generators/generator_with_type_check.phpt b/Zend/tests/generators/generator_with_type_check.phpt deleted file mode 100644 index 871742a888..0000000000 --- a/Zend/tests/generators/generator_with_type_check.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Generator wit type check ---FILE-- - ---EXPECTF-- -Fatal error: Uncaught TypeError: Argument 1 passed to gen() must be of the type array, integer given, called in %sgenerator_with_type_check.php on line 3 and defined in %sgenerator_with_type_check.php:2 -Stack trace: -#0 %sgenerator_with_type_check.php(3): gen(42) -#1 {main} - thrown in %sgenerator_with_type_check.php on line 2 \ No newline at end of file diff --git a/Zend/tests/generators/generator_with_type_check_2.phpt b/Zend/tests/generators/generator_with_type_check_2.phpt deleted file mode 100644 index 352a3760c2..0000000000 --- a/Zend/tests/generators/generator_with_type_check_2.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Generator wit type check ---FILE-- -getMessage()."\n"; -} - -try { - foreach (gen(42) as $val) { - var_dump($val); - } -} catch (TypeError $e) { - echo $e->getMessage()."\n"; -} -?> ---EXPECTF-- -Argument 1 passed to gen() must be of the type array, integer given, called in %sgenerator_with_type_check_2.php on line 4 -Argument 1 passed to gen() must be of the type array, integer given, called in %sgenerator_with_type_check_2.php on line 10 \ No newline at end of file diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 2723503b54..2750d8e60a 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -7159,10 +7159,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY) if (catch_op_num) { ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[catch_op_num]); ZEND_VM_CONTINUE(); - } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0) - /* check if generator object is created by GENERATOR_CREATE */ - && EX(return_value) - && Z_TYPE_P(EX(return_value)) == IS_OBJECT) { + } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(execute_data); zend_generator_close(generator, 1); ZEND_VM_RETURN(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index cbcb7333bd..5b09255f30 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1756,10 +1756,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER( if (catch_op_num) { ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[catch_op_num]); ZEND_VM_CONTINUE(); - } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0) - /* check if generator object is created by GENERATOR_CREATE */ - && EX(return_value) - && Z_TYPE_P(EX(return_value)) == IS_OBJECT) { + } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(execute_data); zend_generator_close(generator, 1); ZEND_VM_RETURN();