php-src/Zend/tests/generators/generator_closure_collection.phpt
Tim Düsterhus 8094bd1b58
Make ReflectionGenerator::getFunction() legal after generator termination (#14167)
* 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
2024-05-21 08:54:51 +02:00

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