diff options
| author | Bob Weinand <bobwei9@hotmail.com> | 2016-07-23 16:40:02 +0200 |
|---|---|---|
| committer | Bob Weinand <bobwei9@hotmail.com> | 2016-07-23 16:40:02 +0200 |
| commit | 35764e35790311d402702140ea99f61b168d3fc9 (patch) | |
| tree | d35e3c75c7a3410b117f652c29628c7d6d259e4c | |
| parent | 696d6e7c907f6e6ba4efb3f4db951eb9eb5b60de (diff) | |
| parent | 6046acf93e4f9de43efb12d53dd58738959fb20e (diff) | |
| download | php-git-35764e35790311d402702140ea99f61b168d3fc9.tar.gz | |
Merge remote-tracking branch 'origin/PHP-7.0' into PHP-7.1
| -rw-r--r-- | Zend/tests/generators/mutli_yield_from_with_exception.phpt | 7 | ||||
| -rw-r--r-- | Zend/zend_generators.c | 10 |
2 files changed, 13 insertions, 4 deletions
diff --git a/Zend/tests/generators/mutli_yield_from_with_exception.phpt b/Zend/tests/generators/mutli_yield_from_with_exception.phpt index 2dc71815f0..4be2449a46 100644 --- a/Zend/tests/generators/mutli_yield_from_with_exception.phpt +++ b/Zend/tests/generators/mutli_yield_from_with_exception.phpt @@ -40,11 +40,10 @@ Stack trace: #2 %s(%d): Generator->next() #3 {main} Generator 1 - -Fatal error: Uncaught ClosedGeneratorException: Generator yielded from aborted, no return value available in %s:%d +Caught exception! +ClosedGeneratorException: Generator yielded from aborted, no return value available in %s:%d Stack trace: #0 [internal function]: gen(Object(Generator)) #1 %s(%d): Generator->current() #2 {main} - thrown in %s on line %d - +NULL diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 8460b9da14..33a03ce7cc 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -635,6 +635,16 @@ ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator zend_throw_exception(zend_ce_ClosedGeneratorException, "Generator yielded from aborted, no return value available", 0); EG(current_execute_data) = original_execute_data; + + if (!((old_root ? old_root : generator)->flags & ZEND_GENERATOR_CURRENTLY_RUNNING)) { + leaf->node.ptr.root = root; + root->node.parent = NULL; + if (old_root) { + OBJ_RELEASE(&old_root->std); + } + zend_generator_resume(leaf); + return leaf->node.ptr.root; /* this may be updated during zend_generator_resume! */ + } } else { zval_ptr_dtor(&root->value); ZVAL_COPY(&root->value, &root->node.parent->value); |
