File tree Expand file tree Collapse file tree 3 files changed +36
-3
lines changed Expand file tree Collapse file tree 3 files changed +36
-3
lines changed Original file line number Diff line number Diff line change @@ -21,6 +21,8 @@ PHP NEWS
21
21
exit value in CLI). (Nikita)
22
22
. Fixed bug #62294 (register_shutdown_function() does not correctly handle
23
23
exit code). (Nikita)
24
+ . Fixed bug #79927 (Generator doesn't throw exception after multiple yield
25
+ from iterable). (Nikita)
24
26
25
27
- Date:
26
28
. Fixed bug #60302 (DateTime::createFromFormat should new static(), not new
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #79927: Generator doesn't throw exception after multiple yield from iterable
3
+ --FILE--
4
+ <?php
5
+
6
+ $ generator = (function () {
7
+ yield from [1 , 2 , 3 ];
8
+ })();
9
+
10
+ $ generator ->next ();
11
+ $ generator ->next ();
12
+ try {
13
+ $ generator ->rewind ();
14
+ } catch (Exception $ e ) {
15
+ echo $ e ->getMessage (), "\n" ;
16
+ }
17
+ echo $ generator ->current (), "\n" ;
18
+
19
+ $ generator2 = (function () {
20
+ yield from [];
21
+ yield 4 ;
22
+ })();
23
+ $ generator2 ->current ();
24
+ $ generator2 ->rewind ();
25
+ echo $ generator2 ->current (), "\n" ;
26
+
27
+ ?>
28
+ --EXPECT--
29
+ Cannot rewind a generator that was already run
30
+ 3
31
+ 4
Original file line number Diff line number Diff line change @@ -731,6 +731,9 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */
731
731
return ;
732
732
}
733
733
734
+ /* Drop the AT_FIRST_YIELD flag */
735
+ orig_generator -> flags &= ~ZEND_GENERATOR_AT_FIRST_YIELD ;
736
+
734
737
if (UNEXPECTED (!Z_ISUNDEF (generator -> values ))) {
735
738
if (EXPECTED (zend_generator_get_next_delegated_value (generator ) == SUCCESS )) {
736
739
orig_generator -> flags &= ~ZEND_GENERATOR_DO_INIT ;
@@ -740,9 +743,6 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */
740
743
* after the "yield from" expression. */
741
744
}
742
745
743
- /* Drop the AT_FIRST_YIELD flag */
744
- orig_generator -> flags &= ~ZEND_GENERATOR_AT_FIRST_YIELD ;
745
-
746
746
{
747
747
/* Backup executor globals */
748
748
zend_execute_data * original_execute_data = EG (current_execute_data );
You can’t perform that action at this time.
0 commit comments