From 80aa32838665a5d3c2e41ae8999df2c16781c209 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Mon, 14 Sep 2020 20:15:50 +0300 Subject: [PATCH] [refactoring] update ast structure of "Try", "Catch" and "Finally" nodes --- internal/php5/php5.go | Bin 288431 -> 287826 bytes internal/php5/php5.y | 75 +++++++++++++++++------------- internal/php7/php7.go | Bin 241432 -> 241851 bytes internal/php7/php7.y | 76 +++++++++++++++++-------------- pkg/ast/node.go | 26 ++++++++--- pkg/ast/visitor/filter_tokens.go | 21 +++++++++ pkg/printer/printer.go | 71 ++++++++++------------------- 7 files changed, 148 insertions(+), 121 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 8e6d434447692ffc9724c3d2f6ec6c45710521cc..6527ca84144e97cec960d423a28227d51f28f739 100644 GIT binary patch delta 8527 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 diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 0c3d768..21c19ac 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -1150,19 +1150,20 @@ unticked_statement: } | T_TRY '{' inner_statement_list '}' catch_statement finally_statement { - $$ = &ast.StmtTry{ast.Node{}, $3, $5, $6} + $$ = &ast.StmtTry{ + TryTkn: $1, + OpenCurlyBracket: $2, + Stmts: $3, + CloseCurlyBracket: $4, + Catches: $5, + Finally: $6, + } - // save position if $6 == nil { $$.GetNode().Position = position.NewTokenNodeListPosition($1, $5) } else { $$.GetNode().Position = position.NewTokenNodePosition($1, $6) } - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Try, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $4.SkippedTokens) } | T_THROW expr ';' { @@ -1202,21 +1203,27 @@ catch_statement: { identifier := &ast.Identifier{ast.Node{}, $4.Value} variable := &ast.ExprVariable{ast.Node{}, identifier} - catchNode := &ast.StmtCatch{ast.Node{}, []ast.Vertex{$3}, variable, $7} - $$ = append([]ast.Vertex{catchNode}, $9...) + catch := &ast.StmtCatch{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $8), + }, + CatchTkn: $1, + OpenParenthesisTkn: $2, + Types: []ast.Vertex{$3}, + Var: variable, + CloseParenthesisTkn: $5, + OpenCurlyBracketTkn: $6, + Stmts: $7, + CloseCurlyBracketTkn: $8, + } + $$ = append([]ast.Vertex{catch}, $9...) // save position identifier.GetNode().Position = position.NewTokenPosition($4) variable.GetNode().Position = position.NewTokenPosition($4) - catchNode.GetNode().Position = position.NewTokensPosition($1, $8) // save comments - yylex.(*Parser).setFreeFloating(catchNode, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating(catchNode, token.Catch, $2.SkippedTokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $4.SkippedTokens) - yylex.(*Parser).setFreeFloating(catchNode, token.Var, $5.SkippedTokens) - yylex.(*Parser).setFreeFloating(catchNode, token.Cond, $6.SkippedTokens) - yylex.(*Parser).setFreeFloating(catchNode, token.Stmts, $8.SkippedTokens) } ; @@ -1227,15 +1234,15 @@ finally_statement: } | T_FINALLY '{' inner_statement_list '}' { - $$ = &ast.StmtFinally{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Finally, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $4.SkippedTokens) + $$ = &ast.StmtFinally{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + FinallyTkn: $1, + OpenCurlyBracketTkn: $2, + Stmts: $3, + CloseCurlyBracketTkn: $4, + } } ; @@ -1266,20 +1273,26 @@ additional_catch: { identifier := &ast.Identifier{ast.Node{}, $4.Value} variable := &ast.ExprVariable{ast.Node{}, identifier} - $$ = &ast.StmtCatch{ast.Node{}, []ast.Vertex{$3}, variable, $7} + $$ = &ast.StmtCatch{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $8), + }, + CatchTkn: $1, + OpenParenthesisTkn: $2, + Types: []ast.Vertex{$3}, + Var: variable, + CloseParenthesisTkn: $5, + OpenCurlyBracketTkn: $6, + Stmts: $7, + CloseCurlyBracketTkn: $8, + } // save position identifier.GetNode().Position = position.NewTokenPosition($4) variable.GetNode().Position = position.NewTokenPosition($4) - $$.GetNode().Position = position.NewTokensPosition($1, $8) // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Catch, $2.SkippedTokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $4.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Var, $5.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Cond, $6.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $8.SkippedTokens) } ; diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 5c6b024bfc6b7108314d65926c1a66a4e75c8b05..5c94ada59c55fa257206a10c7ea3f6a2284f54bf 100644 GIT binary patch delta 12920 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 QPSG$v75c%a&s)L&0h1M_-T(jq delta 11520 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 diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 969ed05..a679f14 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -249,7 +249,7 @@ import ( %type exit_expr scalar lexical_var function_call member_name property_name %type variable_class_name dereferencable_scalar constant dereferencable %type callable_expr callable_variable static_member new_variable -%type encaps_var encaps_var_offset echo_expr_list +%type encaps_var encaps_var_offset echo_expr_list catch_name_list %type if_stmt const_list %type alt_if_stmt %type if_stmt_without_else @@ -275,7 +275,7 @@ import ( %type foreach_variable -%type encaps_list backticks_expr namespace_name catch_name_list catch_list class_const_list +%type encaps_list backticks_expr namespace_name catch_list class_const_list %type for_exprs non_empty_for_exprs %type unprefixed_use_declarations inline_use_declarations property_list %type case_list trait_adaptation_list @@ -1060,18 +1060,20 @@ statement: } | T_TRY '{' inner_statement_list '}' catch_list finally_statement { - if $6 == nil { - $$ = &ast.StmtTry{ast.Node{}, $3, $5, $6} - $$.GetNode().Position = position.NewTokenNodeListPosition($1, $5) - } else { - $$ = &ast.StmtTry{ast.Node{}, $3, $5, $6} - $$.GetNode().Position = position.NewTokenNodePosition($1, $6) + $$ = &ast.StmtTry{ + TryTkn: $1, + OpenCurlyBracket: $2, + Stmts: $3, + CloseCurlyBracket: $4, + Catches: $5, + Finally: $6, } - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Try, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $4.SkippedTokens) + if $6 == nil { + $$.GetNode().Position = position.NewTokenNodeListPosition($1, $5) + } else { + $$.GetNode().Position = position.NewTokenNodePosition($1, $6) + } } | T_THROW expr ';' { @@ -1123,36 +1125,40 @@ catch_list: { identifier := &ast.Identifier{ast.Node{}, $5.Value} variable := &ast.ExprVariable{ast.Node{}, identifier} - catch := &ast.StmtCatch{ast.Node{}, $4, variable, $8} + + catch := $4.(*ast.StmtCatch) + catch.CatchTkn = $2 + catch.OpenParenthesisTkn = $3 + catch.Var = variable + catch.CloseParenthesisTkn = $6 + catch.OpenCurlyBracketTkn = $7 + catch.Stmts = $8 + catch.CloseCurlyBracketTkn = $9 + catch.GetNode().Position = position.NewTokensPosition($2, $9) + $$ = append($1, catch) // save position identifier.GetNode().Position = position.NewTokenPosition($5) variable.GetNode().Position = position.NewTokenPosition($5) - catch.GetNode().Position = position.NewTokensPosition($2, $9) // save comments - yylex.(*Parser).setFreeFloating(catch, token.Start, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating(catch, token.Catch, $3.SkippedTokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $5.SkippedTokens) - yylex.(*Parser).setFreeFloating(catch, token.Var, $6.SkippedTokens) - yylex.(*Parser).setFreeFloating(catch, token.Cond, $7.SkippedTokens) - yylex.(*Parser).setFreeFloating(catch, token.Stmts, $9.SkippedTokens) } ; catch_name_list: name { - $$ = []ast.Vertex{$1} + $$ = &ast.StmtCatch{ + Types: []ast.Vertex{$1}, + } } | catch_name_list '|' name { - switch n := lastNode($1).(type) { - case *ast.NameName: n.ListSeparatorTkn = $2 - case *ast.NameFullyQualified: n.ListSeparatorTkn = $2 - case *ast.NameRelative: n.ListSeparatorTkn = $2 - } - $$ = append($1, $3) + $1.(*ast.StmtCatch).SeparatorTkns = append($1.(*ast.StmtCatch).SeparatorTkns, $2) + $1.(*ast.StmtCatch).Types = append($1.(*ast.StmtCatch).Types, $3) + + $$ = $1 } ; @@ -1163,15 +1169,15 @@ finally_statement: } | T_FINALLY '{' inner_statement_list '}' { - $$ = &ast.StmtFinally{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Finally, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $4.SkippedTokens) + $$ = &ast.StmtFinally{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + FinallyTkn: $1, + OpenCurlyBracketTkn: $2, + Stmts: $3, + CloseCurlyBracketTkn: $4, + } } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index b16ad15..0479183 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -203,9 +203,15 @@ func (n *StmtCase) Accept(v NodeVisitor) { // StmtCatch node type StmtCatch struct { Node - Types []Vertex - Var Vertex - Stmts []Vertex + CatchTkn *token.Token + OpenParenthesisTkn *token.Token + Types []Vertex + SeparatorTkns []*token.Token + Var Vertex + CloseParenthesisTkn *token.Token + OpenCurlyBracketTkn *token.Token + Stmts []Vertex + CloseCurlyBracketTkn *token.Token } func (n *StmtCatch) Accept(v NodeVisitor) { @@ -415,7 +421,10 @@ func (n *StmtExpression) Accept(v NodeVisitor) { // StmtFinally node type StmtFinally struct { Node - Stmts []Vertex + FinallyTkn *token.Token + OpenCurlyBracketTkn *token.Token + Stmts []Vertex + CloseCurlyBracketTkn *token.Token } func (n *StmtFinally) Accept(v NodeVisitor) { @@ -776,9 +785,12 @@ func (n *StmtTraitUsePrecedence) Accept(v NodeVisitor) { // StmtTry node type StmtTry struct { Node - Stmts []Vertex - Catches []Vertex - Finally Vertex + TryTkn *token.Token + OpenCurlyBracket *token.Token + Stmts []Vertex + CloseCurlyBracket *token.Token + Catches []Vertex + Finally Vertex } func (n *StmtTry) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/filter_tokens.go b/pkg/ast/visitor/filter_tokens.go index fc28ce8..83a3410 100644 --- a/pkg/ast/visitor/filter_tokens.go +++ b/pkg/ast/visitor/filter_tokens.go @@ -239,3 +239,24 @@ func (v *FilterTokens) StmtDeclare(n *ast.StmtDeclare) { func (v *FilterTokens) StmtNop(n *ast.StmtNop) { n.SemiColonTkn = nil } + +func (v *FilterTokens) StmtTry(n *ast.StmtTry) { + n.TryTkn = nil + n.OpenCurlyBracket = nil + n.CloseCurlyBracket = nil +} + +func (v *FilterTokens) StmtCatch(n *ast.StmtCatch) { + n.CatchTkn = nil + n.OpenParenthesisTkn = nil + n.SeparatorTkns = nil + n.CloseParenthesisTkn = nil + n.OpenCurlyBracketTkn = nil + n.CloseCurlyBracketTkn = nil +} + +func (v *FilterTokens) StmtFinally(n *ast.StmtFinally) { + n.FinallyTkn = nil + n.OpenCurlyBracketTkn = nil + n.CloseCurlyBracketTkn = nil +} diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index 07318bd..fab6102 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2009,26 +2009,15 @@ func (p *Printer) printStmtCase(n *ast.StmtCase) { p.printNodes(n.Stmts) } -func (p *Printer) printStmtCatch(n ast.Vertex) { - nn := n.(*ast.StmtCatch) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("catch")) - p.printFreeFloating(nn, token.Catch) - p.write([]byte("(")) - - p.joinPrintRefactored("|", nn.Types) - - p.Print(nn.Var) - p.printFreeFloating(nn, token.Var) - p.write([]byte(")")) - p.printFreeFloating(nn, token.Cond) - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - p.printFreeFloating(nn, token.End) +func (p *Printer) printStmtCatch(n *ast.StmtCatch) { + p.printToken(n.CatchTkn, "catch") + p.printToken(n.OpenParenthesisTkn, "(") + p.printSeparatedList(n.Types, n.SeparatorTkns, "|") + p.Print(n.Var) + p.printToken(n.CloseParenthesisTkn, ")") + p.printToken(n.OpenCurlyBracketTkn, "{") + p.printNodes(n.Stmts) + p.printToken(n.CloseCurlyBracketTkn, "}") } func (p *Printer) printStmtClassMethod(n ast.Vertex) { @@ -2296,18 +2285,11 @@ func (p *Printer) printStmtExpression(n ast.Vertex) { p.printFreeFloating(nn, token.End) } -func (p *Printer) printStmtFinally(n ast.Vertex) { - nn := n.(*ast.StmtFinally) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("finally")) - p.printFreeFloating(nn, token.Finally) - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - p.printFreeFloating(nn, token.End) +func (p *Printer) printStmtFinally(n *ast.StmtFinally) { + p.printToken(n.FinallyTkn, "finally") + p.printToken(n.OpenCurlyBracketTkn, "{") + p.printNodes(n.Stmts) + p.printToken(n.CloseCurlyBracketTkn, "}") } func (p *Printer) printStmtFor(n *ast.StmtFor) { @@ -2828,26 +2810,19 @@ func (p *Printer) printStmtTrait(n ast.Vertex) { p.printFreeFloating(nn, token.End) } -func (p *Printer) printStmtTry(n ast.Vertex) { - nn := n.(*ast.StmtTry) - p.printFreeFloating(nn, token.Start) +func (p *Printer) printStmtTry(n *ast.StmtTry) { + p.printToken(n.TryTkn, "try") + p.printToken(n.OpenCurlyBracket, "{") + p.printNodes(n.Stmts) + p.printToken(n.CloseCurlyBracket, "}") - p.write([]byte("try")) - p.printFreeFloating(nn, token.Try) - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - if nn.Catches != nil { - p.printNodes(nn.Catches) + if n.Catches != nil { + p.printNodes(n.Catches) } - if nn.Finally != nil { - p.Print(nn.Finally) + if n.Finally != nil { + p.Print(n.Finally) } - - p.printFreeFloating(nn, token.End) } func (p *Printer) printStmtUnset(n *ast.StmtUnset) {