mirror of
https://github.com/danog/PHP-Parser.git
synced 2024-12-04 18:28:25 +01:00
a0c216bf4b
Adding this as an option to avoid breaking people's tests. Some of the test results show pretty clearly that we are incorrectly assigning the same comment multiple times for nested nodes (mentioned in #36).
280 lines
7.6 KiB
Plaintext
280 lines
7.6 KiB
Plaintext
Generators (yield expression)
|
|
-----
|
|
<?php
|
|
|
|
function gen() {
|
|
// statements
|
|
yield;
|
|
yield $value;
|
|
yield $key => $value;
|
|
|
|
// expressions
|
|
$data = yield;
|
|
$data = (yield $value);
|
|
$data = (yield $key => $value);
|
|
|
|
// yield in language constructs with their own parentheses
|
|
if (yield $foo); elseif (yield $foo);
|
|
if (yield $foo): elseif (yield $foo): endif;
|
|
while (yield $foo);
|
|
do {} while (yield $foo);
|
|
switch (yield $foo) {}
|
|
die(yield $foo);
|
|
|
|
// yield in function calls
|
|
func(yield $foo);
|
|
$foo->func(yield $foo);
|
|
new Foo(yield $foo);
|
|
|
|
yield from $foo;
|
|
yield from $foo and yield from $bar;
|
|
yield from $foo + $bar;
|
|
}
|
|
-----
|
|
array(
|
|
0: Stmt_Function(
|
|
byRef: false
|
|
name: gen
|
|
params: array(
|
|
)
|
|
returnType: null
|
|
stmts: array(
|
|
0: Expr_Yield(
|
|
key: null
|
|
value: null
|
|
comments: array(
|
|
0: // statements
|
|
)
|
|
)
|
|
1: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: value
|
|
)
|
|
)
|
|
2: Expr_Yield(
|
|
key: Expr_Variable(
|
|
name: key
|
|
)
|
|
value: Expr_Variable(
|
|
name: value
|
|
)
|
|
)
|
|
3: Expr_Assign(
|
|
var: Expr_Variable(
|
|
name: data
|
|
comments: array(
|
|
0: // expressions
|
|
)
|
|
)
|
|
expr: Expr_Yield(
|
|
key: null
|
|
value: null
|
|
)
|
|
comments: array(
|
|
0: // expressions
|
|
)
|
|
)
|
|
4: Expr_Assign(
|
|
var: Expr_Variable(
|
|
name: data
|
|
)
|
|
expr: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: value
|
|
)
|
|
)
|
|
)
|
|
5: Expr_Assign(
|
|
var: Expr_Variable(
|
|
name: data
|
|
)
|
|
expr: Expr_Yield(
|
|
key: Expr_Variable(
|
|
name: key
|
|
)
|
|
value: Expr_Variable(
|
|
name: value
|
|
)
|
|
)
|
|
)
|
|
6: Stmt_If(
|
|
cond: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
stmts: array(
|
|
)
|
|
elseifs: array(
|
|
0: Stmt_ElseIf(
|
|
cond: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
stmts: array(
|
|
)
|
|
)
|
|
)
|
|
else: null
|
|
comments: array(
|
|
0: // yield in language constructs with their own parentheses
|
|
)
|
|
)
|
|
7: Stmt_If(
|
|
cond: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
stmts: array(
|
|
)
|
|
elseifs: array(
|
|
0: Stmt_ElseIf(
|
|
cond: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
stmts: array(
|
|
)
|
|
)
|
|
)
|
|
else: null
|
|
)
|
|
8: Stmt_While(
|
|
cond: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
stmts: array(
|
|
)
|
|
)
|
|
9: Stmt_Do(
|
|
cond: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
stmts: array(
|
|
)
|
|
)
|
|
10: Stmt_Switch(
|
|
cond: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
cases: array(
|
|
)
|
|
)
|
|
11: Expr_Exit(
|
|
expr: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
)
|
|
12: Expr_FuncCall(
|
|
name: Name(
|
|
parts: array(
|
|
0: func
|
|
)
|
|
comments: array(
|
|
0: // yield in function calls
|
|
)
|
|
)
|
|
args: array(
|
|
0: Arg(
|
|
value: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
byRef: false
|
|
unpack: false
|
|
)
|
|
)
|
|
comments: array(
|
|
0: // yield in function calls
|
|
)
|
|
)
|
|
13: Expr_MethodCall(
|
|
var: Expr_Variable(
|
|
name: foo
|
|
)
|
|
name: func
|
|
args: array(
|
|
0: Arg(
|
|
value: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
byRef: false
|
|
unpack: false
|
|
)
|
|
)
|
|
)
|
|
14: Expr_New(
|
|
class: Name(
|
|
parts: array(
|
|
0: Foo
|
|
)
|
|
)
|
|
args: array(
|
|
0: Arg(
|
|
value: Expr_Yield(
|
|
key: null
|
|
value: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
byRef: false
|
|
unpack: false
|
|
)
|
|
)
|
|
)
|
|
15: Expr_YieldFrom(
|
|
expr: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
16: Expr_BinaryOp_LogicalAnd(
|
|
left: Expr_YieldFrom(
|
|
expr: Expr_Variable(
|
|
name: foo
|
|
)
|
|
)
|
|
right: Expr_YieldFrom(
|
|
expr: Expr_Variable(
|
|
name: bar
|
|
)
|
|
)
|
|
)
|
|
17: Expr_YieldFrom(
|
|
expr: Expr_BinaryOp_Plus(
|
|
left: Expr_Variable(
|
|
name: foo
|
|
)
|
|
right: Expr_Variable(
|
|
name: bar
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
) |