<?php
class CustomException extends Exception {}
function from() {
yield 1;
throw new CustomException();
}
function gen($gen) {
try {
yield from $gen;
} catch (\ClosedGeneratorException $e) {
yield "Caught ClosedGeneratorException";
} catch (\Exception $e) {
yield "Caught Generic Exception";
}
}
$gen = from();
$gens[] = gen($gen);
$gens[] = gen($gen);
foreach ($gens as $g) {
}
foreach ($gens as $i => $g) {
print "Generator: $i\n";
}
PD9waHAKCmNsYXNzIEN1c3RvbUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQoKZnVuY3Rpb24gZnJvbSgpIHsKICAgIHlpZWxkIDE7CiAgICB0aHJvdyBuZXcgQ3VzdG9tRXhjZXB0aW9uKCk7Cn0KCmZ1bmN0aW9uIGdlbigkZ2VuKSB7CiAgICB0cnkgewogICAgICAgIHlpZWxkIGZyb20gJGdlbjsKICAgIH0gY2F0Y2ggKFxDbG9zZWRHZW5lcmF0b3JFeGNlcHRpb24gJGUpIHsKICAgICAgICB5aWVsZCAiQ2F1Z2h0IENsb3NlZEdlbmVyYXRvckV4Y2VwdGlvbiI7CiAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgeWllbGQgIkNhdWdodCBHZW5lcmljIEV4Y2VwdGlvbiI7CiAgICB9Cn0KCiRnZW4gPSBmcm9tKCk7CiRnZW5zW10gPSBnZW4oJGdlbik7CiRnZW5zW10gPSBnZW4oJGdlbik7Cgpmb3JlYWNoICgkZ2VucyBhcyAkZykgewogICAgJGctPmN1cnJlbnQoKTsgLy8gaW5pdC4KfQoKZm9yZWFjaCAoJGdlbnMgYXMgJGkgPT4gJGcpIHsKICAgIHByaW50ICJHZW5lcmF0b3I6ICRpXG4iOwogICAgcHJpbnQgJGctPmN1cnJlbnQoKS4iXG4iOwogICAgJGctPm5leHQoKTsKfQo=