From 62fc16da974d43f12356ec476e67f3d6e537b096 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Mon, 14 Sep 2020 17:19:17 +0300 Subject: [PATCH] [refactoring] update ast structure of "Unset" node --- internal/php5/php5.go | Bin 291269 -> 291164 bytes internal/php5/php5.y | 30 +++++++++++++-------------- internal/php7/php7.go | Bin 243789 -> 242614 bytes internal/php7/php7.y | 34 ++++++++++++++----------------- pkg/ast/node.go | 7 ++++++- pkg/ast/visitor/filter_tokens.go | 9 ++++++++ pkg/printer/printer.go | 24 ++++++---------------- 7 files changed, 50 insertions(+), 54 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index e87357e92158cf68c2af31449675a699e984a979..324e99211e77ff85fc478fa9c5a4663b0e960af2 100644 GIT binary patch delta 9678 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 diff --git a/internal/php5/php5.y b/internal/php5/php5.y index fb42de1..f599ddd 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -241,7 +241,7 @@ import ( %type trait_method_reference_fully_qualified trait_method_reference trait_modifiers member_modifier method %type static_scalar_value static_operation static_var_list global_var_list %type ctor_arguments function_call_parameter_list echo_expr_list -%type trait_adaptations +%type trait_adaptations unset_variables %type switch_case_list %type method_body %type foreach_statement for_statement while_statement @@ -255,7 +255,7 @@ import ( %type top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations %type inner_statement_list encaps_list isset_variables non_empty_array_pair_list %type array_pair_list assignment_list lexical_var_list elseif_list new_elseif_list non_empty_for_expr -%type for_expr case_list unset_variables declare_list catch_statement additional_catches +%type for_expr case_list declare_list catch_statement additional_catches %type non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list %type class_statement_list variable_modifiers method_modifiers class_variable_declaration %type interface_list non_empty_function_call_parameter_list trait_list trait_adaptation_list non_empty_trait_adaptation_list @@ -1084,17 +1084,13 @@ unticked_statement: } | T_UNSET '(' unset_variables ')' ';' { - $$ = &ast.StmtUnset{ast.Node{}, $3} + $3.(*ast.StmtUnset).UnsetTkn = $1 + $3.(*ast.StmtUnset).OpenParenthesisTkn = $2 + $3.(*ast.StmtUnset).CloseParenthesisTkn = $4 + $3.(*ast.StmtUnset).SemiColonTkn = $5 + $3.(*ast.StmtUnset).Node.Position = position.NewTokensPosition($1, $5) - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $5) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Unset, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.VarList, $4.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.CloseParenthesisToken, $5.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $5.SkippedTokens) + $$ = $3 } | T_FOREACH '(' variable T_AS foreach_variable foreach_optional_arg ')' foreach_statement { @@ -1334,14 +1330,16 @@ additional_catch: unset_variables: unset_variable { - $$ = []ast.Vertex{$1} + $$ = &ast.StmtUnset{ + Vars: []ast.Vertex{$1}, + } } | unset_variables ',' unset_variable { - $$ = append($1, $3) + $1.(*ast.StmtUnset).Vars = append($1.(*ast.StmtUnset).Vars, $3) + $1.(*ast.StmtUnset).SeparatorTkns = append($1.(*ast.StmtUnset).SeparatorTkns, $2) - // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) + $$ = $1 } ; diff --git a/internal/php7/php7.go b/internal/php7/php7.go index ab2cdc4804ea1b62e7cb13ebc9aca4774b4938bb..56d0fc96060dce48607931670beb6660c7c39032 100644 GIT binary patch delta 11882 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 method_body %type foreach_statement for_statement while_statement %type inline_function +%type unset_variables %type extends_from %type implements_list %type interface_extends_list @@ -277,7 +278,7 @@ import ( %type encaps_list backticks_expr namespace_name catch_name_list catch_list class_const_list %type const_list for_exprs non_empty_for_exprs %type unprefixed_use_declarations inline_use_declarations property_list -%type case_list trait_adaptation_list unset_variables +%type case_list trait_adaptation_list %type use_declarations lexical_var_list isset_variables non_empty_array_pair_list %type array_pair_list non_empty_argument_list top_statement_list %type inner_statement_list parameter_list non_empty_parameter_list class_statement_list @@ -998,21 +999,14 @@ statement: } | T_UNSET '(' unset_variables possible_comma ')' ';' { - $$ = &ast.StmtUnset{ast.Node{}, $3} + $3.(*ast.StmtUnset).UnsetTkn = $1 + $3.(*ast.StmtUnset).OpenParenthesisTkn = $2 + $3.(*ast.StmtUnset).SeparatorTkns = append($3.(*ast.StmtUnset).SeparatorTkns, $4) + $3.(*ast.StmtUnset).CloseParenthesisTkn = $5 + $3.(*ast.StmtUnset).SemiColonTkn = $6 + $3.(*ast.StmtUnset).Node.Position = position.NewTokensPosition($1, $6) - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $6) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Unset, $2.SkippedTokens) - if $4 != nil { - yylex.(*Parser).setFreeFloating($$, token.VarList, append($4.SkippedTokens, $5.SkippedTokens...)) - } else { - yylex.(*Parser).setFreeFloating($$, token.VarList, $5.SkippedTokens) - } - yylex.(*Parser).setFreeFloating($$, token.CloseParenthesisToken, $6.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $6.SkippedTokens) + $$ = $3 } | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement { @@ -1205,14 +1199,16 @@ finally_statement: unset_variables: unset_variable { - $$ = []ast.Vertex{$1} + $$ = &ast.StmtUnset{ + Vars: []ast.Vertex{$1}, + } } | unset_variables ',' unset_variable { - $$ = append($1, $3) + $1.(*ast.StmtUnset).Vars = append($1.(*ast.StmtUnset).Vars, $3) + $1.(*ast.StmtUnset).SeparatorTkns = append($1.(*ast.StmtUnset).SeparatorTkns, $2) - // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) + $$ = $1 } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index e83b438..50235a7 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -783,7 +783,12 @@ func (n *StmtTry) Accept(v NodeVisitor) { // StmtUnset node type StmtUnset struct { Node - Vars []Vertex + UnsetTkn *token.Token + OpenParenthesisTkn *token.Token + Vars []Vertex + SeparatorTkns []*token.Token + CloseParenthesisTkn *token.Token + SemiColonTkn *token.Token } func (n *StmtUnset) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/filter_tokens.go b/pkg/ast/visitor/filter_tokens.go index f3c440e..d3ad950 100644 --- a/pkg/ast/visitor/filter_tokens.go +++ b/pkg/ast/visitor/filter_tokens.go @@ -204,3 +204,12 @@ func (v *FilterTokens) StmtEcho(n *ast.StmtEcho) { func (v *FilterTokens) StmtInlineHtml(n *ast.StmtInlineHtml) { n.InlineHtmlTkn = nil } + +func (v *FilterTokens) StmtUnset(n *ast.StmtUnset) { + n.UnsetTkn = nil + n.OpenParenthesisTkn = nil + n.SeparatorTkns = nil + n.CloseParenthesisTkn = nil + n.SemiColonTkn = nil + n.SemiColonTkn = nil +} diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index b35840d..0068785 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2905,24 +2905,12 @@ func (p *Printer) printStmtTry(n ast.Vertex) { p.printFreeFloating(nn, token.End) } -func (p *Printer) printStmtUnset(n ast.Vertex) { - nn := n.(*ast.StmtUnset) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("unset")) - p.printFreeFloating(nn, token.Unset) - p.write([]byte("(")) - p.joinPrint(",", nn.Vars) - p.printFreeFloating(nn, token.VarList) - p.write([]byte(")")) - p.printFreeFloating(nn, token.CloseParenthesisToken) - - p.printFreeFloating(nn, token.SemiColon) - if n.GetNode().Tokens.IsEmpty() { - p.write([]byte(";")) - } - - p.printFreeFloating(nn, token.End) +func (p *Printer) printStmtUnset(n *ast.StmtUnset) { + p.printToken(n.UnsetTkn, "unset") + p.printToken(n.OpenParenthesisTkn, "(") + p.printSeparatedList(n.Vars, n.SeparatorTkns, ",") + p.printToken(n.CloseParenthesisTkn, ")") + p.printToken(n.SemiColonTkn, ";") } func (p *Printer) printStmtUse(n *ast.StmtUse) {