From c274c4f92fd38ca76f6124934bad052947492b0b Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Fri, 4 Sep 2020 10:53:07 +0300 Subject: [PATCH] [refactoring] update ast structure of "Do" node --- internal/php5/php5.go | Bin 294441 -> 294399 bytes internal/php5/php5.y | 22 ++++++------ internal/php7/php7.go | Bin 247565 -> 247013 bytes internal/php7/php7.y | 25 +++++--------- pkg/ast/node.go | 9 +++-- pkg/ast/visitor/filter_parser_nodes.go | 10 ------ pkg/ast/visitor/filter_tokens.go | 8 +++++ pkg/printer/pretty_printer_test.go | 2 +- pkg/printer/printer.go | 43 +++++------------------- pkg/printer/printer_parsed_php5_test.go | 3 +- pkg/printer/printer_parsed_php7_test.go | 3 +- pkg/printer/printer_test.go | 2 +- 12 files changed, 51 insertions(+), 76 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index d6165d2f5ef985667abdf25adcdc4703ba3b0032..a5870d0bb8a00809c9db70e639580a8c20b8a468 100644 GIT binary patch delta 7968 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 K#lOvUlK&5Ppr;oA delta 7771 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 diff --git a/internal/php5/php5.y b/internal/php5/php5.y index b760bdc..c5e03a3 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -911,16 +911,18 @@ unticked_statement: } | T_DO statement T_WHILE parenthesis_expr ';' { - $$ = &ast.StmtDo{ast.Node{}, $2, $4} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $5) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $3.SkippedTokens) - yylex.(*Parser).setFreeFloating($4, token.End, $5.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $5.SkippedTokens) + $$ = &ast.StmtDo{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $5), + }, + DoTkn: $1, + Stmt: $2, + WhileTkn: $3, + OpenParenthesisTkn: $4.(*ast.ParserBrackets).OpenBracketTkn, + Cond: $4.(*ast.ParserBrackets).Child, + CloseParenthesisTkn: $4.(*ast.ParserBrackets).CloseBracketTkn, + SemiColonTkn: $5, + } } | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement { diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 323095b1e3952e9d51a3edff425be0be75264e58..2862d9e8ec6947a2b73ed99e965250d4605fd7ef 100644 GIT binary patch delta 6365 zcmZ`-d0f_2*8iMy0R=%oL6O}R%k6=Ohb5Op0hio&Q4~o_$40aQb23G3GA&ayIZp0n zW~1gdavM#hd@W5=9Gez*vr@;I#Ijy{U7GK`zX#Cj{p)$|x%YSOx#xV(_ndndyb}D) zyx^_Dk(}b06B?;QBPpnloQ&ik3CSXV&Mc6O@zg^?Hc)+ewKp~J%Pbf)aneJw?I(&T z?L>8D#Lwg}cWzL)R1Q@^{zJ!4cw(HhA|0}$t*N$bX-$6O>Onp-ESVyuZx4L7@&?7q zkK?JHOukEvq<1e0l8wm}Cy{+AlH5|_$BpFh%k+RsOHY-x^C(8b7f^Fu`UGuOl%z+$ ztHMbSpF#r^dF1-H93`D6kdHq6G=(t^qc0SZhbdJ`(p9u}PooH?G&#=7yKdsM6v>n* z*Hb7~uX~Of*+I3MGc#!dQ<8+nSAFoqHic%fq-&*<0m6qI9f3}7Ke8^=MKF>+X#^5lW*PgqO>{(CQ&Vd`q^hmBNE#IPU zSZZDN%3Bn}?D3cnAC`Z=OON{Pwb^EQMcFWuY0Cx9}aK6q5;6it*hGaFt%d0-3#%5*^dy+K<+bJN$Vgk7EmkS@m z(FKQSn17Jo>I9&erKd9Y( zStvLENmp=&wf~?G^t#XKPwb%AP>P&CMPagewhENolXO60PEvqC!{0O}rkO0OazeuSX z9}Yx@*jRfLVcoyr=+snw^^kK@-oxi67<5NpCM}D9;P4r&ANv$OK4o#QJ`QSL$KEQBGDY!801_kMXKT)|^ z6&lWol64dIq$O*7a)PkkwjU@*`W>VPWXNq04Mt)sSkL<5Q`CQ@&oIF zB`s-$$iOhpa*moLhr<9i3FBnx8V;#t-$?yNI0KZRASbcvk$58PY>i+;BM2<+yr7PY zT(I8**O7iwnKhW3SXf%NiWDppp`1ZB>jpaNt@9N*zo>y=KjJ06Zq z1uJ-&uS||MhOH2wDrjue$s7&&7HzBu*Q=YtXF|Eg&qZ7&2b*)2+-k-RYuw(a1w=tD zKv!|$+*Cenfxv|3RDJM80%q$Z-21_(mJr3XO`RYXk-W4V)yfm9JNJtL_1D3nVHy`;`H`JE;cx|HP^KirF~Iv z_R~3TE+9^FTQV&3@c;OFt3xO8X%8QvI#kt`c_iCSNwB(6_-0sjD8#aQ5c|sX&hXrU zPQ2tkv4(gT8SKH;ousG>bh>_XBLA*%#d}>G-$lrtOztV=UHP8?kFCBaMWGtfXj959 zjhQX=-7MZioSY`@dUJ|XovKdupzhwC+n8eg|IA$`xzdX>QQI_D959|Y71BA&$)21b z6$?2;_wC0saqhiH4qK>=e(f5-OGz?{Rg(PgKpZH^tsfr5fA{K$6aS7}-*g4l9?}Pg zad$$0;{eX)a+e%@nUb#O=fGw6Cw1467K^sH*|obMkhvo{q6TgmxybV5^k2DhxV(^S ztlmR0Bw3?@iT)ia8g;Ke$*w#cH_4+j_E0O5R{7Z8T{T+uC`QRuqtI~}d8$UwKV}TA z*{Dq9ahUV*V>MuYRL(rk{uajuy7@A1BFa|$1U^K{lb%wI>3ofe$5CICynpvv&j);jn(0&$1dP^NX`$XXtSkGTgaPGY&>Gs1(aZf zHVWkGU4DA8k)W>|2{!Jx3`zFRtGvawCd;|Go>R&j0oHWWA;y)ifcYbrnH^n5Un`xq zgFPgj7o$EdUk>m!Il^&eD?kA9WN?+fb1Qi}$%P)Op}^!Y{oZP0VB!ppH;4Aqi`Mcs zn<~&4tH->-Zy0-wg}T|BoNr9AgZ1lqEvcmRbn9w8VS||iXB)q7-48|A-{u{Li%Ryx z@Q*k0-%Jl=?6%YL+!n5-H*SXY((f!*V7${T?|+t?Ig_Kd8Ov+~4@>^R`DObA3>d<@N<*mjd>s)KmtGl2OTU6OtOHX*uNPznN+(LKS zi|?h$5XUp#{X)u(5%q_n`j>A+0587p=rCsLvi)YV%Nq!`-C*7UV_fC8@TDE+e}u8Q zKA4(}`1|OTLp;tHRV9$`wqm<$J=tG(ev^sh^x^6vZZ`DQU5=P9Y!$aA_~}ERn96U7 z*lX0lV`d-JZEIEQ<6Pz~*7t59w9!8$Mf&KFrlK`DyXg{fa@U+a`i-ZepbERWOxH(9|~7rB@By z5^EI4Ux)K2{f9M*txdjIv7#Q=AcDmf(va-3eZIl4oxb}$rX_J30&2%!-Y_7w7c}pR z?LQd>HveMvi#K_=B_CWAG~eP0BqfO;G1Sj!S#=v3>G-iw1!$i;{HWKjc^kNne(|oM z669$dT2oa|0zX6FTQq|ok@!4bCO)LP$&>kPVPse6>7)kV6B&)qj$s_bhH8Aw8ejdj zkAhaDi`R&$eku!L2g}<#wZBwGa-hEKr^YdwJafU(ll+zPGhWKbQH`Z%E!es$SgrLj ztcC05A52eT8~t-(DqA*&sSxpmt9)|lW#MWJ3pM5=av%cc{$E4v;_Zv0<&j1zO9C3H zI!>KJIq#&;?@%2{dPFJQUp2bp>!xEcnAFXhsRv1p#Hma~$4XrB20e>cqq5;|DM@)# zoCWQb;VCSiWRT)*esS;I*Ft&kofaR_l9m8-{Sr_Bwk4>pDiu6oF__R2rv8-Rbl!Dk zaZ7w>StH5|*kcbW^cXd-0)dj%%1F}mf>x?IPzV5aH)glBnVMsnf{JyEv~VAK^}9%N47_b64xd~ z_NW`tzfY3s`L(2Nd)0uXA{BnR_ftpQD;<_3%~Da?m8POe4nFkTWh1P^t5%eE{MCxs z45Pop!@nzjxASksBW$Xasyy?s5M&P`*Se`Tx=~m4dQ~=L10q)FpQSP!q0Y-je4XsU z-#Qxe&)RHhAjLh@7$<}6f4q40RGBsedU8+I0oB$mXb(qPLaN(K4M+EqdY>em-5 zwcg8Oae<1F(U0O3=a+-}eqOC2Wl>KRqFv>TfTO{1iF+IXnPl!QIhJl7`GX4A-;GmK zz0Cy1u@ZL`onGZ?&enJ=Y462&oW>j~n78^Mnf>&+Le-h1xC~D^9pAzwbMhP%+-`p~ zsi?P2R6^3c0QT9!3D*^X zq{sdKNuDaS^n-22de7E(Dk#CYO;;4EStM#PQ~0E=8j>u!5H| zm-ChjNiY5SYIPgWWgfleb@c;?Jnf!0$#YTaK>?lvbQ{z(~FCEfs1`gC~`)Hpx;5#JNcg$3V~Dta_T~GX2>WwFs*mv#M&~9NQz= zLN;foIt5pnm-+!pmNZvR-&nERWQSXAfx4S=f&B)qSc7+kRiR?8mJ81C?uL kOZKZjL%H|*KjZ*>caNWU%J>ffPRlarQ5wjp4^`5C0kF+6QUCw| delta 6183 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 diff --git a/internal/php7/php7.y b/internal/php7/php7.y index bc12e9f..e1914fe 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -880,25 +880,18 @@ statement: } | T_DO statement T_WHILE '(' expr ')' ';' { - exprBrackets := &ast.ParserBrackets{ + $$ = &ast.StmtDo{ Node: ast.Node{ - Position: position.NewTokensPosition($4, $6), + Position: position.NewTokensPosition($1, $7), }, - OpenBracketTkn: $4, - Child: $5, - CloseBracketTkn: $6, + DoTkn: $1, + Stmt: $2, + WhileTkn: $3, + OpenParenthesisTkn: $4, + Cond: $5, + CloseParenthesisTkn: $6, + SemiColonTkn: $7, } - $$ = &ast.StmtDo{ast.Node{}, $2, exprBrackets} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $7) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $3.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens(exprBrackets, token.Start, $4.SkippedTokens) - yylex.(*Parser).setFreeFloating(exprBrackets, token.End, append($6.SkippedTokens, $7.SkippedTokens...)) - yylex.(*Parser).setToken($$, token.SemiColon, $7.SkippedTokens) } | T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement { diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 80ca23e..017d979 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -378,8 +378,13 @@ func (n *StmtDefault) Accept(v NodeVisitor) { // StmtDo node type StmtDo struct { Node - Stmt Vertex - Cond Vertex + DoTkn *token.Token + Stmt Vertex + WhileTkn *token.Token + OpenParenthesisTkn *token.Token + Cond Vertex + CloseParenthesisTkn *token.Token + SemiColonTkn *token.Token } func (n *StmtDo) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/filter_parser_nodes.go b/pkg/ast/visitor/filter_parser_nodes.go index 20ed98d..83f9cb2 100644 --- a/pkg/ast/visitor/filter_parser_nodes.go +++ b/pkg/ast/visitor/filter_parser_nodes.go @@ -13,16 +13,6 @@ func (v *FilterParserNodes) EnterNode(n ast.Vertex) bool { return true } -func (v *FilterParserNodes) StmtDo(n *ast.StmtDo) { - for { - if nn, ok := n.Cond.(*ast.ParserBrackets); ok { - n.Cond = nn.Child - } else { - break - } - } -} - func (v *FilterParserNodes) StmtSwitch(n *ast.StmtSwitch) { for { if nn, ok := n.Cond.(*ast.ParserBrackets); ok { diff --git a/pkg/ast/visitor/filter_tokens.go b/pkg/ast/visitor/filter_tokens.go index 620b703..3d60dd5 100644 --- a/pkg/ast/visitor/filter_tokens.go +++ b/pkg/ast/visitor/filter_tokens.go @@ -122,3 +122,11 @@ func (v *FilterTokens) StmtWhile(n *ast.StmtWhile) { n.EndWhileTkn = nil n.SemiColonTkn = nil } + +func (v *FilterTokens) StmtDo(n *ast.StmtDo) { + n.DoTkn = nil + n.WhileTkn = nil + n.OpenParenthesisTkn = nil + n.CloseParenthesisTkn = nil + n.SemiColonTkn = nil +} diff --git a/pkg/printer/pretty_printer_test.go b/pkg/printer/pretty_printer_test.go index 6bb07ea..a193202 100644 --- a/pkg/printer/pretty_printer_test.go +++ b/pkg/printer/pretty_printer_test.go @@ -2343,7 +2343,7 @@ func TestPrintAltWhile(t *testing.T) { p.Print(&ast.StmtNamespace{ Stmts: []ast.Vertex{ &ast.StmtWhile{ - Alt: true, + Alt: true, Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index 8275817..e678ae6 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2361,42 +2361,17 @@ func (p *Printer) printStmtDefault(n ast.Vertex) { p.printFreeFloating(nn, token.End) } -func (p *Printer) printStmtDo(n ast.Vertex) { - nn := n.(*ast.StmtDo) - p.printFreeFloating(nn, token.Start) +func (p *Printer) printStmtDo(n *ast.StmtDo) { + p.printToken(n.DoTkn, "do") + p.bufStart = " " - io.WriteString(p.w, "do") + p.Print(n.Stmt) - if _, ok := nn.Stmt.(*ast.StmtStmtList); !ok { - if nn.Stmt.GetNode().Tokens.IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.Print(nn.Stmt) - - p.printFreeFloating(nn, token.Stmts) - - io.WriteString(p.w, "while") - - if _, ok := nn.Cond.(*ast.ParserBrackets); !ok { - io.WriteString(p.w, "(") - } - - p.Print(nn.Cond) - - if _, ok := nn.Cond.(*ast.ParserBrackets); !ok { - io.WriteString(p.w, ")") - } - - p.printFreeFloating(nn, token.Cond) - - p.printFreeFloating(nn, token.SemiColon) - if nn.GetNode().Tokens.IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, token.End) + p.printToken(n.WhileTkn, "while") + p.printToken(n.OpenParenthesisTkn, "(") + p.Print(n.Cond) + p.printToken(n.CloseParenthesisTkn, ")") + p.printToken(n.SemiColonTkn, ";") } func (p *Printer) printStmtEcho(n ast.Vertex) { diff --git a/pkg/printer/printer_parsed_php5_test.go b/pkg/printer/printer_parsed_php5_test.go index 1af1e60..ce35495 100644 --- a/pkg/printer/printer_parsed_php5_test.go +++ b/pkg/printer/printer_parsed_php5_test.go @@ -945,7 +945,8 @@ func TestParseAndPrintPhp5Declare(t *testing.T) { } func TestParseAndPrintPhp5DoWhile(t *testing.T) { - src := `