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

319
internal/php7/php7.go generated
View File

@ -347,7 +347,7 @@ const yyEofCode = 1
const yyErrCode = 2 const yyErrCode = 2
const yyInitialStackSize = 16 const yyInitialStackSize = 16
// line internal/php7/php7.y:4971 // line internal/php7/php7.y:4988
// line yacctab:1 // line yacctab:1
var yyExca = [...]int{ var yyExca = [...]int{
@ -6482,33 +6482,37 @@ yydefault:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3880 // line internal/php7/php7.y:3880
{ {
part := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{
yyVAL.list = []ast.Vertex{part} &ast.ScalarEncapsedStringPart{
Node: ast.Node{
// save position Position: position.NewTokenPosition(yyDollar[1].token),
part.GetNode().Position = position.NewTokenPosition(yyDollar[1].token) },
EncapsedStrTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
},
}
} }
case 396: case 396:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3888 // line internal/php7/php7.y:3892
{ {
yyVAL.list = yyDollar[1].list yyVAL.list = yyDollar[1].list
} }
case 397: case 397:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:3895 // line internal/php7/php7.y:3899
{ {
yyVAL.node = nil yyVAL.node = nil
} }
case 398: case 398:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3899 // line internal/php7/php7.y:3903
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 399: case 399:
yyDollar = yyS[yypt-4 : yypt+1] 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} yyVAL.node = &ast.ExprArray{ast.Node{}, yyDollar[3].list}
@ -6522,7 +6526,7 @@ yydefault:
} }
case 400: case 400:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ExprShortArray{ast.Node{}, yyDollar[2].list}
@ -6535,7 +6539,7 @@ yydefault:
} }
case 401: case 401:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value}
@ -6547,7 +6551,7 @@ yydefault:
} }
case 402: case 402:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3942 // line internal/php7/php7.y:3946
{ {
yyVAL.node = &ast.ScalarLnumber{ yyVAL.node = &ast.ScalarLnumber{
Node: ast.Node{ Node: ast.Node{
@ -6559,7 +6563,7 @@ yydefault:
} }
case 403: case 403:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3952 // line internal/php7/php7.y:3956
{ {
yyVAL.node = &ast.ScalarDnumber{ yyVAL.node = &ast.ScalarDnumber{
Node: ast.Node{ Node: ast.Node{
@ -6571,7 +6575,7 @@ yydefault:
} }
case 404: case 404:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6583,7 +6587,7 @@ yydefault:
} }
case 405: case 405:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6595,7 +6599,7 @@ yydefault:
} }
case 406: case 406:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6607,7 +6611,7 @@ yydefault:
} }
case 407: case 407:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6619,7 +6623,7 @@ yydefault:
} }
case 408: case 408:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6631,7 +6635,7 @@ yydefault:
} }
case 409: case 409:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6643,7 +6647,7 @@ yydefault:
} }
case 410: case 410:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6655,7 +6659,7 @@ yydefault:
} }
case 411: case 411:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
@ -6667,69 +6671,78 @@ yydefault:
} }
case 412: case 412:
yyDollar = yyS[yypt-3 : yypt+1] 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{
yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, []ast.Vertex{encapsed}} Node: ast.Node{
Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
// save position },
encapsed.GetNode().Position = position.NewTokenPosition(yyDollar[2].token) OpenHeredocTkn: yyDollar[1].token,
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) Parts: []ast.Vertex{
&ast.ScalarEncapsedStringPart{
// save comments Node: ast.Node{
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens) Position: position.NewTokenPosition(yyDollar[2].token),
},
EncapsedStrTkn: yyDollar[2].token,
Value: yyDollar[2].token.Value,
},
},
CloseHeredocTkn: yyDollar[3].token,
}
} }
case 413: case 413:
yyDollar = yyS[yypt-2 : yypt+1] 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} yyVAL.node = &ast.ScalarHeredoc{
Node: ast.Node{
// save position Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[2].token),
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[2].token) },
OpenHeredocTkn: yyDollar[1].token,
// save comments CloseHeredocTkn: yyDollar[2].token,
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens) }
} }
case 414: case 414:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ScalarEncapsed{
Node: ast.Node{
// save position Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) },
OpenQoteTkn: yyDollar[1].token,
// save comments Parts: yyDollar[2].list,
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens) CloseQoteTkn: yyDollar[1].token,
}
} }
case 415: case 415:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ScalarHeredoc{
Node: ast.Node{
// save position Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token),
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) },
OpenHeredocTkn: yyDollar[1].token,
// save comments Parts: yyDollar[2].list,
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens) CloseHeredocTkn: yyDollar[3].token,
}
} }
case 416: case 416:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4084 // line internal/php7/php7.y:4097
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 417: case 417:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4088 // line internal/php7/php7.y:4101
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 418: case 418:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ExprConstFetch{ast.Node{}, yyDollar[1].node}
@ -6741,7 +6754,7 @@ yydefault:
} }
case 419: case 419:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4105 // line internal/php7/php7.y:4118
{ {
target := &ast.Identifier{ target := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -6761,7 +6774,7 @@ yydefault:
} }
case 420: case 420:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4123 // line internal/php7/php7.y:4136
{ {
target := &ast.Identifier{ target := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -6781,43 +6794,43 @@ yydefault:
} }
case 421: case 421:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4144 // line internal/php7/php7.y:4157
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 422: case 422:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4148 // line internal/php7/php7.y:4161
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 423: case 423:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
// line internal/php7/php7.y:4155 // line internal/php7/php7.y:4168
{ {
yyVAL.node = nil yyVAL.node = nil
} }
case 424: case 424:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4159 // line internal/php7/php7.y:4172
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 425: case 425:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4166 // line internal/php7/php7.y:4179
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 426: case 426:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4173 // line internal/php7/php7.y:4186
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 427: case 427:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4177 // line internal/php7/php7.y:4190
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Node: ast.Node{ Node: ast.Node{
@ -6834,19 +6847,19 @@ yydefault:
} }
case 428: case 428:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4192 // line internal/php7/php7.y:4205
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 429: case 429:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4199 // line internal/php7/php7.y:4212
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 430: case 430:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4203 // line internal/php7/php7.y:4216
{ {
yyVAL.node = &ast.ParserBrackets{ yyVAL.node = &ast.ParserBrackets{
Node: ast.Node{ Node: ast.Node{
@ -6863,19 +6876,19 @@ yydefault:
} }
case 431: case 431:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4218 // line internal/php7/php7.y:4231
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 432: case 432:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4225 // line internal/php7/php7.y:4238
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 433: case 433:
yyDollar = yyS[yypt-4 : yypt+1] 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} yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6888,7 +6901,7 @@ yydefault:
} }
case 434: case 434:
yyDollar = yyS[yypt-4 : yypt+1] 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} yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6901,7 +6914,7 @@ yydefault:
} }
case 435: case 435:
yyDollar = yyS[yypt-4 : yypt+1] 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} yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6914,7 +6927,7 @@ yydefault:
} }
case 436: case 436:
yyDollar = yyS[yypt-4 : yypt+1] 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)} yyVAL.node = &ast.ExprMethodCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)}
@ -6927,25 +6940,25 @@ yydefault:
} }
case 437: case 437:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4273 // line internal/php7/php7.y:4286
{ {
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:4280 // line internal/php7/php7.y:4293
{ {
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:4284 // line internal/php7/php7.y:4297
{ {
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:4288 // line internal/php7/php7.y:4301
{ {
yyVAL.node = &ast.ExprPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} yyVAL.node = &ast.ExprPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -6958,7 +6971,7 @@ yydefault:
} }
case 441: case 441:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4302 // line internal/php7/php7.y:4315
{ {
name := &ast.Identifier{ name := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -6977,7 +6990,7 @@ yydefault:
} }
case 442: case 442:
yyDollar = yyS[yypt-4 : yypt+1] 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} yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[3].node}
@ -6991,7 +7004,7 @@ yydefault:
} }
case 443: case 443:
yyDollar = yyS[yypt-2 : yypt+1] 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} yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[2].node}
@ -7003,7 +7016,7 @@ yydefault:
} }
case 444: case 444:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7016,7 +7029,7 @@ yydefault:
} }
case 445: case 445:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7029,13 +7042,13 @@ yydefault:
} }
case 446: case 446:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4369 // line internal/php7/php7.y:4382
{ {
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:4373 // line internal/php7/php7.y:4386
{ {
yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7048,7 +7061,7 @@ yydefault:
} }
case 448: case 448:
yyDollar = yyS[yypt-4 : yypt+1] 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} yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7061,7 +7074,7 @@ yydefault:
} }
case 449: case 449:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ExprPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7074,7 +7087,7 @@ yydefault:
} }
case 450: case 450:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7087,7 +7100,7 @@ yydefault:
} }
case 451: case 451:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node}
@ -7100,7 +7113,7 @@ yydefault:
} }
case 452: case 452:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4431 // line internal/php7/php7.y:4444
{ {
yyVAL.node = &ast.Identifier{ yyVAL.node = &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7112,7 +7125,7 @@ yydefault:
} }
case 453: case 453:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4441 // line internal/php7/php7.y:4454
{ {
yyVAL.node = yyDollar[2].node yyVAL.node = yyDollar[2].node
@ -7122,13 +7135,13 @@ yydefault:
} }
case 454: case 454:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4449 // line internal/php7/php7.y:4462
{ {
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/php7/php7.y:4456 // line internal/php7/php7.y:4469
{ {
yyVAL.node = &ast.Identifier{ yyVAL.node = &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7140,7 +7153,7 @@ yydefault:
} }
case 456: case 456:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4466 // line internal/php7/php7.y:4479
{ {
yyVAL.node = yyDollar[2].node yyVAL.node = yyDollar[2].node
@ -7150,31 +7163,31 @@ yydefault:
} }
case 457: case 457:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4474 // line internal/php7/php7.y:4487
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 458: case 458:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4481 // line internal/php7/php7.y:4494
{ {
yyVAL.list = yyDollar[1].list yyVAL.list = yyDollar[1].list
} }
case 459: case 459:
yyDollar = yyS[yypt-0 : yypt+1] 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} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, nil}
} }
case 460: case 460:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4492 // line internal/php7/php7.y:4505
{ {
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:4499 // line internal/php7/php7.y:4512
{ {
if len(yyDollar[1].list) == 0 { if len(yyDollar[1].list) == 0 {
yyDollar[1].list = []ast.Vertex{&ast.ExprArrayItem{ast.Node{}, false, nil, nil}} yyDollar[1].list = []ast.Vertex{&ast.ExprArrayItem{ast.Node{}, false, nil, nil}}
@ -7187,7 +7200,7 @@ yydefault:
} }
case 462: case 462:
yyDollar = yyS[yypt-1 : yypt+1] 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 { if yyDollar[1].node.(*ast.ExprArrayItem).Key == nil && yyDollar[1].node.(*ast.ExprArrayItem).Val == nil {
yyVAL.list = []ast.Vertex{} yyVAL.list = []ast.Vertex{}
@ -7197,7 +7210,7 @@ yydefault:
} }
case 463: case 463:
yyDollar = yyS[yypt-3 : yypt+1] 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} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, yyDollar[3].node}
@ -7210,7 +7223,7 @@ yydefault:
} }
case 464: case 464:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[1].node}
@ -7222,7 +7235,7 @@ yydefault:
} }
case 465: case 465:
yyDollar = yyS[yypt-4 : yypt+1] 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} reference := &ast.ExprReference{ast.Node{}, yyDollar[4].node}
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, reference} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, reference}
@ -7238,7 +7251,7 @@ yydefault:
} }
case 466: case 466:
yyDollar = yyS[yypt-2 : yypt+1] 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} reference := &ast.ExprReference{ast.Node{}, yyDollar[2].node}
yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, reference} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, reference}
@ -7252,7 +7265,7 @@ yydefault:
} }
case 467: case 467:
yyDollar = yyS[yypt-2 : yypt+1] 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} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, true, nil, yyDollar[2].node}
@ -7264,7 +7277,7 @@ yydefault:
} }
case 468: case 468:
yyDollar = yyS[yypt-6 : yypt+1] 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 // TODO: Cannot use list() as standalone expression
listNode := &ast.ExprList{ast.Node{}, yyDollar[5].list} listNode := &ast.ExprList{ast.Node{}, yyDollar[5].list}
@ -7283,7 +7296,7 @@ yydefault:
} }
case 469: case 469:
yyDollar = yyS[yypt-4 : yypt+1] 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 // TODO: Cannot use list() as standalone expression
listNode := &ast.ExprList{ast.Node{}, yyDollar[3].list} listNode := &ast.ExprList{ast.Node{}, yyDollar[3].list}
@ -7300,45 +7313,49 @@ yydefault:
} }
case 470: case 470:
yyDollar = yyS[yypt-2 : yypt+1] 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) 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:4617 // line internal/php7/php7.y:4630
{ {
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[2].token.Value} yyVAL.list = append(
yyVAL.list = append(yyDollar[1].list, encapsed) yyDollar[1].list,
&ast.ScalarEncapsedStringPart{
// save position Node: ast.Node{
encapsed.GetNode().Position = position.NewTokenPosition(yyDollar[2].token) Position: position.NewTokenPosition(yyDollar[2].token),
},
// save comments EncapsedStrTkn: yyDollar[2].token,
yylex.(*Parser).setFreeFloating(encapsed, token.Start, yyDollar[2].token.SkippedTokens) Value: yyDollar[2].token.Value,
},
)
} }
case 472: case 472:
yyDollar = yyS[yypt-1 : yypt+1] 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} 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:4632 // line internal/php7/php7.y:4647
{ {
encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{
yyVAL.list = []ast.Vertex{encapsed, yyDollar[2].node} &ast.ScalarEncapsedStringPart{
Node: ast.Node{
// save position Position: position.NewTokenPosition(yyDollar[1].token),
encapsed.GetNode().Position = position.NewTokenPosition(yyDollar[1].token) },
EncapsedStrTkn: yyDollar[1].token,
// save comments Value: yyDollar[1].token.Value,
yylex.(*Parser).setFreeFloating(encapsed, token.Start, yyDollar[1].token.SkippedTokens) },
yyDollar[2].node,
}
} }
case 474: case 474:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4646 // line internal/php7/php7.y:4663
{ {
name := &ast.Identifier{ name := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7357,7 +7374,7 @@ yydefault:
} }
case 475: case 475:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4663 // line internal/php7/php7.y:4680
{ {
identifier := &ast.Identifier{ identifier := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7379,7 +7396,7 @@ yydefault:
} }
case 476: case 476:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4683 // line internal/php7/php7.y:4700
{ {
identifier := &ast.Identifier{ identifier := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7407,7 +7424,7 @@ yydefault:
} }
case 477: case 477:
yyDollar = yyS[yypt-3 : yypt+1] 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} variable := &ast.ExprVariable{ast.Node{}, yyDollar[2].node}
@ -7422,7 +7439,7 @@ yydefault:
} }
case 478: case 478:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4722 // line internal/php7/php7.y:4739
{ {
name := &ast.Identifier{ name := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7444,7 +7461,7 @@ yydefault:
} }
case 479: case 479:
yyDollar = yyS[yypt-6 : yypt+1] yyDollar = yyS[yypt-6 : yypt+1]
// line internal/php7/php7.y:4742 // line internal/php7/php7.y:4759
{ {
identifier := &ast.Identifier{ identifier := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7468,7 +7485,7 @@ yydefault:
} }
case 480: case 480:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4764 // line internal/php7/php7.y:4781
{ {
yyVAL.node = yyDollar[2].node yyVAL.node = yyDollar[2].node
@ -7478,7 +7495,7 @@ yydefault:
} }
case 481: case 481:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value}
@ -7490,7 +7507,7 @@ yydefault:
} }
case 482: case 482:
yyDollar = yyS[yypt-1 : yypt+1] 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 // 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 {
@ -7513,7 +7530,7 @@ yydefault:
} }
case 483: case 483:
yyDollar = yyS[yypt-2 : yypt+1] 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)) _, err := strconv.Atoi(string(yyDollar[2].token.Value))
isInt := err == nil isInt := err == nil
@ -7540,7 +7557,7 @@ yydefault:
} }
case 484: case 484:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4831 // line internal/php7/php7.y:4848
{ {
identifier := &ast.Identifier{ identifier := &ast.Identifier{
Node: ast.Node{ Node: ast.Node{
@ -7559,7 +7576,7 @@ yydefault:
} }
case 485: case 485:
yyDollar = yyS[yypt-5 : yypt+1] 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} yyVAL.node = &ast.ExprIsset{ast.Node{}, yyDollar[3].list}
@ -7577,7 +7594,7 @@ yydefault:
} }
case 486: case 486:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4867 // line internal/php7/php7.y:4884
{ {
exprBrackets := &ast.ParserBrackets{ exprBrackets := &ast.ParserBrackets{
Node: ast.Node{ Node: ast.Node{
@ -7599,7 +7616,7 @@ yydefault:
} }
case 487: case 487:
yyDollar = yyS[yypt-2 : yypt+1] 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} yyVAL.node = &ast.ExprInclude{ast.Node{}, yyDollar[2].node}
@ -7611,7 +7628,7 @@ yydefault:
} }
case 488: case 488:
yyDollar = yyS[yypt-2 : yypt+1] 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} yyVAL.node = &ast.ExprIncludeOnce{ast.Node{}, yyDollar[2].node}
@ -7623,7 +7640,7 @@ yydefault:
} }
case 489: case 489:
yyDollar = yyS[yypt-4 : yypt+1] yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4907 // line internal/php7/php7.y:4924
{ {
exprBrackets := &ast.ParserBrackets{ exprBrackets := &ast.ParserBrackets{
Node: ast.Node{ Node: ast.Node{
@ -7645,7 +7662,7 @@ yydefault:
} }
case 490: case 490:
yyDollar = yyS[yypt-2 : yypt+1] 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} yyVAL.node = &ast.ExprRequire{ast.Node{}, yyDollar[2].node}
@ -7657,7 +7674,7 @@ yydefault:
} }
case 491: case 491:
yyDollar = yyS[yypt-2 : yypt+1] 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} yyVAL.node = &ast.ExprRequireOnce{ast.Node{}, yyDollar[2].node}
@ -7669,13 +7686,13 @@ yydefault:
} }
case 492: case 492:
yyDollar = yyS[yypt-1 : yypt+1] 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} yyVAL.list = []ast.Vertex{yyDollar[1].node}
} }
case 493: case 493:
yyDollar = yyS[yypt-3 : yypt+1] 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) yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
@ -7684,7 +7701,7 @@ yydefault:
} }
case 494: case 494:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4964 // line internal/php7/php7.y:4981
{ {
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }

View File

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

View File

@ -126,7 +126,9 @@ func (n *ScalarDnumber) Accept(v NodeVisitor) {
// ScalarEncapsed node // ScalarEncapsed node
type ScalarEncapsed struct { type ScalarEncapsed struct {
Node Node
Parts []Vertex OpenQoteTkn *token.Token
Parts []Vertex
CloseQoteTkn *token.Token
} }
func (n *ScalarEncapsed) Accept(v NodeVisitor) { func (n *ScalarEncapsed) Accept(v NodeVisitor) {
@ -136,7 +138,8 @@ func (n *ScalarEncapsed) Accept(v NodeVisitor) {
// ScalarEncapsedStringPart node // ScalarEncapsedStringPart node
type ScalarEncapsedStringPart struct { type ScalarEncapsedStringPart struct {
Node Node
Value []byte EncapsedStrTkn *token.Token
Value []byte
} }
func (n *ScalarEncapsedStringPart) Accept(v NodeVisitor) { func (n *ScalarEncapsedStringPart) Accept(v NodeVisitor) {
@ -146,8 +149,9 @@ func (n *ScalarEncapsedStringPart) Accept(v NodeVisitor) {
// ScalarHeredoc node // ScalarHeredoc node
type ScalarHeredoc struct { type ScalarHeredoc struct {
Node Node
Label []byte OpenHeredocTkn *token.Token
Parts []Vertex Parts []Vertex
CloseHeredocTkn *token.Token
} }
func (n *ScalarHeredoc) Accept(v NodeVisitor) { 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.printIndentIfNotSingle(v.indent - 1)
v.print("&ast.ScalarHeredoc{\n") v.print("&ast.ScalarHeredoc{\n")
v.printNode(n.GetNode()) v.printNode(n.GetNode())
v.printIndent(v.indent)
v.print(fmt.Sprintf("Label: %q,\n", n.Label))
} }
func (v *Dump) ScalarLnumber(n *ast.ScalarLnumber) { 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) { func (p *PrettyPrinter) printScalarHeredoc(n ast.Vertex) {
nn := n.(*ast.ScalarHeredoc) nn := n.(*ast.ScalarHeredoc)
io.WriteString(p.w, string(nn.Label)) io.WriteString(p.w, string(nn.OpenHeredocTkn.Value))
for _, part := range nn.Parts { for _, part := range nn.Parts {
switch part.(type) { 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) { 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.printFreeFloatingOrDefault(nn, token.Start, p.bufStart)
p.bufStart = "" p.bufStart = ""
p.write(nn.Label) p.write(nn.OpenHeredocTkn.Value)
for _, part := range nn.Parts { for _, part := range nn.Parts {
switch part.(type) { 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) p.printFreeFloating(nn, token.End)
} }