From b5ef30eb365b833084e90d7e31de289eb104aa97 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Tue, 1 Dec 2020 12:16:46 +0200 Subject: [PATCH] [refactoring] update ast structure of "InstanceOf" and "Isset" nodes --- internal/php5/php5.go | Bin 278293 -> 278293 bytes internal/php5/php5.y | 49 ++++++++++++++++++++------------------ internal/php7/php7.go | Bin 229039 -> 230024 bytes internal/php7/php7.y | 53 ++++++++++++++++++++++-------------------- pkg/ast/node.go | 11 ++++++--- 5 files changed, 62 insertions(+), 51 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 9b23a936fa097a36e46c7c6eacf87e3e1bfc6081..850176840611132505326f0705771b3163ac2778 100644 GIT binary patch delta 1414 zcmYjQUu+a*5YOx`*XwcORp44^DSHuA${p-?yL-C_g>a=%Ni?Mf8y_?+LX8imsaz9m ze6YqCUv0mT35gHHL?4JD#04(C_%DhHr5NL>4`L7PS!-!8@lSZDiq3r7qb7Hg`DT7I z^PAuI?U}oYGj|gg=Ql;YSZs7`WXQy(8+volu-R#k+QLtpws7P@ze5*UPmcK8njFhc z#~NMFrBps`<}KN`KPms+v$n;t1Z9NdrA^@qHiU6lLH$Pq1tG}Dqt{y^%v*TD@bxuN;IKtTHD@A1v0-+WG7PqqaTRg33Xirz6I_~J z4-wK&Sbi{lUk&yOFkWRh}q#YD>~aem*-5St+ZjB)`H{QuSH#TJ<4n z@LRP%>V;%H+57X`53)8S1nWZ+iI~g$l|C#i#XPxTE<>eVa}!_(<+&aft8M;WmB5btcK%?T&gxpYI@tbe3L@M-?@v}Y$iamZZ6p&v^RSwhWpOOlj;=#i7Pf$p z|150ceQ)1suIocdekuGRs6pEnpQihIb#Y%@Awo?(d2MlL69>Wz;$^sLWT|h9^668g zxvF9%w}Kd58Us((mioyasaA$Kt{Hr`0sl-J-QZ#28!d_ByNpC>AY;S;d=)8Cq#aQFt(m0{ zcN?bx3um>hrDMW4x#E78HJ%4>QJmLzq4~SMm;I=|84vV8hwj*-RIs#10pE0u!}wxa zZ$@i?2t;$l>e((m86L-T#$hVt=2!B@6~MQA;}GOARiSCEdyPwgm-i54HL?u9(E6wZ0`nCXmN4A5zdly-`s6lUnV@7?z^rVYlGa#`1R)%?d9_3z^kH5VwEN($-cvceT?++0>#BAg9w7LQWa=A`A(s7)1NxdcGg z*4EOq5i0E!mef_LXB_Hr3gmi1XC0xMCnwWf6WTC_u+`s_9g^UMU?v{5*FGU6r^yhH z+DBvs6A`ZJz1AG3W+A-rwQC#TsfZsDrJSW#Y7=m%4L4ibNG5JEJd08@;f1Nq5N9bY zKb-pMIU~-85?1)w^puh2ym-JUvwS2W7+3`1@$y%35MkoR6#!dZpLy{BvyikQ&nGb?W&itXD|qkBR!g&0_^wjg{&MUjyf<1lN~7i2oj$aOj7-8gvG??= z!y{O{Ydnj+Gth~%pF#nDo`5bq|6$D8aAR{!9~e5!y$g*-J3iT9)Z^9; zvjA9U|$Ecp!Kd{;(XprlrHAX6o8Ls|1sK1l*s@D zQIP56_P2eb5!089B<{7T{Ts_X0eEbj;3$3tK;pnNu trait_adaptations unset_variables declare_list non_empty_array_pair_list array_pair_list %type switch_case_list non_empty_function_call_parameter_list assignment_list lexical_var_list %type method_body trait_reference_list static_array_pair_list non_empty_static_array_pair_list -%type foreach_statement for_statement while_statement +%type foreach_statement for_statement while_statement isset_variables %type foreach_variable foreach_optional_arg %type extends_from interface_list trait_list %type implements_list @@ -248,7 +248,7 @@ import ( %type lexical_vars %type top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations -%type inner_statement_list encaps_list isset_variables +%type inner_statement_list encaps_list %type 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 @@ -3717,14 +3717,14 @@ expr_without_variable: } | expr T_INSTANCEOF class_name_reference { - $$ = &ast.ExprInstanceOf{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) + $$ = &ast.ExprInstanceOf{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Expr: $1, + InstanceOfTkn: $2, + Class: $3, + } } | parenthesis_expr { @@ -6331,15 +6331,16 @@ encaps_var_offset: internal_functions_in_yacc: T_ISSET '(' isset_variables ')' { - $$ = &ast.ExprIsset{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Isset, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.VarList, $4.SkippedTokens) + $$ = &ast.ExprIsset{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + IssetTkn: $1, + OpenParenthesisTkn: $2, + Vars: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseParenthesisTkn: $4, + } } | T_EMPTY '(' variable ')' { @@ -6422,14 +6423,16 @@ internal_functions_in_yacc: isset_variables: isset_variable { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, + } } | isset_variables ',' isset_variable { - $$ = 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 25bfa123bdd459a0cf91215d8b4fcb80d1dcb3bd..9fde4cddde8eef921a529c2d60898311a84abda5 100644 GIT binary patch delta 8708 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 delta 7371 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 HE_(bwRcoou diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 5fe9dd0..2e1cdb4 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -247,7 +247,7 @@ import ( %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 property_list -%type alt_if_stmt lexical_var_list +%type alt_if_stmt lexical_var_list isset_variables %type if_stmt_without_else %type class_const_decl %type alt_if_stmt_without_else @@ -275,7 +275,7 @@ import ( %type for_exprs non_empty_for_exprs %type unprefixed_use_declarations inline_use_declarations %type case_list trait_adaptation_list -%type use_declarations isset_variables +%type use_declarations %type top_statement_list %type inner_statement_list parameter_list non_empty_parameter_list class_statement_list %type method_modifiers variable_modifiers @@ -3386,14 +3386,14 @@ expr_without_variable: } | expr T_INSTANCEOF class_name_reference { - $$ = &ast.ExprInstanceOf{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) + $$ = &ast.ExprInstanceOf{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Expr: $1, + InstanceOfTkn: $2, + Class: $3, + } } | '(' expr ')' { @@ -4886,18 +4886,19 @@ encaps_var_offset: internal_functions_in_yacc: T_ISSET '(' isset_variables possible_comma ')' { - $$ = &ast.ExprIsset{ast.Node{}, $3} + if $4 != nil { + $3.(*ast.ParserSeparatedList).SeparatorTkns = append($3.(*ast.ParserSeparatedList).SeparatorTkns, $4) + } - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $5) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Isset, $2.SkippedTokens) - if $4 == nil { - yylex.(*Parser).setFreeFloating($$, token.VarList, $5.SkippedTokens) - } else { - yylex.(*Parser).setFreeFloating($$, token.VarList, append($4.SkippedTokens, $5.SkippedTokens...)) + $$ = &ast.ExprIsset{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $5), + }, + IssetTkn: $1, + OpenParenthesisTkn: $2, + Vars: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseParenthesisTkn: $5, } } | T_EMPTY '(' expr ')' @@ -4969,14 +4970,16 @@ internal_functions_in_yacc: isset_variables: isset_variable { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, + } } | isset_variables ',' isset_variable { - $$ = 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/pkg/ast/node.go b/pkg/ast/node.go index 93d9001..54ae3de 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -1175,8 +1175,9 @@ func (n *ExprIncludeOnce) Accept(v NodeVisitor) { // ExprInstanceOf node type ExprInstanceOf struct { Node - Expr Vertex - Class Vertex + Expr Vertex + InstanceOfTkn *token.Token + Class Vertex } func (n *ExprInstanceOf) Accept(v NodeVisitor) { @@ -1186,7 +1187,11 @@ func (n *ExprInstanceOf) Accept(v NodeVisitor) { // ExprIsset node type ExprIsset struct { Node - Vars []Vertex + IssetTkn *token.Token + OpenParenthesisTkn *token.Token + Vars []Vertex + SeparatorTkns []*token.Token + CloseParenthesisTkn *token.Token } func (n *ExprIsset) Accept(v NodeVisitor) {