From 13436b88a7350765829d2c5caa133ffa408f1192 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Thu, 3 Dec 2020 22:41:08 +0200 Subject: [PATCH] [refactoring] update ast structure of "ShellExec", "StaticCall", "StaticPropertyFetch" and "Ternary" nodes --- internal/php5/php5.go | Bin 279756 -> 279157 bytes internal/php5/php5.y | 197 ++++++++++++++++++---------------- internal/php7/php7.go | Bin 228025 -> 227356 bytes internal/php7/php7.y | 154 +++++++++++++------------- pkg/ast/node.go | 26 +++-- pkg/ast/traverser/dfs.go | 10 +- pkg/printer/pretty_printer.go | 2 +- pkg/printer/printer.go | 6 +- 8 files changed, 214 insertions(+), 181 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 8aa85e6a3badd5a7044a8548daf487dc81b5ebe4..e289a39460857f0382b93f1310b412be43a4b2bc 100644 GIT binary patch delta 5201 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 VU6V~>phv}bG$X<{kq66_|6jTVh=%|G delta 5045 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 D;wiax delta 2925 zcmbVOYfx3!6`r*g4?$2sAfP-h0gU*7doTCGMFn|yQKKM1iy9w*gsKtcp<-#r2_5a2 zv>5|U!*bGUu$?w(N2`(QR?`G<#s$LL1A)iy1RmNR3AXJ!B6seH1hpd)W0+4?U@|{ggiCo~CnoXTH4w-J%kfpr ztLAqu!*g8JfuSuG7)y)mws7rL2<3o&2;riQ=*MT?$9!;c+$xOmU0hkWvAnKYRx2XPGNwV|5_>oHLs zXu~$(P8)`^)eaN5`3TNoTO-D*yGQUi@S@2$fopyPUh1sE-vS>}7_WYP9FKwEdSBtQ z>a`E>D1eol{VANwzJY$K^h3S#R;eVJ-i{}LH>C_E8P|y)0NB;pllT&X^NEiZox(ui zo@{!?1oFe*36Qv8Pfou@Yb&d&+~2CK(B}{LwXaOBTDNI4_Z-Lh+*$`IoVkpqa`r@; zXEJyH_n1HOxmxuH3;-imji<4|d}MjFDEbo?jl>hUt3rrx>=G*LVT6W%J8w+5s4&SE~Mx>R;I_5dG7 z^6+W>GY+5$v3ni`sND1TeS~!0=L6w}2;~6;D%C-R^T`LarRp;P!zxN z3pmBcK9>r77lyQBy)HD2X!^bD(nU_qi>D-(8?unb`*w-yyGw=XAD9a{Z%Yk@IUjZH z0Db~|`lg)1#g~(1-@;OeR2>!V@jpuj15Eesy$#6B)#AP3OR_Ey<#y1L!_z2}GH06%{~7fv=CH*_?9|Jf5;TNRqv<6FuSI zBoxGkE{sySgN+4oGCO}1Om5AYXRkAa+-S=%3t;s10a+niMmi6!0E-sPdEov~Nnm4J z5T)`}nEl&lUTE6_I?7IxpxP7wx%J87CeVsT}{{J``B24?-BcZ5Ipj)_XCVA^qR{@`k zmsTyhEz@RqGOZVYCIN;+2xKqd=WOIQ970d8VI-@8U$+Z^KXrhqlqcWZN)=W-L+Owe z|HzR}*{Ww!%W?=-y)Kf;@s~8IYpIhg+%%m+c|p2_wQD7t;Y77AgP`Uwarm2NVC6Em zFBPS${^?XQ3|J~Qj$fWh#c1~^{^m?kTB_q|ZyyExN|s=W3zreTcMCnw)>#r7BnvD4 z-0dbSTN5yg1GDLrrZ>r4EBY9wa7hkr_?pd0hIgw4x%4`qOUkD`=}|tVx8zeEzne>y z+}a{Mw^ox6Ps@`tw5Nz$esl%K@{KkzxB@pV6B&t-#_HnuD}gZ@xOJCVEDx-v5-C96 zXOP6vy<&B(D`j#B%3|K1OMblmDEO;ObLgTrnc++typubMDT{xZD;A=6vFviU)Wf)8 z%k<%v2S}R7p%qQ>Ge=X)ki| zIhik7fGh&cVoN6E@GL@awQUA21{Jo1ionO|^7r%m4i|XKkSv-+;p*U0+AprFy_!ablF@k;H58^N!pNT8wN$UClD<-M>1Og(&Q0VG!m)A5l$B_a go=cnPI=;4rW_vj@GX6{a(sZ2d{;g#H57pD2(EtDd diff --git a/internal/php7/php7.y b/internal/php7/php7.y index bd1fe44..b61b9cc 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -3424,27 +3424,28 @@ expr_without_variable: } | expr '?' expr ':' expr { - $$ = &ast.ExprTernary{ast.Node{}, $1, $3, $5} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $5) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Cond, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.True, $4.SkippedTokens) + $$ = &ast.ExprTernary{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $5), + }, + Condition: $1, + QuestionTkn: $2, + IfTrue: $3, + ColonTkn: $4, + IfFalse: $5, + } } | expr '?' ':' expr { - $$ = &ast.ExprTernary{ast.Node{}, $1, nil, $4} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $4) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Cond, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.True, $3.SkippedTokens) + $$ = &ast.ExprTernary{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $4), + }, + Condition: $1, + QuestionTkn: $2, + ColonTkn: $3, + IfFalse: $4, + } } | expr T_COALESCE expr { @@ -3571,13 +3572,14 @@ expr_without_variable: } | '`' backticks_expr '`' { - $$ = &ast.ExprShellExec{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprShellExec{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBacktickTkn: $1, + Parts: $2, + CloseBacktickTkn: $3, + } } | T_PRINT expr { @@ -3795,25 +3797,31 @@ function_call: } | class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list { - $$ = &ast.ExprStaticCall{ast.Node{}, $1, $3, $4.(*ast.ArgumentList)} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $4) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) + $$ = &ast.ExprStaticCall{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $4), + }, + Class: $1, + DoubleColonTkn: $2, + Call: $3, + OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + Arguments: $4.(*ast.ArgumentList).Arguments, + CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + } } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list { - $$ = &ast.ExprStaticCall{ast.Node{}, $1, $3, $4.(*ast.ArgumentList)} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $4) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) + $$ = &ast.ExprStaticCall{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $4), + }, + Class: $1, + DoubleColonTkn: $2, + Call: $3, + OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + Arguments: $4.(*ast.ArgumentList).Arguments, + CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + } } | callable_expr argument_list { @@ -4368,25 +4376,25 @@ simple_variable: static_member: class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = &ast.ExprStaticPropertyFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) + $$ = &ast.ExprStaticPropertyFetch{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + Property: $3, + } } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = &ast.ExprStaticPropertyFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) + $$ = &ast.ExprStaticPropertyFetch{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + Property: $3, + } } ; @@ -4432,25 +4440,25 @@ new_variable: } | class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = &ast.ExprStaticPropertyFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Var, $2.SkippedTokens) + $$ = &ast.ExprStaticPropertyFetch{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + Property: $3, + } } | new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = &ast.ExprStaticPropertyFetch{ast.Node{}, $1, $3} - - // save position - $$.GetNode().Position = position.NewNodesPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Var, $2.SkippedTokens) + $$ = &ast.ExprStaticPropertyFetch{ + Node: ast.Node{ + Position: position.NewNodesPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + Property: $3, + } } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index c6d4c8d..d65527a 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -1344,7 +1344,9 @@ func (n *ExprRequireOnce) Accept(v NodeVisitor) { // ExprShellExec node type ExprShellExec struct { Node - Parts []Vertex + OpenBacktickTkn *token.Token + Parts []Vertex + CloseBacktickTkn *token.Token } func (n *ExprShellExec) Accept(v NodeVisitor) { @@ -1354,9 +1356,12 @@ func (n *ExprShellExec) Accept(v NodeVisitor) { // ExprStaticCall node type ExprStaticCall struct { Node - Class Vertex - Call Vertex - ArgumentList *ArgumentList + Class Vertex + DoubleColonTkn *token.Token + Call Vertex + OpenParenthesisTkn *token.Token + Arguments []Vertex + CloseParenthesisTkn *token.Token } func (n *ExprStaticCall) Accept(v NodeVisitor) { @@ -1366,8 +1371,9 @@ func (n *ExprStaticCall) Accept(v NodeVisitor) { // ExprStaticPropertyFetch node type ExprStaticPropertyFetch struct { Node - Class Vertex - Property Vertex + Class Vertex + DoubleColonTkn *token.Token + Property Vertex } func (n *ExprStaticPropertyFetch) Accept(v NodeVisitor) { @@ -1377,9 +1383,11 @@ func (n *ExprStaticPropertyFetch) Accept(v NodeVisitor) { // ExprTernary node type ExprTernary struct { Node - Condition Vertex - IfTrue Vertex - IfFalse Vertex + Condition Vertex + QuestionTkn *token.Token + IfTrue Vertex + ColonTkn *token.Token + IfFalse Vertex } func (n *ExprTernary) Accept(v NodeVisitor) { diff --git a/pkg/ast/traverser/dfs.go b/pkg/ast/traverser/dfs.go index ad492b0..bc119f8 100644 --- a/pkg/ast/traverser/dfs.go +++ b/pkg/ast/traverser/dfs.go @@ -1566,10 +1566,12 @@ func (t *DFS) Traverse(n ast.Vertex) { t.Traverse(nn.Call) t.visitor.Leave("Call", true) } - if nn.ArgumentList != nil { - t.visitor.Enter("ArgumentList", true) - t.Traverse(nn.ArgumentList) - t.visitor.Leave("ArgumentList", true) + if nn.Arguments != nil { + t.visitor.Enter("Arguments", false) + for _, c := range nn.Arguments { + t.Traverse(c) + } + t.visitor.Leave("Arguments", false) } case *ast.ExprStaticPropertyFetch: if nn == nil { diff --git a/pkg/printer/pretty_printer.go b/pkg/printer/pretty_printer.go index a840cea..b046302 100644 --- a/pkg/printer/pretty_printer.go +++ b/pkg/printer/pretty_printer.go @@ -1239,7 +1239,7 @@ func (p *PrettyPrinter) printExprStaticCall(n ast.Vertex) { io.WriteString(p.w, "::") p.Print(nn.Call) io.WriteString(p.w, "(") - p.joinPrint(", ", nn.ArgumentList.Arguments) + p.joinPrint(", ", nn.Arguments) io.WriteString(p.w, ")") } diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index 58ac6eb..fc63109 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -1842,9 +1842,9 @@ func (p *Printer) printExprStaticCall(n ast.Vertex) { p.write([]byte("::")) p.Print(nn.Call) - p.printFreeFloatingOrDefault(nn.ArgumentList, token.Start, "(") - p.joinPrint(",", nn.ArgumentList.Arguments) - p.printFreeFloatingOrDefault(nn.ArgumentList, token.End, ")") + p.printToken(nn.OpenParenthesisTkn, "(") + p.joinPrint(",", nn.Arguments) + p.printToken(nn.CloseParenthesisTkn, ")") p.printFreeFloating(nn, token.End) }