refactoring: update ast structure of "ArrayItem" node

This commit is contained in:
Vadym Slizov
2020-12-26 20:13:50 +02:00
parent 8bf1fa822d
commit 0f5f5e7dc7
10 changed files with 228 additions and 271 deletions

View File

@@ -30786,61 +30786,53 @@ func TestExprArray_Items(t *testing.T) {
StartPos: 15,
EndPos: 18,
},
Val: &ast.ExprReference{
AmpersandTkn: &token.Token{
ID: token.ID(38),
Value: []byte("&"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 15,
EndPos: 18,
EndPos: 16,
},
AmpersandTkn: &token.Token{
ID: token.ID(38),
Value: []byte("&"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 15,
EndPos: 16,
},
FreeFloating: []*token.Token{
{
ID: token.T_WHITESPACE,
Value: []byte(" "),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 14,
EndPos: 15,
},
FreeFloating: []*token.Token{
{
ID: token.T_WHITESPACE,
Value: []byte(" "),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 14,
EndPos: 15,
},
},
},
Var: &ast.ExprVariable{
},
Val: &ast.ExprVariable{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 16,
EndPos: 18,
},
VarName: &ast.Identifier{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 16,
EndPos: 18,
},
VarName: &ast.Identifier{
IdentifierTkn: &token.Token{
ID: token.T_VARIABLE,
Value: []byte("$b"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 16,
EndPos: 18,
},
IdentifierTkn: &token.Token{
ID: token.T_VARIABLE,
Value: []byte("$b"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 16,
EndPos: 18,
},
},
Value: []byte("$b"),
},
Value: []byte("$b"),
},
},
},
@@ -39025,61 +39017,53 @@ func TestExprShortArray_Items(t *testing.T) {
StartPos: 10,
EndPos: 13,
},
Val: &ast.ExprReference{
AmpersandTkn: &token.Token{
ID: token.ID(38),
Value: []byte("&"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 10,
EndPos: 13,
EndPos: 11,
},
AmpersandTkn: &token.Token{
ID: token.ID(38),
Value: []byte("&"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 10,
EndPos: 11,
},
FreeFloating: []*token.Token{
{
ID: token.T_WHITESPACE,
Value: []byte(" "),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 9,
EndPos: 10,
},
FreeFloating: []*token.Token{
{
ID: token.T_WHITESPACE,
Value: []byte(" "),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 9,
EndPos: 10,
},
},
},
Var: &ast.ExprVariable{
},
Val: &ast.ExprVariable{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 11,
EndPos: 13,
},
VarName: &ast.Identifier{
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 11,
EndPos: 13,
},
VarName: &ast.Identifier{
IdentifierTkn: &token.Token{
ID: token.T_VARIABLE,
Value: []byte("$b"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 11,
EndPos: 13,
},
IdentifierTkn: &token.Token{
ID: token.T_VARIABLE,
Value: []byte("$b"),
Position: &position.Position{
StartLine: 1,
EndLine: 1,
StartPos: 11,
EndPos: 13,
},
},
Value: []byte("$b"),
},
Value: []byte("$b"),
},
},
},

100
internal/php5/php5.go generated
View File

@@ -340,7 +340,7 @@ const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16
// line internal/php5/php5.y:5669
// line internal/php5/php5.y:5657
// line yacctab:1
var yyExca = [...]int{
@@ -7825,11 +7825,8 @@ yydefault:
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[3].node, yyDollar[6].node),
Key: yyDollar[3].node,
DoubleArrowTkn: yyDollar[4].token,
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[5].token, yyDollar[6].node),
AmpersandTkn: yyDollar[5].token,
Var: yyDollar[6].node,
},
AmpersandTkn: yyDollar[5].token,
Val: yyDollar[6].node,
}
yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token)
@@ -7839,15 +7836,12 @@ yydefault:
}
case 488:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5274
// line internal/php5/php5.y:5271
{
arrayItem := &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node),
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node),
AmpersandTkn: yyDollar[3].token,
Var: yyDollar[4].node,
},
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node),
AmpersandTkn: yyDollar[3].token,
Val: yyDollar[4].node,
}
yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token)
@@ -7857,7 +7851,7 @@ yydefault:
}
case 489:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5290
// line internal/php5/php5.y:5284
{
yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{
@@ -7865,41 +7859,35 @@ yydefault:
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node),
Key: yyDollar[1].node,
DoubleArrowTkn: yyDollar[2].token,
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[3].token, yyDollar[4].node),
AmpersandTkn: yyDollar[3].token,
Var: yyDollar[4].node,
},
AmpersandTkn: yyDollar[3].token,
Val: yyDollar[4].node,
},
},
}
}
case 490:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5307
// line internal/php5/php5.y:5298
{
yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{
&ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
AmpersandTkn: yyDollar[1].token,
Var: yyDollar[2].node,
},
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
AmpersandTkn: yyDollar[1].token,
Val: yyDollar[2].node,
},
},
}
}
case 491:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5325
// line internal/php5/php5.y:5313
{
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
}
case 492:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5329
// line internal/php5/php5.y:5317
{
yyVAL.list = append(
yyDollar[1].list,
@@ -7912,13 +7900,13 @@ yydefault:
}
case 493:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5340
// line internal/php5/php5.y:5328
{
yyVAL.list = []ast.Vertex{yyDollar[1].node}
}
case 494:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5344
// line internal/php5/php5.y:5332
{
yyVAL.list = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
@@ -7931,7 +7919,7 @@ yydefault:
}
case 495:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5358
// line internal/php5/php5.y:5346
{
yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@@ -7944,7 +7932,7 @@ yydefault:
}
case 496:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5369
// line internal/php5/php5.y:5357
{
yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@@ -7963,7 +7951,7 @@ yydefault:
}
case 497:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5386
// line internal/php5/php5.y:5374
{
yyVAL.node = &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@@ -7985,7 +7973,7 @@ yydefault:
}
case 498:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5406
// line internal/php5/php5.y:5394
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@@ -7999,7 +7987,7 @@ yydefault:
}
case 499:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5418
// line internal/php5/php5.y:5406
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@@ -8017,7 +8005,7 @@ yydefault:
}
case 500:
yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php5/php5.y:5434
// line internal/php5/php5.y:5422
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token),
@@ -8041,7 +8029,7 @@ yydefault:
}
case 501:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5456
// line internal/php5/php5.y:5444
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@@ -8052,7 +8040,7 @@ yydefault:
}
case 502:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5468
// line internal/php5/php5.y:5456
{
yyVAL.node = &ast.ScalarString{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@@ -8062,7 +8050,7 @@ yydefault:
}
case 503:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5476
// line internal/php5/php5.y:5464
{
// TODO: add option to handle 64 bit integer
if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil {
@@ -8081,7 +8069,7 @@ yydefault:
}
case 504:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5493
// line internal/php5/php5.y:5481
{
yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@@ -8094,7 +8082,7 @@ yydefault:
}
case 505:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5507
// line internal/php5/php5.y:5495
{
yyVAL.node = &ast.ExprIsset{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@@ -8107,7 +8095,7 @@ yydefault:
}
case 506:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5518
// line internal/php5/php5.y:5506
{
yyVAL.node = &ast.ExprEmpty{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@@ -8119,7 +8107,7 @@ yydefault:
}
case 507:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5528
// line internal/php5/php5.y:5516
{
yyVAL.node = &ast.ExprEmpty{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@@ -8131,7 +8119,7 @@ yydefault:
}
case 508:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5538
// line internal/php5/php5.y:5526
{
yyVAL.node = &ast.ExprInclude{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@@ -8141,7 +8129,7 @@ yydefault:
}
case 509:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5546
// line internal/php5/php5.y:5534
{
yyVAL.node = &ast.ExprIncludeOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@@ -8151,7 +8139,7 @@ yydefault:
}
case 510:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php5/php5.y:5554
// line internal/php5/php5.y:5542
{
yyVAL.node = &ast.ExprEval{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@@ -8163,7 +8151,7 @@ yydefault:
}
case 511:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5564
// line internal/php5/php5.y:5552
{
yyVAL.node = &ast.ExprRequire{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@@ -8173,7 +8161,7 @@ yydefault:
}
case 512:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php5/php5.y:5572
// line internal/php5/php5.y:5560
{
yyVAL.node = &ast.ExprRequireOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@@ -8183,7 +8171,7 @@ yydefault:
}
case 513:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5583
// line internal/php5/php5.y:5571
{
yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{yyDollar[1].node},
@@ -8191,7 +8179,7 @@ yydefault:
}
case 514:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5589
// line internal/php5/php5.y:5577
{
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)
@@ -8200,19 +8188,19 @@ yydefault:
}
case 515:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5599
// line internal/php5/php5.y:5587
{
yyVAL.node = yyDollar[1].node
}
case 516:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php5/php5.y:5603
// line internal/php5/php5.y:5591
{
yyVAL.node = yyDollar[1].node
}
case 517:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5610
// line internal/php5/php5.y:5598
{
yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@@ -8227,7 +8215,7 @@ yydefault:
}
case 518:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5623
// line internal/php5/php5.y:5611
{
yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@@ -8242,7 +8230,7 @@ yydefault:
}
case 519:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5639
// line internal/php5/php5.y:5627
{
yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@@ -8257,7 +8245,7 @@ yydefault:
}
case 520:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php5/php5.y:5655
// line internal/php5/php5.y:5643
{
yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),

View File

@@ -5255,14 +5255,11 @@ non_empty_array_pair_list:
| non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable
{
arrayItem := &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition($3, $6),
Position: yylex.(*Parser).builder.NewNodesPosition($3, $6),
Key: $3,
DoubleArrowTkn: $4,
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition($5, $6),
AmpersandTkn: $5,
Var: $6,
},
AmpersandTkn: $5,
Val: $6,
}
$1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2)
@@ -5273,12 +5270,9 @@ non_empty_array_pair_list:
| non_empty_array_pair_list ',' '&' w_variable
{
arrayItem := &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition($3, $4),
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition($3, $4),
AmpersandTkn: $3,
Var: $4,
},
Position: yylex.(*Parser).builder.NewTokenNodePosition($3, $4),
AmpersandTkn: $3,
Val: $4,
}
$1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2)
@@ -5291,14 +5285,11 @@ non_empty_array_pair_list:
$$ = &ast.ParserSeparatedList{
Items: []ast.Vertex{
&ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $4),
Position: yylex.(*Parser).builder.NewNodesPosition($1, $4),
Key: $1,
DoubleArrowTkn: $2,
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition($3, $4),
AmpersandTkn: $3,
Var: $4,
},
AmpersandTkn: $3,
Val: $4,
},
},
}
@@ -5308,12 +5299,9 @@ non_empty_array_pair_list:
$$ = &ast.ParserSeparatedList{
Items: []ast.Vertex{
&ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $2),
Val: &ast.ExprReference{
Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $2),
AmpersandTkn: $1,
Var: $2,
},
Position: yylex.(*Parser).builder.NewTokenNodePosition($1, $2),
AmpersandTkn: $1,
Val: $2,
},
},
}