From e817f8dd8d827adac054af29d38f54ab8cbb15f2 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Sun, 6 Sep 2020 13:02:13 +0300 Subject: [PATCH] [refactoring] update ast structure of "Break", "Continue" nodes --- internal/php5/php5.go | Bin 293045 -> 292106 bytes internal/php5/php5.y | 66 +++++++++++------------- internal/php7/php7.go | Bin 243941 -> 244481 bytes internal/php7/php7.y | 34 ++++++------ pkg/ast/node.go | 8 ++- pkg/ast/visitor/filter_tokens.go | 10 ++++ pkg/printer/printer.go | 45 +++++----------- pkg/printer/printer_parsed_php5_test.go | 6 ++- pkg/printer/printer_parsed_php7_test.go | 6 ++- 9 files changed, 82 insertions(+), 93 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 86cad0f133cf710774b105fa374b81a072dc3323..c43d502c0cdb079727b65e15b09585de9282865b 100644 GIT binary patch delta 8090 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 delta 8114 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 diff --git a/internal/php5/php5.y b/internal/php5/php5.y index cab691e..355007f 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -950,51 +950,45 @@ unticked_statement: } | T_BREAK ';' { - $$ = &ast.StmtBreak{ast.Node{}, nil} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $2.SkippedTokens) + $$ = &ast.StmtBreak{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $2), + }, + BreakTkn: $1, + SemiColonTkn: $2, + } } | T_BREAK expr ';' { - $$ = &ast.StmtBreak{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Expr, $3.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $3.SkippedTokens) + $$ = &ast.StmtBreak{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + BreakTkn: $1, + Expr: $2, + SemiColonTkn: $3, + } } | T_CONTINUE ';' { - $$ = &ast.StmtContinue{ast.Node{}, nil} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $2.SkippedTokens) + $$ = &ast.StmtContinue{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $2), + }, + ContinueTkn: $1, + SemiColonTkn: $2, + } } | T_CONTINUE expr ';' { - $$ = &ast.StmtContinue{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Expr, $3.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $3.SkippedTokens) + $$ = &ast.StmtContinue{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + ContinueTkn: $1, + Expr: $2, + SemiColonTkn: $3, + } } | T_RETURN ';' { diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 90b19728dd6dd71eb116e10a471ddc385b771375..d34558c203a38f2ea33c58eef621fd08ae7c7025 100644 GIT binary patch delta 10998 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 LR2J+zzykjUoqyZ2 delta 9374 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 E0g5qZ5C8xG diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 9cf8c08..d3cfde3 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -919,27 +919,25 @@ statement: } | T_BREAK optional_expr ';' { - $$ = &ast.StmtBreak{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Expr, $3.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $3.SkippedTokens) + $$ = &ast.StmtBreak{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + BreakTkn: $1, + Expr: $2, + SemiColonTkn: $3, + } } | T_CONTINUE optional_expr ';' { - $$ = &ast.StmtContinue{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Expr, $3.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $3.SkippedTokens) + $$ = &ast.StmtContinue{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + ContinueTkn: $1, + Expr: $2, + SemiColonTkn: $3, + } } | T_RETURN optional_expr ';' { diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 26850a4..2ed7187 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -191,7 +191,9 @@ func (n *StmtAltForeach) Accept(v NodeVisitor) { // StmtBreak node type StmtBreak struct { Node - Expr Vertex + BreakTkn *token.Token + Expr Vertex + SemiColonTkn *token.Token } func (n *StmtBreak) Accept(v NodeVisitor) { @@ -314,7 +316,9 @@ func (n *StmtConstant) Accept(v NodeVisitor) { // StmtContinue node type StmtContinue struct { Node - Expr Vertex + ContinueTkn *token.Token + Expr Vertex + SemiColonTkn *token.Token } func (n *StmtContinue) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/filter_tokens.go b/pkg/ast/visitor/filter_tokens.go index b59f05b..4cc6a27 100644 --- a/pkg/ast/visitor/filter_tokens.go +++ b/pkg/ast/visitor/filter_tokens.go @@ -163,3 +163,13 @@ func (v *FilterTokens) StmtDefault(n *ast.StmtDefault) { n.DefaultTkn = nil n.CaseSeparatorTkn = nil } + +func (v *FilterTokens) StmtBreak(n *ast.StmtBreak) { + n.BreakTkn = nil + n.SemiColonTkn = nil +} + +func (v *FilterTokens) StmtContinue(n *ast.StmtContinue) { + n.ContinueTkn = nil + n.SemiColonTkn = nil +} diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index 5064d70..3380c90 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2017,25 +2017,15 @@ func (p *Printer) printStmtAltForeach(n ast.Vertex) { p.printFreeFloating(nn, token.End) } -func (p *Printer) printStmtBreak(n ast.Vertex) { - nn := n.(*ast.StmtBreak) - p.printFreeFloating(nn, token.Start) +func (p *Printer) printStmtBreak(n *ast.StmtBreak) { + p.printToken(n.BreakTkn, "break") - io.WriteString(p.w, "break") - if nn.Expr != nil { - if nn.Expr.GetNode().Tokens.IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - } - p.printFreeFloating(nn, token.Expr) - - p.printFreeFloating(nn, token.SemiColon) - if nn.GetNode().Tokens.IsEmpty() { - io.WriteString(p.w, ";") + if n.Expr != nil { + p.bufStart = " " } - p.printFreeFloating(nn, token.End) + p.Print(n.Expr) + p.printToken(n.SemiColonTkn, ";") } func (p *Printer) printStmtCase(n *ast.StmtCase) { @@ -2202,26 +2192,15 @@ func (p *Printer) printStmtConstant(n *ast.StmtConstant) { p.printToken(n.CommaTkn, "") } -func (p *Printer) printStmtContinue(n ast.Vertex) { - nn := n.(*ast.StmtContinue) - p.printFreeFloating(nn, token.Start) +func (p *Printer) printStmtContinue(n *ast.StmtContinue) { + p.printToken(n.ContinueTkn, "continue") - io.WriteString(p.w, "continue") - - if nn.Expr != nil { - if nn.Expr.GetNode().Tokens.IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - } - p.printFreeFloating(nn, token.Expr) - - p.printFreeFloating(nn, token.SemiColon) - if nn.GetNode().Tokens.IsEmpty() { - io.WriteString(p.w, ";") + if n.Expr != nil { + p.bufStart = " " } - p.printFreeFloating(nn, token.End) + p.Print(n.Expr) + p.printToken(n.SemiColonTkn, ";") } func (p *Printer) printStmtDeclare(n ast.Vertex) { diff --git a/pkg/printer/printer_parsed_php5_test.go b/pkg/printer/printer_parsed_php5_test.go index 2ea9ea4..d5b2c0b 100644 --- a/pkg/printer/printer_parsed_php5_test.go +++ b/pkg/printer/printer_parsed_php5_test.go @@ -837,7 +837,8 @@ func TestParseAndPrintPhp5AltWhile(t *testing.T) { } func TestParseAndPrintPhp5Break(t *testing.T) { - src := `