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