File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 55- Core:
66 . Fixed bug GH-15375 (Nested "yield from" skips items after a valid() or
77 next() call on the inner generator). (iliaal)
8+ . Fixed bug GH-23301 (Nested "yield from" yields a value twice when the
9+ middle generator ends with "yield from []"). (Lazizbek Ergashev)
810
911- Opcache:
1012 . Fixed opcache.protect_memory race under ZTS. (realFlowControl)
Original file line number Diff line number Diff line change 1+ --TEST--
2+ GH-23301 (Nested "yield from" yields a value twice when the middle generator ends with "yield from []")
3+ --FILE--
4+ <?php
5+
6+ function inner () {
7+ yield "B " ;
8+ }
9+
10+ function middle () {
11+ yield "A " ;
12+ yield from inner ();
13+ yield "C " ;
14+ yield from [];
15+ }
16+
17+ function outer () {
18+ yield from middle ();
19+ }
20+
21+ foreach (outer () as $ value ) {
22+ echo $ value , "\n" ;
23+ }
24+
25+ ?>
26+ --EXPECT--
27+ A
28+ B
29+ C
Original file line number Diff line number Diff line change @@ -890,7 +890,7 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */
890890
891891 /* yield from was used, try another resume. */
892892 if (UNEXPECTED (generator -> execute_data && generator -> execute_data -> opline -> opcode == ZEND_YIELD_FROM )) {
893- delegator = generator ;
893+ delegator = generator -> node . parent ? generator : orig_generator ;
894894 generator = zend_generator_get_current (orig_generator );
895895 goto try_again ;
896896 }
You can’t perform that action at this time.
0 commit comments