[refactoring] update ast structure of "For" node

This commit is contained in:
Vadym Slizov
2020-09-04 11:37:17 +03:00
parent c274c4f92f
commit 0e73cd8852
21 changed files with 1041 additions and 1156 deletions

View File

@@ -6738,7 +6738,7 @@ func TestStmtFor_Alt(t *testing.T) {
},
},
Stmts: []ast.Vertex{
&ast.StmtAltFor{
&ast.StmtFor{
Node: ast.Node{
Position: &position.Position{
StartLine: 1,
@@ -6747,6 +6747,7 @@ func TestStmtFor_Alt(t *testing.T) {
EndPos: 33,
},
},
Alt: true,
Cond: []ast.Vertex{
&ast.ExprBinarySmaller{
Node: ast.Node{

778
internal/php7/php7.go generated

File diff suppressed because it is too large Load Diff

View File

@@ -895,28 +895,17 @@ statement:
}
| T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement
{
switch n := $9.(type) {
case *ast.StmtFor :
n.Init = $3
n.Cond = $5
n.Loop = $7
case *ast.StmtAltFor :
n.Init = $3
n.Cond = $5
n.Loop = $7
}
$9.(*ast.StmtFor).ForTkn = $1
$9.(*ast.StmtFor).OpenParenthesisTkn = $2
$9.(*ast.StmtFor).Init = $3
$9.(*ast.StmtFor).InitSemiColonTkn = $4
$9.(*ast.StmtFor).Cond = $5
$9.(*ast.StmtFor).CondSemiColonTkn = $6
$9.(*ast.StmtFor).Loop = $7
$9.(*ast.StmtFor).CloseParenthesisTkn = $8
$9.(*ast.StmtFor).Node.Position = position.NewTokenNodePosition($1, $9)
$$ = $9
// save position
$$.GetNode().Position = position.NewTokenNodePosition($1, $9)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.For, $2.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.InitExpr, $4.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.CondExpr, $6.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.IncExpr, $8.SkippedTokens)
}
| T_SWITCH '(' expr ')' switch_case_list
{
@@ -1522,29 +1511,30 @@ foreach_variable:
for_statement:
statement
{
$$ = &ast.StmtFor{ast.Node{}, nil, nil, nil, $1}
// save position
$$.GetNode().Position = position.NewNodePosition($1)
$$ = &ast.StmtFor{
Node: ast.Node{
Position: position.NewNodePosition($1),
},
Stmt: $1,
}
}
| ':' inner_statement_list T_ENDFOR ';'
{
stmtList := &ast.StmtStmtList{
$$ = &ast.StmtFor{
Node: ast.Node{
Position: position.NewNodeListPosition($2),
Position: position.NewTokensPosition($1, $4),
},
Stmts: $2,
Alt: true,
ColonTkn: $1,
Stmt: &ast.StmtStmtList{
Node: ast.Node{
Position: position.NewNodeListPosition($2),
},
Stmts: $2,
},
EndForTkn: $3,
SemiColonTkn: $4,
}
$$ = &ast.StmtAltFor{ast.Node{}, nil, nil, nil, stmtList}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $4)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Cond, $1.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.Stmts, $3.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.AltEnd, $4.SkippedTokens)
yylex.(*Parser).setToken($$, token.SemiColon, $4.SkippedTokens)
}
;

View File

@@ -5397,7 +5397,7 @@ func TestPhp7(t *testing.T) {
Stmts: []ast.Vertex{},
},
},
&ast.StmtAltFor{
&ast.StmtFor{
Node: ast.Node{
Position: &position.Position{
StartLine: 92,
@@ -5406,6 +5406,7 @@ func TestPhp7(t *testing.T) {
EndPos: 1959,
},
},
Alt: true,
Cond: []ast.Vertex{
&ast.ExprBinarySmaller{
Node: ast.Node{