[refactoring] update ast structure of "If", "ElseIf", "Else" nodes

This commit is contained in:
Vadym Slizov
2020-09-03 22:18:06 +03:00
parent 954208510e
commit 6976388a82
21 changed files with 1777 additions and 1817 deletions

View File

@@ -3660,7 +3660,7 @@ func TestStmtAltIf_AltIf(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -3669,6 +3669,7 @@ func TestStmtAltIf_AltIf(t *testing.T) {
EndPos: 23,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3731,7 +3732,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -3740,6 +3741,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
EndPos: 38,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3773,7 +3775,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 3,
@@ -3782,6 +3784,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3846,7 +3849,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -3855,6 +3858,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
EndPos: 31,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3887,7 +3891,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
},
Stmts: []ast.Vertex{},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 3,
@@ -3896,6 +3900,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{
@@ -3940,7 +3945,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -3949,6 +3954,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: 61,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3982,7 +3988,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 3,
@@ -3991,6 +3997,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -4024,7 +4031,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
Stmts: []ast.Vertex{},
},
},
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 4,
@@ -4033,6 +4040,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -4067,7 +4075,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
},
},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 5,
@@ -4076,6 +4084,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{

1160
internal/php5/php5.go generated

File diff suppressed because it is too large Load Diff

View File

@@ -855,46 +855,49 @@ unticked_statement:
}
| T_IF parenthesis_expr statement elseif_list else_single
{
$$ = &ast.StmtIf{ast.Node{}, $2, $3, $4, $5}
// save position
pos := position.NewTokenNodePosition($1, $3)
if $5 != nil {
$$.GetNode().Position = position.NewTokenNodePosition($1, $5)
pos = position.NewTokenNodePosition($1, $5)
} else if len($4) > 0 {
$$.GetNode().Position = position.NewTokenNodeListPosition($1, $4)
} else {
$$.GetNode().Position = position.NewTokenNodePosition($1, $3)
pos = position.NewTokenNodeListPosition($1, $4)
}
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.StmtIf{
Node: ast.Node{
Position: pos,
},
IfTkn: $1,
OpenParenthesisTkn: $2.(*ast.ParserBrackets).OpenBracketTkn,
Cond: $2.(*ast.ParserBrackets).Child,
CloseParenthesisTkn: $2.(*ast.ParserBrackets).CloseBracketTkn,
Stmt: $3,
ElseIf: $4,
Else: $5,
}
}
| T_IF parenthesis_expr ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';'
{
stmts := &ast.StmtStmtList{
$$ = &ast.StmtIf{
Node: ast.Node{
Position: position.NewNodeListPosition($4),
Position: position.NewTokensPosition($1, $8),
},
Stmts: $4,
Alt: true,
IfTkn: $1,
OpenParenthesisTkn: $2.(*ast.ParserBrackets).OpenBracketTkn,
Cond: $2.(*ast.ParserBrackets).Child,
CloseParenthesisTkn: $2.(*ast.ParserBrackets).CloseBracketTkn,
ColonTkn: $3,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: position.NewNodeListPosition($4),
},
Stmts: $4,
},
ElseIf: $5,
Else: $6,
EndIfTkn: $7,
SemiColonTkn: $8,
}
stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts}
$$ = &ast.StmtAltIf{ast.Node{}, $2, stmtsBrackets, $5, $6}
// save position
stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($3, $4)
$$.GetNode().Position = position.NewTokensPosition($1, $8)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $3.SkippedTokens)
if $6 != nil {
yylex.(*Parser).setFreeFloating($6.(*ast.StmtAltElse).Stmt, token.End, append($7.SkippedTokens, $8.SkippedTokens...))
} else if len($5) > 0 {
yylex.(*Parser).setFreeFloating($5[len($5)-1].(*ast.StmtAltElseIf).Stmt, token.End, append($7.SkippedTokens, $8.SkippedTokens...))
} else {
yylex.(*Parser).setFreeFloating(stmtsBrackets, token.End, append($7.SkippedTokens, $8.SkippedTokens...))
}
yylex.(*Parser).setToken($$, token.SemiColon, $8.SkippedTokens)
}
| T_WHILE parenthesis_expr while_statement
{
@@ -1946,14 +1949,16 @@ elseif_list:
}
| elseif_list T_ELSEIF parenthesis_expr statement
{
_elseIf := &ast.StmtElseIf{ast.Node{}, $3, $4}
$$ = append($1, _elseIf)
// save position
_elseIf.GetNode().Position = position.NewTokenNodePosition($2, $4)
// save comments
yylex.(*Parser).setFreeFloating(_elseIf, token.Start, $2.SkippedTokens)
$$ = append($1, &ast.StmtElseIf{
Node: ast.Node{
Position: position.NewTokenNodePosition($2, $4),
},
ElseIfTkn: $2,
OpenParenthesisTkn: $3.(*ast.ParserBrackets).OpenBracketTkn,
Cond: $3.(*ast.ParserBrackets).Child,
CloseParenthesisTkn: $3.(*ast.ParserBrackets).CloseBracketTkn,
Stmt: $4,
})
}
;
@@ -1965,23 +1970,23 @@ new_elseif_list:
}
| new_elseif_list T_ELSEIF parenthesis_expr ':' inner_statement_list
{
stmts := &ast.StmtStmtList{
$$ = append($1, &ast.StmtElseIf{
Node: ast.Node{
Position: position.NewNodeListPosition($5),
Position: position.NewTokenNodeListPosition($2, $5),
},
Stmts: $5,
}
stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts}
_elseIf := &ast.StmtAltElseIf{ast.Node{}, $3, stmtsBrackets}
$$ = append($1, _elseIf)
// save position
stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($4, $5)
_elseIf.GetNode().Position = position.NewTokenNodeListPosition($2, $5)
// save comments
yylex.(*Parser).setFreeFloating(_elseIf, token.Start, $2.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $4.SkippedTokens)
Alt: true,
ElseIfTkn: $2,
OpenParenthesisTkn: $3.(*ast.ParserBrackets).OpenBracketTkn,
Cond: $3.(*ast.ParserBrackets).Child,
CloseParenthesisTkn: $3.(*ast.ParserBrackets).CloseBracketTkn,
ColonTkn: $4,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: position.NewNodeListPosition($5),
},
Stmts: $5,
},
})
}
;
@@ -1993,13 +1998,13 @@ else_single:
}
| T_ELSE statement
{
$$ = &ast.StmtElse{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokenNodePosition($1, $2)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.StmtElse{
Node: ast.Node{
Position: position.NewTokenNodePosition($1, $2),
},
ElseTkn: $1,
Stmt: $2,
}
}
;
@@ -2011,22 +2016,20 @@ new_else_single:
}
| T_ELSE ':' inner_statement_list
{
stmts := &ast.StmtStmtList{
$$ = &ast.StmtElse{
Node: ast.Node{
Position: position.NewNodeListPosition($3),
Position: position.NewTokenNodeListPosition($1, $3),
},
Alt: true,
ElseTkn: $1,
ColonTkn: $2,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: position.NewNodeListPosition($3),
},
Stmts: $3,
},
Stmts: $3,
}
stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts}
$$ = &ast.StmtAltElse{ast.Node{}, stmtsBrackets}
// save position
stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($2, $3)
$$.GetNode().Position = position.NewTokenNodeListPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $2.SkippedTokens)
}
;
@@ -4318,10 +4321,13 @@ exit_expr:
}
| '(' ')'
{
$$ = &ast.ParserBrackets{ast.Node{}, nil}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $2)
$$ = &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($1, $2),
},
OpenBracketTkn: $1,
CloseBracketTkn: $2,
}
// save comments
yylex.(*Parser).setFreeFloatingTokens($$, token.Start, $1.SkippedTokens)
@@ -5166,10 +5172,14 @@ expr:
parenthesis_expr:
'(' expr ')'
{
$$ = &ast.ParserBrackets{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
$$ = &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenBracketTkn: $1,
Child: $2,
CloseBracketTkn: $3,
}
// save comments
yylex.(*Parser).setFreeFloatingTokens($$, token.Start, $1.SkippedTokens)
@@ -5177,10 +5187,14 @@ parenthesis_expr:
}
| '(' yield_expr ')'
{
$$ = &ast.ParserBrackets{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
$$ = &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenBracketTkn: $1,
Child: $2,
CloseBracketTkn: $3,
}
// save comments
yylex.(*Parser).setFreeFloatingTokens($$, token.Start, $1.SkippedTokens)
@@ -6008,11 +6022,17 @@ internal_functions_in_yacc:
}
| T_EMPTY '(' variable ')'
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($2, $4),
},
OpenBracketTkn: $2,
Child: $3,
CloseBracketTkn: $4,
}
$$ = &ast.ExprEmpty{ast.Node{}, exprBrackets}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
$$.GetNode().Position = position.NewTokensPosition($1, $4)
// save comments
@@ -6022,11 +6042,17 @@ internal_functions_in_yacc:
}
| T_EMPTY '(' expr ')'
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($2, $4),
},
OpenBracketTkn: $2,
Child: $3,
CloseBracketTkn: $4,
}
$$ = &ast.ExprEmpty{ast.Node{}, exprBrackets}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
$$.GetNode().Position = position.NewTokensPosition($1, $4)
// save comments
@@ -6056,11 +6082,17 @@ internal_functions_in_yacc:
}
| T_EVAL '(' expr ')'
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($2, $4),
},
OpenBracketTkn: $2,
Child: $3,
CloseBracketTkn: $4,
}
$$ = &ast.ExprEval{ast.Node{}, exprBrackets}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
$$.GetNode().Position = position.NewTokensPosition($1, $4)
// save comments

View File

@@ -2603,7 +2603,7 @@ func TestPhp5(t *testing.T) {
},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 41,
@@ -2612,6 +2612,7 @@ func TestPhp5(t *testing.T) {
EndPos: 867,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -2645,7 +2646,7 @@ func TestPhp5(t *testing.T) {
Stmts: []ast.Vertex{},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 43,
@@ -2654,6 +2655,7 @@ func TestPhp5(t *testing.T) {
EndPos: 897,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -2687,7 +2689,7 @@ func TestPhp5(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 44,
@@ -2696,6 +2698,7 @@ func TestPhp5(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -2731,7 +2734,7 @@ func TestPhp5(t *testing.T) {
},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 46,
@@ -2740,6 +2743,7 @@ func TestPhp5(t *testing.T) {
EndPos: 920,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -2772,7 +2776,7 @@ func TestPhp5(t *testing.T) {
},
Stmts: []ast.Vertex{},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 47,
@@ -2781,6 +2785,7 @@ func TestPhp5(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{
@@ -2794,7 +2799,7 @@ func TestPhp5(t *testing.T) {
},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 49,
@@ -2803,6 +2808,7 @@ func TestPhp5(t *testing.T) {
EndPos: 969,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -2836,7 +2842,7 @@ func TestPhp5(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 50,
@@ -2845,6 +2851,7 @@ func TestPhp5(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -2878,7 +2885,7 @@ func TestPhp5(t *testing.T) {
Stmts: []ast.Vertex{},
},
},
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 51,
@@ -2887,6 +2894,7 @@ func TestPhp5(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -2921,7 +2929,7 @@ func TestPhp5(t *testing.T) {
},
},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 52,
@@ -2930,6 +2938,7 @@ func TestPhp5(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{

View File

@@ -3811,7 +3811,7 @@ func TestStmtAltIf_AltIf(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -3820,6 +3820,7 @@ func TestStmtAltIf_AltIf(t *testing.T) {
EndPos: 23,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3882,7 +3883,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -3891,6 +3892,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
EndPos: 38,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3924,7 +3926,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 3,
@@ -3933,6 +3935,7 @@ func TestStmtAltIf_AltElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3997,7 +4000,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -4006,6 +4009,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
EndPos: 31,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -4038,7 +4042,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
},
Stmts: []ast.Vertex{},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 3,
@@ -4047,6 +4051,7 @@ func TestStmtAltIf_AltElse(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{
@@ -4091,7 +4096,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 2,
@@ -4100,6 +4105,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: 61,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -4133,7 +4139,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 3,
@@ -4142,6 +4148,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -4175,7 +4182,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
Stmts: []ast.Vertex{},
},
},
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 4,
@@ -4184,6 +4191,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -4218,7 +4226,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
},
},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 5,
@@ -4227,6 +4235,7 @@ func TestStmtAltIf_AltElseElseIf(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{

1261
internal/php7/php7.go generated

File diff suppressed because it is too large Load Diff

View File

@@ -870,7 +870,14 @@ statement:
}
| T_WHILE '(' expr ')' while_statement
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($2, $4),
},
OpenBracketTkn: $2,
Child: $3,
CloseBracketTkn: $4,
}
switch n := $5.(type) {
case *ast.StmtWhile :
@@ -882,7 +889,6 @@ statement:
$$ = $5
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
$$.GetNode().Position = position.NewTokenNodePosition($1, $5)
// save comments
@@ -892,11 +898,17 @@ statement:
}
| T_DO statement T_WHILE '(' expr ')' ';'
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $5}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($4, $6),
},
OpenBracketTkn: $4,
Child: $5,
CloseBracketTkn: $6,
}
$$ = &ast.StmtDo{ast.Node{}, $2, exprBrackets}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($4, $6)
$$.GetNode().Position = position.NewTokensPosition($1, $7)
// save comments
@@ -933,7 +945,14 @@ statement:
}
| T_SWITCH '(' expr ')' switch_case_list
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($2, $4),
},
OpenBracketTkn: $2,
Child: $3,
CloseBracketTkn: $4,
}
switch n := $5.(type) {
case *ast.StmtSwitch:
@@ -1750,35 +1769,33 @@ while_statement:
if_stmt_without_else:
T_IF '(' expr ')' statement
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
$$ = &ast.StmtIf{ast.Node{}, exprBrackets, $5, nil, nil}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
$$.GetNode().Position = position.NewTokenNodePosition($1, $5)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $2.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $4.SkippedTokens)
$$ = &ast.StmtIf{
Node: ast.Node{
Position: position.NewTokenNodePosition($1, $5),
},
IfTkn: $1,
OpenParenthesisTkn: $2,
Cond: $3,
CloseParenthesisTkn: $4,
Stmt: $5,
}
}
| if_stmt_without_else T_ELSEIF '(' expr ')' statement
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $4}
_elseIf := &ast.StmtElseIf{ast.Node{}, exprBrackets, $6}
$1.(*ast.StmtIf).ElseIf = append($1.(*ast.StmtIf).ElseIf, _elseIf)
$1.(*ast.StmtIf).ElseIf = append($1.(*ast.StmtIf).ElseIf, &ast.StmtElseIf{
Node: ast.Node{
Position: position.NewTokenNodePosition($2, $6),
},
ElseIfTkn: $2,
OpenParenthesisTkn: $3,
Cond: $4,
CloseParenthesisTkn: $5,
Stmt: $6,
})
$1.(*ast.StmtIf).Node.Position = position.NewNodesPosition($1, $6)
$$ = $1
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($3, $5)
_elseIf.GetNode().Position = position.NewTokenNodePosition($2, $6)
$$.GetNode().Position = position.NewNodesPosition($1, $6)
// save comments
yylex.(*Parser).setFreeFloating(_elseIf, token.Start, $2.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $3.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $5.SkippedTokens)
}
;
@@ -1789,113 +1806,95 @@ if_stmt:
}
| if_stmt_without_else T_ELSE statement
{
_else := &ast.StmtElse{ast.Node{}, $3}
$1.(*ast.StmtIf).Else = _else
$1.(*ast.StmtIf).Else = &ast.StmtElse{
Node: ast.Node{
Position: position.NewTokenNodePosition($2, $3),
},
ElseTkn: $2,
Stmt: $3,
}
$1.(*ast.StmtIf).Node.Position = position.NewNodesPosition($1, $3)
$$ = $1
// save position
_else.GetNode().Position = position.NewTokenNodePosition($2, $3)
$$.GetNode().Position = position.NewNodesPosition($1, $3)
// save comments
yylex.(*Parser).setFreeFloating(_else, token.Start, $2.SkippedTokens)
}
;
alt_if_stmt_without_else:
T_IF '(' expr ')' ':' inner_statement_list
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
stmts := &ast.StmtStmtList{
$$ = &ast.StmtIf{
Node: ast.Node{
Position: position.NewNodeListPosition($6),
Position: position.NewTokenNodeListPosition($1, $6),
},
Alt: true,
IfTkn: $1,
OpenParenthesisTkn: $2,
Cond: $3,
CloseParenthesisTkn: $4,
ColonTkn: $5,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: position.NewNodeListPosition($6),
},
Stmts: $6,
},
Stmts: $6,
}
stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts}
$$ = &ast.StmtAltIf{ast.Node{}, exprBrackets, stmtsBrackets, nil, nil}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($5, $6)
$$.GetNode().Position = position.NewTokenNodeListPosition($1, $6)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $2.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $4.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $5.SkippedTokens)
}
| alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $4}
stmts := &ast.StmtStmtList{
$1.(*ast.StmtIf).ElseIf = append($1.(*ast.StmtIf).ElseIf, &ast.StmtElseIf{
Node: ast.Node{
Position: position.NewNodeListPosition($7),
Position: position.NewTokenNodeListPosition($2, $7),
},
Stmts: $7,
}
stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts}
_elseIf := &ast.StmtAltElseIf{ast.Node{}, exprBrackets, stmtsBrackets}
$1.(*ast.StmtAltIf).ElseIf = append($1.(*ast.StmtAltIf).ElseIf, _elseIf)
Alt: true,
ElseIfTkn: $2,
OpenParenthesisTkn: $3,
Cond: $4,
CloseParenthesisTkn: $5,
ColonTkn: $6,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: position.NewNodeListPosition($7),
},
Stmts: $7,
},
})
$$ = $1
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($3, $5)
stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($6, $7)
_elseIf.GetNode().Position = position.NewTokenNodeListPosition($2, $7)
// save comments
yylex.(*Parser).setFreeFloating(_elseIf, token.Start, $2.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $3.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $5.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $6.SkippedTokens)
}
;
alt_if_stmt:
alt_if_stmt_without_else T_ENDIF ';'
{
$1.(*ast.StmtIf).EndIfTkn = $2
$1.(*ast.StmtIf).SemiColonTkn = $3
$1.(*ast.StmtIf).Node.Position = position.NewNodeTokenPosition($1, $3)
$$ = $1
// save position
$$.GetNode().Position = position.NewNodeTokenPosition($1, $3)
// save comments
altif := $$.(*ast.StmtAltIf)
if len(altif.ElseIf) > 0 {
yylex.(*Parser).setFreeFloating(altif.ElseIf[len(altif.ElseIf)-1], token.End, append($2.SkippedTokens, $3.SkippedTokens...))
} else {
yylex.(*Parser).setFreeFloating(altif.Stmt, token.End, append($2.SkippedTokens, $3.SkippedTokens...))
}
yylex.(*Parser).setToken($$, token.SemiColon, $3.SkippedTokens)
}
| alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';'
{
stmts := &ast.StmtStmtList{
$1.(*ast.StmtIf).Else = &ast.StmtElse{
Node: ast.Node{
Position: position.NewNodeListPosition($4),
Position: position.NewTokenNodeListPosition($2, $4),
},
Alt: true,
ElseTkn: $2,
ColonTkn: $3,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: position.NewNodeListPosition($4),
},
Stmts: $4,
},
Stmts: $4,
}
stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts}
_else := &ast.StmtAltElse{ast.Node{}, stmtsBrackets}
$1.(*ast.StmtAltIf).Else = _else
$1.(*ast.StmtIf).EndIfTkn = $5
$1.(*ast.StmtIf).SemiColonTkn = $6
$1.(*ast.StmtIf).Node.Position = position.NewNodeTokenPosition($1, $6)
$$ = $1
// save position
stmtsBrackets.GetNode().Position = position.NewTokensPosition($3, $5)
_else.GetNode().Position = position.NewTokenNodeListPosition($2, $4)
$$.GetNode().Position = position.NewNodeTokenPosition($1, $6)
// save comments
yylex.(*Parser).setFreeFloating(_else, token.Start, $2.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $3.SkippedTokens)
yylex.(*Parser).setFreeFloating(stmtsBrackets, token.End, append($5.SkippedTokens, $6.SkippedTokens...))
yylex.(*Parser).setToken($$, token.SemiColon, $6.SkippedTokens)
}
;
@@ -3368,10 +3367,14 @@ expr_without_variable:
}
| '(' expr ')'
{
$$ = &ast.ParserBrackets{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
$$ = &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenBracketTkn: $1,
Child: $2,
CloseBracketTkn: $3,
}
// save comments
yylex.(*Parser).setFreeFloatingTokens($$, token.Start, $1.SkippedTokens)
@@ -3825,10 +3828,14 @@ exit_expr:
}
| '(' optional_expr ')'
{
$$ = &ast.ParserBrackets{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
$$ = &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenBracketTkn: $1,
Child: $2,
CloseBracketTkn: $3,
}
// save comments
yylex.(*Parser).setFreeFloatingTokens($$, token.Start, $1.SkippedTokens)
@@ -4132,10 +4139,14 @@ dereferencable:
}
| '(' expr ')'
{
$$ = &ast.ParserBrackets{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
$$ = &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenBracketTkn: $1,
Child: $2,
CloseBracketTkn: $3,
}
// save comments
yylex.(*Parser).setFreeFloatingTokens($$, token.Start, $1.SkippedTokens)
@@ -4154,10 +4165,14 @@ callable_expr:
}
| '(' expr ')'
{
$$ = &ast.ParserBrackets{ast.Node{}, $2}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $3)
$$ = &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($1, $3),
},
OpenBracketTkn: $1,
Child: $2,
CloseBracketTkn: $3,
}
// save comments
yylex.(*Parser).setFreeFloatingTokens($$, token.Start, $1.SkippedTokens)
@@ -4768,11 +4783,17 @@ internal_functions_in_yacc:
}
| T_EMPTY '(' expr ')'
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($2, $4),
},
OpenBracketTkn: $2,
Child: $3,
CloseBracketTkn: $4,
}
$$ = &ast.ExprEmpty{ast.Node{}, exprBrackets}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
$$.GetNode().Position = position.NewTokensPosition($1, $4)
// save comments
@@ -4802,11 +4823,17 @@ internal_functions_in_yacc:
}
| T_EVAL '(' expr ')'
{
exprBrackets := &ast.ParserBrackets{ast.Node{}, $3}
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
Position: position.NewTokensPosition($2, $4),
},
OpenBracketTkn: $2,
Child: $3,
CloseBracketTkn: $4,
}
$$ = &ast.ExprEval{ast.Node{}, exprBrackets}
// save position
exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4)
$$.GetNode().Position = position.NewTokensPosition($1, $4)
// save comments

View File

@@ -3375,7 +3375,7 @@ func TestPhp7(t *testing.T) {
},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 53,
@@ -3384,6 +3384,7 @@ func TestPhp7(t *testing.T) {
EndPos: 1111,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3417,7 +3418,7 @@ func TestPhp7(t *testing.T) {
Stmts: []ast.Vertex{},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 55,
@@ -3426,6 +3427,7 @@ func TestPhp7(t *testing.T) {
EndPos: 1141,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3459,7 +3461,7 @@ func TestPhp7(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 56,
@@ -3468,6 +3470,7 @@ func TestPhp7(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3503,7 +3506,7 @@ func TestPhp7(t *testing.T) {
},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 58,
@@ -3512,6 +3515,7 @@ func TestPhp7(t *testing.T) {
EndPos: 1164,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3544,7 +3548,7 @@ func TestPhp7(t *testing.T) {
},
Stmts: []ast.Vertex{},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 59,
@@ -3553,6 +3557,7 @@ func TestPhp7(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{
@@ -3566,7 +3571,7 @@ func TestPhp7(t *testing.T) {
},
},
},
&ast.StmtAltIf{
&ast.StmtIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 61,
@@ -3575,6 +3580,7 @@ func TestPhp7(t *testing.T) {
EndPos: 1213,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3608,7 +3614,7 @@ func TestPhp7(t *testing.T) {
Stmts: []ast.Vertex{},
},
ElseIf: []ast.Vertex{
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 62,
@@ -3617,6 +3623,7 @@ func TestPhp7(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3650,7 +3657,7 @@ func TestPhp7(t *testing.T) {
Stmts: []ast.Vertex{},
},
},
&ast.StmtAltElseIf{
&ast.StmtElseIf{
Node: ast.Node{
Position: &position.Position{
StartLine: 63,
@@ -3659,6 +3666,7 @@ func TestPhp7(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Cond: &ast.ExprVariable{
Node: ast.Node{
Position: &position.Position{
@@ -3693,7 +3701,7 @@ func TestPhp7(t *testing.T) {
},
},
},
Else: &ast.StmtAltElse{
Else: &ast.StmtElse{
Node: ast.Node{
Position: &position.Position{
StartLine: 64,
@@ -3702,6 +3710,7 @@ func TestPhp7(t *testing.T) {
EndPos: -1,
},
},
Alt: true,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: &position.Position{