Fix GH-23301: nested "yield from" repeats a value after "yield from []" - #23302
Open
lazerg wants to merge 1 commit into
Open
Fix GH-23301: nested "yield from" repeats a value after "yield from []"#23302lazerg wants to merge 1 commit into
lazerg wants to merge 1 commit into
Conversation
lazerg
force-pushed
the
fix/issue-23301-yield-from-empty-array
branch
from
August 15, 2026 21:40
c2f8b57 to
622159a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GH-15375's fix made the
DO_INITre-advance guard inzend_generator_resume()read the flag from the delegating generator rather than fromorig_generator. That flag is set byzend_generator_yield_from()and only ever cleared onorig_generator, so on a middle generator it stays set for the rest of its life.When such a middle generator then delegates to a non-generator iterable (
yield from []), it still sits on aZEND_YIELD_FROMopline, so it is picked as the delegator even though no new generator link was established, and its staleDO_INITsuppresses the resume. The value it yielded last is presented a second time. Twig hits this on every template, sincedoDisplay()always ends withyield from [];.Only treat the generator as the delegator when it actually delegated to another generator (
node.parentis set); otherwise keeporig_generatoras before. The GH-15375 tests still pass.Fixes GH-23301