Exceptions thrown during yield operation fall through the generator instead of being handled within
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 40.4k
- Forks
- 8.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 96
Description
Description
The following code:
<?php
set_error_handler(function() { throw new \Error(); });
function &gen() {
try {
yield 1;
} catch (Error $e) {
print "Caught";
}
}
foreach (gen() as $y);
Resulted in Uncaught Error
But I expected this output instead:
Caught
return_by_ref has the same problem, it seems to me, however in generators there's the additional case of exceptions in destructors of previous key and values.
I wouldn't change the longstanding behaviour in current PHP versions, but should be fixed for PHP 8.2 possibly, for academical correctness at least.
PHP Version
master
Operating System
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the provided generator example on PHP master and compare the observed error flow with the expected catch behavior. Then inspect generator yield handling, return-by-reference behavior, and the noted destructor cases. Done means the intended exception handling is defined and covered for the reported scenarios without changing established behavior unintentionally.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100