Category
language
Problem
#3074 / #167 landed linear yield and yield from packed arrays in JIT. docs/capabilities-syntax.md and lib/JIT/GeneratorHelper.php still defer:
yield from generator + try/catch in generator JIT
yield from inner() where inner() is a user generator aborts or falls back while yield from [1,2] works.
php-src reference
Repro (today)
<?php
function inner(): Generator {
yield 1;
yield 2;
}
function outer(): Generator {
yield from inner();
yield 3;
}
foreach (outer() as $v) {
echo $v;
}
echo "\n";
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php repro_yield_from_gen.php'
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/jit.php repro_yield_from_gen.php'
| Runtime |
Expected |
| Zend |
123 + newline |
| VM |
same |
| JIT |
same (today: LogicException or VM fallback — document actual) |
Scope (this repo)
| Area |
Files |
| VM |
lib/VM/GeneratorState.php — delegate stack (reference) |
| JIT |
lib/JIT/GeneratorHelper.php — emitYieldFromGeneratorIter, resolveYieldFromGeneratorResumeName |
| Tests |
test/compliance/cases/language/generator_yield_from_generator.phpt |
| Docs |
docs/generators-jit-aot.md — remove deferred note when green |
Done when
Verification
./script/ci-fast.sh --filter generator_yield_from
Links
Category
languageProblem
#3074 / #167 landed linear
yieldandyield frompacked arrays in JIT.docs/capabilities-syntax.mdandlib/JIT/GeneratorHelper.phpstill defer:yield from inner()whereinner()is a user generator aborts or falls back whileyield from [1,2]works.php-src reference
Zend/zend_generators.c—zend_generator_yield_from, delegate to child generatorZend/zend_execute.c—ZEND_YIELD_FROMRepro (today)
123+ newlineScope (this repo)
lib/VM/GeneratorState.php— delegate stack (reference)lib/JIT/GeneratorHelper.php—emitYieldFromGeneratorIter,resolveYieldFromGeneratorResumeNametest/compliance/cases/language/generator_yield_from_generator.phptdocs/generators-jit-aot.md— remove deferred note when greenDone when
bin/jit.phpwithout full-script VM fallbackyield from+ singleyieldordering matches ZendVerification
Links