From 43f6fab862d4c00f221c05203361624d2374afce Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Sun, 29 Nov 2020 21:50:33 +0200 Subject: [PATCH] [refactoring] update ast structure of "StmtPropertyList", "StmtTraitAdaptationList", "StmtTraitMethodRef" and "StmtTraitUseAlias" nodes --- internal/php5/php5.go | Bin 282471 -> 282363 bytes internal/php5/php5.y | 184 +++++++++++++++++++++------------------- internal/php7/php7.go | Bin 233655 -> 233605 bytes internal/php7/php7.y | 189 +++++++++++++++++++++--------------------- pkg/ast/node.go | 18 ++-- 5 files changed, 204 insertions(+), 187 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index a65caae372cb5edbc0136f211d9b1be4d2620d44..e0f706672208dfb76d0b02449f6d5e4e66d5ffad 100644 GIT binary patch delta 9125 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 X&vBTEYH_ogA!+>tKsW~Cr}BRQ6Eec5 delta 8665 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 trait_use_statement function_call_parameter trait_adaptation_statement trait_precedence trait_alias %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 ctor_arguments function_call_parameter_list echo_expr_list class_variable_declaration %type trait_adaptations unset_variables declare_list %type switch_case_list non_empty_function_call_parameter_list %type method_body trait_reference_list @@ -253,7 +253,7 @@ import ( %type array_pair_list assignment_list lexical_var_list elseif_list new_elseif_list non_empty_for_expr %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 class_statement_list variable_modifiers method_modifiers %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 @@ -2456,15 +2456,15 @@ class_statement_list: class_statement: variable_modifiers class_variable_declaration ';' { - $$ = &ast.StmtPropertyList{ast.Node{}, $1, nil, $2} - - // save position - $$.GetNode().Position = position.NewNodeListTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1[0], $$) - yylex.(*Parser).setFreeFloating($$, token.PropertyList, $3.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $3.SkippedTokens) + $$ = &ast.StmtPropertyList{ + Node: ast.Node{ + Position: position.NewNodeListTokenPosition($1, $3), + }, + Modifiers: $1, + Properties: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + SemiColonTkn: $3, + } } | class_constant_declaration ';' { @@ -2548,13 +2548,14 @@ trait_adaptations: } | '{' trait_adaptation_list '}' { - $$ = &ast.StmtTraitAdaptationList{ast.Node{}, $2} - - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.AdaptationList, $3.SkippedTokens) + $$ = &ast.StmtTraitAdaptationList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenParenthesisTkn: $1, + Adaptations: $2, + CloseParenthesisTkn: $3, + } } ; @@ -2633,20 +2634,18 @@ trait_reference_list: trait_method_reference: T_STRING { - name := &ast.Identifier{ + $$ = &ast.StmtTraitMethodRef{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + Method: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, } - $$ = &ast.StmtTraitMethodRef{ast.Node{}, nil, name} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | trait_method_reference_fully_qualified { @@ -2657,53 +2656,52 @@ trait_method_reference: trait_method_reference_fully_qualified: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { - target := &ast.Identifier{ + $$ = &ast.StmtTraitMethodRef{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Trait: $1, + DoubleColonTkn: $2, + Method: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.StmtTraitMethodRef{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } ; trait_alias: trait_method_reference T_AS trait_modifiers T_STRING { - alias := &ast.Identifier{ + $$ = &ast.StmtTraitUseAlias{ Node: ast.Node{ - Position: position.NewTokenPosition($4), + Position: position.NewNodeTokenPosition($1, $4), + }, + Ref: $1, + AsTkn: $2, + Modifier: $3, + Alias: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + IdentifierTkn: $4, + Value: $4.Value, }, - IdentifierTkn: $4, - Value: $4.Value, } - $$ = &ast.StmtTraitUseAlias{ast.Node{}, $1, $3, alias} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $4) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) } | trait_method_reference T_AS member_modifier { - $$ = &ast.StmtTraitUseAlias{ast.Node{}, $1, $3, nil} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) + $$ = &ast.StmtTraitUseAlias{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Ref: $1, + AsTkn: $2, + Modifier: $3, + } } ; @@ -2848,7 +2846,7 @@ member_modifier: class_variable_declaration: class_variable_declaration ',' T_VARIABLE { - $$ = append($1, &ast.StmtProperty{ + item := &ast.StmtProperty{ Node: ast.Node{ Position: position.NewTokenPosition($3), }, @@ -2864,11 +2862,16 @@ class_variable_declaration: Value: $3.Value, }, }, - }) + } + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, item) + + $$ = $1 } | class_variable_declaration ',' T_VARIABLE '=' static_scalar { - $$ = append($1, &ast.StmtProperty{ + item := &ast.StmtProperty{ Node: ast.Node{ Position: position.NewTokenNodePosition($3, $5), }, @@ -2886,52 +2889,61 @@ class_variable_declaration: }, EqualTkn: $4, Expr: $5, - }) + } + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, item) + + $$ = $1 } | T_VARIABLE { - $$ = []ast.Vertex{ - &ast.StmtProperty{ - Node: ast.Node{ - Position: position.NewTokenPosition($1), - }, - Var: &ast.ExprVariable{ + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{ + &ast.StmtProperty{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - VarName: &ast.Identifier{ + Var: &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, }, + Expr: nil, }, - Expr: nil, }, } } | T_VARIABLE '=' static_scalar { - $$ = []ast.Vertex{ - &ast.StmtProperty{ - Node: ast.Node{ - Position: position.NewTokenNodePosition($1, $3), - }, - Var: &ast.ExprVariable{ + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{ + &ast.StmtProperty{ Node: ast.Node{ - Position: position.NewTokenPosition($1), + Position: position.NewTokenNodePosition($1, $3), }, - VarName: &ast.Identifier{ + Var: &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, }, + EqualTkn: $2, + Expr: $3, }, - EqualTkn: $2, - Expr: $3, }, } } diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 3ef5b9f973f4390cd66e436ff85ff2a04db5603b..f1be513b8e453605caa05a0e97a6a11db0fb3400 100644 GIT binary patch delta 11890 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 J7OfP){{gQpkWc^s delta 10050 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 z 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 diff --git a/internal/php7/php7.y b/internal/php7/php7.y index e8ed084..062068b 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -247,7 +247,7 @@ import ( %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 name_list -%type if_stmt const_list non_empty_argument_list +%type if_stmt const_list non_empty_argument_list property_list %type alt_if_stmt %type if_stmt_without_else %type class_const_decl @@ -274,7 +274,7 @@ import ( %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 unprefixed_use_declarations inline_use_declarations %type case_list trait_adaptation_list %type use_declarations lexical_var_list isset_variables non_empty_array_pair_list %type array_pair_list top_statement_list @@ -2193,15 +2193,16 @@ class_statement_list: class_statement: variable_modifiers optional_type property_list ';' { - $$ = &ast.StmtPropertyList{ast.Node{}, $1, $2, $3} - - // save position - $$.GetNode().Position = position.NewNodeListTokenPosition($1, $4) - - // save comments - yylex.(*Parser).MoveFreeFloating($1[0], $$) - yylex.(*Parser).setFreeFloating($$, token.PropertyList, $4.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $4.SkippedTokens) + $$ = &ast.StmtPropertyList{ + Node: ast.Node{ + Position: position.NewNodeListTokenPosition($1, $4), + }, + Modifiers: $1, + Type: $2, + Properties: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + SemiColonTkn: $4, + } } | method_modifiers T_CONST class_const_list ';' { @@ -2286,23 +2287,24 @@ trait_adaptations: } | '{' '}' { - $$ = &ast.StmtTraitAdaptationList{ast.Node{}, nil} - - $$.GetNode().Position = position.NewTokensPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.AdaptationList, $2.SkippedTokens) + $$ = &ast.StmtTraitAdaptationList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $2), + }, + OpenParenthesisTkn: $1, + CloseParenthesisTkn: $2, + } } | '{' trait_adaptation_list '}' { - $$ = &ast.StmtTraitAdaptationList{ast.Node{}, $2} - - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.AdaptationList, $3.SkippedTokens) + $$ = &ast.StmtTraitAdaptationList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenParenthesisTkn: $1, + Adaptations: $2, + CloseParenthesisTkn: $3, + } } ; @@ -2354,88 +2356,84 @@ trait_precedence: trait_alias: trait_method_reference T_AS T_STRING { - alias := &ast.Identifier{ + $$ = &ast.StmtTraitUseAlias{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Ref: $1, + AsTkn: $2, + Alias: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.StmtTraitUseAlias{ast.Node{}, $1, nil, alias} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) } | trait_method_reference T_AS reserved_non_modifiers { - alias := &ast.Identifier{ + $$ = &ast.StmtTraitUseAlias{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Ref: $1, + AsTkn: $2, + Alias: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.StmtTraitUseAlias{ast.Node{}, $1, nil, alias} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) } | trait_method_reference T_AS member_modifier identifier { - alias := &ast.Identifier{ + $$ = &ast.StmtTraitUseAlias{ Node: ast.Node{ - Position: position.NewTokenPosition($4), + Position: position.NewNodeTokenPosition($1, $4), + }, + Ref: $1, + AsTkn: $2, + Modifier: $3, + Alias: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + IdentifierTkn: $4, + Value: $4.Value, }, - IdentifierTkn: $4, - Value: $4.Value, } - $$ = &ast.StmtTraitUseAlias{ast.Node{}, $1, $3, alias} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $4) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) } | trait_method_reference T_AS member_modifier { - $$ = &ast.StmtTraitUseAlias{ast.Node{}, $1, $3, nil} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Ref, $2.SkippedTokens) + $$ = &ast.StmtTraitUseAlias{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Ref: $1, + AsTkn: $2, + Modifier: $3, + } } ; trait_method_reference: identifier { - name := &ast.Identifier{ + $$ = &ast.StmtTraitMethodRef{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + Method: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, } - $$ = &ast.StmtTraitMethodRef{ast.Node{}, nil, name} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | absolute_trait_method_reference { @@ -2446,21 +2444,20 @@ trait_method_reference: absolute_trait_method_reference: name T_PAAMAYIM_NEKUDOTAYIM identifier { - target := &ast.Identifier{ + $$ = &ast.StmtTraitMethodRef{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Trait: $1, + DoubleColonTkn: $2, + Method: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.StmtTraitMethodRef{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } ; @@ -2594,14 +2591,16 @@ member_modifier: property_list: property_list ',' property { - $$ = 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 } | property { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, + } } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index c6311fd..de467de 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -670,9 +670,11 @@ func (n *StmtProperty) Accept(v NodeVisitor) { // StmtPropertyList node type StmtPropertyList struct { Node - Modifiers []Vertex - Type Vertex - Properties []Vertex + Modifiers []Vertex + Type Vertex + Properties []Vertex + SeparatorTkns []*token.Token + SemiColonTkn *token.Token } func (n *StmtPropertyList) Accept(v NodeVisitor) { @@ -780,7 +782,9 @@ func (n *StmtTrait) Accept(v NodeVisitor) { // StmtTraitAdaptationList node type StmtTraitAdaptationList struct { Node - Adaptations []Vertex + OpenParenthesisTkn *token.Token + Adaptations []Vertex + CloseParenthesisTkn *token.Token } func (n *StmtTraitAdaptationList) Accept(v NodeVisitor) { @@ -790,8 +794,9 @@ func (n *StmtTraitAdaptationList) Accept(v NodeVisitor) { // StmtTraitMethodRef node type StmtTraitMethodRef struct { Node - Trait Vertex - Method Vertex + Trait Vertex + DoubleColonTkn *token.Token + Method Vertex } func (n *StmtTraitMethodRef) Accept(v NodeVisitor) { @@ -815,6 +820,7 @@ func (n *StmtTraitUse) Accept(v NodeVisitor) { type StmtTraitUseAlias struct { Node Ref Vertex + AsTkn *token.Token Modifier Vertex Alias Vertex }