[refactoring] update ast structure of "Encapsed", "EncapsedStringPart" and "Heredoc" nodes

This commit is contained in:
Vadym Slizov 2020-11-20 23:36:45 +02:00
parent e3ad9747f4
commit e6a23dfa3a
No known key found for this signature in database
GPG Key ID: AEA2A9388EF42A4A
8 changed files with 556 additions and 487 deletions

463
internal/php5/php5.go generated

File diff suppressed because it is too large Load Diff

View File

@ -4467,11 +4467,15 @@ backticks_expr:
}
| T_ENCAPSED_AND_WHITESPACE
{
part := &ast.ScalarEncapsedStringPart{ast.Node{}, $1.Value}
$$ = []ast.Vertex{part}
// save position
part.GetNode().Position = position.NewTokenPosition($1)
$$ = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
EncapsedStrTkn: $1,
Value: $1.Value,
},
}
}
| encaps_list
{
@ -4593,25 +4597,32 @@ common_scalar:
}
| T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, $2.Value}
$$ = &ast.ScalarHeredoc{ast.Node{}, $1.Value, []ast.Vertex{encapsed}}
// save position
encapsed.GetNode().Position = position.NewTokenPosition($2)
$$.GetNode().Position = position.NewTokensPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenHeredocTkn: $1,
Parts: []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($2),
},
EncapsedStrTkn: $2,
Value: $2.Value,
},
},
CloseHeredocTkn: $3,
}
}
| T_START_HEREDOC T_END_HEREDOC
{
$$ = &ast.ScalarHeredoc{ast.Node{}, $1.Value, nil}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $2)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition($1, $2),
},
OpenHeredocTkn: $1,
CloseHeredocTkn: $2,
}
}
;
@ -5180,23 +5191,25 @@ scalar:
}
| '"' encaps_list '"'
{
$$ = &ast.ScalarEncapsed{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarEncapsed{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenQoteTkn: $1,
Parts: $2,
CloseQoteTkn: $1,
}
}
| T_START_HEREDOC encaps_list T_END_HEREDOC
{
$$ = &ast.ScalarHeredoc{ast.Node{}, $1.Value, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenHeredocTkn: $1,
Parts: $2,
CloseHeredocTkn: $3,
}
}
| T_CLASS_C
{
@ -5976,14 +5989,16 @@ encaps_list:
}
| encaps_list T_ENCAPSED_AND_WHITESPACE
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, $2.Value}
$$ = append($1, encapsed)
// save position
encapsed.GetNode().Position = position.NewTokenPosition($2)
// save comments
yylex.(*Parser).setFreeFloating(encapsed, token.Start, $2.SkippedTokens)
$$ = append(
$1,
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($2),
},
EncapsedStrTkn: $2,
Value: $2.Value,
},
)
}
| encaps_var
{
@ -5991,14 +6006,16 @@ encaps_list:
}
| T_ENCAPSED_AND_WHITESPACE encaps_var
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, $1.Value}
$$ = []ast.Vertex{encapsed, $2}
// save position
encapsed.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating(encapsed, token.Start, $1.SkippedTokens)
$$ = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
EncapsedStrTkn: $1,
Value: $1.Value,
},
$2,
}
}
;

319
internal/php7/php7.go generated
View File

@ -347,7 +347,7 @@ const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16
// line internal/php7/php7.y:4971
// line internal/php7/php7.y:4988
// line yacctab:1
var yyExca = [...]int{
@ -6482,33 +6482,37 @@ yydefault:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3880
{
part := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value}
yyVAL.list = []ast.Vertex{part}
// save position
part.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
yyVAL.list = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
EncapsedStrTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
},
}
}
case 396:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3888
// line internal/php7/php7.y:3892
{
yyVAL.list = yyDollar[1].list
}
case 397:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3895
// line internal/php7/php7.y:3899
{
yyVAL.node = nil
}
case 398:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3899
// line internal/php7/php7.y:3903
{
yyVAL.node = yyDollar[1].node
}
case 399:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:3906
// line internal/php7/php7.y:3910
{
yyVAL.node = &ast.ExprArray{ast.Node{}, yyDollar[3].list}
@ -6522,7 +6526,7 @@ yydefault:
}
case 400:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:3918
// line internal/php7/php7.y:3922
{
yyVAL.node = &ast.ExprShortArray{ast.Node{}, yyDollar[2].list}
@ -6535,7 +6539,7 @@ yydefault:
}
case 401:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3929
// line internal/php7/php7.y:3933
{
yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value}
@ -6547,7 +6551,7 @@ yydefault:
}
case 402:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3942
// line internal/php7/php7.y:3946
{
yyVAL.node = &ast.ScalarLnumber{
Node: ast.Node{
@ -6559,7 +6563,7 @@ yydefault:
}
case 403:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3952
// line internal/php7/php7.y:3956
{
yyVAL.node = &ast.ScalarDnumber{
Node: ast.Node{
@ -6571,7 +6575,7 @@ yydefault:
}
case 404:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3962
// line internal/php7/php7.y:3966
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6583,7 +6587,7 @@ yydefault:
}
case 405:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3972
// line internal/php7/php7.y:3976
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6595,7 +6599,7 @@ yydefault:
}
case 406:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3982
// line internal/php7/php7.y:3986
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6607,7 +6611,7 @@ yydefault:
}
case 407:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3992
// line internal/php7/php7.y:3996
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6619,7 +6623,7 @@ yydefault:
}
case 408:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4002
// line internal/php7/php7.y:4006
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6631,7 +6635,7 @@ yydefault:
}
case 409:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4012
// line internal/php7/php7.y:4016
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6643,7 +6647,7 @@ yydefault:
}
case 410:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4022
// line internal/php7/php7.y:4026
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6655,7 +6659,7 @@ yydefault:
}
case 411:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4032
// line internal/php7/php7.y:4036
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6667,69 +6671,78 @@ yydefault:
}
case 412:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4042
// line internal/php7/php7.y:4046
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[2].token.Value}
yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, []ast.Vertex{encapsed}}
// save position
encapsed.GetNode().Position = position.NewTokenPosition(yyDollar[2].token)
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
},
OpenHeredocTkn: yyDollar[1].token,
Parts: []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[2].token),
},
EncapsedStrTkn: yyDollar[2].token,
Value: yyDollar[2].token.Value,
},
},
CloseHeredocTkn: yyDollar[3].token,
}
}
case 413:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4054
// line internal/php7/php7.y:4065
{
yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, nil}
// save position
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[2].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[2].token),
},
OpenHeredocTkn: yyDollar[1].token,
CloseHeredocTkn: yyDollar[2].token,
}
}
case 414:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4064
// line internal/php7/php7.y:4075
{
yyVAL.node = &ast.ScalarEncapsed{ast.Node{}, yyDollar[2].list}
// save position
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarEncapsed{
Node: ast.Node{
Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
},
OpenQoteTkn: yyDollar[1].token,
Parts: yyDollar[2].list,
CloseQoteTkn: yyDollar[1].token,
}
}
case 415:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4074
// line internal/php7/php7.y:4086
{
yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, yyDollar[2].list}
// save position
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
},
OpenHeredocTkn: yyDollar[1].token,
Parts: yyDollar[2].list,
CloseHeredocTkn: yyDollar[3].token,
}
}
case 416:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4084
// line internal/php7/php7.y:4097
{
yyVAL.node = yyDollar[1].node
}
case 417:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4088
// line internal/php7/php7.y:4101
{
yyVAL.node = yyDollar[1].node
}
case 418:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4095
// line internal/php7/php7.y:4108
{
yyVAL.node = &ast.ExprConstFetch{ast.Node{}, yyDollar[1].node}
@ -6741,7 +6754,7 @@ yydefault:
}
case 419:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4105
// line internal/php7/php7.y:4118
{
target := &ast.Identifier{
Node: ast.Node{
@ -6761,7 +6774,7 @@ yydefault:
}
case 420:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4123
// line internal/php7/php7.y:4136
{
target := &ast.Identifier{
Node: ast.Node{
@ -6781,43 +6794,43 @@ yydefault:
}
case 421:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4144
// line internal/php7/php7.y:4157
{
yyVAL.node = yyDollar[1].node
}
case 422:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4148
// line internal/php7/php7.y:4161
{
yyVAL.node = yyDollar[1].node
}
case 423:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:4155
// line internal/php7/php7.y:4168
{
yyVAL.node = nil
}
case 424:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4159
// line internal/php7/php7.y:4172
{
yyVAL.node = yyDollar[1].node
}
case 425:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4166
// line internal/php7/php7.y:4179
{
yyVAL.node = yyDollar[1].node
}
case 426:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4173
// line internal/php7/php7.y:4186
{
yyVAL.node = yyDollar[1].node
}
case 427:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4177
// line internal/php7/php7.y:4190
{
yyVAL.node = &ast.ParserBrackets{
Node: ast.Node{
@ -6834,19 +6847,19 @@ yydefault:
}
case 428:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4192
// line internal/php7/php7.y:4205
{
yyVAL.node = yyDollar[1].node
}
case 429:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4199
// line internal/php7/php7.y:4212
{
yyVAL.node = yyDollar[1].node
}
case 430:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4203
// line internal/php7/php7.y:4216
{
yyVAL.node = &ast.ParserBrackets{
Node: ast.Node{
@ -6863,19 +6876,19 @@ yydefault:
}
case 431:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4218
// line internal/php7/php7.y:4231
{
yyVAL.node = yyDollar[1].node
}
case 432:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4225
// line internal/php7/php7.y:4238
{
yyVAL.node = yyDollar[1].node
}
case 433:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4229
// line internal/php7/php7.y:4242
{
yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6888,7 +6901,7 @@ yydefault:
}
case 434:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4240
// line internal/php7/php7.y:4253
{
yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6901,7 +6914,7 @@ yydefault:
}
case 435:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4251
// line internal/php7/php7.y:4264
{
yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6914,7 +6927,7 @@ yydefault:
}
case 436:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4262
// line internal/php7/php7.y:4275
{
yyVAL.node = &ast.ExprMethodCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)}
@ -6927,25 +6940,25 @@ yydefault:
}
case 437:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4273
// line internal/php7/php7.y:4286
{
yyVAL.node = yyDollar[1].node
}
case 438:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4280
// line internal/php7/php7.y:4293
{
yyVAL.node = yyDollar[1].node
}
case 439:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4284
// line internal/php7/php7.y:4297
{
yyVAL.node = yyDollar[1].node
}
case 440:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4288
// line internal/php7/php7.y:4301
{
yyVAL.node = &ast.ExprPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6958,7 +6971,7 @@ yydefault:
}
case 441:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4302
// line internal/php7/php7.y:4315
{
name := &ast.Identifier{
Node: ast.Node{
@ -6977,7 +6990,7 @@ yydefault:
}
case 442:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4319
// line internal/php7/php7.y:4332
{
yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[3].node}
@ -6991,7 +7004,7 @@ yydefault:
}
case 443:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4331
// line internal/php7/php7.y:4344
{
yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[2].node}
@ -7003,7 +7016,7 @@ yydefault:
}
case 444:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4344
// line internal/php7/php7.y:4357
{
yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7016,7 +7029,7 @@ yydefault:
}
case 445:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4355
// line internal/php7/php7.y:4368
{
yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7029,13 +7042,13 @@ yydefault:
}
case 446:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4369
// line internal/php7/php7.y:4382
{
yyVAL.node = yyDollar[1].node
}
case 447:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4373
// line internal/php7/php7.y:4386
{
yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7048,7 +7061,7 @@ yydefault:
}
case 448:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4384
// line internal/php7/php7.y:4397
{
yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7061,7 +7074,7 @@ yydefault:
}
case 449:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4395
// line internal/php7/php7.y:4408
{
yyVAL.node = &ast.ExprPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7074,7 +7087,7 @@ yydefault:
}
case 450:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4406
// line internal/php7/php7.y:4419
{
yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7087,7 +7100,7 @@ yydefault:
}
case 451:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4417
// line internal/php7/php7.y:4430
{
yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7100,7 +7113,7 @@ yydefault:
}
case 452:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4431
// line internal/php7/php7.y:4444
{
yyVAL.node = &ast.Identifier{
Node: ast.Node{
@ -7112,7 +7125,7 @@ yydefault:
}
case 453:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4441
// line internal/php7/php7.y:4454
{
yyVAL.node = yyDollar[2].node
@ -7122,13 +7135,13 @@ yydefault:
}
case 454:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4449
// line internal/php7/php7.y:4462
{
yyVAL.node = yyDollar[1].node
}
case 455:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4456
// line internal/php7/php7.y:4469
{
yyVAL.node = &ast.Identifier{
Node: ast.Node{
@ -7140,7 +7153,7 @@ yydefault:
}
case 456:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4466
// line internal/php7/php7.y:4479
{
yyVAL.node = yyDollar[2].node
@ -7150,31 +7163,31 @@ yydefault:
}
case 457:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4474
// line internal/php7/php7.y:4487
{
yyVAL.node = yyDollar[1].node
}
case 458:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4481
// line internal/php7/php7.y:4494
{
yyVAL.list = yyDollar[1].list
}
case 459:
yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:4488
// line internal/php7/php7.y:4501
{
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, nil}
}
case 460:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4492
// line internal/php7/php7.y:4505
{
yyVAL.node = yyDollar[1].node
}
case 461:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4499
// line internal/php7/php7.y:4512
{
if len(yyDollar[1].list) == 0 {
yyDollar[1].list = []ast.Vertex{&ast.ExprArrayItem{ast.Node{}, false, nil, nil}}
@ -7187,7 +7200,7 @@ yydefault:
}
case 462:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4510
// line internal/php7/php7.y:4523
{
if yyDollar[1].node.(*ast.ExprArrayItem).Key == nil && yyDollar[1].node.(*ast.ExprArrayItem).Val == nil {
yyVAL.list = []ast.Vertex{}
@ -7197,7 +7210,7 @@ yydefault:
}
case 463:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4521
// line internal/php7/php7.y:4534
{
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, yyDollar[3].node}
@ -7210,7 +7223,7 @@ yydefault:
}
case 464:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4532
// line internal/php7/php7.y:4545
{
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[1].node}
@ -7222,7 +7235,7 @@ yydefault:
}
case 465:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4542
// line internal/php7/php7.y:4555
{
reference := &ast.ExprReference{ast.Node{}, yyDollar[4].node}
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, reference}
@ -7238,7 +7251,7 @@ yydefault:
}
case 466:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4556
// line internal/php7/php7.y:4569
{
reference := &ast.ExprReference{ast.Node{}, yyDollar[2].node}
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, reference}
@ -7252,7 +7265,7 @@ yydefault:
}
case 467:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4568
// line internal/php7/php7.y:4581
{
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, true, nil, yyDollar[2].node}
@ -7264,7 +7277,7 @@ yydefault:
}
case 468:
yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php7/php7.y:4578
// line internal/php7/php7.y:4591
{
// TODO: Cannot use list() as standalone expression
listNode := &ast.ExprList{ast.Node{}, yyDollar[5].list}
@ -7283,7 +7296,7 @@ yydefault:
}
case 469:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4595
// line internal/php7/php7.y:4608
{
// TODO: Cannot use list() as standalone expression
listNode := &ast.ExprList{ast.Node{}, yyDollar[3].list}
@ -7300,45 +7313,49 @@ yydefault:
}
case 470:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4613
// line internal/php7/php7.y:4626
{
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
}
case 471:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4617
// line internal/php7/php7.y:4630
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[2].token.Value}
yyVAL.list = append(yyDollar[1].list, encapsed)
// save position
encapsed.GetNode().Position = position.NewTokenPosition(yyDollar[2].token)
// save comments
yylex.(*Parser).setFreeFloating(encapsed, token.Start, yyDollar[2].token.SkippedTokens)
yyVAL.list = append(
yyDollar[1].list,
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[2].token),
},
EncapsedStrTkn: yyDollar[2].token,
Value: yyDollar[2].token.Value,
},
)
}
case 472:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4628
// line internal/php7/php7.y:4643
{
yyVAL.list = []ast.Vertex{yyDollar[1].node}
}
case 473:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4632
// line internal/php7/php7.y:4647
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value}
yyVAL.list = []ast.Vertex{encapsed, yyDollar[2].node}
// save position
encapsed.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(encapsed, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.list = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
EncapsedStrTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
},
yyDollar[2].node,
}
}
case 474:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4646
// line internal/php7/php7.y:4663
{
name := &ast.Identifier{
Node: ast.Node{
@ -7357,7 +7374,7 @@ yydefault:
}
case 475:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4663
// line internal/php7/php7.y:4680
{
identifier := &ast.Identifier{
Node: ast.Node{
@ -7379,7 +7396,7 @@ yydefault:
}
case 476:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4683
// line internal/php7/php7.y:4700
{
identifier := &ast.Identifier{
Node: ast.Node{
@ -7407,7 +7424,7 @@ yydefault:
}
case 477:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4709
// line internal/php7/php7.y:4726
{
variable := &ast.ExprVariable{ast.Node{}, yyDollar[2].node}
@ -7422,7 +7439,7 @@ yydefault:
}
case 478:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4722
// line internal/php7/php7.y:4739
{
name := &ast.Identifier{
Node: ast.Node{
@ -7444,7 +7461,7 @@ yydefault:
}
case 479:
yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php7/php7.y:4742
// line internal/php7/php7.y:4759
{
identifier := &ast.Identifier{
Node: ast.Node{
@ -7468,7 +7485,7 @@ yydefault:
}
case 480:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4764
// line internal/php7/php7.y:4781
{
yyVAL.node = yyDollar[2].node
@ -7478,7 +7495,7 @@ yydefault:
}
case 481:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4775
// line internal/php7/php7.y:4792
{
yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value}
@ -7490,7 +7507,7 @@ yydefault:
}
case 482:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4785
// line internal/php7/php7.y:4802
{
// TODO: add option to handle 64 bit integer
if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil {
@ -7513,7 +7530,7 @@ yydefault:
}
case 483:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4806
// line internal/php7/php7.y:4823
{
_, err := strconv.Atoi(string(yyDollar[2].token.Value))
isInt := err == nil
@ -7540,7 +7557,7 @@ yydefault:
}
case 484:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4831
// line internal/php7/php7.y:4848
{
identifier := &ast.Identifier{
Node: ast.Node{
@ -7559,7 +7576,7 @@ yydefault:
}
case 485:
yyDollar = yyS[yypt-5 : yypt+1]
// line internal/php7/php7.y:4851
// line internal/php7/php7.y:4868
{
yyVAL.node = &ast.ExprIsset{ast.Node{}, yyDollar[3].list}
@ -7577,7 +7594,7 @@ yydefault:
}
case 486:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4867
// line internal/php7/php7.y:4884
{
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
@ -7599,7 +7616,7 @@ yydefault:
}
case 487:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4887
// line internal/php7/php7.y:4904
{
yyVAL.node = &ast.ExprInclude{ast.Node{}, yyDollar[2].node}
@ -7611,7 +7628,7 @@ yydefault:
}
case 488:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4897
// line internal/php7/php7.y:4914
{
yyVAL.node = &ast.ExprIncludeOnce{ast.Node{}, yyDollar[2].node}
@ -7623,7 +7640,7 @@ yydefault:
}
case 489:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4907
// line internal/php7/php7.y:4924
{
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
@ -7645,7 +7662,7 @@ yydefault:
}
case 490:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4927
// line internal/php7/php7.y:4944
{
yyVAL.node = &ast.ExprRequire{ast.Node{}, yyDollar[2].node}
@ -7657,7 +7674,7 @@ yydefault:
}
case 491:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4937
// line internal/php7/php7.y:4954
{
yyVAL.node = &ast.ExprRequireOnce{ast.Node{}, yyDollar[2].node}
@ -7669,13 +7686,13 @@ yydefault:
}
case 492:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4950
// line internal/php7/php7.y:4967
{
yyVAL.list = []ast.Vertex{yyDollar[1].node}
}
case 493:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4954
// line internal/php7/php7.y:4971
{
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
@ -7684,7 +7701,7 @@ yydefault:
}
case 494:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4964
// line internal/php7/php7.y:4981
{
yyVAL.node = yyDollar[1].node
}

View File

@ -3878,11 +3878,15 @@ backticks_expr:
}
| T_ENCAPSED_AND_WHITESPACE
{
part := &ast.ScalarEncapsedStringPart{ast.Node{}, $1.Value}
$$ = []ast.Vertex{part}
// save position
part.GetNode().Position = position.NewTokenPosition($1)
$$ = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
EncapsedStrTkn: $1,
Value: $1.Value,
},
}
}
| encaps_list
{
@ -4040,45 +4044,54 @@ scalar:
}
| T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, $2.Value}
$$ = &ast.ScalarHeredoc{ast.Node{}, $1.Value, []ast.Vertex{encapsed}}
// save position
encapsed.GetNode().Position = position.NewTokenPosition($2)
$$.GetNode().Position = position.NewTokensPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenHeredocTkn: $1,
Parts: []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($2),
},
EncapsedStrTkn: $2,
Value: $2.Value,
},
},
CloseHeredocTkn: $3,
}
}
| T_START_HEREDOC T_END_HEREDOC
{
$$ = &ast.ScalarHeredoc{ast.Node{}, $1.Value, nil}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $2)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition($1, $2),
},
OpenHeredocTkn: $1,
CloseHeredocTkn: $2,
}
}
| '"' encaps_list '"'
{
$$ = &ast.ScalarEncapsed{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarEncapsed{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenQoteTkn: $1,
Parts: $2,
CloseQoteTkn: $1,
}
}
| T_START_HEREDOC encaps_list T_END_HEREDOC
{
$$ = &ast.ScalarHeredoc{ast.Node{}, $1.Value, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarHeredoc{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenHeredocTkn: $1,
Parts: $2,
CloseHeredocTkn: $3,
}
}
| dereferencable_scalar
{
@ -4615,14 +4628,16 @@ encaps_list:
}
| encaps_list T_ENCAPSED_AND_WHITESPACE
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, $2.Value}
$$ = append($1, encapsed)
// save position
encapsed.GetNode().Position = position.NewTokenPosition($2)
// save comments
yylex.(*Parser).setFreeFloating(encapsed, token.Start, $2.SkippedTokens)
$$ = append(
$1,
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($2),
},
EncapsedStrTkn: $2,
Value: $2.Value,
},
)
}
| encaps_var
{
@ -4630,14 +4645,16 @@ encaps_list:
}
| T_ENCAPSED_AND_WHITESPACE encaps_var
{
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, $1.Value}
$$ = []ast.Vertex{encapsed, $2}
// save position
encapsed.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating(encapsed, token.Start, $1.SkippedTokens)
$$ = []ast.Vertex{
&ast.ScalarEncapsedStringPart{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
EncapsedStrTkn: $1,
Value: $1.Value,
},
$2,
}
}
;

View File

@ -126,7 +126,9 @@ func (n *ScalarDnumber) Accept(v NodeVisitor) {
// ScalarEncapsed node
type ScalarEncapsed struct {
Node
Parts []Vertex
OpenQoteTkn *token.Token
Parts []Vertex
CloseQoteTkn *token.Token
}
func (n *ScalarEncapsed) Accept(v NodeVisitor) {
@ -136,7 +138,8 @@ func (n *ScalarEncapsed) Accept(v NodeVisitor) {
// ScalarEncapsedStringPart node
type ScalarEncapsedStringPart struct {
Node
Value []byte
EncapsedStrTkn *token.Token
Value []byte
}
func (n *ScalarEncapsedStringPart) Accept(v NodeVisitor) {
@ -146,8 +149,9 @@ func (n *ScalarEncapsedStringPart) Accept(v NodeVisitor) {
// ScalarHeredoc node
type ScalarHeredoc struct {
Node
Label []byte
Parts []Vertex
OpenHeredocTkn *token.Token
Parts []Vertex
CloseHeredocTkn *token.Token
}
func (n *ScalarHeredoc) Accept(v NodeVisitor) {

View File

@ -1224,9 +1224,6 @@ func (v *Dump) ScalarHeredoc(n *ast.ScalarHeredoc) {
v.printIndentIfNotSingle(v.indent - 1)
v.print("&ast.ScalarHeredoc{\n")
v.printNode(n.GetNode())
v.printIndent(v.indent)
v.print(fmt.Sprintf("Label: %q,\n", n.Label))
}
func (v *Dump) ScalarLnumber(n *ast.ScalarLnumber) {

View File

@ -558,7 +558,7 @@ func (p *PrettyPrinter) printScalarEncapsed(n ast.Vertex) {
func (p *PrettyPrinter) printScalarHeredoc(n ast.Vertex) {
nn := n.(*ast.ScalarHeredoc)
io.WriteString(p.w, string(nn.Label))
io.WriteString(p.w, string(nn.OpenHeredocTkn.Value))
for _, part := range nn.Parts {
switch part.(type) {
@ -571,7 +571,7 @@ func (p *PrettyPrinter) printScalarHeredoc(n ast.Vertex) {
}
}
io.WriteString(p.w, strings.Trim(string(nn.Label), "<\"'\n"))
io.WriteString(p.w, strings.Trim(string(nn.OpenHeredocTkn.Value), "<\"'\n"))
}
func (p *PrettyPrinter) printScalarMagicConstant(n ast.Vertex) {

View File

@ -687,7 +687,7 @@ func (p *Printer) printScalarHeredoc(n ast.Vertex) {
p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart)
p.bufStart = ""
p.write(nn.Label)
p.write(nn.OpenHeredocTkn.Value)
for _, part := range nn.Parts {
switch part.(type) {
@ -710,7 +710,7 @@ func (p *Printer) printScalarHeredoc(n ast.Vertex) {
}
}
p.write([]byte(strings.Trim(string(nn.Label), "<\"'\n")))
p.write([]byte(strings.Trim(string(nn.OpenHeredocTkn.Value), "<\"'\n")))
p.printFreeFloating(nn, token.End)
}