1<?php 2 3namespace Amp; 4 5class InvalidYieldError extends \Error 6{ 7 /** 8 * @param \Generator $generator 9 * @param string $prefix 10 * @param \Throwable|null $previous 11 */ 12 public function __construct(\Generator $generator, string $prefix, \Throwable $previous = null) 13 { 14 $yielded = $generator->current(); 15 $prefix .= \sprintf( 16 "; %s yielded at key %s", 17 \is_object($yielded) ? \get_class($yielded) : \gettype($yielded), 18 \var_export($generator->key(), true) 19 ); 20 21 if (!$generator->valid()) { 22 parent::__construct($prefix, 0, $previous); 23 return; 24 } 25 26 $reflGen = new \ReflectionGenerator($generator); 27 $exeGen = $reflGen->getExecutingGenerator(); 28 if ($isSubgenerator = ($exeGen !== $generator)) { 29 $reflGen = new \ReflectionGenerator($exeGen); 30 } 31 32 parent::__construct(\sprintf( 33 "%s on line %s in %s", 34 $prefix, 35 $reflGen->getExecutingLine(), 36 $reflGen->getExecutingFile() 37 ), 0, $previous); 38 } 39} 40