1--TEST-- 2Exceptions in linear yield from setup 3--FILE-- 4<?php 5function from($off) { 6 try { 7 yield $off + 1; 8 } catch (Exception $e) { print "catch in from()\n$e\n"; } 9 yield $off + 2; 10} 11 12function gen() { 13 try { 14 yield "gen" => 0; 15 } catch (Exception $e) { print "catch in gen()\n$e\n"; } 16 try { 17 yield from from(0); 18 } catch (Exception $e) { print "catch in gen()\n$e\n"; } 19 yield from from(2); 20} 21 22$i = 0; 23try { 24 for ($gen = gen(); $gen->valid(); $gen->throw(new Exception((string) $i++))) { 25 var_dump($gen->current()); 26 } 27} catch (Exception $e) { print "catch in {main}\n$e\n"; } 28 29var_dump($gen->valid()); 30 31?> 32--EXPECTF-- 33int(0) 34catch in gen() 35Exception: 0 in %s:%d 36Stack trace: 37#0 {main} 38int(1) 39catch in from() 40Exception: 1 in %s:%d 41Stack trace: 42#0 {main} 43int(2) 44catch in gen() 45Exception: 2 in %s:%d 46Stack trace: 47#0 {main} 48int(3) 49catch in from() 50Exception: 3 in %s:%d 51Stack trace: 52#0 {main} 53int(4) 54catch in {main} 55Exception: 4 in %s:%d 56Stack trace: 57#0 {main} 58bool(false) 59