1--TEST--
2Generator::getReturn() error cases
3--FILE--
4<?php
5
6function gen1() {
7    yield 1;
8    yield 2;
9    return 3;
10}
11
12$gen = gen1();
13try {
14    // Generator hasn't reached the "return" yet
15    $gen->getReturn();
16} catch (Exception $e) {
17    echo $e->getMessage(), "\n";
18}
19
20function gen2() {
21    throw new Exception("gen2() throw");
22    yield 1;
23    return 2;
24}
25
26$gen = gen2();
27try {
28    $gen->next();
29} catch (Exception $e) {
30    echo $e->getMessage(), "\n";
31}
32try {
33    // Generator has been aborted as a result of an exception
34    $gen->getReturn();
35} catch (Exception $e) {
36    echo $e->getMessage(), "\n";
37}
38
39function gen3() {
40    throw new Exception("gen3() throw");
41    return 1;
42    yield 2;
43}
44
45$gen = gen3();
46try {
47    // Generator throws during auto-priming of getReturn() call
48    $gen->getReturn();
49} catch (Exception $e) {
50    echo $e->getMessage(), "\n";
51}
52
53function gen4() {
54    yield;
55    return 1;
56}
57
58$gen = gen4();
59try {
60    $gen->throw(new Exception("gen4() throw"));
61} catch (Exception $e) {
62    echo $e->getMessage(), "\n";
63}
64try {
65    // Generator has been aborted as a result of an exception
66    // that was injected using throw()
67    $gen->getReturn();
68} catch (Exception $e) {
69    echo $e->getMessage(), "\n";
70}
71
72?>
73--EXPECT--
74Cannot get return value of a generator that hasn't returned
75gen2() throw
76Cannot get return value of a generator that hasn't returned
77gen3() throw
78gen4() throw
79Cannot get return value of a generator that hasn't returned
80