Add support for list() in foreach (PHP 5.5)

Example: foreach ($coords as list($x, $y)) { ... }

This change slightly breaks backwards compatability, as it changes the
node structure for the previously existing `list(...) = $foo` assignments.
Those no longer have a dedicated `AssignList` node; instead they are
parsed as a normal `Assign` node with a `List` as `var`. Similarly the
use in `foreach` will generate a `List` for `valueVar`.
This commit is contained in:
nikic
2012-09-07 17:22:43 +02:00
parent 8d218110db
commit f8f1e17e41
7 changed files with 1238 additions and 1163 deletions

View File

@@ -151,43 +151,49 @@ array(
)
)
)
14: Expr_AssignList(
vars: array(
0: Expr_Variable(
name: a
14: Expr_Assign(
var: Expr_List(
vars: array(
0: Expr_Variable(
name: a
)
)
)
expr: Expr_Variable(
name: b
)
)
15: Expr_AssignList(
vars: array(
0: Expr_Variable(
name: a
)
1: null
2: Expr_Variable(
name: b
15: Expr_Assign(
var: Expr_List(
vars: array(
0: Expr_Variable(
name: a
)
1: null
2: Expr_Variable(
name: b
)
)
)
expr: Expr_Variable(
name: c
)
)
16: Expr_AssignList(
vars: array(
0: Expr_Variable(
name: a
)
1: array(
0: null
1: Expr_Variable(
name: c
16: Expr_Assign(
var: Expr_List(
vars: array(
0: Expr_Variable(
name: a
)
1: array(
0: null
1: Expr_Variable(
name: c
)
)
2: Expr_Variable(
name: d
)
)
2: Expr_Variable(
name: d
)
)
expr: Expr_Variable(

View File

@@ -7,6 +7,8 @@ foreach ($a as $b) {}
foreach ($a as &$b) {}
foreach ($a as $b => $c) {}
foreach ($a as $b => &$c) {}
foreach ($a as list($a, $b)) {}
foreach ($a as $a => list($b, , $c)) {}
// foreach on expression
foreach (array() as $b) {}
@@ -69,6 +71,47 @@ array(
)
)
4: Stmt_Foreach(
keyVar: null
byRef: false
stmts: array(
)
expr: Expr_Variable(
name: a
)
valueVar: Expr_List(
vars: array(
0: Expr_Variable(
name: a
)
1: Expr_Variable(
name: b
)
)
)
)
5: Stmt_Foreach(
keyVar: Expr_Variable(
name: a
)
byRef: false
stmts: array(
)
expr: Expr_Variable(
name: a
)
valueVar: Expr_List(
vars: array(
0: Expr_Variable(
name: b
)
1: null
2: Expr_Variable(
name: c
)
)
)
)
6: Stmt_Foreach(
keyVar: null
byRef: false
stmts: array(
@@ -81,7 +124,7 @@ array(
name: b
)
)
5: Stmt_Foreach(
7: Stmt_Foreach(
keyVar: null
byRef: false
stmts: array(