mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
8094bd1b58
* Make `ReflectionGenerator::getFunction()` legal after generator termination * Expose the generator function name via `Generator::__debugInfo()` * Allow creating `ReflectionGenerator` after termination * Reorder `struct _zend_generator` to avoid a hole * Adjust `ext/reflection/tests/028.phpt` This is legal now. * Fix Generator Closure collection * Add test to verify the Closure dies with the generator * NEWS / UPGRADING
48 lines
678 B
PHP
48 lines
678 B
PHP
--TEST--
|
|
The Closure object of a generator is freed when the generator is freed.
|
|
--FILE--
|
|
<?php
|
|
|
|
$genFactory = function() {
|
|
yield 1;
|
|
yield 2;
|
|
yield 3;
|
|
};
|
|
|
|
$r = WeakReference::create($genFactory);
|
|
$generator = $genFactory();
|
|
unset($genFactory);
|
|
|
|
var_dump($r->get());
|
|
|
|
foreach ($generator as $value) var_dump($value);
|
|
|
|
var_dump($r->get());
|
|
|
|
unset($generator);
|
|
|
|
var_dump($r->get());
|
|
|
|
?>
|
|
--EXPECTF--
|
|
object(Closure)#%d (3) {
|
|
["name"]=>
|
|
string(%d) "{closure:%s:%d}"
|
|
["file"]=>
|
|
string(%d) "%s"
|
|
["line"]=>
|
|
int(%d)
|
|
}
|
|
int(1)
|
|
int(2)
|
|
int(3)
|
|
object(Closure)#%d (3) {
|
|
["name"]=>
|
|
string(%d) "{closure:%s:%d}"
|
|
["file"]=>
|
|
string(%d) "%s"
|
|
["line"]=>
|
|
int(%d)
|
|
}
|
|
NULL
|