From 4c54c56af50e0656d1a273b28dc7f5f7a62faa83 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Sun, 22 Nov 2020 13:02:36 +0200 Subject: [PATCH] [refactoring] update ast structure of "ClassExtends", "ClassImplements", "InterfaceExtends", "StmtTraitUse" and "StmtTraitUsePrecedence" nodes --- internal/php5/php5.go | Bin 287326 -> 286340 bytes internal/php5/php5.y | 131 +++++++++++++------------- internal/php7/php7.go | Bin 237965 -> 237795 bytes internal/php7/php7.y | 104 ++++++++++---------- pkg/ast/node.go | 27 ++++-- pkg/ast/traverser/dfs.go | 8 +- pkg/ast/visitor/namespace_resolver.go | 8 +- pkg/printer/pretty_printer.go | 8 +- pkg/printer/printer.go | 8 +- 9 files changed, 154 insertions(+), 140 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index ece4fadf313ae30811db11044fd45f22eb53c3ab..d65f45df7538b6e51edc7b43bd7aa8dd6d797d46 100644 GIT binary patch delta 15546 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 Q0%{Y6WQ?R9=leqc4e>m$7XSbN delta 16547 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 MJWbR1v)%ar17zv7i~s-t diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 67d3536..e5d4558 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -18,9 +18,6 @@ import ( list []ast.Vertex simpleIndirectReference simpleIndirectReference - ClassExtends *ast.StmtClassExtends - ClassImplements *ast.StmtClassImplements - InterfaceExtends *ast.StmtInterfaceExtends ClosureUse *ast.ExprClosureUse } @@ -243,13 +240,12 @@ import ( %type ctor_arguments function_call_parameter_list echo_expr_list %type trait_adaptations unset_variables declare_list %type switch_case_list non_empty_function_call_parameter_list -%type method_body +%type method_body trait_reference_list %type foreach_statement for_statement while_statement %type foreach_variable foreach_optional_arg - -%type extends_from -%type implements_list -%type interface_extends_list +%type extends_from interface_list trait_list +%type implements_list +%type interface_extends_list %type lexical_vars %type top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations @@ -258,8 +254,8 @@ import ( %type for_expr case_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 trait_list trait_adaptation_list non_empty_trait_adaptation_list -%type trait_reference_list non_empty_member_modifiers backticks_expr static_array_pair_list non_empty_static_array_pair_list +%type trait_adaptation_list non_empty_trait_adaptation_list +%type non_empty_member_modifiers backticks_expr static_array_pair_list non_empty_static_array_pair_list %type chaining_dereference chaining_instance_call chaining_method_or_property instance_call variable_property %type method_or_not array_method_dereference object_property object_dim_list dynamic_class_name_variable_property @@ -1527,13 +1523,13 @@ extends_from: } | T_EXTENDS fully_qualified_class_name { - $$ = &ast.StmtClassExtends{ast.Node{}, $2}; - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtClassExtends{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + ExtendTkn: $1, + ClassName: $2, + } } ; @@ -1551,13 +1547,14 @@ interface_extends_list: } | T_EXTENDS interface_list { - $$ = &ast.StmtInterfaceExtends{ast.Node{}, $2}; - - // save position - $$.GetNode().Position = position.NewTokenNodeListPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtInterfaceExtends{ + Node: ast.Node{ + Position: position.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + }, + ExtendsTkn: $1, + InterfaceNames: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + }; } ; @@ -1568,29 +1565,30 @@ implements_list: } | T_IMPLEMENTS interface_list { - $$ = &ast.StmtClassImplements{ast.Node{}, $2}; - - // save position - $$.GetNode().Position = position.NewTokenNodeListPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtClassImplements{ + Node: ast.Node{ + Position: position.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + }, + ImplementsTkn: $1, + InterfaceNames: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + }; } ; interface_list: fully_qualified_class_name { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, + } } | interface_list ',' fully_qualified_class_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.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, $3) + + $$ = $1 } ; @@ -2520,29 +2518,31 @@ class_statement: trait_use_statement: T_USE trait_list trait_adaptations { - $$ = &ast.StmtTraitUse{ast.Node{}, $2, $3} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtTraitUse{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $3), + }, + UseTkn: $1, + Traits: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + Adaptations: $3, + } } ; trait_list: fully_qualified_class_name { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, + } } | trait_list ',' fully_qualified_class_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.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, $3) + + $$ = $1 } ; @@ -2612,28 +2612,31 @@ trait_adaptation_statement: trait_precedence: trait_method_reference_fully_qualified T_INSTEADOF trait_reference_list { - $$ = &ast.StmtTraitUsePrecedence{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodeNodeListPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) + $$ = &ast.StmtTraitUsePrecedence{ + Node: ast.Node{ + Position: position.NewNodeNodeListPosition($1, $3.(*ast.ParserSeparatedList).Items), + }, + Ref: $1, + InsteadofTkn: $2, + Insteadof: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + } } ; trait_reference_list: fully_qualified_class_name { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, + } } | trait_reference_list ',' fully_qualified_class_name { - $$ = append($1, $3) + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, $3) - // 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 aa80680dcba01bc0cfbb635bd2683a9b53de5d6d..0a0e9afa09a9715af2877ad3a04d7d129e32be74 100644 GIT binary patch delta 18174 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 rH@jWe0A6z7lrkB^m&xyJeUe`e2dN7 diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 5577a10..58eed16 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -18,9 +18,6 @@ import ( tkn *token.Token list []ast.Vertex - ClassExtends *ast.StmtClassExtends - ClassImplements *ast.StmtClassImplements - InterfaceExtends *ast.StmtInterfaceExtends ClosureUse *ast.ExprClosureUse } @@ -249,7 +246,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 catch_name_list +%type encaps_var encaps_var_offset echo_expr_list catch_name_list name_list %type if_stmt const_list non_empty_argument_list %type alt_if_stmt %type if_stmt_without_else @@ -265,9 +262,9 @@ import ( %type foreach_statement for_statement while_statement %type inline_function %type unset_variables -%type extends_from -%type implements_list -%type interface_extends_list +%type extends_from +%type implements_list +%type interface_extends_list %type lexical_vars %type member_modifier @@ -283,7 +280,7 @@ import ( %type array_pair_list top_statement_list %type inner_statement_list parameter_list non_empty_parameter_list class_statement_list %type method_modifiers variable_modifiers -%type non_empty_member_modifiers name_list class_modifiers +%type non_empty_member_modifiers class_modifiers %% @@ -1399,13 +1396,13 @@ extends_from: } | T_EXTENDS name { - $$ = &ast.StmtClassExtends{ast.Node{}, $2}; - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtClassExtends{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + ExtendTkn: $1, + ClassName: $2, + } } ; @@ -1416,13 +1413,14 @@ interface_extends_list: } | T_EXTENDS name_list { - $$ = &ast.StmtInterfaceExtends{ast.Node{}, $2}; - - // save position - $$.GetNode().Position = position.NewTokenNodeListPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtInterfaceExtends{ + Node: ast.Node{ + Position: position.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + }, + ExtendsTkn: $1, + InterfaceNames: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + }; } ; @@ -1433,13 +1431,14 @@ implements_list: } | T_IMPLEMENTS name_list { - $$ = &ast.StmtClassImplements{ast.Node{}, $2}; - - // save position - $$.GetNode().Position = position.NewTokenNodeListPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtClassImplements{ + Node: ast.Node{ + Position: position.NewTokenNodeListPosition($1, $2.(*ast.ParserSeparatedList).Items), + }, + ImplementsTkn: $1, + InterfaceNames: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + }; } ; @@ -2223,13 +2222,15 @@ class_statement: } | T_USE name_list trait_adaptations { - $$ = &ast.StmtTraitUse{ast.Node{}, $2, $3} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.StmtTraitUse{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $3), + }, + UseTkn: $1, + Traits: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + Adaptations: $3, + } } | method_modifiers T_FUNCTION returns_ref identifier backup_doc_comment '(' parameter_list ')' return_type method_body { @@ -2269,16 +2270,16 @@ class_statement: name_list: name { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, + } } | 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.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, $3) + + $$ = $1 } ; @@ -2347,14 +2348,15 @@ trait_adaptation: trait_precedence: absolute_trait_method_reference T_INSTEADOF name_list { - $$ = &ast.StmtTraitUsePrecedence{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodeNodeListPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) + $$ = &ast.StmtTraitUsePrecedence{ + Node: ast.Node{ + Position: position.NewNodeNodeListPosition($1, $3.(*ast.ParserSeparatedList).Items), + }, + Ref: $1, + InsteadofTkn: $2, + Insteadof: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + } } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index cb820b0..3c64e3d 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -242,8 +242,8 @@ type StmtClass struct { ClassTkn *token.Token ClassName Vertex ArgumentList Vertex - Extends *StmtClassExtends - Implements *StmtClassImplements + Extends Vertex + Implements Vertex OpenCurlyBracket *token.Token Stmts []Vertex CloseCurlyBracket *token.Token @@ -269,6 +269,7 @@ func (n *StmtClassConstList) Accept(v NodeVisitor) { // StmtClassExtends node type StmtClassExtends struct { Node + ExtendTkn *token.Token ClassName Vertex } @@ -279,7 +280,9 @@ func (n *StmtClassExtends) Accept(v NodeVisitor) { // StmtClassImplements node type StmtClassImplements struct { Node + ImplementsTkn *token.Token InterfaceNames []Vertex + SeparatorTkns []*token.Token } func (n *StmtClassImplements) Accept(v NodeVisitor) { @@ -582,7 +585,7 @@ func (n *StmtInlineHtml) Accept(v NodeVisitor) { type StmtInterface struct { Node InterfaceName Vertex - Extends *StmtInterfaceExtends + Extends Vertex Stmts []Vertex } @@ -593,7 +596,9 @@ func (n *StmtInterface) Accept(v NodeVisitor) { // StmtInterfaceExtends node type StmtInterfaceExtends struct { Node + ExtendsTkn *token.Token InterfaceNames []Vertex + SeparatorTkns []*token.Token } func (n *StmtInterfaceExtends) Accept(v NodeVisitor) { @@ -746,8 +751,8 @@ type StmtTrait struct { Node TraitTkn *token.Token TraitName Vertex - Extends *StmtClassExtends - Implements *StmtClassImplements + Extends Vertex + Implements Vertex OpenCurlyBracket *token.Token Stmts []Vertex CloseCurlyBracket *token.Token @@ -781,8 +786,10 @@ func (n *StmtTraitMethodRef) Accept(v NodeVisitor) { // StmtTraitUse node type StmtTraitUse struct { Node - Traits []Vertex - TraitAdaptationList Vertex + UseTkn *token.Token + Traits []Vertex + SeparatorTkns []*token.Token + Adaptations Vertex } func (n *StmtTraitUse) Accept(v NodeVisitor) { @@ -804,8 +811,10 @@ func (n *StmtTraitUseAlias) Accept(v NodeVisitor) { // StmtTraitUsePrecedence node type StmtTraitUsePrecedence struct { Node - Ref Vertex - Insteadof []Vertex + Ref Vertex + InsteadofTkn *token.Token + Insteadof []Vertex + SeparatorTkns []*token.Token } func (n *StmtTraitUsePrecedence) Accept(v NodeVisitor) { diff --git a/pkg/ast/traverser/dfs.go b/pkg/ast/traverser/dfs.go index b9189a0..8a6cdec 100644 --- a/pkg/ast/traverser/dfs.go +++ b/pkg/ast/traverser/dfs.go @@ -893,10 +893,10 @@ func (t *DFS) Traverse(n ast.Vertex) { } t.visitor.Leave("Traits", false) } - if nn.TraitAdaptationList != nil { - t.visitor.Enter("TraitAdaptationList", true) - t.Traverse(nn.TraitAdaptationList) - t.visitor.Leave("TraitAdaptationList", true) + if nn.Adaptations != nil { + t.visitor.Enter("Adaptations", true) + t.Traverse(nn.Adaptations) + t.visitor.Leave("Adaptations", true) } case *ast.StmtTraitUseAlias: if nn == nil { diff --git a/pkg/ast/visitor/namespace_resolver.go b/pkg/ast/visitor/namespace_resolver.go index 3eac4a1..5bc82ca 100644 --- a/pkg/ast/visitor/namespace_resolver.go +++ b/pkg/ast/visitor/namespace_resolver.go @@ -73,11 +73,11 @@ func (nsr *NamespaceResolver) StmtGroupUse(n *ast.StmtGroupUse) { func (nsr *NamespaceResolver) StmtClass(n *ast.StmtClass) { if n.Extends != nil { - nsr.ResolveName(n.Extends.ClassName, "") + nsr.ResolveName(n.Extends.(*ast.StmtClassExtends).ClassName, "") } if n.Implements != nil { - for _, interfaceName := range n.Implements.InterfaceNames { + for _, interfaceName := range n.Implements.(*ast.StmtClassImplements).InterfaceNames { nsr.ResolveName(interfaceName, "") } } @@ -89,7 +89,7 @@ func (nsr *NamespaceResolver) StmtClass(n *ast.StmtClass) { func (nsr *NamespaceResolver) StmtInterface(n *ast.StmtInterface) { if n.Extends != nil { - for _, interfaceName := range n.Extends.InterfaceNames { + for _, interfaceName := range n.Extends.(*ast.StmtInterfaceExtends).InterfaceNames { nsr.ResolveName(interfaceName, "") } } @@ -184,7 +184,7 @@ func (nsr *NamespaceResolver) StmtTraitUse(n *ast.StmtTraitUse) { nsr.ResolveName(t, "") } - if adaptationList, ok := n.TraitAdaptationList.(*ast.StmtTraitAdaptationList); ok { + if adaptationList, ok := n.Adaptations.(*ast.StmtTraitAdaptationList); ok { for _, a := range adaptationList.Adaptations { switch aa := a.(type) { case *ast.StmtTraitUsePrecedence: diff --git a/pkg/printer/pretty_printer.go b/pkg/printer/pretty_printer.go index 943cc10..65c4cf6 100644 --- a/pkg/printer/pretty_printer.go +++ b/pkg/printer/pretty_printer.go @@ -1482,12 +1482,12 @@ func (p *PrettyPrinter) printStmtClass(n ast.Vertex) { if nn.Extends != nil { io.WriteString(p.w, " extends ") - p.Print(nn.Extends.ClassName) + p.Print(nn.Extends.(*ast.StmtClassExtends).ClassName) } if nn.Implements != nil { io.WriteString(p.w, " implements ") - p.joinPrint(", ", nn.Implements.InterfaceNames) + p.joinPrint(", ", nn.Implements.(*ast.StmtClassImplements).InterfaceNames) } io.WriteString(p.w, "\n") @@ -1888,7 +1888,7 @@ func (p *PrettyPrinter) printStmtInterface(n ast.Vertex) { if nn.Extends != nil { io.WriteString(p.w, " extends ") - p.joinPrint(", ", nn.Extends.InterfaceNames) + p.joinPrint(", ", nn.Extends.(*ast.StmtInterfaceExtends).InterfaceNames) } io.WriteString(p.w, "\n") @@ -2073,7 +2073,7 @@ func (p *PrettyPrinter) printStmtTraitUse(n ast.Vertex) { io.WriteString(p.w, "use ") p.joinPrint(", ", nn.Traits) - if adaptationList, ok := nn.TraitAdaptationList.(*ast.StmtTraitAdaptationList); ok { + if adaptationList, ok := nn.Adaptations.(*ast.StmtTraitAdaptationList); ok { adaptations := adaptationList.Adaptations io.WriteString(p.w, " {\n") p.printNodes(adaptations) diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index 302773a..5848f39 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2108,7 +2108,7 @@ func (p *Printer) printStmtClass(n ast.Vertex) { } p.write([]byte("extends")) p.bufStart = " " - p.Print(nn.Extends.ClassName) + p.Print(nn.Extends.(*ast.StmtClassExtends).ClassName) } if nn.Implements != nil { @@ -2118,7 +2118,7 @@ func (p *Printer) printStmtClass(n ast.Vertex) { } p.write([]byte("implements")) p.bufStart = " " - p.joinPrintRefactored(",", nn.Implements.InterfaceNames) + p.joinPrintRefactored(",", nn.Implements.(*ast.StmtClassImplements).InterfaceNames) } @@ -2503,7 +2503,7 @@ func (p *Printer) printStmtInterface(n ast.Vertex) { } p.write([]byte("extends")) p.bufStart = " " - p.joinPrintRefactored(",", nn.Extends.InterfaceNames) + p.joinPrintRefactored(",", nn.Extends.(*ast.StmtInterfaceExtends).InterfaceNames) } p.printFreeFloating(nn, token.Name) @@ -2755,7 +2755,7 @@ func (p *Printer) printStmtTraitUse(n ast.Vertex) { p.bufStart = " " p.joinPrintRefactored(",", nn.Traits) - p.Print(nn.TraitAdaptationList) + p.Print(nn.Adaptations) p.printFreeFloating(nn, token.End) }