Foreach tests
This commit is contained in:
parent
92b600775f
commit
8f40777c96
125
node/stmt/t_foreach_test.go
Normal file
125
node/stmt/t_foreach_test.go
Normal file
@ -0,0 +1,125 @@
|
||||
package stmt_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
|
||||
"github.com/z7zmey/php-parser/node/expr"
|
||||
|
||||
"github.com/z7zmey/php-parser/node"
|
||||
"github.com/z7zmey/php-parser/node/stmt"
|
||||
"github.com/z7zmey/php-parser/php5"
|
||||
"github.com/z7zmey/php-parser/php7"
|
||||
)
|
||||
|
||||
func TestForeach(t *testing.T) {
|
||||
src := `<? foreach ($a as $v) {}`
|
||||
|
||||
expected := &stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.Foreach{
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$v"}},
|
||||
Stmt: &stmt.StmtList{Stmts: []node.Node{}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
actual, _, _ := php7.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
|
||||
actual, _, _ = php5.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
}
|
||||
|
||||
func TestAltForeach(t *testing.T) {
|
||||
src := `<? foreach ($a as $v) : endforeach;`
|
||||
|
||||
expected := &stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.Foreach{
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$v"}},
|
||||
Stmt: &stmt.StmtList{Stmts: []node.Node{}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
actual, _, _ := php7.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
|
||||
actual, _, _ = php5.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
}
|
||||
|
||||
func TestForeachWithKey(t *testing.T) {
|
||||
src := `<? foreach ($a as $k => $v) {}`
|
||||
|
||||
expected := &stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.Foreach{
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Key: &expr.Variable{VarName: &node.Identifier{Value: "$k"}},
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$v"}},
|
||||
Stmt: &stmt.StmtList{Stmts: []node.Node{}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
actual, _, _ := php7.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
|
||||
actual, _, _ = php5.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
}
|
||||
|
||||
func TestForeachWithRef(t *testing.T) {
|
||||
src := `<? foreach ($a as $k => &$v) {}`
|
||||
|
||||
expected := &stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.Foreach{
|
||||
ByRef: true,
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Key: &expr.Variable{VarName: &node.Identifier{Value: "$k"}},
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "$v"}},
|
||||
Stmt: &stmt.StmtList{Stmts: []node.Node{}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
actual, _, _ := php7.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
|
||||
actual, _, _ = php5.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
}
|
||||
|
||||
func TestForeachWithList(t *testing.T) {
|
||||
src := `<? foreach ($a as $k => list($v)) {}`
|
||||
|
||||
expected := &stmt.StmtList{
|
||||
Stmts: []node.Node{
|
||||
&stmt.Foreach{
|
||||
ByRef: false,
|
||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||
Key: &expr.Variable{VarName: &node.Identifier{Value: "$k"}},
|
||||
Variable: &expr.List{
|
||||
Items: []node.Node{
|
||||
&expr.ArrayItem{
|
||||
ByRef: false,
|
||||
Val: &expr.Variable{VarName: &node.Identifier{Value: "$v"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
Stmt: &stmt.StmtList{Stmts: []node.Node{}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
actual, _, _ := php7.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
|
||||
actual, _, _ = php5.Parse(bytes.NewBufferString(src), "test.php")
|
||||
assertEqual(t, expected, actual)
|
||||
}
|
88
php5/php5.go
88
php5/php5.go
@ -345,7 +345,7 @@ const yyEofCode = 1
|
||||
const yyErrCode = 2
|
||||
const yyInitialStackSize = 16
|
||||
|
||||
//line php5/php5.y:3744
|
||||
//line php5/php5.y:3748
|
||||
|
||||
//line yacctab:1
|
||||
var yyExca = [...]int{
|
||||
@ -6266,11 +6266,13 @@ yydefault:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3428
|
||||
{
|
||||
yyVAL.node = yyDollar[1].node
|
||||
yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node, false)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewNodePosition(yyDollar[1].node))
|
||||
comments.AddComments(yyVAL.node, comments[yyDollar[1].node])
|
||||
}
|
||||
case 477:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3430
|
||||
//line php5/php5.y:3434
|
||||
{
|
||||
yyVAL.node = expr.NewList(yyDollar[3].list)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token))
|
||||
@ -6278,25 +6280,25 @@ yydefault:
|
||||
}
|
||||
case 478:
|
||||
yyDollar = yyS[yypt-0 : yypt+1]
|
||||
//line php5/php5.y:3436
|
||||
//line php5/php5.y:3440
|
||||
{
|
||||
yyVAL.node = nil
|
||||
}
|
||||
case 479:
|
||||
yyDollar = yyS[yypt-0 : yypt+1]
|
||||
//line php5/php5.y:3442
|
||||
//line php5/php5.y:3446
|
||||
{
|
||||
yyVAL.list = nil
|
||||
}
|
||||
case 480:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3444
|
||||
//line php5/php5.y:3448
|
||||
{
|
||||
yyVAL.list = yyDollar[1].list
|
||||
}
|
||||
case 481:
|
||||
yyDollar = yyS[yypt-5 : yypt+1]
|
||||
//line php5/php5.y:3449
|
||||
//line php5/php5.y:3453
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(yyDollar[3].node, yyDollar[5].node, false)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewNodesPosition(yyDollar[3].node, yyDollar[5].node))
|
||||
@ -6306,7 +6308,7 @@ yydefault:
|
||||
}
|
||||
case 482:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3457
|
||||
//line php5/php5.y:3461
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(nil, yyDollar[3].node, false)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewNodePosition(yyDollar[3].node))
|
||||
@ -6316,7 +6318,7 @@ yydefault:
|
||||
}
|
||||
case 483:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3465
|
||||
//line php5/php5.y:3469
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node, false)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node))
|
||||
@ -6326,7 +6328,7 @@ yydefault:
|
||||
}
|
||||
case 484:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3473
|
||||
//line php5/php5.y:3477
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(nil, yyDollar[1].node, false)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewNodePosition(yyDollar[1].node))
|
||||
@ -6336,7 +6338,7 @@ yydefault:
|
||||
}
|
||||
case 485:
|
||||
yyDollar = yyS[yypt-6 : yypt+1]
|
||||
//line php5/php5.y:3481
|
||||
//line php5/php5.y:3485
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(yyDollar[3].node, yyDollar[6].node, true)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewNodesPosition(yyDollar[3].node, yyDollar[6].node))
|
||||
@ -6346,7 +6348,7 @@ yydefault:
|
||||
}
|
||||
case 486:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3489
|
||||
//line php5/php5.y:3493
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(nil, yyDollar[4].node, true)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node))
|
||||
@ -6356,7 +6358,7 @@ yydefault:
|
||||
}
|
||||
case 487:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3497
|
||||
//line php5/php5.y:3501
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(yyDollar[1].node, yyDollar[4].node, true)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node))
|
||||
@ -6366,7 +6368,7 @@ yydefault:
|
||||
}
|
||||
case 488:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3505
|
||||
//line php5/php5.y:3509
|
||||
{
|
||||
arrayItem := expr.NewArrayItem(nil, yyDollar[2].node, true)
|
||||
positions.AddPosition(arrayItem, positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
|
||||
@ -6376,13 +6378,13 @@ yydefault:
|
||||
}
|
||||
case 489:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3516
|
||||
//line php5/php5.y:3520
|
||||
{
|
||||
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
|
||||
}
|
||||
case 490:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3518
|
||||
//line php5/php5.y:3522
|
||||
{
|
||||
encapsed := scalar.NewEncapsedStringPart(yyDollar[2].token.Value)
|
||||
positions.AddPosition(encapsed, positionBuilder.NewTokenPosition(yyDollar[2].token))
|
||||
@ -6391,13 +6393,13 @@ yydefault:
|
||||
}
|
||||
case 491:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3525
|
||||
//line php5/php5.y:3529
|
||||
{
|
||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||
}
|
||||
case 492:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3527
|
||||
//line php5/php5.y:3531
|
||||
{
|
||||
encapsed := scalar.NewEncapsedStringPart(yyDollar[1].token.Value)
|
||||
positions.AddPosition(encapsed, positionBuilder.NewTokenPosition(yyDollar[1].token))
|
||||
@ -6406,7 +6408,7 @@ yydefault:
|
||||
}
|
||||
case 493:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3537
|
||||
//line php5/php5.y:3541
|
||||
{
|
||||
name := node.NewIdentifier(yyDollar[1].token.Value)
|
||||
positions.AddPosition(name, positionBuilder.NewTokenPosition(yyDollar[1].token))
|
||||
@ -6418,7 +6420,7 @@ yydefault:
|
||||
}
|
||||
case 494:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3547
|
||||
//line php5/php5.y:3551
|
||||
{
|
||||
identifier := node.NewIdentifier(yyDollar[1].token.Value)
|
||||
positions.AddPosition(identifier, positionBuilder.NewTokenPosition(yyDollar[1].token))
|
||||
@ -6433,7 +6435,7 @@ yydefault:
|
||||
}
|
||||
case 495:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3560
|
||||
//line php5/php5.y:3564
|
||||
{
|
||||
identifier := node.NewIdentifier(yyDollar[1].token.Value)
|
||||
positions.AddPosition(identifier, positionBuilder.NewTokenPosition(yyDollar[1].token))
|
||||
@ -6451,7 +6453,7 @@ yydefault:
|
||||
}
|
||||
case 496:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3576
|
||||
//line php5/php5.y:3580
|
||||
{
|
||||
yyVAL.node = yyDollar[2].node
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token))
|
||||
@ -6459,7 +6461,7 @@ yydefault:
|
||||
}
|
||||
case 497:
|
||||
yyDollar = yyS[yypt-6 : yypt+1]
|
||||
//line php5/php5.y:3582
|
||||
//line php5/php5.y:3586
|
||||
{
|
||||
identifier := node.NewIdentifier(yyDollar[2].token.Value)
|
||||
positions.AddPosition(identifier, positionBuilder.NewTokenPosition(yyDollar[2].token))
|
||||
@ -6474,13 +6476,13 @@ yydefault:
|
||||
}
|
||||
case 498:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3596
|
||||
//line php5/php5.y:3600
|
||||
{
|
||||
yyVAL.node = yyDollar[2].node
|
||||
}
|
||||
case 499:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3601
|
||||
//line php5/php5.y:3605
|
||||
{
|
||||
yyVAL.node = scalar.NewString(yyDollar[1].token.Value)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokenPosition(yyDollar[1].token))
|
||||
@ -6488,7 +6490,7 @@ yydefault:
|
||||
}
|
||||
case 500:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3607
|
||||
//line php5/php5.y:3611
|
||||
{
|
||||
// TODO: add option to handle 64 bit integer
|
||||
if _, err := strconv.Atoi(yyDollar[1].token.Value); err == nil {
|
||||
@ -6502,7 +6504,7 @@ yydefault:
|
||||
}
|
||||
case 501:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3619
|
||||
//line php5/php5.y:3623
|
||||
{
|
||||
identifier := node.NewIdentifier(yyDollar[1].token.Value)
|
||||
positions.AddPosition(identifier, positionBuilder.NewTokenPosition(yyDollar[1].token))
|
||||
@ -6514,7 +6516,7 @@ yydefault:
|
||||
}
|
||||
case 502:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3632
|
||||
//line php5/php5.y:3636
|
||||
{
|
||||
yyVAL.node = expr.NewIsset(yyDollar[3].list)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token))
|
||||
@ -6522,7 +6524,7 @@ yydefault:
|
||||
}
|
||||
case 503:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3638
|
||||
//line php5/php5.y:3642
|
||||
{
|
||||
yyVAL.node = expr.NewEmpty(yyDollar[3].node)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token))
|
||||
@ -6530,7 +6532,7 @@ yydefault:
|
||||
}
|
||||
case 504:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3644
|
||||
//line php5/php5.y:3648
|
||||
{
|
||||
yyVAL.node = expr.NewEmpty(yyDollar[3].node)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token))
|
||||
@ -6538,7 +6540,7 @@ yydefault:
|
||||
}
|
||||
case 505:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3650
|
||||
//line php5/php5.y:3654
|
||||
{
|
||||
yyVAL.node = expr.NewInclude(yyDollar[2].node)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
|
||||
@ -6546,7 +6548,7 @@ yydefault:
|
||||
}
|
||||
case 506:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3656
|
||||
//line php5/php5.y:3660
|
||||
{
|
||||
yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
|
||||
@ -6554,7 +6556,7 @@ yydefault:
|
||||
}
|
||||
case 507:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line php5/php5.y:3662
|
||||
//line php5/php5.y:3666
|
||||
{
|
||||
yyVAL.node = expr.NewEval(yyDollar[3].node)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token))
|
||||
@ -6562,7 +6564,7 @@ yydefault:
|
||||
}
|
||||
case 508:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3668
|
||||
//line php5/php5.y:3672
|
||||
{
|
||||
yyVAL.node = expr.NewRequire(yyDollar[2].node)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
|
||||
@ -6570,7 +6572,7 @@ yydefault:
|
||||
}
|
||||
case 509:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//line php5/php5.y:3674
|
||||
//line php5/php5.y:3678
|
||||
{
|
||||
yyVAL.node = expr.NewRequireOnce(yyDollar[2].node)
|
||||
positions.AddPosition(yyVAL.node, positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
|
||||
@ -6578,31 +6580,31 @@ yydefault:
|
||||
}
|
||||
case 510:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3683
|
||||
//line php5/php5.y:3687
|
||||
{
|
||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||
}
|
||||
case 511:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3685
|
||||
//line php5/php5.y:3689
|
||||
{
|
||||
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
|
||||
}
|
||||
case 512:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3690
|
||||
//line php5/php5.y:3694
|
||||
{
|
||||
yyVAL.node = yyDollar[1].node
|
||||
}
|
||||
case 513:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php5/php5.y:3692
|
||||
//line php5/php5.y:3696
|
||||
{
|
||||
yyVAL.node = yyDollar[1].node
|
||||
}
|
||||
case 514:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3697
|
||||
//line php5/php5.y:3701
|
||||
{
|
||||
target := node.NewIdentifier(yyDollar[3].token.Value)
|
||||
positions.AddPosition(target, positionBuilder.NewTokenPosition(yyDollar[3].token))
|
||||
@ -6614,7 +6616,7 @@ yydefault:
|
||||
}
|
||||
case 515:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3707
|
||||
//line php5/php5.y:3711
|
||||
{
|
||||
target := node.NewIdentifier(yyDollar[3].token.Value)
|
||||
positions.AddPosition(target, positionBuilder.NewTokenPosition(yyDollar[3].token))
|
||||
@ -6626,7 +6628,7 @@ yydefault:
|
||||
}
|
||||
case 516:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3720
|
||||
//line php5/php5.y:3724
|
||||
{
|
||||
target := node.NewIdentifier(yyDollar[3].token.Value)
|
||||
positions.AddPosition(target, positionBuilder.NewTokenPosition(yyDollar[3].token))
|
||||
@ -6638,7 +6640,7 @@ yydefault:
|
||||
}
|
||||
case 517:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line php5/php5.y:3733
|
||||
//line php5/php5.y:3737
|
||||
{
|
||||
target := node.NewIdentifier(yyDollar[3].token.Value)
|
||||
positions.AddPosition(target, positionBuilder.NewTokenPosition(yyDollar[3].token))
|
||||
|
@ -3426,7 +3426,11 @@ assignment_list:
|
||||
|
||||
assignment_list_element:
|
||||
variable
|
||||
{ $$ = $1 }
|
||||
{
|
||||
$$ = expr.NewArrayItem(nil, $1, false)
|
||||
positions.AddPosition($$, positionBuilder.NewNodePosition($1))
|
||||
comments.AddComments($$, comments[$1])
|
||||
}
|
||||
| T_LIST '(' assignment_list ')'
|
||||
{
|
||||
$$ = expr.NewList($3)
|
||||
|
Loading…
Reference in New Issue
Block a user