1--TEST--
2ReflectionGenerator while being currently executed
3--FILE--
4<?php
5
6function call(ReflectionGenerator $ref, $method, $rec = true) {
7    if ($rec) {
8        call($ref, $method, false);
9        return;
10    }
11    var_dump($ref->$method());
12}
13
14function doCalls(ReflectionGenerator $ref) {
15    call($ref, "getTrace");
16    call($ref, "getExecutingLine");
17    call($ref, "getExecutingFile");
18    call($ref, "getExecutingGenerator");
19    call($ref, "getFunction");
20    call($ref, "getThis");
21}
22
23($gen = (function() use (&$gen) {
24    $ref = new ReflectionGenerator($gen);
25
26    doCalls($ref);
27
28    yield from (function() use ($ref) {
29        doCalls($ref);
30        yield; // Generator !
31    })();
32})())->next();
33
34?>
35--EXPECTF--
36array(1) {
37  [0]=>
38  array(2) {
39    ["function"]=>
40    string(%d) "{closure:%s:%d}"
41    ["args"]=>
42    array(0) {
43    }
44  }
45}
46int(%d)
47string(%d) "%sReflectionGenerator_in_Generator.%s"
48object(Generator)#%d (1) {
49  ["function"]=>
50  string(%d) "{closure:%s:%d}"
51}
52object(ReflectionFunction)#4 (1) {
53  ["name"]=>
54  string(%d) "{closure:%s:%d}"
55}
56NULL
57array(2) {
58  [0]=>
59  array(4) {
60    ["file"]=>
61    string(%d) "%s"
62    ["line"]=>
63    int(%d)
64    ["function"]=>
65    string(%d) "{closure:%s:%d}"
66    ["args"]=>
67    array(0) {
68    }
69  }
70  [1]=>
71  array(2) {
72    ["function"]=>
73    string(%d) "{closure:%s:%d}"
74    ["args"]=>
75    array(0) {
76    }
77  }
78}
79int(%d)
80string(%d) "%sReflectionGenerator_in_Generator.%s"
81object(Generator)#%d (1) {
82  ["function"]=>
83  string(%d) "{closure:%s:%d}"
84}
85object(ReflectionFunction)#6 (1) {
86  ["name"]=>
87  string(%d) "{closure:%s:%d}"
88}
89NULL
90