refactoring: update ast structure of "StaticCall" node

This commit is contained in:
Vadym Slizov 2020-12-27 23:19:49 +02:00
parent 0f2341bfa9
commit ad884c99df
No known key found for this signature in database
GPG Key ID: AEA2A9388EF42A4A
9 changed files with 432 additions and 321 deletions

410
internal/php5/php5.go generated

File diff suppressed because it is too large Load Diff

View File

@ -3688,7 +3688,7 @@ function_call:
}
| class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list
{
$$ = &ast.ExprStaticCall{
staticCall := &ast.ExprStaticCall{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $4),
Class: $1,
DoubleColonTkn: $2,
@ -3698,6 +3698,14 @@ function_call:
SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn,
}
if brackets, ok := $3.(*ast.ParserBrackets); ok {
staticCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
staticCall.Call = brackets.Child
staticCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = staticCall
}
| class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list
{
@ -3714,7 +3722,7 @@ function_call:
}
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list
{
$$ = &ast.ExprStaticCall{
staticCall := &ast.ExprStaticCall{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $4),
Class: $1,
DoubleColonTkn: $2,
@ -3724,6 +3732,14 @@ function_call:
SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn,
}
if brackets, ok := $3.(*ast.ParserBrackets); ok {
staticCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
staticCall.Call = brackets.Child
staticCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = staticCall
}
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list
{

240
internal/php7/php7.go generated
View File

@ -339,7 +339,7 @@ const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16
// line internal/php7/php7.y:4374
// line internal/php7/php7.y:4390
// line yacctab:1
var yyExca = [...]int{
@ -5913,7 +5913,7 @@ yydefault:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3323
{
yyVAL.node = &ast.ExprStaticCall{
staticCall := &ast.ExprStaticCall{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node),
Class: yyDollar[1].node,
DoubleColonTkn: yyDollar[2].token,
@ -5923,12 +5923,20 @@ yydefault:
SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn,
}
if brackets, ok := yyDollar[3].node.(*ast.ParserBrackets); ok {
staticCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
staticCall.Call = brackets.Child
staticCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
yyVAL.node = staticCall
}
case 386:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3336
// line internal/php7/php7.y:3344
{
yyVAL.node = &ast.ExprStaticCall{
staticCall := &ast.ExprStaticCall{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node),
Class: yyDollar[1].node,
DoubleColonTkn: yyDollar[2].token,
@ -5938,10 +5946,18 @@ yydefault:
SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn,
}
if brackets, ok := yyDollar[3].node.(*ast.ParserBrackets); ok {
staticCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
staticCall.Call = brackets.Child
staticCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
yyVAL.node = staticCall
}
case 387:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:3349
// line internal/php7/php7.y:3365
{
yyVAL.node = &ast.ExprFunctionCall{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node),
@ -5954,7 +5970,7 @@ yydefault:
}
case 388:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3363
// line internal/php7/php7.y:3379
{
yyVAL.node = &ast.Identifier{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -5964,31 +5980,31 @@ yydefault:
}
case 389:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3371
// line internal/php7/php7.y:3387
{
yyVAL.node = yyDollar[1].node
}
case 390:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3378
// line internal/php7/php7.y:3394
{
yyVAL.node = yyDollar[1].node
}
case 391:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3382
// line internal/php7/php7.y:3398
{
yyVAL.node = yyDollar[1].node
}
case 392:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3389
// line internal/php7/php7.y:3405
{
yyVAL.node = nil
}
case 393:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3393
// line internal/php7/php7.y:3409
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -5999,13 +6015,13 @@ yydefault:
}
case 394:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3405
// line internal/php7/php7.y:3421
{
yyVAL.list = []ast.Vertex{}
}
case 395:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3409
// line internal/php7/php7.y:3425
{
yyVAL.list = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
@ -6017,25 +6033,25 @@ yydefault:
}
case 396:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3419
// line internal/php7/php7.y:3435
{
yyVAL.list = yyDollar[1].list
}
case 397:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3426
// line internal/php7/php7.y:3442
{
yyVAL.node = &ast.ArgumentList{}
}
case 398:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3430
// line internal/php7/php7.y:3446
{
yyVAL.node = yyDollar[1].node
}
case 399:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3437
// line internal/php7/php7.y:3453
{
yyVAL.node = &ast.ExprArray{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6048,7 +6064,7 @@ yydefault:
}
case 400:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3448
// line internal/php7/php7.y:3464
{
yyVAL.node = &ast.ExprArray{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6060,7 +6076,7 @@ yydefault:
}
case 401:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3458
// line internal/php7/php7.y:3474
{
yyVAL.node = &ast.ScalarString{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6070,7 +6086,7 @@ yydefault:
}
case 402:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3469
// line internal/php7/php7.y:3485
{
yyVAL.node = &ast.ScalarLnumber{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6080,7 +6096,7 @@ yydefault:
}
case 403:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3477
// line internal/php7/php7.y:3493
{
yyVAL.node = &ast.ScalarDnumber{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6090,7 +6106,7 @@ yydefault:
}
case 404:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3485
// line internal/php7/php7.y:3501
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6100,7 +6116,7 @@ yydefault:
}
case 405:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3493
// line internal/php7/php7.y:3509
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6110,7 +6126,7 @@ yydefault:
}
case 406:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3501
// line internal/php7/php7.y:3517
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6120,7 +6136,7 @@ yydefault:
}
case 407:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3509
// line internal/php7/php7.y:3525
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6130,7 +6146,7 @@ yydefault:
}
case 408:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3517
// line internal/php7/php7.y:3533
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6140,7 +6156,7 @@ yydefault:
}
case 409:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3525
// line internal/php7/php7.y:3541
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6150,7 +6166,7 @@ yydefault:
}
case 410:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3533
// line internal/php7/php7.y:3549
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6160,7 +6176,7 @@ yydefault:
}
case 411:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3541
// line internal/php7/php7.y:3557
{
yyVAL.node = &ast.ScalarMagicConstant{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6170,7 +6186,7 @@ yydefault:
}
case 412:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3549
// line internal/php7/php7.y:3565
{
yyVAL.node = &ast.ScalarHeredoc{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6187,7 +6203,7 @@ yydefault:
}
case 413:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:3564
// line internal/php7/php7.y:3580
{
yyVAL.node = &ast.ScalarHeredoc{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token),
@ -6197,7 +6213,7 @@ yydefault:
}
case 414:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3572
// line internal/php7/php7.y:3588
{
yyVAL.node = &ast.ScalarEncapsed{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6208,7 +6224,7 @@ yydefault:
}
case 415:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3581
// line internal/php7/php7.y:3597
{
yyVAL.node = &ast.ScalarHeredoc{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6219,19 +6235,19 @@ yydefault:
}
case 416:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3590
// line internal/php7/php7.y:3606
{
yyVAL.node = yyDollar[1].node
}
case 417:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3594
// line internal/php7/php7.y:3610
{
yyVAL.node = yyDollar[1].node
}
case 418:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3601
// line internal/php7/php7.y:3617
{
yyVAL.node = &ast.ExprConstFetch{
Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node),
@ -6240,7 +6256,7 @@ yydefault:
}
case 419:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3608
// line internal/php7/php7.y:3624
{
yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@ -6255,7 +6271,7 @@ yydefault:
}
case 420:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3621
// line internal/php7/php7.y:3637
{
yyVAL.node = &ast.ExprClassConstFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token),
@ -6270,43 +6286,43 @@ yydefault:
}
case 421:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3637
// line internal/php7/php7.y:3653
{
yyVAL.node = yyDollar[1].node
}
case 422:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3641
// line internal/php7/php7.y:3657
{
yyVAL.node = yyDollar[1].node
}
case 423:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3648
// line internal/php7/php7.y:3664
{
yyVAL.node = nil
}
case 424:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3652
// line internal/php7/php7.y:3668
{
yyVAL.node = yyDollar[1].node
}
case 425:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3659
// line internal/php7/php7.y:3675
{
yyVAL.node = yyDollar[1].node
}
case 426:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3666
// line internal/php7/php7.y:3682
{
yyVAL.node = yyDollar[1].node
}
case 427:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3670
// line internal/php7/php7.y:3686
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6317,19 +6333,19 @@ yydefault:
}
case 428:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3679
// line internal/php7/php7.y:3695
{
yyVAL.node = yyDollar[1].node
}
case 429:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3686
// line internal/php7/php7.y:3702
{
yyVAL.node = yyDollar[1].node
}
case 430:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3690
// line internal/php7/php7.y:3706
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6340,19 +6356,19 @@ yydefault:
}
case 431:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3699
// line internal/php7/php7.y:3715
{
yyVAL.node = yyDollar[1].node
}
case 432:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3706
// line internal/php7/php7.y:3722
{
yyVAL.node = yyDollar[1].node
}
case 433:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3710
// line internal/php7/php7.y:3726
{
yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -6364,7 +6380,7 @@ yydefault:
}
case 434:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3720
// line internal/php7/php7.y:3736
{
yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -6376,7 +6392,7 @@ yydefault:
}
case 435:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3730
// line internal/php7/php7.y:3746
{
yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -6388,7 +6404,7 @@ yydefault:
}
case 436:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3740
// line internal/php7/php7.y:3756
{
methodCall := &ast.ExprMethodCall{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node),
@ -6411,25 +6427,25 @@ yydefault:
}
case 437:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3761
// line internal/php7/php7.y:3777
{
yyVAL.node = yyDollar[1].node
}
case 438:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3768
// line internal/php7/php7.y:3784
{
yyVAL.node = yyDollar[1].node
}
case 439:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3772
// line internal/php7/php7.y:3788
{
yyVAL.node = yyDollar[1].node
}
case 440:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3776
// line internal/php7/php7.y:3792
{
propertyFetch := &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6448,7 +6464,7 @@ yydefault:
}
case 441:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3796
// line internal/php7/php7.y:3812
{
yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6461,7 +6477,7 @@ yydefault:
}
case 442:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3807
// line internal/php7/php7.y:3823
{
yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6473,7 +6489,7 @@ yydefault:
}
case 443:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:3817
// line internal/php7/php7.y:3833
{
yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -6483,7 +6499,7 @@ yydefault:
}
case 444:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3828
// line internal/php7/php7.y:3844
{
yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6494,7 +6510,7 @@ yydefault:
}
case 445:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3837
// line internal/php7/php7.y:3853
{
yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6505,13 +6521,13 @@ yydefault:
}
case 446:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3849
// line internal/php7/php7.y:3865
{
yyVAL.node = yyDollar[1].node
}
case 447:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3853
// line internal/php7/php7.y:3869
{
yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -6523,7 +6539,7 @@ yydefault:
}
case 448:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3863
// line internal/php7/php7.y:3879
{
yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token),
@ -6535,7 +6551,7 @@ yydefault:
}
case 449:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3873
// line internal/php7/php7.y:3889
{
propertyFetch := &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6554,7 +6570,7 @@ yydefault:
}
case 450:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3890
// line internal/php7/php7.y:3906
{
yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6565,7 +6581,7 @@ yydefault:
}
case 451:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3899
// line internal/php7/php7.y:3915
{
yyVAL.node = &ast.ExprStaticPropertyFetch{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6576,7 +6592,7 @@ yydefault:
}
case 452:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3911
// line internal/php7/php7.y:3927
{
yyVAL.node = &ast.Identifier{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6586,7 +6602,7 @@ yydefault:
}
case 453:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3919
// line internal/php7/php7.y:3935
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6597,13 +6613,13 @@ yydefault:
}
case 454:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3928
// line internal/php7/php7.y:3944
{
yyVAL.node = yyDollar[1].node
}
case 455:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3935
// line internal/php7/php7.y:3951
{
yyVAL.node = &ast.Identifier{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6613,7 +6629,7 @@ yydefault:
}
case 456:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3943
// line internal/php7/php7.y:3959
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6624,13 +6640,13 @@ yydefault:
}
case 457:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3952
// line internal/php7/php7.y:3968
{
yyVAL.node = yyDollar[1].node
}
case 458:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3959
// line internal/php7/php7.y:3975
{
pairList := yyDollar[1].node.(*ast.ParserSeparatedList)
fistPair := pairList.Items[0].(*ast.ExprArrayItem)
@ -6643,19 +6659,19 @@ yydefault:
}
case 459:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3973
// line internal/php7/php7.y:3989
{
yyVAL.node = &ast.ExprArrayItem{}
}
case 460:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3977
// line internal/php7/php7.y:3993
{
yyVAL.node = yyDollar[1].node
}
case 461:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3984
// line internal/php7/php7.y:4000
{
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)
@ -6664,7 +6680,7 @@ yydefault:
}
case 462:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3991
// line internal/php7/php7.y:4007
{
yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{yyDollar[1].node},
@ -6672,7 +6688,7 @@ yydefault:
}
case 463:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4000
// line internal/php7/php7.y:4016
{
yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node),
@ -6683,7 +6699,7 @@ yydefault:
}
case 464:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4009
// line internal/php7/php7.y:4025
{
yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node),
@ -6692,7 +6708,7 @@ yydefault:
}
case 465:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4016
// line internal/php7/php7.y:4032
{
yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node),
@ -6704,7 +6720,7 @@ yydefault:
}
case 466:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4026
// line internal/php7/php7.y:4042
{
yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -6714,7 +6730,7 @@ yydefault:
}
case 467:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4034
// line internal/php7/php7.y:4050
{
yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -6724,7 +6740,7 @@ yydefault:
}
case 468:
yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php7/php7.y:4042
// line internal/php7/php7.y:4058
{
yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token),
@ -6742,7 +6758,7 @@ yydefault:
}
case 469:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4058
// line internal/php7/php7.y:4074
{
yyVAL.node = &ast.ExprArrayItem{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6758,13 +6774,13 @@ yydefault:
}
case 470:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4075
// line internal/php7/php7.y:4091
{
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
}
case 471:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4079
// line internal/php7/php7.y:4095
{
yyVAL.list = append(
yyDollar[1].list,
@ -6777,13 +6793,13 @@ yydefault:
}
case 472:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4090
// line internal/php7/php7.y:4106
{
yyVAL.list = []ast.Vertex{yyDollar[1].node}
}
case 473:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4094
// line internal/php7/php7.y:4110
{
yyVAL.list = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
@ -6796,7 +6812,7 @@ yydefault:
}
case 474:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4108
// line internal/php7/php7.y:4124
{
yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6809,7 +6825,7 @@ yydefault:
}
case 475:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4119
// line internal/php7/php7.y:4135
{
yyVAL.node = &ast.ExprArrayDimFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -6828,7 +6844,7 @@ yydefault:
}
case 476:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4136
// line internal/php7/php7.y:4152
{
yyVAL.node = &ast.ExprPropertyFetch{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6850,7 +6866,7 @@ yydefault:
}
case 477:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4156
// line internal/php7/php7.y:4172
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6864,7 +6880,7 @@ yydefault:
}
case 478:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4168
// line internal/php7/php7.y:4184
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6882,7 +6898,7 @@ yydefault:
}
case 479:
yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php7/php7.y:4184
// line internal/php7/php7.y:4200
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token),
@ -6906,7 +6922,7 @@ yydefault:
}
case 480:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4206
// line internal/php7/php7.y:4222
{
yyVAL.node = &ast.ParserBrackets{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
@ -6917,7 +6933,7 @@ yydefault:
}
case 481:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4218
// line internal/php7/php7.y:4234
{
yyVAL.node = &ast.ScalarString{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6927,7 +6943,7 @@ yydefault:
}
case 482:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4226
// line internal/php7/php7.y:4242
{
// TODO: add option to handle 64 bit integer
if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil {
@ -6946,7 +6962,7 @@ yydefault:
}
case 483:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4243
// line internal/php7/php7.y:4259
{
_, err := strconv.Atoi(string(yyDollar[2].token.Value))
isInt := err == nil
@ -6972,7 +6988,7 @@ yydefault:
}
case 484:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4267
// line internal/php7/php7.y:4283
{
yyVAL.node = &ast.ExprVariable{
Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token),
@ -6985,7 +7001,7 @@ yydefault:
}
case 485:
yyDollar = yyS[yypt-5 : yypt+1]
// line internal/php7/php7.y:4281
// line internal/php7/php7.y:4297
{
if yyDollar[4].token != nil {
yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token)
@ -7002,7 +7018,7 @@ yydefault:
}
case 486:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4296
// line internal/php7/php7.y:4312
{
yyVAL.node = &ast.ExprEmpty{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -7014,7 +7030,7 @@ yydefault:
}
case 487:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4306
// line internal/php7/php7.y:4322
{
yyVAL.node = &ast.ExprInclude{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7024,7 +7040,7 @@ yydefault:
}
case 488:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4314
// line internal/php7/php7.y:4330
{
yyVAL.node = &ast.ExprIncludeOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7034,7 +7050,7 @@ yydefault:
}
case 489:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4322
// line internal/php7/php7.y:4338
{
yyVAL.node = &ast.ExprEval{
Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token),
@ -7046,7 +7062,7 @@ yydefault:
}
case 490:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4332
// line internal/php7/php7.y:4348
{
yyVAL.node = &ast.ExprRequire{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7056,7 +7072,7 @@ yydefault:
}
case 491:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4340
// line internal/php7/php7.y:4356
{
yyVAL.node = &ast.ExprRequireOnce{
Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node),
@ -7066,7 +7082,7 @@ yydefault:
}
case 492:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4351
// line internal/php7/php7.y:4367
{
yyVAL.node = &ast.ParserSeparatedList{
Items: []ast.Vertex{yyDollar[1].node},
@ -7074,7 +7090,7 @@ yydefault:
}
case 493:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4357
// line internal/php7/php7.y:4373
{
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)
@ -7083,7 +7099,7 @@ yydefault:
}
case 494:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4367
// line internal/php7/php7.y:4383
{
yyVAL.node = yyDollar[1].node
}

View File

@ -3321,7 +3321,7 @@ function_call:
}
| class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list
{
$$ = &ast.ExprStaticCall{
staticCall := &ast.ExprStaticCall{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $4),
Class: $1,
DoubleColonTkn: $2,
@ -3331,10 +3331,18 @@ function_call:
SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn,
}
if brackets, ok := $3.(*ast.ParserBrackets); ok {
staticCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
staticCall.Call = brackets.Child
staticCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = staticCall
}
| variable_class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list
{
$$ = &ast.ExprStaticCall{
staticCall := &ast.ExprStaticCall{
Position: yylex.(*Parser).builder.NewNodesPosition($1, $4),
Class: $1,
DoubleColonTkn: $2,
@ -3344,6 +3352,14 @@ function_call:
SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns,
CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn,
}
if brackets, ok := $3.(*ast.ParserBrackets); ok {
staticCall.OpenCurlyBracketTkn = brackets.OpenBracketTkn
staticCall.Call = brackets.Child
staticCall.CloseCurlyBracketTkn = brackets.CloseBracketTkn
}
$$ = staticCall
}
| callable_expr argument_list
{

View File

@ -1681,14 +1681,16 @@ func (n *ExprShellExec) GetPosition() *position.Position {
// ExprStaticCall node
type ExprStaticCall struct {
Position *position.Position
Class Vertex
DoubleColonTkn *token.Token
Call Vertex
OpenParenthesisTkn *token.Token
Arguments []Vertex
SeparatorTkns []*token.Token
CloseParenthesisTkn *token.Token
Position *position.Position
Class Vertex
DoubleColonTkn *token.Token
OpenCurlyBracketTkn *token.Token
Call Vertex
CloseCurlyBracketTkn *token.Token
OpenParenthesisTkn *token.Token
Arguments []Vertex
SeparatorTkns []*token.Token
CloseParenthesisTkn *token.Token
}
func (n *ExprStaticCall) Accept(v NodeVisitor) {

View File

@ -1473,7 +1473,9 @@ func (v *Dumper) ExprStaticCall(n *ast.ExprStaticCall) {
v.dumpPosition(n.Position)
v.dumpVertex("Class", n.Class)
v.dumpToken("DoubleColonTkn", n.DoubleColonTkn)
v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn)
v.dumpVertex("Call", n.Call)
v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn)
v.dumpToken("OpenParenthesisTkn", n.OpenParenthesisTkn)
v.dumpVertexList("Arguments", n.Arguments)
v.dumpTokenList("SeparatorTkns", n.SeparatorTkns)

View File

@ -1394,6 +1394,17 @@ func (f *formatter) ExprShellExec(n *ast.ExprShellExec) {
func (f *formatter) ExprStaticCall(n *ast.ExprStaticCall) {
n.Class.Accept(f)
n.DoubleColonTkn = f.newToken(token.T_PAAMAYIM_NEKUDOTAYIM, []byte("::"))
n.OpenCurlyBracketTkn = nil
n.CloseCurlyBracketTkn = nil
switch n.Call.(type) {
case *ast.Identifier:
case *ast.ExprVariable:
default:
n.OpenCurlyBracketTkn = f.newToken('{', []byte("{"))
n.CloseCurlyBracketTkn = f.newToken('}', []byte("}"))
}
n.Call.Accept(f)
n.OpenParenthesisTkn = f.newToken('(', []byte("("))

View File

@ -4692,6 +4692,36 @@ func TestFormatter_ExprStaticCall(t *testing.T) {
}
}
func TestFormatter_ExprStaticCall_Expr(t *testing.T) {
o := bytes.NewBufferString("")
n := &ast.ExprStaticCall{
Class: &ast.NameName{
Parts: []ast.Vertex{
&ast.NameNamePart{
Value: []byte("foo"),
},
},
},
Call: &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_ExprStaticCall_Arguments(t *testing.T) {
o := bytes.NewBufferString("")

View File

@ -840,7 +840,9 @@ func (p *printer) ExprShellExec(n *ast.ExprShellExec) {
func (p *printer) ExprStaticCall(n *ast.ExprStaticCall) {
p.printNode(n.Class)
p.printToken(n.DoubleColonTkn, []byte("::"))
p.printToken(n.OpenCurlyBracketTkn, nil)
p.printNode(n.Call)
p.printToken(n.CloseCurlyBracketTkn, nil)
p.printToken(n.OpenParenthesisTkn, p.ifNodeList(n.Arguments, []byte("(")))
p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(","))
p.printToken(n.CloseParenthesisTkn, p.ifNodeList(n.Arguments, []byte(")")))