mirror of
https://github.com/php/php-src.git
synced 2024-09-29 05:46:06 +00:00
62 lines
939 B
PHP
62 lines
939 B
PHP
--TEST--
|
|
A generator can only be rewinded before or at the first yield
|
|
--FILE--
|
|
<?php
|
|
|
|
function gen() {
|
|
echo "before yield\n";
|
|
yield;
|
|
echo "after yield\n";
|
|
yield;
|
|
}
|
|
|
|
$gen = gen();
|
|
$gen->rewind();
|
|
$gen->rewind();
|
|
$gen->next();
|
|
|
|
try {
|
|
$gen->rewind();
|
|
} catch (Exception $e) {
|
|
echo "\n", $e, "\n\n";
|
|
}
|
|
|
|
function &gen2() {
|
|
$foo = 'bar';
|
|
yield $foo;
|
|
yield $foo;
|
|
}
|
|
|
|
$gen = gen2();
|
|
foreach ($gen as $v) { }
|
|
try {
|
|
foreach ($gen as $v) { }
|
|
} catch (Exception $e) {
|
|
echo $e, "\n\n";
|
|
}
|
|
|
|
function gen3() {
|
|
echo "in generator\n";
|
|
|
|
if (false) yield;
|
|
}
|
|
|
|
$gen = gen3();
|
|
$gen->rewind();
|
|
|
|
?>
|
|
--EXPECTF--
|
|
before yield
|
|
after yield
|
|
|
|
exception 'Exception' with message 'Cannot rewind a generator that was already run' in %s:%d
|
|
Stack trace:
|
|
#0 %s(%d): Generator->rewind()
|
|
#1 {main}
|
|
|
|
exception 'Exception' with message 'Cannot traverse an already closed generator' in %s:%d
|
|
Stack trace:
|
|
#0 {main}
|
|
|
|
in generator
|