1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
--TEST--
Verify yield from on generators being properly cycle collected
--INI--
zend.enable_gc = 1
--FILE--
<?php
function root() {
global $gens; // create cyclic reference to root
try {
yield 1;
} finally {
var_dump($gens);
}
}
function gen($x) {
global $gens;
yield from $gens[] = $x ? gen(--$x) : root();
}
$gen = $gens[] = gen(2);
var_dump($gen->current());
unset($gen, $gens);
print "collect\n";
gc_collect_cycles();
print "end\n";
?>
--EXPECTF--
int(1)
collect
array(4) {
[0]=>
object(Generator)#%d (1) {
["function"]=>
string(3) "gen"
}
[1]=>
object(Generator)#%d (1) {
["function"]=>
string(3) "gen"
}
[2]=>
object(Generator)#%d (1) {
["function"]=>
string(3) "gen"
}
[3]=>
object(Generator)#%d (1) {
["function"]=>
string(4) "root"
}
}
end
|