From b8b4439015325f2c285e7d961d86ea3eb3b0328e Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Sun, 9 Aug 2020 14:41:56 +0200 Subject: [PATCH] [refactoring] store `alt_if` node brackets --- internal/php5/php5.go | Bin 332763 -> 333714 bytes internal/php5/php5.y | 39 ++++++---- internal/php7/php7.go | Bin 274514 -> 275578 bytes internal/php7/php7.y | 41 +++++++---- pkg/ast/visitor/filter_parser_nodes.go | 26 +++++++ pkg/printer/printer.go | 95 ++++++++++++++++++------- 6 files changed, 150 insertions(+), 51 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 908d035f2e05f28aaef5b8a6c4ea7a489a37dac3..466cd09082db85449cd8a5f078ebb74433527d55 100644 GIT binary patch delta 9835 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 delta 8732 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 0 { - yylex.(*Parser).setFreeFloatingTokens($$, token.If, $2.GetNode().Tokens[token.OpenParenthesisToken][:len($2.GetNode().Tokens[token.OpenParenthesisToken])-1]); delete($2.GetNode().Tokens, token.OpenParenthesisToken) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $2.GetNode().Tokens[token.OpenParenthesisToken]); delete($2.GetNode().Tokens, token.OpenParenthesisToken) } if len($2.GetNode().Tokens[token.CloseParenthesisToken]) > 0 { - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $2.GetNode().Tokens[token.CloseParenthesisToken][:len($2.GetNode().Tokens[token.CloseParenthesisToken])-1]); delete($2.GetNode().Tokens, token.CloseParenthesisToken) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $2.GetNode().Tokens[token.CloseParenthesisToken]); delete($2.GetNode().Tokens, token.CloseParenthesisToken) + } + yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $3.Tokens) + if $6 != nil { + yylex.(*Parser).setFreeFloating($6.(*ast.StmtAltElse).Stmt, token.End, append($7.Tokens, $8.Tokens...)) + } else if len($5) > 0 { + yylex.(*Parser).setFreeFloating($5[len($5)-1].(*ast.StmtAltElseIf).Stmt, token.End, append($7.Tokens, $8.Tokens...)) + } else { + yylex.(*Parser).setFreeFloating(stmtsBrackets, token.End, append($7.Tokens, $8.Tokens...)) } - yylex.(*Parser).setFreeFloating($$, token.Cond, $3.Tokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $7.Tokens) - yylex.(*Parser).setFreeFloating($$, token.AltEnd, $8.Tokens) yylex.(*Parser).setToken($$, token.SemiColon, $8.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) @@ -2175,23 +2184,27 @@ new_elseif_list: } | new_elseif_list T_ELSEIF parenthesis_expr ':' inner_statement_list { + exprBrackets := &ast.ParserBrackets{ast.Node{}, $3} stmts := &ast.StmtStmtList{ast.Node{}, $5} - _elseIf := &ast.StmtAltElseIf{ast.Node{}, $3, stmts} + stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} + _elseIf := &ast.StmtAltElseIf{ast.Node{}, exprBrackets, stmtsBrackets} $$ = append($1, _elseIf) // save position + exprBrackets.GetNode().Position = position.NewNodePosition($3) stmts.GetNode().Position = position.NewNodeListPosition($5) + exprBrackets.GetNode().Position = position.NewTokenNodeListPosition($4, $5) _elseIf.GetNode().Position = position.NewTokenNodeListPosition($2, $5) // save comments yylex.(*Parser).setFreeFloating(_elseIf, token.Start, $2.Tokens) if len($3.GetNode().Tokens[token.OpenParenthesisToken]) > 0 { - yylex.(*Parser).setFreeFloatingTokens(_elseIf, token.ElseIf, $3.GetNode().Tokens[token.OpenParenthesisToken][:len($3.GetNode().Tokens[token.OpenParenthesisToken])-1]); delete($3.GetNode().Tokens, token.OpenParenthesisToken) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $3.GetNode().Tokens[token.OpenParenthesisToken]); delete($3.GetNode().Tokens, token.OpenParenthesisToken) } if len($3.GetNode().Tokens[token.CloseParenthesisToken]) > 0 { - yylex.(*Parser).setFreeFloatingTokens(_elseIf, token.Expr, $3.GetNode().Tokens[token.CloseParenthesisToken][:len($3.GetNode().Tokens[token.CloseParenthesisToken])-1]); delete($3.GetNode().Tokens, token.CloseParenthesisToken) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $3.GetNode().Tokens[token.CloseParenthesisToken]); delete($3.GetNode().Tokens, token.CloseParenthesisToken) } - yylex.(*Parser).setFreeFloating(_elseIf, token.Cond, $4.Tokens) + yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $4.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -2230,15 +2243,17 @@ new_else_single: | T_ELSE ':' inner_statement_list { stmts := &ast.StmtStmtList{ast.Node{}, $3} - $$ = &ast.StmtAltElse{ast.Node{}, stmts} + stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} + $$ = &ast.StmtAltElse{ast.Node{}, stmtsBrackets} // save position stmts.GetNode().Position = position.NewNodeListPosition($3) + stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($2, $3) $$.GetNode().Position = position.NewTokenNodeListPosition($1, $3) // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) - yylex.(*Parser).setFreeFloating($$, token.Else, $2.Tokens) + yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $2.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 1cf81e70c28eeca2736666f12fa3b0a34e2102a4..0c50734c8604d3340d13baae13c4a73f91c8fa61 100644 GIT binary patch delta 5453 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 XS>{g?Q}xTbSmsS<3?0Z0r{(@XPGwYW delta 4838 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 diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 4a2af09..e125503 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -2037,38 +2037,46 @@ if_stmt: alt_if_stmt_without_else: T_IF '(' expr ')' ':' inner_statement_list { + exprBrackets := &ast.ParserBrackets{ast.Node{}, $3} stmts := &ast.StmtStmtList{ast.Node{}, $6} - $$ = &ast.StmtAltIf{ast.Node{}, $3, stmts, nil, nil} + stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} + $$ = &ast.StmtAltIf{ast.Node{}, exprBrackets, stmtsBrackets, nil, nil} // save position + exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4) stmts.GetNode().Position = position.NewNodeListPosition($6) + stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($5, $6) $$.GetNode().Position = position.NewTokenNodeListPosition($1, $6) // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) - yylex.(*Parser).setFreeFloating($$, token.If, $2.Tokens) - yylex.(*Parser).setFreeFloating($$, token.Expr, $4.Tokens) - yylex.(*Parser).setFreeFloating($$, token.Cond, $5.Tokens) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $2.Tokens) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $4.Tokens) + yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $5.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list { + exprBrackets := &ast.ParserBrackets{ast.Node{}, $4} stmts := &ast.StmtStmtList{ast.Node{}, $7} - _elseIf := &ast.StmtAltElseIf{ast.Node{}, $4, stmts} + stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} + _elseIf := &ast.StmtAltElseIf{ast.Node{}, exprBrackets, stmtsBrackets} $1.(*ast.StmtAltIf).ElseIf = append($1.(*ast.StmtAltIf).ElseIf, _elseIf) $$ = $1 // save position + exprBrackets.GetNode().Position = position.NewTokensPosition($3, $5) stmts.GetNode().Position = position.NewNodeListPosition($7) + stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($6, $7) _elseIf.GetNode().Position = position.NewTokenNodeListPosition($2, $7) // save comments yylex.(*Parser).setFreeFloating(_elseIf, token.Start, $2.Tokens) - yylex.(*Parser).setFreeFloating(_elseIf, token.ElseIf, $3.Tokens) - yylex.(*Parser).setFreeFloating(_elseIf, token.Expr, $5.Tokens) - yylex.(*Parser).setFreeFloating(_elseIf, token.Cond, $6.Tokens) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $3.Tokens) + yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.End, $5.Tokens) + yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $6.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -2083,8 +2091,12 @@ alt_if_stmt: $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) // save comments - yylex.(*Parser).setFreeFloating($$, token.Stmts, $2.Tokens) - yylex.(*Parser).setFreeFloating($$, token.AltEnd, $3.Tokens) + altif := $$.(*ast.StmtAltIf) + if len(altif.ElseIf) > 0 { + yylex.(*Parser).setFreeFloating(altif.ElseIf[len(altif.ElseIf)-1], token.End, append($2.Tokens, $3.Tokens...)) + } else { + yylex.(*Parser).setFreeFloating(altif.Stmt, token.End, append($2.Tokens, $3.Tokens...)) + } yylex.(*Parser).setToken($$, token.SemiColon, $3.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) @@ -2092,21 +2104,22 @@ alt_if_stmt: | alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';' { stmts := &ast.StmtStmtList{ast.Node{}, $4} - _else := &ast.StmtAltElse{ast.Node{}, stmts} + stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} + _else := &ast.StmtAltElse{ast.Node{}, stmtsBrackets} $1.(*ast.StmtAltIf).Else = _else $$ = $1 // save position stmts.GetNode().Position = position.NewNodeListPosition($4) + 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.Tokens) - yylex.(*Parser).setFreeFloating(_else, token.Else, $3.Tokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $5.Tokens) - yylex.(*Parser).setFreeFloating($$, token.AltEnd, $6.Tokens) + yylex.(*Parser).setFreeFloatingTokens(stmtsBrackets, token.Start, $3.Tokens) + yylex.(*Parser).setFreeFloating(stmtsBrackets, token.End, append($5.Tokens, $6.Tokens...)) yylex.(*Parser).setToken($$, token.SemiColon, $6.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) diff --git a/pkg/ast/visitor/filter_parser_nodes.go b/pkg/ast/visitor/filter_parser_nodes.go index c8eaabf..a7f5529 100644 --- a/pkg/ast/visitor/filter_parser_nodes.go +++ b/pkg/ast/visitor/filter_parser_nodes.go @@ -40,3 +40,29 @@ func (v *FilterParserNodes) StmtUseDeclaration(n *ast.StmtUseDeclaration) { n.Alias = nn.Child } } + +func (v *FilterParserNodes) StmtAltIf(n *ast.StmtAltIf) { + if nn, ok := n.Cond.(*ast.ParserBrackets); ok { + n.Cond = nn.Child + } + + if nn, ok := n.Stmt.(*ast.ParserBrackets); ok { + n.Stmt = nn.Child + } +} + +func (v *FilterParserNodes) StmtAltElseIf(n *ast.StmtAltElseIf) { + if nn, ok := n.Cond.(*ast.ParserBrackets); ok { + n.Cond = nn.Child + } + + if nn, ok := n.Stmt.(*ast.ParserBrackets); ok { + n.Stmt = nn.Child + } +} + +func (v *FilterParserNodes) StmtAltElse(n *ast.StmtAltElse) { + if nn, ok := n.Stmt.(*ast.ParserBrackets); ok { + n.Stmt = nn.Child + } +} diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index e269a6d..64a32c9 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -1967,16 +1967,32 @@ func (p *Printer) printStmtAltElseIf(n ast.Vertex) { p.printFreeFloating(nn, token.Start) io.WriteString(p.w, "elseif") - p.printFreeFloating(nn, token.ElseIf) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, token.Expr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, token.Cond) - io.WriteString(p.w, ":") - if s := nn.Stmt.(*ast.StmtStmtList).Stmts; len(s) > 0 { - p.printNodes(s) + if _, ok := nn.Cond.(*ast.ParserBrackets); !ok { + io.WriteString(p.w, "(") + } + + p.Print(nn.Cond) + + if _, ok := nn.Cond.(*ast.ParserBrackets); !ok { + io.WriteString(p.w, ")") + } + + stmtList, _ := nn.Stmt.(*ast.StmtStmtList) + brackets, ok := nn.Stmt.(*ast.ParserBrackets) + if ok { + p.printFreeFloating(brackets, token.Start) + stmtList = brackets.Child.(*ast.StmtStmtList) + } else { + io.WriteString(p.w, ":") + } + + p.printFreeFloating(stmtList, token.Stmts) + p.printNodes(stmtList.Stmts) + p.printFreeFloating(stmtList, token.End) + + if ok { + p.printFreeFloating(brackets, token.End) } p.printFreeFloating(nn, token.End) @@ -1987,11 +2003,22 @@ func (p *Printer) printStmtAltElse(n ast.Vertex) { p.printFreeFloating(nn, token.Start) io.WriteString(p.w, "else") - p.printFreeFloating(nn, token.Else) - io.WriteString(p.w, ":") - if s := nn.Stmt.(*ast.StmtStmtList).Stmts; len(s) > 0 { - p.printNodes(s) + stmtList, _ := nn.Stmt.(*ast.StmtStmtList) + brackets, ok := nn.Stmt.(*ast.ParserBrackets) + if ok { + p.printFreeFloating(brackets, token.Start) + stmtList = brackets.Child.(*ast.StmtStmtList) + } else { + io.WriteString(p.w, ":") + } + + p.printFreeFloating(stmtList, token.Stmts) + p.printNodes(stmtList.Stmts) + p.printFreeFloating(stmtList, token.End) + + if ok { + p.printFreeFloating(brackets, token.End) } p.printFreeFloating(nn, token.End) @@ -2083,16 +2110,33 @@ func (p *Printer) printStmtAltIf(n ast.Vertex) { p.printFreeFloating(nn, token.Start) io.WriteString(p.w, "if") - p.printFreeFloating(nn, token.If) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, token.Expr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, token.Cond) - io.WriteString(p.w, ":") - s := nn.Stmt.(*ast.StmtStmtList) - p.printNodes(s.Stmts) + if _, ok := nn.Cond.(*ast.ParserBrackets); !ok { + io.WriteString(p.w, "(") + } + + p.Print(nn.Cond) + + if _, ok := nn.Cond.(*ast.ParserBrackets); !ok { + io.WriteString(p.w, ")") + } + + stmtList, _ := nn.Stmt.(*ast.StmtStmtList) + brackets, ok := nn.Stmt.(*ast.ParserBrackets) + if ok { + p.printFreeFloating(brackets, token.Start) + stmtList = brackets.Child.(*ast.StmtStmtList) + } else { + io.WriteString(p.w, ":") + } + + p.printFreeFloating(stmtList, token.Stmts) + p.printNodes(stmtList.Stmts) + p.printFreeFloating(stmtList, token.End) + + if ok { + p.printFreeFloating(brackets, token.End) + } for _, elseif := range nn.ElseIf { p.Print(elseif) @@ -2102,9 +2146,10 @@ func (p *Printer) printStmtAltIf(n ast.Vertex) { p.Print(nn.Else) } - p.printFreeFloating(nn, token.Stmts) - io.WriteString(p.w, "endif") - p.printFreeFloating(nn, token.AltEnd) + if !ok { + io.WriteString(p.w, "endif") + } + p.printFreeFloating(nn, token.SemiColon) if nn.GetNode().Tokens.IsEmpty() { io.WriteString(p.w, ";")