3 changed files with 349 additions and 0 deletions
-
197ext/reflection/php_reflection.c
-
87ext/reflection/tests/ReflectionGenerator_basic.phpt
-
65ext/reflection/tests/ReflectionGenerator_in_Generator.phpt
@ -0,0 +1,87 @@ |
|||
--TEST-- |
|||
ReflectionGenerator basic test |
|||
--FILE-- |
|||
<?php |
|||
|
|||
function foo() { |
|||
yield; |
|||
} |
|||
|
|||
$gens = [ |
|||
(new class() { |
|||
function a() { |
|||
yield from foo(); |
|||
} |
|||
})->a(), |
|||
(function() { |
|||
yield; |
|||
})(), |
|||
foo(), |
|||
]; |
|||
|
|||
foreach ($gens as $gen) { |
|||
var_dump($gen); |
|||
|
|||
$gen->valid(); // start Generator |
|||
$ref = new ReflectionGenerator($gen); |
|||
|
|||
var_dump($ref->getTrace()); |
|||
var_dump($ref->getExecutingLine()); |
|||
var_dump($ref->getExecutingFile()); |
|||
var_dump($ref->getExecutingGenerator()); |
|||
var_dump($ref->getFunction()); |
|||
var_dump($ref->getThis()); |
|||
} |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
object(Generator)#2 (0) { |
|||
} |
|||
array(1) { |
|||
[0]=> |
|||
array(2) { |
|||
["function"]=> |
|||
string(3) "foo" |
|||
["args"]=> |
|||
array(0) { |
|||
} |
|||
} |
|||
} |
|||
int(%d) |
|||
string(%d) "%sReflectionGenerator_basic.%s" |
|||
object(Generator)#6 (0) { |
|||
} |
|||
object(ReflectionMethod)#8 (2) { |
|||
["name"]=> |
|||
string(1) "a" |
|||
["class"]=> |
|||
string(%d) "class@anonymous%s" |
|||
} |
|||
object(class@anonymous)#1 (0) { |
|||
} |
|||
object(Generator)#4 (0) { |
|||
} |
|||
array(0) { |
|||
} |
|||
int(%d) |
|||
string(%d) "%sReflectionGenerator_basic.%s" |
|||
object(Generator)#4 (0) { |
|||
} |
|||
object(ReflectionFunction)#7 (1) { |
|||
["name"]=> |
|||
string(9) "{closure}" |
|||
} |
|||
NULL |
|||
object(Generator)#5 (0) { |
|||
} |
|||
array(0) { |
|||
} |
|||
int(%d) |
|||
string(%d) "%sReflectionGenerator_basic.%s" |
|||
object(Generator)#5 (0) { |
|||
} |
|||
object(ReflectionFunction)#8 (1) { |
|||
["name"]=> |
|||
string(3) "foo" |
|||
} |
|||
NULL |
|||
@ -0,0 +1,65 @@ |
|||
--TEST-- |
|||
ReflectionGenerator while being currently executed |
|||
--FILE-- |
|||
<?php |
|||
|
|||
function call(ReflectionGenerator $ref, $method, $rec = true) { |
|||
if ($rec) { |
|||
call($ref, $method, false); |
|||
return; |
|||
} |
|||
var_dump($ref->$method()); |
|||
} |
|||
|
|||
function doCalls(ReflectionGenerator $ref) { |
|||
call($ref, "getTrace"); |
|||
call($ref, "getExecutingLine"); |
|||
call($ref, "getExecutingFile"); |
|||
call($ref, "getExecutingGenerator"); |
|||
call($ref, "getFunction"); |
|||
call($ref, "getThis"); |
|||
} |
|||
|
|||
($gen = (function() use (&$gen) { |
|||
$ref = new ReflectionGenerator($gen); |
|||
|
|||
doCalls($ref); |
|||
|
|||
yield from (function() use ($ref) { |
|||
doCalls($ref); |
|||
yield; // Generator ! |
|||
})(); |
|||
})())->valid(); |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
array(0) { |
|||
} |
|||
int(%d) |
|||
string(%d) "%sReflectionGenerator_in_Generator.%s" |
|||
object(Generator)#2 (0) { |
|||
} |
|||
object(ReflectionFunction)#4 (1) { |
|||
["name"]=> |
|||
string(9) "{closure}" |
|||
} |
|||
NULL |
|||
array(1) { |
|||
[0]=> |
|||
array(2) { |
|||
["function"]=> |
|||
string(9) "{closure}" |
|||
["args"]=> |
|||
array(0) { |
|||
} |
|||
} |
|||
} |
|||
int(%d) |
|||
string(%d) "%sReflectionGenerator_in_Generator.%s" |
|||
object(Generator)#5 (0) { |
|||
} |
|||
object(ReflectionFunction)#6 (1) { |
|||
["name"]=> |
|||
string(9) "{closure}" |
|||
} |
|||
NULL |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue