From 4b8d4317679420b45fefa677ab983ab09dce7e93 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Tue, 1 Dec 2020 00:42:45 +0200 Subject: [PATCH] [refactoring] update ast structure of "ArrayDimFetch" and "ArrayItem" nodes --- internal/php5/php5.go | Bin 285766 -> 281709 bytes internal/php5/php5.y | 604 +++++++++++++++++++++------------------- internal/php7/php7.go | Bin 233306 -> 230494 bytes internal/php7/php7.y | 288 ++++++++++--------- pkg/ast/node.go | 15 +- pkg/ast/visitor/dump.go | 5 - pkg/printer/printer.go | 2 +- 7 files changed, 476 insertions(+), 438 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 02fee28e28b405cb478392fb497f54438f618a99..15333e8fb87dd725d30af520cc36111d63cb8e2a 100644 GIT binary patch delta 7452 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≷fPhv)PxT^M-^CNAEyxI?D=FwH*WShkM5^VM+omm8I3#aTMHSV} z0)6Tj#ImXG@8~WJM`MA?7V!b}S`@18$BXzlO09-$*>Dy|vxAHRIvR}q!p@))D9XxLrigg&JY97COFWC< zNRKy?QU`~DS(r?Zd;gY9tID=iSKl?iynI^KWXJtO=FKmgA;U{}d?1xM+!cD+Tpqoi zaEdId?GBdIR_qJO&XX*?5KpbYkg+8k7}iO%1|%ZT>bC(8!8cq# zWlHXWc;Tw8XiW+0@=xiKR)l@bhSAN6Q1=O1*Q#u#M0aj_oN7vug5#16Mea2s-gJBx z6&?mu=0t+$>63Npb#C7|t9Irk(}WE0Y(E4cG(a(k5O(=X++2u1{>?}PSpLZS^nl1q4`xy(VIk=bPhE(GhxSr_NEr)Wa_rv({@2`>ojtg@xMX32EVL@e$Y%HpZ!6!?dw1PwE^A7g0c zU=~9wj<7Dl_}5vs#X`1n#rZF>aP^O_SnBu`M7v=ci=~z|cv!UV!0h@A1mfi!Pmxcj z+|S`a_kOXGE@ol^-L9TgTO@+~{g_7T;)J6dR$1&c9uVqb0*{@hvBgF=1;1U%ZARnj z&@iJv%A!>VneMhl4mXmyNVjFlv>fAJfs(0yLyi{o9d)f=$rd8ZHWC?EXEcobh{N@?HmQIrk|2ni5DK}(# ayF6NSyaXbbBT)44L?d5hTJ@L9`2PU&Sd>oy delta 7811 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 E0SR8ui2wiq diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 4591ec7..ffe6f94 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -4236,36 +4236,39 @@ callable_variable: } | dereferencable '[' optional_expr ']' { - $$ = &ast.ExprArrayDimFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens) + $$ = &ast.ExprArrayDimFetch{ + Node: ast.Node{ + Position: position.NewNodeTokenPosition($1, $4), + }, + Var: $1, + OpenBracketTkn: $2, + Dim: $3, + CloseBracketTkn: $4, + } } | constant '[' optional_expr ']' { - $$ = &ast.ExprArrayDimFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens) + $$ = &ast.ExprArrayDimFetch{ + Node: ast.Node{ + Position: position.NewNodeTokenPosition($1, $4), + }, + Var: $1, + OpenBracketTkn: $2, + Dim: $3, + CloseBracketTkn: $4, + } } | dereferencable '{' expr '}' { - $$ = &ast.ExprArrayDimFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens) + $$ = &ast.ExprArrayDimFetch{ + Node: ast.Node{ + Position: position.NewNodeTokenPosition($1, $4), + }, + Var: $1, + OpenBracketTkn: $2, + Dim: $3, + CloseBracketTkn: $4, + } } | dereferencable T_OBJECT_OPERATOR property_name argument_list { @@ -4380,25 +4383,27 @@ new_variable: } | new_variable '[' optional_expr ']' { - $$ = &ast.ExprArrayDimFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens) + $$ = &ast.ExprArrayDimFetch{ + Node: ast.Node{ + Position: position.NewNodeTokenPosition($1, $4), + }, + Var: $1, + OpenBracketTkn: $2, + Dim: $3, + CloseBracketTkn: $4, + } } | new_variable '{' expr '}' { - $$ = &ast.ExprArrayDimFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens) + $$ = &ast.ExprArrayDimFetch{ + Node: ast.Node{ + Position: position.NewNodeTokenPosition($1, $4), + }, + Var: $1, + OpenBracketTkn: $2, + Dim: $3, + CloseBracketTkn: $4, + } } | new_variable T_OBJECT_OPERATOR property_name { @@ -4529,98 +4534,101 @@ non_empty_array_pair_list: array_pair: expr T_DOUBLE_ARROW expr { - $$ = &ast.ExprArrayItem{ast.Node{}, false, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) + $$ = &ast.ExprArrayItem{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Key: $1, + DoubleArrowTkn: $2, + Val: $3, + } } | expr { - $$ = &ast.ExprArrayItem{ast.Node{}, false, nil, $1} - - // save position - $$.GetNode().Position = position.NewNodePosition($1) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) + $$ = &ast.ExprArrayItem{ + Node: ast.Node{ + Position: position.NewNodePosition($1), + }, + Val: $1, + } } | expr T_DOUBLE_ARROW '&' variable { - reference := &ast.ExprReference{ast.Node{}, $4} - $$ = &ast.ExprArrayItem{ast.Node{}, false, $1, reference} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $4) - reference.GetNode().Position = position.NewTokenNodePosition($3, $4) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating(reference, token.Start, $3.SkippedTokens) + $$ = &ast.ExprArrayItem{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $4), + }, + Key: $1, + DoubleArrowTkn: $2, + Val: &ast.ExprReference{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($3, $4), + }, + Var: $4, + }, + } } | '&' variable { - reference := &ast.ExprReference{ast.Node{}, $2} - $$ = &ast.ExprArrayItem{ast.Node{}, false, nil, reference} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - reference.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprArrayItem{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + Val: &ast.ExprReference{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + Var: $2, + }, + } } | T_ELLIPSIS expr { - $$ = &ast.ExprArrayItem{ast.Node{}, true, nil, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprArrayItem{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + EllipsisTkn: $1, + Val: $2, + } } | expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')' { - listNode := &ast.ExprList{ + $$ = &ast.ExprArrayItem{ Node: ast.Node{ - Position: position.NewTokensPosition($3, $6), + Position: position.NewNodeTokenPosition($1, $6), + }, + Key: $1, + DoubleArrowTkn: $2, + Val: &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($3, $6), + }, + ListTkn: $3, + OpenBracketTkn: $4, + Items: $5.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $5.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $6, }, - ListTkn: $3, - OpenBracketTkn: $4, - Items: $5.(*ast.ParserSeparatedList).Items, - SeparatorTkns: $5.(*ast.ParserSeparatedList).SeparatorTkns, - CloseBracketTkn: $6, } - $$ = &ast.ExprArrayItem{ast.Node{}, false, $1, listNode} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $6) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) } | T_LIST '(' array_pair_list ')' { - listNode := &ast.ExprList{ + $$ = &ast.ExprArrayItem{ Node: ast.Node{ Position: position.NewTokensPosition($1, $4), }, - ListTkn: $1, - OpenBracketTkn: $2, - Items: $3.(*ast.ParserSeparatedList).Items, - SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, - CloseBracketTkn: $4, + Val: &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ListTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + }, } - $$ = &ast.ExprArrayItem{ast.Node{}, false, nil, listNode} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) } ; @@ -4681,23 +4689,26 @@ encaps_var: } | T_VARIABLE '[' encaps_var_offset ']' { - identifier := &ast.Identifier{ + $$ = &ast.ExprArrayDimFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($1), + Position: position.NewTokensPosition($1, $4), }, - IdentifierTkn: $1, - Value: $1.Value, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, + }, + OpenBracketTkn: $2, + Dim: $3, + CloseBracketTkn: $4, } - variable := &ast.ExprVariable{ast.Node{}, identifier} - $$ = &ast.ExprArrayDimFetch{ast.Node{}, variable, $3} - - // save position - variable.GetNode().Position = position.NewTokenPosition($1) - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens) } | T_VARIABLE T_OBJECT_OPERATOR T_STRING { @@ -4760,25 +4771,28 @@ encaps_var: } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { - identifier := &ast.Identifier{ + $$ = &ast.ExprArrayDimFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($2), + Position: position.NewTokensPosition($1, $6), }, - IdentifierTkn: $2, - Value: $2.Value, + OpenCurlyBracketTkn: $1, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($2), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($2), + }, + IdentifierTkn: $2, + Value: $2.Value, + }, + }, + OpenBracketTkn: $3, + Dim: $4, + CloseBracketTkn: $5, + CloseCurlyBracketTkn: $6, } - variable := &ast.ExprVariable{ast.Node{}, identifier} - $$ = &ast.ExprArrayDimFetch{ast.Node{}, variable, $4} - - // save position - variable.GetNode().Position = position.NewTokenPosition($2) - $$.GetNode().Position = position.NewTokensPosition($1, $6) - - // save comments - yylex.(*Parser).setToken(variable, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $3.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $5.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.End, $6.SkippedTokens) } | T_CURLY_OPEN variable '}' { diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 9322ae3..990171c 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -953,8 +953,12 @@ func (n *ExprArray) Accept(v NodeVisitor) { // ExprArrayDimFetch node type ExprArrayDimFetch struct { Node - Var Vertex - Dim Vertex + Var Vertex + OpenCurlyBracketTkn *token.Token + OpenBracketTkn *token.Token + Dim Vertex + CloseBracketTkn *token.Token + CloseCurlyBracketTkn *token.Token } func (n *ExprArrayDimFetch) Accept(v NodeVisitor) { @@ -964,9 +968,10 @@ func (n *ExprArrayDimFetch) Accept(v NodeVisitor) { // ExprArrayItem node type ExprArrayItem struct { Node - Unpack bool - Key Vertex - Val Vertex + EllipsisTkn *token.Token + Key Vertex + DoubleArrowTkn *token.Token + Val Vertex } func (n *ExprArrayItem) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/dump.go b/pkg/ast/visitor/dump.go index 45dc2c2..5ae65a5 100644 --- a/pkg/ast/visitor/dump.go +++ b/pkg/ast/visitor/dump.go @@ -620,11 +620,6 @@ func (v *Dump) ExprArrayItem(n *ast.ExprArrayItem) { v.printIndentIfNotSingle(v.indent - 1) v.print("&ast.ExprArrayItem{\n") v.printNode(n.GetNode()) - - if n.Unpack { - v.printIndent(v.indent) - v.print("Unpack: true,\n") - } } func (v *Dump) ExprArrowFunction(n *ast.ExprArrowFunction) { diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index 0080044..4e86c48 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -1369,7 +1369,7 @@ func (p *Printer) printExprArrayItem(n ast.Vertex) { nn := n.(*ast.ExprArrayItem) p.printFreeFloating(nn, token.Start) - if nn.Unpack { + if nn.EllipsisTkn != nil { p.write([]byte("...")) }