refactoring: update ast structure of "MethodCall" and "PropertyFetch" nodes

This commit is contained in:
Vadym Slizov 2020-12-27 23:04:09 +02:00
parent 2c09138600
commit 0f2341bfa9
No known key found for this signature in database
GPG Key ID: AEA2A9388EF42A4A
9 changed files with 353 additions and 195 deletions

190
internal/php5/php5.go generated
View File

@ -340,7 +340,7 @@ const yyEofCode = 1
const yyErrCode = 2 const yyErrCode = 2
const yyInitialStackSize = 16 const yyInitialStackSize = 16
// line internal/php5/php5.y:5651 // line internal/php5/php5.y:5661
// line yacctab:1 // line yacctab:1
var yyExca = [...]int{ var yyExca = [...]int{
@ -7246,7 +7246,9 @@ yydefault:
) )
yyDollar[3].list = append(yyDollar[3].list, yyDollar[4].list[1:len(yyDollar[4].list)]...) yyDollar[3].list = append(yyDollar[3].list, yyDollar[4].list[1:len(yyDollar[4].list)]...)
case *ast.ExprPropertyFetch: case *ast.ExprPropertyFetch:
yyDollar[4].list[0].(*ast.ExprMethodCall).OpenCurlyBracketTkn = l.OpenCurlyBracketTkn
yyDollar[4].list[0].(*ast.ExprMethodCall).Method = l.Property yyDollar[4].list[0].(*ast.ExprMethodCall).Method = l.Property
yyDollar[4].list[0].(*ast.ExprMethodCall).CloseCurlyBracketTkn = l.CloseCurlyBracketTkn
yyDollar[4].list[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn yyDollar[4].list[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn
yyDollar[3].list = append(yyDollar[3].list[:len(yyDollar[3].list)-1], yyDollar[4].list...) yyDollar[3].list = append(yyDollar[3].list[:len(yyDollar[3].list)-1], yyDollar[4].list...)
} }
@ -7302,25 +7304,25 @@ yydefault:
} }
case 437: case 437:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4767 // line internal/php5/php5.y:4769
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 438: case 438:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:4774 // line internal/php5/php5.y:4776
{ {
yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...)
} }
case 439: case 439:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php5/php5.y:4778 // line internal/php5/php5.y:4780
{ {
yyVAL.list = []ast.Vertex{} yyVAL.list = []ast.Vertex{}
} }
case 440: case 440:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:4786 // line internal/php5/php5.y:4788
{ {
yyDollar[2].list[0].(*ast.ExprPropertyFetch).ObjectOperatorTkn = yyDollar[1].token yyDollar[2].list[0].(*ast.ExprPropertyFetch).ObjectOperatorTkn = yyDollar[1].token
@ -7339,7 +7341,9 @@ yydefault:
) )
yyDollar[2].list = append(yyDollar[2].list, yyDollar[3].list[1:len(yyDollar[3].list)]...) yyDollar[2].list = append(yyDollar[2].list, yyDollar[3].list[1:len(yyDollar[3].list)]...)
case *ast.ExprPropertyFetch: case *ast.ExprPropertyFetch:
yyDollar[3].list[0].(*ast.ExprMethodCall).OpenCurlyBracketTkn = l.OpenCurlyBracketTkn
yyDollar[3].list[0].(*ast.ExprMethodCall).Method = l.Property yyDollar[3].list[0].(*ast.ExprMethodCall).Method = l.Property
yyDollar[3].list[0].(*ast.ExprMethodCall).CloseCurlyBracketTkn = l.CloseCurlyBracketTkn
yyDollar[3].list[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn yyDollar[3].list[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn
yyDollar[2].list = append(yyDollar[2].list[:len(yyDollar[2].list)-1], yyDollar[3].list...) yyDollar[2].list = append(yyDollar[2].list[:len(yyDollar[2].list)-1], yyDollar[3].list...)
} }
@ -7349,7 +7353,7 @@ yydefault:
} }
case 441: case 441:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:4816 // line internal/php5/php5.y:4820
{ {
fetch := &ast.ExprArrayDimFetch{ fetch := &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token),
@ -7363,7 +7367,7 @@ yydefault:
} }
case 442: case 442:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:4828 // line internal/php5/php5.y:4832
{ {
fetch := &ast.ExprArrayDimFetch{ fetch := &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token),
@ -7377,7 +7381,7 @@ yydefault:
} }
case 443: case 443:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4843 // line internal/php5/php5.y:4847
{ {
yyVAL.node = &ast.ExprMethodCall{ yyVAL.node = &ast.ExprMethodCall{
Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node),
@ -7389,31 +7393,31 @@ yydefault:
} }
case 444: case 444:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4856 // line internal/php5/php5.y:4860
{ {
yyVAL.list = []ast.Vertex{yyDollar[1].node} yyVAL.list = []ast.Vertex{yyDollar[1].node}
} }
case 445: case 445:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4860 // line internal/php5/php5.y:4864
{ {
yyVAL.list = yyDollar[1].list yyVAL.list = yyDollar[1].list
} }
case 446: case 446:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php5/php5.y:4864 // line internal/php5/php5.y:4868
{ {
yyVAL.list = nil yyVAL.list = nil
} }
case 447: case 447:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4871 // line internal/php5/php5.y:4875
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 448: case 448:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:4875 // line internal/php5/php5.y:4879
{ {
for i := len(yyDollar[1].list) - 1; i >= 0; i-- { for i := len(yyDollar[1].list) - 1; i >= 0; i-- {
yyDollar[1].list[i].(*ast.ExprVariable).VarName = yyDollar[2].node yyDollar[1].list[i].(*ast.ExprVariable).VarName = yyDollar[2].node
@ -7425,7 +7429,7 @@ yydefault:
} }
case 449: case 449:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:4888 // line internal/php5/php5.y:4892
{ {
yyVAL.node = &ast.ExprStaticPropertyFetch{ yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -7436,7 +7440,7 @@ yydefault:
} }
case 450: case 450:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:4897 // line internal/php5/php5.y:4901
{ {
yyVAL.node = &ast.ExprStaticPropertyFetch{ yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -7447,13 +7451,13 @@ yydefault:
} }
case 451: case 451:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4909 // line internal/php5/php5.y:4913
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 452: case 452:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:4916 // line internal/php5/php5.y:4920
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -7465,7 +7469,7 @@ yydefault:
} }
case 453: case 453:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:4926 // line internal/php5/php5.y:4930
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -7477,31 +7481,31 @@ yydefault:
} }
case 454: case 454:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4939 // line internal/php5/php5.y:4943
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 455: case 455:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4943 // line internal/php5/php5.y:4947
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 456: case 456:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4947 // line internal/php5/php5.y:4951
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 457: case 457:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4955 // line internal/php5/php5.y:4959
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 458: case 458:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:4959 // line internal/php5/php5.y:4963
{ {
for i := len(yyDollar[1].list) - 1; i >= 0; i-- { for i := len(yyDollar[1].list) - 1; i >= 0; i-- {
yyDollar[1].list[i].(*ast.ExprVariable).VarName = yyDollar[2].node yyDollar[1].list[i].(*ast.ExprVariable).VarName = yyDollar[2].node
@ -7513,13 +7517,13 @@ yydefault:
} }
case 459: case 459:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4969 // line internal/php5/php5.y:4973
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 460: case 460:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:4976 // line internal/php5/php5.y:4980
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -7531,7 +7535,7 @@ yydefault:
} }
case 461: case 461:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:4986 // line internal/php5/php5.y:4990
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -7543,13 +7547,13 @@ yydefault:
} }
case 462: case 462:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:4996 // line internal/php5/php5.y:5000
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 463: case 463:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5004 // line internal/php5/php5.y:5008
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -7562,7 +7566,7 @@ yydefault:
} }
case 464: case 464:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5015 // line internal/php5/php5.y:5019
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -7574,25 +7578,25 @@ yydefault:
} }
case 465: case 465:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php5/php5.y:5028 // line internal/php5/php5.y:5032
{ {
yyVAL.node = nil yyVAL.node = nil
} }
case 466: case 466:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5032 // line internal/php5/php5.y:5036
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 467: case 467:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5040 // line internal/php5/php5.y:5044
{ {
yyVAL.list = yyDollar[1].list yyVAL.list = yyDollar[1].list
} }
case 468: case 468:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5044 // line internal/php5/php5.y:5048
{ {
yyVAL.list = []ast.Vertex{ yyVAL.list = []ast.Vertex{
&ast.ExprPropertyFetch{ &ast.ExprPropertyFetch{
@ -7603,7 +7607,7 @@ yydefault:
} }
case 469: case 469:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5056 // line internal/php5/php5.y:5060
{ {
fetch := &ast.ExprArrayDimFetch{ fetch := &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token),
@ -7617,7 +7621,7 @@ yydefault:
} }
case 470: case 470:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5068 // line internal/php5/php5.y:5072
{ {
fetch := &ast.ExprArrayDimFetch{ fetch := &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token),
@ -7631,18 +7635,24 @@ yydefault:
} }
case 471: case 471:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5080 // line internal/php5/php5.y:5084
{ {
yyVAL.list = []ast.Vertex{ property := &ast.ExprPropertyFetch{
&ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node),
Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), Property: yyDollar[1].node,
Property: yyDollar[1].node,
},
} }
if brackets, ok := yyDollar[1].node.(*ast.ParserBrackets); ok {
property.OpenCurlyBracketTkn = brackets.OpenBracketTkn
property.Property = brackets.Child
property.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
yyVAL.list = []ast.Vertex{property}
} }
case 472: case 472:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5092 // line internal/php5/php5.y:5102
{ {
yyVAL.node = &ast.Identifier{ yyVAL.node = &ast.Identifier{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -7652,7 +7662,7 @@ yydefault:
} }
case 473: case 473:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5100 // line internal/php5/php5.y:5110
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -7663,7 +7673,7 @@ yydefault:
} }
case 474: case 474:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5112 // line internal/php5/php5.y:5122
{ {
yyVAL.list = []ast.Vertex{ yyVAL.list = []ast.Vertex{
&ast.ExprVariable{ &ast.ExprVariable{
@ -7674,7 +7684,7 @@ yydefault:
} }
case 475: case 475:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5121 // line internal/php5/php5.y:5131
{ {
yyVAL.list = append(yyDollar[1].list, &ast.ExprVariable{ yyVAL.list = append(yyDollar[1].list, &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[2].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[2].token),
@ -7683,7 +7693,7 @@ yydefault:
} }
case 476: case 476:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5131 // line internal/php5/php5.y:5141
{ {
yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token)
yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node)
@ -7692,7 +7702,7 @@ yydefault:
} }
case 477: case 477:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5138 // line internal/php5/php5.y:5148
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{yyDollar[1].node}, Items: []ast.Vertex{yyDollar[1].node},
@ -7700,7 +7710,7 @@ yydefault:
} }
case 478: case 478:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5148 // line internal/php5/php5.y:5158
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node),
@ -7709,7 +7719,7 @@ yydefault:
} }
case 479: case 479:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5155 // line internal/php5/php5.y:5165
{ {
pairList := yyDollar[3].node.(*ast.ParserSeparatedList) pairList := yyDollar[3].node.(*ast.ParserSeparatedList)
fistPair := pairList.Items[0].(*ast.ExprArrayItem) fistPair := pairList.Items[0].(*ast.ExprArrayItem)
@ -7732,19 +7742,19 @@ yydefault:
} }
case 480: case 480:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php5/php5.y:5176 // line internal/php5/php5.y:5186
{ {
yyVAL.node = &ast.ExprArrayItem{} yyVAL.node = &ast.ExprArrayItem{}
} }
case 481: case 481:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php5/php5.y:5184 // line internal/php5/php5.y:5194
{ {
yyVAL.node = &ast.ParserSeparatedList{} yyVAL.node = &ast.ParserSeparatedList{}
} }
case 482: case 482:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5188 // line internal/php5/php5.y:5198
{ {
if yyDollar[2].token != nil { if yyDollar[2].token != nil {
yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token)
@ -7755,7 +7765,7 @@ yydefault:
} }
case 483: case 483:
yyDollar = yyS[yypt-5 : yypt+1] yyDollar = yyS[yypt-5 : yypt+1]
// line internal/php5/php5.y:5200 // line internal/php5/php5.y:5210
{ {
arrayItem := &ast.ExprArrayItem{ arrayItem := &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[5].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[5].node),
@ -7771,7 +7781,7 @@ yydefault:
} }
case 484: case 484:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5214 // line internal/php5/php5.y:5224
{ {
arrayItem := &ast.ExprArrayItem{ arrayItem := &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[3].node),
@ -7785,7 +7795,7 @@ yydefault:
} }
case 485: case 485:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5226 // line internal/php5/php5.y:5236
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{ Items: []ast.Vertex{
@ -7800,7 +7810,7 @@ yydefault:
} }
case 486: case 486:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5239 // line internal/php5/php5.y:5249
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{ Items: []ast.Vertex{
@ -7813,7 +7823,7 @@ yydefault:
} }
case 487: case 487:
yyDollar = yyS[yypt-6 : yypt+1] yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php5/php5.y:5250 // line internal/php5/php5.y:5260
{ {
arrayItem := &ast.ExprArrayItem{ arrayItem := &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[6].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[6].node),
@ -7830,7 +7840,7 @@ yydefault:
} }
case 488: case 488:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5265 // line internal/php5/php5.y:5275
{ {
arrayItem := &ast.ExprArrayItem{ arrayItem := &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node),
@ -7845,7 +7855,7 @@ yydefault:
} }
case 489: case 489:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5278 // line internal/php5/php5.y:5288
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{ Items: []ast.Vertex{
@ -7861,7 +7871,7 @@ yydefault:
} }
case 490: case 490:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5292 // line internal/php5/php5.y:5302
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{ Items: []ast.Vertex{
@ -7875,13 +7885,13 @@ yydefault:
} }
case 491: case 491:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5307 // line internal/php5/php5.y:5317
{ {
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
} }
case 492: case 492:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5311 // line internal/php5/php5.y:5321
{ {
yyVAL.list = append( yyVAL.list = append(
yyDollar[1].list, yyDollar[1].list,
@ -7894,13 +7904,13 @@ yydefault:
} }
case 493: case 493:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5322 // line internal/php5/php5.y:5332
{ {
yyVAL.list = []ast.Vertex{yyDollar[1].node} yyVAL.list = []ast.Vertex{yyDollar[1].node}
} }
case 494: case 494:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5326 // line internal/php5/php5.y:5336
{ {
yyVAL.list = []ast.Vertex{ yyVAL.list = []ast.Vertex{
&ast.ScalarEncapsedStringPart{ &ast.ScalarEncapsedStringPart{
@ -7913,7 +7923,7 @@ yydefault:
} }
case 495: case 495:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5340 // line internal/php5/php5.y:5350
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -7926,7 +7936,7 @@ yydefault:
} }
case 496: case 496:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5351 // line internal/php5/php5.y:5361
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -7945,7 +7955,7 @@ yydefault:
} }
case 497: case 497:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5368 // line internal/php5/php5.y:5378
{ {
yyVAL.node = &ast.ExprPropertyFetch{ yyVAL.node = &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -7967,7 +7977,7 @@ yydefault:
} }
case 498: case 498:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5388 // line internal/php5/php5.y:5398
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -7981,7 +7991,7 @@ yydefault:
} }
case 499: case 499:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5400 // line internal/php5/php5.y:5410
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -7999,7 +8009,7 @@ yydefault:
} }
case 500: case 500:
yyDollar = yyS[yypt-6 : yypt+1] yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php5/php5.y:5416 // line internal/php5/php5.y:5426
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token),
@ -8023,7 +8033,7 @@ yydefault:
} }
case 501: case 501:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5438 // line internal/php5/php5.y:5448
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -8034,7 +8044,7 @@ yydefault:
} }
case 502: case 502:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5450 // line internal/php5/php5.y:5460
{ {
yyVAL.node = &ast.ScalarString{ yyVAL.node = &ast.ScalarString{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -8044,7 +8054,7 @@ yydefault:
} }
case 503: case 503:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5458 // line internal/php5/php5.y:5468
{ {
// TODO: add option to handle 64 bit integer // TODO: add option to handle 64 bit integer
if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil {
@ -8063,7 +8073,7 @@ yydefault:
} }
case 504: case 504:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5475 // line internal/php5/php5.y:5485
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -8076,7 +8086,7 @@ yydefault:
} }
case 505: case 505:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5489 // line internal/php5/php5.y:5499
{ {
yyVAL.node = &ast.ExprIsset{ yyVAL.node = &ast.ExprIsset{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -8089,7 +8099,7 @@ yydefault:
} }
case 506: case 506:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5500 // line internal/php5/php5.y:5510
{ {
yyVAL.node = &ast.ExprEmpty{ yyVAL.node = &ast.ExprEmpty{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -8101,7 +8111,7 @@ yydefault:
} }
case 507: case 507:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5510 // line internal/php5/php5.y:5520
{ {
yyVAL.node = &ast.ExprEmpty{ yyVAL.node = &ast.ExprEmpty{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -8113,7 +8123,7 @@ yydefault:
} }
case 508: case 508:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5520 // line internal/php5/php5.y:5530
{ {
yyVAL.node = &ast.ExprInclude{ yyVAL.node = &ast.ExprInclude{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -8123,7 +8133,7 @@ yydefault:
} }
case 509: case 509:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5528 // line internal/php5/php5.y:5538
{ {
yyVAL.node = &ast.ExprIncludeOnce{ yyVAL.node = &ast.ExprIncludeOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -8133,7 +8143,7 @@ yydefault:
} }
case 510: case 510:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5536 // line internal/php5/php5.y:5546
{ {
yyVAL.node = &ast.ExprEval{ yyVAL.node = &ast.ExprEval{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -8145,7 +8155,7 @@ yydefault:
} }
case 511: case 511:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5546 // line internal/php5/php5.y:5556
{ {
yyVAL.node = &ast.ExprRequire{ yyVAL.node = &ast.ExprRequire{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -8155,7 +8165,7 @@ yydefault:
} }
case 512: case 512:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5554 // line internal/php5/php5.y:5564
{ {
yyVAL.node = &ast.ExprRequireOnce{ yyVAL.node = &ast.ExprRequireOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -8165,7 +8175,7 @@ yydefault:
} }
case 513: case 513:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5565 // line internal/php5/php5.y:5575
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{yyDollar[1].node}, Items: []ast.Vertex{yyDollar[1].node},
@ -8173,7 +8183,7 @@ yydefault:
} }
case 514: case 514:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5571 // line internal/php5/php5.y:5581
{ {
yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token)
yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node)
@ -8182,19 +8192,19 @@ yydefault:
} }
case 515: case 515:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5581 // line internal/php5/php5.y:5591
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 516: case 516:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5585 // line internal/php5/php5.y:5595
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 517: case 517:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5592 // line internal/php5/php5.y:5602
{ {
yyVAL.node = &ast.ExprClassConstFetch{ yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@ -8209,7 +8219,7 @@ yydefault:
} }
case 518: case 518:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5605 // line internal/php5/php5.y:5615
{ {
yyVAL.node = &ast.ExprClassConstFetch{ yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@ -8224,7 +8234,7 @@ yydefault:
} }
case 519: case 519:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5621 // line internal/php5/php5.y:5631
{ {
yyVAL.node = &ast.ExprClassConstFetch{ yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@ -8239,7 +8249,7 @@ yydefault:
} }
case 520: case 520:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5637 // line internal/php5/php5.y:5647
{ {
yyVAL.node = &ast.ExprClassConstFetch{ yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),

View File

@ -4709,7 +4709,9 @@ variable:
) )
$3 = append($3, $4[1:len($4)]...) $3 = append($3, $4[1:len($4)]...)
case *ast.ExprPropertyFetch: case *ast.ExprPropertyFetch:
$4[0].(*ast.ExprMethodCall).OpenCurlyBracketTkn = l.OpenCurlyBracketTkn
$4[0].(*ast.ExprMethodCall).Method = l.Property $4[0].(*ast.ExprMethodCall).Method = l.Property
$4[0].(*ast.ExprMethodCall).CloseCurlyBracketTkn = l.CloseCurlyBracketTkn
$4[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn $4[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn
$3 = append($3[:len($3)-1], $4...) $3 = append($3[:len($3)-1], $4...)
} }
@ -4801,7 +4803,9 @@ variable_property:
) )
$2 = append($2, $3[1:len($3)]...) $2 = append($2, $3[1:len($3)]...)
case *ast.ExprPropertyFetch: case *ast.ExprPropertyFetch:
$3[0].(*ast.ExprMethodCall).OpenCurlyBracketTkn = l.OpenCurlyBracketTkn
$3[0].(*ast.ExprMethodCall).Method = l.Property $3[0].(*ast.ExprMethodCall).Method = l.Property
$3[0].(*ast.ExprMethodCall).CloseCurlyBracketTkn = l.CloseCurlyBracketTkn
$3[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn $3[0].(*ast.ExprMethodCall).ObjectOperatorTkn = l.ObjectOperatorTkn
$2 = append($2[:len($2)-1], $3...) $2 = append($2[:len($2)-1], $3...)
} }
@ -5078,12 +5082,18 @@ object_dim_list:
} }
| variable_name | variable_name
{ {
$$ = []ast.Vertex{ property := &ast.ExprPropertyFetch{
&ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewNodePosition($1),
Position: yylex.(*Parser).builder.NewNodePosition($1), Property: $1,
Property: $1,
},
} }
if brackets, ok := $1.(*ast.ParserBrackets); ok {
property.OpenCurlyBracketTkn = brackets.OpenBracketTkn
property.Property = brackets.Child
property.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = []ast.Vertex{ property }
} }
; ;

194
internal/php7/php7.go generated
View File

@ -339,7 +339,7 @@ const yyEofCode = 1
const yyErrCode = 2 const yyErrCode = 2
const yyInitialStackSize = 16 const yyInitialStackSize = 16
// line internal/php7/php7.y:4350 // line internal/php7/php7.y:4374
// line yacctab:1 // line yacctab:1
var yyExca = [...]int{ var yyExca = [...]int{
@ -6390,7 +6390,7 @@ yydefault:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3740 // line internal/php7/php7.y:3740
{ {
yyVAL.node = &ast.ExprMethodCall{ methodCall := &ast.ExprMethodCall{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node),
Var: yyDollar[1].node, Var: yyDollar[1].node,
ObjectOperatorTkn: yyDollar[2].token, ObjectOperatorTkn: yyDollar[2].token,
@ -6400,39 +6400,55 @@ yydefault:
SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn,
} }
if brackets, ok := yyDollar[3].node.(*ast.ParserBrackets); ok {
methodCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
methodCall.Method = brackets.Child
methodCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
yyVAL.node = methodCall
} }
case 437: case 437:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3753 // line internal/php7/php7.y:3761
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 438: case 438:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3760 // line internal/php7/php7.y:3768
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 439: case 439:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3764 // line internal/php7/php7.y:3772
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 440: case 440:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3768 // line internal/php7/php7.y:3776
{ {
yyVAL.node = &ast.ExprPropertyFetch{ propertyFetch := &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
Var: yyDollar[1].node, Var: yyDollar[1].node,
ObjectOperatorTkn: yyDollar[2].token, ObjectOperatorTkn: yyDollar[2].token,
Property: yyDollar[3].node, Property: yyDollar[3].node,
} }
if brackets, ok := yyDollar[3].node.(*ast.ParserBrackets); ok {
propertyFetch.OpenCurlyBracketTkn = brackets.OpenBracketTkn
propertyFetch.Property = brackets.Child
propertyFetch.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
yyVAL.node = propertyFetch
} }
case 441: case 441:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3780 // line internal/php7/php7.y:3796
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6445,7 +6461,7 @@ yydefault:
} }
case 442: case 442:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3791 // line internal/php7/php7.y:3807
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6457,7 +6473,7 @@ yydefault:
} }
case 443: case 443:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:3801 // line internal/php7/php7.y:3817
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -6467,7 +6483,7 @@ yydefault:
} }
case 444: case 444:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3812 // line internal/php7/php7.y:3828
{ {
yyVAL.node = &ast.ExprStaticPropertyFetch{ yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6478,7 +6494,7 @@ yydefault:
} }
case 445: case 445:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3821 // line internal/php7/php7.y:3837
{ {
yyVAL.node = &ast.ExprStaticPropertyFetch{ yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6489,13 +6505,13 @@ yydefault:
} }
case 446: case 446:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3833 // line internal/php7/php7.y:3849
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 447: case 447:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3837 // line internal/php7/php7.y:3853
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -6507,7 +6523,7 @@ yydefault:
} }
case 448: case 448:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3847 // line internal/php7/php7.y:3863
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -6519,18 +6535,26 @@ yydefault:
} }
case 449: case 449:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3857 // line internal/php7/php7.y:3873
{ {
yyVAL.node = &ast.ExprPropertyFetch{ propertyFetch := &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
Var: yyDollar[1].node, Var: yyDollar[1].node,
ObjectOperatorTkn: yyDollar[2].token, ObjectOperatorTkn: yyDollar[2].token,
Property: yyDollar[3].node, Property: yyDollar[3].node,
} }
if brackets, ok := yyDollar[3].node.(*ast.ParserBrackets); ok {
propertyFetch.OpenCurlyBracketTkn = brackets.OpenBracketTkn
propertyFetch.Property = brackets.Child
propertyFetch.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
yyVAL.node = propertyFetch
} }
case 450: case 450:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3866 // line internal/php7/php7.y:3890
{ {
yyVAL.node = &ast.ExprStaticPropertyFetch{ yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6541,7 +6565,7 @@ yydefault:
} }
case 451: case 451:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3875 // line internal/php7/php7.y:3899
{ {
yyVAL.node = &ast.ExprStaticPropertyFetch{ yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6551,33 +6575,6 @@ yydefault:
} }
} }
case 452: case 452:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3887
{
yyVAL.node = &ast.Identifier{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
IdentifierTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 453:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3895
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
OpenBracketTkn: yyDollar[1].token,
Child: yyDollar[2].node,
CloseBracketTkn: yyDollar[3].token,
}
}
case 454:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3904
{
yyVAL.node = yyDollar[1].node
}
case 455:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3911 // line internal/php7/php7.y:3911
{ {
@ -6587,7 +6584,7 @@ yydefault:
Value: yyDollar[1].token.Value, Value: yyDollar[1].token.Value,
} }
} }
case 456: case 453:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3919 // line internal/php7/php7.y:3919
{ {
@ -6598,15 +6595,42 @@ yydefault:
CloseBracketTkn: yyDollar[3].token, CloseBracketTkn: yyDollar[3].token,
} }
} }
case 457: case 454:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3928 // line internal/php7/php7.y:3928
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 458: case 455:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3935 // line internal/php7/php7.y:3935
{
yyVAL.node = &ast.Identifier{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
IdentifierTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 456:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3943
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
OpenBracketTkn: yyDollar[1].token,
Child: yyDollar[2].node,
CloseBracketTkn: yyDollar[3].token,
}
}
case 457:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3952
{
yyVAL.node = yyDollar[1].node
}
case 458:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3959
{ {
pairList := yyDollar[1].node.(*ast.ParserSeparatedList) pairList := yyDollar[1].node.(*ast.ParserSeparatedList)
fistPair := pairList.Items[0].(*ast.ExprArrayItem) fistPair := pairList.Items[0].(*ast.ExprArrayItem)
@ -6619,19 +6643,19 @@ yydefault:
} }
case 459: case 459:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3949 // line internal/php7/php7.y:3973
{ {
yyVAL.node = &ast.ExprArrayItem{} yyVAL.node = &ast.ExprArrayItem{}
} }
case 460: case 460:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3953 // line internal/php7/php7.y:3977
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 461: case 461:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3960 // line internal/php7/php7.y:3984
{ {
yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token)
yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node)
@ -6640,7 +6664,7 @@ yydefault:
} }
case 462: case 462:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3967 // line internal/php7/php7.y:3991
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{yyDollar[1].node}, Items: []ast.Vertex{yyDollar[1].node},
@ -6648,7 +6672,7 @@ yydefault:
} }
case 463: case 463:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3976 // line internal/php7/php7.y:4000
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6659,7 +6683,7 @@ yydefault:
} }
case 464: case 464:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3985 // line internal/php7/php7.y:4009
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node),
@ -6668,7 +6692,7 @@ yydefault:
} }
case 465: case 465:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3992 // line internal/php7/php7.y:4016
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node),
@ -6680,7 +6704,7 @@ yydefault:
} }
case 466: case 466:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4002 // line internal/php7/php7.y:4026
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -6690,7 +6714,7 @@ yydefault:
} }
case 467: case 467:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4010 // line internal/php7/php7.y:4034
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -6700,7 +6724,7 @@ yydefault:
} }
case 468: case 468:
yyDollar = yyS[yypt-6 : yypt+1] yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php7/php7.y:4018 // line internal/php7/php7.y:4042
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token), Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token),
@ -6718,7 +6742,7 @@ yydefault:
} }
case 469: case 469:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4034 // line internal/php7/php7.y:4058
{ {
yyVAL.node = &ast.ExprArrayItem{ yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6734,13 +6758,13 @@ yydefault:
} }
case 470: case 470:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4051 // line internal/php7/php7.y:4075
{ {
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
} }
case 471: case 471:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4055 // line internal/php7/php7.y:4079
{ {
yyVAL.list = append( yyVAL.list = append(
yyDollar[1].list, yyDollar[1].list,
@ -6753,13 +6777,13 @@ yydefault:
} }
case 472: case 472:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4066 // line internal/php7/php7.y:4090
{ {
yyVAL.list = []ast.Vertex{yyDollar[1].node} yyVAL.list = []ast.Vertex{yyDollar[1].node}
} }
case 473: case 473:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4070 // line internal/php7/php7.y:4094
{ {
yyVAL.list = []ast.Vertex{ yyVAL.list = []ast.Vertex{
&ast.ScalarEncapsedStringPart{ &ast.ScalarEncapsedStringPart{
@ -6772,7 +6796,7 @@ yydefault:
} }
case 474: case 474:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4084 // line internal/php7/php7.y:4108
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6785,7 +6809,7 @@ yydefault:
} }
case 475: case 475:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4095 // line internal/php7/php7.y:4119
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6804,7 +6828,7 @@ yydefault:
} }
case 476: case 476:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4112 // line internal/php7/php7.y:4136
{ {
yyVAL.node = &ast.ExprPropertyFetch{ yyVAL.node = &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6826,7 +6850,7 @@ yydefault:
} }
case 477: case 477:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4132 // line internal/php7/php7.y:4156
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6840,7 +6864,7 @@ yydefault:
} }
case 478: case 478:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4144 // line internal/php7/php7.y:4168
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6858,7 +6882,7 @@ yydefault:
} }
case 479: case 479:
yyDollar = yyS[yypt-6 : yypt+1] yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php7/php7.y:4160 // line internal/php7/php7.y:4184
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token),
@ -6882,7 +6906,7 @@ yydefault:
} }
case 480: case 480:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4182 // line internal/php7/php7.y:4206
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6893,7 +6917,7 @@ yydefault:
} }
case 481: case 481:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4194 // line internal/php7/php7.y:4218
{ {
yyVAL.node = &ast.ScalarString{ yyVAL.node = &ast.ScalarString{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6903,7 +6927,7 @@ yydefault:
} }
case 482: case 482:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4202 // line internal/php7/php7.y:4226
{ {
// TODO: add option to handle 64 bit integer // TODO: add option to handle 64 bit integer
if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil {
@ -6922,7 +6946,7 @@ yydefault:
} }
case 483: case 483:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4219 // line internal/php7/php7.y:4243
{ {
_, err := strconv.Atoi(string(yyDollar[2].token.Value)) _, err := strconv.Atoi(string(yyDollar[2].token.Value))
isInt := err == nil isInt := err == nil
@ -6948,7 +6972,7 @@ yydefault:
} }
case 484: case 484:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4243 // line internal/php7/php7.y:4267
{ {
yyVAL.node = &ast.ExprVariable{ yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6961,7 +6985,7 @@ yydefault:
} }
case 485: case 485:
yyDollar = yyS[yypt-5 : yypt+1] yyDollar = yyS[yypt-5 : yypt+1]
// line internal/php7/php7.y:4257 // line internal/php7/php7.y:4281
{ {
if yyDollar[4].token != nil { if yyDollar[4].token != nil {
yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token) yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token)
@ -6978,7 +7002,7 @@ yydefault:
} }
case 486: case 486:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4272 // line internal/php7/php7.y:4296
{ {
yyVAL.node = &ast.ExprEmpty{ yyVAL.node = &ast.ExprEmpty{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6990,7 +7014,7 @@ yydefault:
} }
case 487: case 487:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4282 // line internal/php7/php7.y:4306
{ {
yyVAL.node = &ast.ExprInclude{ yyVAL.node = &ast.ExprInclude{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7000,7 +7024,7 @@ yydefault:
} }
case 488: case 488:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4290 // line internal/php7/php7.y:4314
{ {
yyVAL.node = &ast.ExprIncludeOnce{ yyVAL.node = &ast.ExprIncludeOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7010,7 +7034,7 @@ yydefault:
} }
case 489: case 489:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4298 // line internal/php7/php7.y:4322
{ {
yyVAL.node = &ast.ExprEval{ yyVAL.node = &ast.ExprEval{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -7022,7 +7046,7 @@ yydefault:
} }
case 490: case 490:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4308 // line internal/php7/php7.y:4332
{ {
yyVAL.node = &ast.ExprRequire{ yyVAL.node = &ast.ExprRequire{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7032,7 +7056,7 @@ yydefault:
} }
case 491: case 491:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4316 // line internal/php7/php7.y:4340
{ {
yyVAL.node = &ast.ExprRequireOnce{ yyVAL.node = &ast.ExprRequireOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7042,7 +7066,7 @@ yydefault:
} }
case 492: case 492:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4327 // line internal/php7/php7.y:4351
{ {
yyVAL.node = &ast.ParserSeparatedList{ yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{yyDollar[1].node}, Items: []ast.Vertex{yyDollar[1].node},
@ -7050,7 +7074,7 @@ yydefault:
} }
case 493: case 493:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4333 // line internal/php7/php7.y:4357
{ {
yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token)
yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node)
@ -7059,7 +7083,7 @@ yydefault:
} }
case 494: case 494:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4343 // line internal/php7/php7.y:4367
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }

View File

@ -3738,7 +3738,7 @@ callable_variable:
} }
| dereferencable T_OBJECT_OPERATOR property_name argument_list | dereferencable T_OBJECT_OPERATOR property_name argument_list
{ {
$$ = &ast.ExprMethodCall{ methodCall := &ast.ExprMethodCall{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $4), Position: yylex.(*Parser).builder.NewNodesPosition($1, $4),
Var: $1, Var: $1,
ObjectOperatorTkn: $2, ObjectOperatorTkn: $2,
@ -3748,6 +3748,14 @@ callable_variable:
SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn,
} }
if brackets, ok := $3.(*ast.ParserBrackets); ok {
methodCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
methodCall.Method = brackets.Child
methodCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = methodCall
} }
| function_call | function_call
{ {
@ -3766,12 +3774,20 @@ variable:
} }
| dereferencable T_OBJECT_OPERATOR property_name | dereferencable T_OBJECT_OPERATOR property_name
{ {
$$ = &ast.ExprPropertyFetch{ propertyFetch := &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $3), Position: yylex.(*Parser).builder.NewNodesPosition($1, $3),
Var: $1, Var: $1,
ObjectOperatorTkn: $2, ObjectOperatorTkn: $2,
Property: $3, Property: $3,
} }
if brackets, ok := $3.(*ast.ParserBrackets); ok {
propertyFetch.OpenCurlyBracketTkn = brackets.OpenBracketTkn
propertyFetch.Property = brackets.Child
propertyFetch.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = propertyFetch
} }
; ;
@ -3855,12 +3871,20 @@ new_variable:
} }
| new_variable T_OBJECT_OPERATOR property_name | new_variable T_OBJECT_OPERATOR property_name
{ {
$$ = &ast.ExprPropertyFetch{ propertyFetch := &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $3), Position: yylex.(*Parser).builder.NewNodesPosition($1, $3),
Var: $1, Var: $1,
ObjectOperatorTkn: $2, ObjectOperatorTkn: $2,
Property: $3, Property: $3,
} }
if brackets, ok := $3.(*ast.ParserBrackets); ok {
propertyFetch.OpenCurlyBracketTkn = brackets.OpenBracketTkn
propertyFetch.Property = brackets.Child
propertyFetch.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = propertyFetch
} }
| class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable | class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable
{ {

View File

@ -1501,14 +1501,16 @@ func (n *ExprList) GetPosition() *position.Position {
// ExprMethodCall node // ExprMethodCall node
type ExprMethodCall struct { type ExprMethodCall struct {
Position *position.Position Position *position.Position
Var Vertex Var Vertex
ObjectOperatorTkn *token.Token ObjectOperatorTkn *token.Token
Method Vertex OpenCurlyBracketTkn *token.Token
OpenParenthesisTkn *token.Token Method Vertex
Arguments []Vertex CloseCurlyBracketTkn *token.Token
SeparatorTkns []*token.Token OpenParenthesisTkn *token.Token
CloseParenthesisTkn *token.Token Arguments []Vertex
SeparatorTkns []*token.Token
CloseParenthesisTkn *token.Token
} }
func (n *ExprMethodCall) Accept(v NodeVisitor) { func (n *ExprMethodCall) Accept(v NodeVisitor) {
@ -1615,10 +1617,12 @@ func (n *ExprPrint) GetPosition() *position.Position {
// ExprPropertyFetch node // ExprPropertyFetch node
type ExprPropertyFetch struct { type ExprPropertyFetch struct {
Position *position.Position Position *position.Position
Var Vertex Var Vertex
ObjectOperatorTkn *token.Token ObjectOperatorTkn *token.Token
Property Vertex OpenCurlyBracketTkn *token.Token
Property Vertex
CloseCurlyBracketTkn *token.Token
} }
func (n *ExprPropertyFetch) Accept(v NodeVisitor) { func (n *ExprPropertyFetch) Accept(v NodeVisitor) {

View File

@ -1326,7 +1326,9 @@ func (v *Dumper) ExprMethodCall(n *ast.ExprMethodCall) {
v.dumpPosition(n.Position) v.dumpPosition(n.Position)
v.dumpVertex("Var", n.Var) v.dumpVertex("Var", n.Var)
v.dumpToken("ObjectOperatorTkn", n.ObjectOperatorTkn) v.dumpToken("ObjectOperatorTkn", n.ObjectOperatorTkn)
v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn)
v.dumpVertex("Method", n.Method) v.dumpVertex("Method", n.Method)
v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn)
v.dumpToken("OpenParenthesisTkn", n.OpenParenthesisTkn) v.dumpToken("OpenParenthesisTkn", n.OpenParenthesisTkn)
v.dumpVertexList("Arguments", n.Arguments) v.dumpVertexList("Arguments", n.Arguments)
v.dumpTokenList("SeparatorTkns", n.SeparatorTkns) v.dumpTokenList("SeparatorTkns", n.SeparatorTkns)
@ -1419,7 +1421,9 @@ func (v *Dumper) ExprPropertyFetch(n *ast.ExprPropertyFetch) {
v.dumpPosition(n.Position) v.dumpPosition(n.Position)
v.dumpVertex("Var", n.Var) v.dumpVertex("Var", n.Var)
v.dumpToken("ObjectOperatorTkn", n.ObjectOperatorTkn) v.dumpToken("ObjectOperatorTkn", n.ObjectOperatorTkn)
v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn)
v.dumpVertex("Property", n.Property) v.dumpVertex("Property", n.Property)
v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn)
v.indent-- v.indent--
v.print(v.indent, "},\n") v.print(v.indent, "},\n")

View File

@ -1290,6 +1290,17 @@ func (f *formatter) ExprList(n *ast.ExprList) {
func (f *formatter) ExprMethodCall(n *ast.ExprMethodCall) { func (f *formatter) ExprMethodCall(n *ast.ExprMethodCall) {
n.Var.Accept(f) n.Var.Accept(f)
n.ObjectOperatorTkn = f.newToken(token.T_OBJECT_OPERATOR, []byte("->")) n.ObjectOperatorTkn = f.newToken(token.T_OBJECT_OPERATOR, []byte("->"))
n.OpenCurlyBracketTkn = nil
n.CloseCurlyBracketTkn = nil
switch n.Method.(type) {
case *ast.Identifier:
case *ast.ExprVariable:
default:
n.OpenCurlyBracketTkn = f.newToken('{', []byte("{"))
n.CloseCurlyBracketTkn = f.newToken('}', []byte("}"))
}
n.Method.Accept(f) n.Method.Accept(f)
n.OpenParenthesisTkn = f.newToken('(', []byte("(")) n.OpenParenthesisTkn = f.newToken('(', []byte("("))
@ -1346,6 +1357,17 @@ func (f *formatter) ExprPrint(n *ast.ExprPrint) {
func (f *formatter) ExprPropertyFetch(n *ast.ExprPropertyFetch) { func (f *formatter) ExprPropertyFetch(n *ast.ExprPropertyFetch) {
n.Var.Accept(f) n.Var.Accept(f)
n.ObjectOperatorTkn = f.newToken(token.T_OBJECT_OPERATOR, []byte("->")) n.ObjectOperatorTkn = f.newToken(token.T_OBJECT_OPERATOR, []byte("->"))
n.OpenCurlyBracketTkn = nil
n.CloseCurlyBracketTkn = nil
switch n.Property.(type) {
case *ast.Identifier:
case *ast.ExprVariable:
default:
n.OpenCurlyBracketTkn = f.newToken('{', []byte("{"))
n.CloseCurlyBracketTkn = f.newToken('}', []byte("}"))
}
n.Property.Accept(f) n.Property.Accept(f)
} }

View File

@ -4216,6 +4216,34 @@ func TestFormatter_ExprMethodCall(t *testing.T) {
} }
} }
func TestFormatter_ExprMethodCall_Expr(t *testing.T) {
o := bytes.NewBufferString("")
n := &ast.ExprMethodCall{
Var: &ast.ExprVariable{
VarName: &ast.Identifier{
Value: []byte("$foo"),
},
},
Method: &ast.ScalarString{
Value: []byte("'bar'"),
},
}
f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1)
n.Accept(f)
p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP)
n.Accept(p)
expected := `$foo->{'bar'}()`
actual := o.String()
if expected != actual {
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
}
}
func TestFormatter_ExprMethodCall_Arguments(t *testing.T) { func TestFormatter_ExprMethodCall_Arguments(t *testing.T) {
o := bytes.NewBufferString("") o := bytes.NewBufferString("")
@ -4483,6 +4511,34 @@ func TestFormatter_ExprPropertyFetch(t *testing.T) {
} }
} }
func TestFormatter_ExprPropertyFetch_Expr(t *testing.T) {
o := bytes.NewBufferString("")
n := &ast.ExprPropertyFetch{
Var: &ast.ExprVariable{
VarName: &ast.Identifier{
Value: []byte("$foo"),
},
},
Property: &ast.ScalarString{
Value: []byte("'bar'"),
},
}
f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1)
n.Accept(f)
p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP)
n.Accept(p)
expected := `$foo->{'bar'}`
actual := o.String()
if expected != actual {
t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
}
}
func TestFormatter_ExprRequire(t *testing.T) { func TestFormatter_ExprRequire(t *testing.T) {
o := bytes.NewBufferString("") o := bytes.NewBufferString("")

View File

@ -772,7 +772,9 @@ func (p *printer) ExprList(n *ast.ExprList) {
func (p *printer) ExprMethodCall(n *ast.ExprMethodCall) { func (p *printer) ExprMethodCall(n *ast.ExprMethodCall) {
p.printNode(n.Var) p.printNode(n.Var)
p.printToken(n.ObjectOperatorTkn, []byte("->")) p.printToken(n.ObjectOperatorTkn, []byte("->"))
p.printToken(n.OpenCurlyBracketTkn, nil)
p.printNode(n.Method) p.printNode(n.Method)
p.printToken(n.CloseCurlyBracketTkn, nil)
p.printToken(n.OpenParenthesisTkn, []byte("(")) p.printToken(n.OpenParenthesisTkn, []byte("("))
p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(",")) p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(","))
p.printToken(n.CloseParenthesisTkn, []byte(")")) p.printToken(n.CloseParenthesisTkn, []byte(")"))
@ -814,7 +816,9 @@ func (p *printer) ExprPrint(n *ast.ExprPrint) {
func (p *printer) ExprPropertyFetch(n *ast.ExprPropertyFetch) { func (p *printer) ExprPropertyFetch(n *ast.ExprPropertyFetch) {
p.printNode(n.Var) p.printNode(n.Var)
p.printToken(n.ObjectOperatorTkn, []byte("->")) p.printToken(n.ObjectOperatorTkn, []byte("->"))
p.printToken(n.OpenCurlyBracketTkn, nil)
p.printNode(n.Property) p.printNode(n.Property)
p.printToken(n.CloseCurlyBracketTkn, nil)
} }
func (p *printer) ExprRequire(n *ast.ExprRequire) { func (p *printer) ExprRequire(n *ast.ExprRequire) {