From 954208510e08c773e73b5c93bc59db93792ddfaa Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Wed, 2 Sep 2020 22:58:19 +0300 Subject: [PATCH] [refactoring] update ast structure of "StmtList" nodes --- internal/php5/php5.go | Bin 295135 -> 296051 bytes internal/php5/php5.y | 88 ++++++++++++++++-------- internal/php7/php7.go | Bin 251161 -> 251037 bytes internal/php7/php7.y | 88 ++++++++++++++++-------- pkg/ast/node.go | 4 +- pkg/ast/visitor/filter_tokens.go | 5 ++ pkg/printer/printer.go | 15 ++-- pkg/printer/printer_parsed_php5_test.go | 3 +- pkg/printer/printer_parsed_php7_test.go | 3 +- 9 files changed, 133 insertions(+), 73 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index f836b8b6f3ba8c2b0999e5a704be6ac12529220a..caf5d7472aa1f5cecd3bc73938674a68af440074 100644 GIT binary patch delta 13592 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 I0a+pc7Z?^WZ~y=R delta 11924 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 B?F0Y- diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 181e9a4..05a8884 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -844,14 +844,14 @@ statement: unticked_statement: '{' inner_statement_list '}' { - $$ = &ast.StmtStmtList{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $3.SkippedTokens) + $$ = &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenCurlyBracket: $1, + Stmts: $2, + CloseCurlyBracket: $3, + } } | T_IF parenthesis_expr statement elseif_list else_single { @@ -871,12 +871,16 @@ unticked_statement: } | T_IF parenthesis_expr ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';' { - stmts := &ast.StmtStmtList{ast.Node{}, $4} + stmts := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($4), + }, + Stmts: $4, + } stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} $$ = &ast.StmtAltIf{ast.Node{}, $2, stmtsBrackets, $5, $6} // save position - stmts.GetNode().Position = position.NewNodeListPosition($4) stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($3, $4) $$.GetNode().Position = position.NewTokensPosition($1, $8) @@ -1673,11 +1677,15 @@ for_statement: } | ':' inner_statement_list T_ENDFOR ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtAltFor{ast.Node{}, nil, nil, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1698,11 +1706,15 @@ foreach_statement: } | ':' inner_statement_list T_ENDFOREACH ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtAltForeach{ast.Node{}, nil, nil, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1724,11 +1736,15 @@ declare_statement: } | ':' inner_statement_list T_ENDDECLARE ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtDeclare{ast.Node{}, true, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1902,11 +1918,15 @@ while_statement: } | ':' inner_statement_list T_ENDWHILE ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtAltWhile{ast.Node{}, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1945,13 +1965,17 @@ new_elseif_list: } | new_elseif_list T_ELSEIF parenthesis_expr ':' inner_statement_list { - stmts := &ast.StmtStmtList{ast.Node{}, $5} + stmts := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($5), + }, + Stmts: $5, + } stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} _elseIf := &ast.StmtAltElseIf{ast.Node{}, $3, stmtsBrackets} $$ = append($1, _elseIf) // save position - stmts.GetNode().Position = position.NewNodeListPosition($5) stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($4, $5) _elseIf.GetNode().Position = position.NewTokenNodeListPosition($2, $5) @@ -1987,12 +2011,16 @@ new_else_single: } | T_ELSE ':' inner_statement_list { - stmts := &ast.StmtStmtList{ast.Node{}, $3} + stmts := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($3), + }, + Stmts: $3, + } stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} $$ = &ast.StmtAltElse{ast.Node{}, stmtsBrackets} // save position - stmts.GetNode().Position = position.NewNodeListPosition($3) stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($2, $3) $$.GetNode().Position = position.NewTokenNodeListPosition($1, $3) @@ -2626,14 +2654,14 @@ method_body: } | '{' inner_statement_list '}' { - $$ = &ast.StmtStmtList{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $3.SkippedTokens) + $$ = &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenCurlyBracket: $1, + Stmts: $2, + CloseCurlyBracket: $3, + } } ; diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 39c787688584d5c9527277dfd352e7f8c8151870..bfc89708bbc79701ef76007c3ca647035367b6f4 100644 GIT binary patch delta 6073 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 delta 5761 zcmai2dsx@i8Gp`u5CKIla!CQXm?Bd6yI=AGxCzWmWrmpy1uscx4#lQ34Vqf!Ettt` z76qG+8O6jbj%h08d|a0$WX)Et)IIHzJ`>H=(|Xi>&iVd8a&7zT_dD;oy_e7XdEfJG zcp>7c=7`pa!Q^zUi5je;28&Y@Ic_Y)s*Z6oL-3hT#YnE*FGAJ1`C{8*GsTz+IB(+S~8l?{7s}Oh#x0%Iuu0dvaib<78?3c z7*~HTyb247Bze3Xl|^a%Q$N(2e?b(G*RJ+l5S2temrA`T78BWQTz5&Vj2T?AUED)jmhYB%BC4DV+5xH$z zewT{=m)I)#7d9Est!0$RA6*ss^_GZJ>xfnmEV~v&_nZBFy(L+T?yp+LBL(HCv|zgX=5s;< zD>Art0Qq{Ib)+vXCE?^tofM}vj^aJn#4TJomTa6;Ebmko!YG}B-3}d(ZMBqaDO`L} z02_iv^OxbY>n5c`T$VZ+3YU$R(&zQ)(8coFweZOGD9V#QpUo1LL{kw)CbrppC0ft< z?bclD-6FI8LE6Y6F_cd>yDE&K#lhrst2YMIUxUf+=ca0k=i1$30G~+3R=eNJWqHzA zlE@R&XaYn&ZifwbvD&hA zWb<<8Dt&CXh4V&1Ih)VjvpGba7)3rIZT?;|hAdq9?KBJd>oK2AM#ZF4nT%tn9k{8<$EBKw;AEi)rUp74~;B3t|ZMn2s zki({`$J4ic$nDT(W%I!Toa*+dPj-pvf@e;IdQJCfdQUx}8&AIit z6v}r@MqnSAL|Y-Y!mPy#;@9CX)Qa`C`Ag zog1s`Yl=9D!v;#C1z#q6rMVxK;33w@Bg7 z=E18s*QTknanY^?lt&&DltBI_mm@MBk18*xCxvwNO5_M0S^*fld@c)`Cfys1$V%yK z9<~t2x%@Y|fB!<{kO9U2Yee?My)oS078i~P*f{cQwDLzDvIP$b48>c{~0PjqP-Siy`Cgj zzkp$l)!^9VEV6U<8okKZ1Fl4V4HD_G$S{^cjS)P2trm4NB0M?=qnlIzm37^i&fzhS zQhu=A&^2Gm5SiRM2%SUg>*ykIyOUb5!mq1YveB<}H}zGUcIhK7 z=gLI3HB*#Yup7&`a0_a*R))=@+-597wnQBZY`xfm#2x$+^n_xXsVr3?epR69GOE74 zN2`SNfT}}O!(RF|sK-<#V_1-yvybKo>CiPOLME%fyb@T^7-L-?s$OiPc>;uFjH-MC zsQ2urSI`}~Ich&;s`vxYfOE6qs;Nie)C&i3zfR&5wjHBjb^H*unJf;>|N4j?H%+tF z8)MyQHrvU`|9F$~5Ik**!dXX55rG}a3MU=J$j_1c5rF99^s-S2DqEL)@jD$K(2B-A zl#EdAZ_{4bYLvWH@w?hhri&P+7QJWr%mBgYoZF!#Zq3xgRNVV|fZRBS!TFQMR+9t? zJoT^CPaXddBHVSR5x9Bg6fMxI7%hkXk;?Uq8NB$h9+>i+temIy!0>QD<2U}K!{o9I zdge3QZ|d-Hwel?V#_cyODf}~qlCC2F%`o-I=dfLu53Rj|LPxELYR&KXJEE=eJX{St zPY3kv1{X%{D;KodmI~^3|3DDBdjYkhi#pBq@!Syx5I%bu=?cgO5+#W9{z=0P<@0A* zvLA1+qtyBxRHR=25+%-ZRkFgOfy5P;3Ei2FK+V_CMmo_^qW!S(ecvGcoEG%ed*5jF zY&Wh@yT7GFH!vTn)?LLo0CzR#I;vJLln1GCLSovWJXs}333LGEZ_EIOzYdZ(8*EW+ zWp9vrKUfxP{xA`n94Z$IemNNUhOu*X-*1v*T0c48pxTT+>M!RS_~;S0M_@HDpTw1R z5M%oQc?MmcwGVUUrlNMQjOJ?F`b z&rb}MOUUEYzX>YoRtTlX`&~lb!1i>=LG5V9viUU(K-zelwaCd_Iuj|By+X$FWIq~) z^&{lZk$EmgZ#$YBkBWi(T#NMU4lJ5mPsm{2|9iZ}CdVW7+ebN}8^u!{^UHJ%H`Dc^ ziY4%n(bDwJ=$2!xV>Uu!aY*2r;4z3DfCd_>uaSM!(lK%fx~Kp!TF1$E0;F z;n(GDoU)Y8a&s;;(sdLXS##$P%Os9mN|!k82YL<>>z-4aejtlX*)Rs+s06`-@?^eF z^+aWjIUl;9h14cmlGq% z*&c;I4-yy5mJ@W9((f(oPU1Hq(C--F$efqNV@l-&v`iqd<`@}n#q{}79E+!lc{7=P zL(Aj@^QytM4sIv|wrmcqgM;Jez&E**;PaXD zJpc>wy}(rNg2nPkx0gUW~_GZM6*JaSy?FUaNL~vIhTq z%_Xgd;SO|B1`7475ffBEcr&@JMsw?qY6K>ABQS$*&A9Gq!OuKmqN9uP&4yO3(S`;{ z36~w#h8j{jy+$sFf{)>TOK<(w1_kY0509FX7@+CHo8(=B%Qon2Ib>ljkw3;zIuRf= z|Cxd(ZvwG8eb)P%@%~mkYB}t!xrA>t7KV|WeZz)ct?3FD#mzrji zr>EqNKM-a!u|z4#3FeOtqRFY)OUgl`&i)cpH}m2CLiPvvyVIoOvE5&fHt<&`4Hp_JZY_f!7JeWd{{~UyNzDKN diff --git a/internal/php7/php7.y b/internal/php7/php7.y index ab3d550..a1ca1c7 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -851,14 +851,14 @@ inner_statement: statement: '{' inner_statement_list '}' { - $$ = &ast.StmtStmtList{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $3.SkippedTokens) + $$ = &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenCurlyBracket: $1, + Stmts: $2, + CloseCurlyBracket: $3, + } } | if_stmt { @@ -1535,11 +1535,15 @@ for_statement: } | ':' inner_statement_list T_ENDFOR ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtAltFor{ast.Node{}, nil, nil, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1560,11 +1564,15 @@ foreach_statement: } | ':' inner_statement_list T_ENDFOREACH ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtAltForeach{ast.Node{}, nil, nil, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1585,11 +1593,15 @@ declare_statement: } | ':' inner_statement_list T_ENDDECLARE ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtDeclare{ast.Node{}, true, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1716,11 +1728,15 @@ while_statement: } | ':' inner_statement_list T_ENDWHILE ';' { - stmtList := &ast.StmtStmtList{ast.Node{}, $2} + stmtList := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($2), + }, + Stmts: $2, + } $$ = &ast.StmtAltWhile{ast.Node{}, nil, stmtList} // save position - stmtList.GetNode().Position = position.NewNodeListPosition($2) $$.GetNode().Position = position.NewTokensPosition($1, $4) // save comments @@ -1791,13 +1807,17 @@ alt_if_stmt_without_else: T_IF '(' expr ')' ':' inner_statement_list { exprBrackets := &ast.ParserBrackets{ast.Node{}, $3} - stmts := &ast.StmtStmtList{ast.Node{}, $6} + stmts := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($6), + }, + Stmts: $6, + } stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} $$ = &ast.StmtAltIf{ast.Node{}, exprBrackets, stmtsBrackets, nil, nil} // save position exprBrackets.GetNode().Position = position.NewTokensPosition($2, $4) - stmts.GetNode().Position = position.NewNodeListPosition($6) stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($5, $6) $$.GetNode().Position = position.NewTokenNodeListPosition($1, $6) @@ -1810,7 +1830,12 @@ alt_if_stmt_without_else: | alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list { exprBrackets := &ast.ParserBrackets{ast.Node{}, $4} - stmts := &ast.StmtStmtList{ast.Node{}, $7} + stmts := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($7), + }, + Stmts: $7, + } stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} _elseIf := &ast.StmtAltElseIf{ast.Node{}, exprBrackets, stmtsBrackets} $1.(*ast.StmtAltIf).ElseIf = append($1.(*ast.StmtAltIf).ElseIf, _elseIf) @@ -1819,7 +1844,6 @@ alt_if_stmt_without_else: // save position exprBrackets.GetNode().Position = position.NewTokensPosition($3, $5) - stmts.GetNode().Position = position.NewNodeListPosition($7) stmtsBrackets.GetNode().Position = position.NewTokenNodeListPosition($6, $7) _elseIf.GetNode().Position = position.NewTokenNodeListPosition($2, $7) @@ -1850,7 +1874,12 @@ alt_if_stmt: } | alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';' { - stmts := &ast.StmtStmtList{ast.Node{}, $4} + stmts := &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewNodeListPosition($4), + }, + Stmts: $4, + } stmtsBrackets := &ast.ParserBrackets{ast.Node{}, stmts} _else := &ast.StmtAltElse{ast.Node{}, stmtsBrackets} $1.(*ast.StmtAltIf).Else = _else @@ -1858,7 +1887,6 @@ alt_if_stmt: $$ = $1 // save position - stmts.GetNode().Position = position.NewNodeListPosition($4) stmtsBrackets.GetNode().Position = position.NewTokensPosition($3, $5) _else.GetNode().Position = position.NewTokenNodeListPosition($2, $4) $$.GetNode().Position = position.NewNodeTokenPosition($1, $6) @@ -2446,14 +2474,14 @@ method_body: } | '{' inner_statement_list '}' { - $$ = &ast.StmtStmtList{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Stmts, $3.SkippedTokens) + $$ = &ast.StmtStmtList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenCurlyBracket: $1, + Stmts: $2, + CloseCurlyBracket: $3, + } } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 038dc46..2013eee 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -691,7 +691,9 @@ func (n *StmtStaticVar) Accept(v NodeVisitor) { // StmtStmtList node type StmtStmtList struct { Node - Stmts []Vertex + OpenCurlyBracket *token.Token + Stmts []Vertex + CloseCurlyBracket *token.Token } func (n *StmtStmtList) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/filter_tokens.go b/pkg/ast/visitor/filter_tokens.go index 5cd2215..b368d8a 100644 --- a/pkg/ast/visitor/filter_tokens.go +++ b/pkg/ast/visitor/filter_tokens.go @@ -82,3 +82,8 @@ func (v *FilterTokens) StmtConstant(n *ast.StmtConstant) { n.EqualTkn = nil n.CommaTkn = nil } + +func (v *FilterTokens) StmtStmtList(n *ast.StmtStmtList) { + n.OpenCurlyBracket = nil + n.CloseCurlyBracket = nil +} diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index f87cd9b..4d1c2aa 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2530,6 +2530,7 @@ func (p *Printer) printStmtDo(n ast.Vertex) { } p.Print(nn.Stmt) + p.printFreeFloating(nn, token.Stmts) io.WriteString(p.w, "while") @@ -3001,16 +3002,10 @@ func (p *Printer) printStmtStatic(n ast.Vertex) { p.printFreeFloating(nn, token.End) } -func (p *Printer) printStmtStmtList(n ast.Vertex) { - nn := n.(*ast.StmtStmtList) - p.printFreeFloating(nn, token.Start) - - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, token.End) +func (p *Printer) printStmtStmtList(n *ast.StmtStmtList) { + p.printToken(n.OpenCurlyBracket, "{") + p.printNodes(n.Stmts) + p.printToken(n.CloseCurlyBracket, "}") } func (p *Printer) printStmtSwitch(n ast.Vertex) { diff --git a/pkg/printer/printer_parsed_php5_test.go b/pkg/printer/printer_parsed_php5_test.go index 5c14c0f..cd835d9 100644 --- a/pkg/printer/printer_parsed_php5_test.go +++ b/pkg/printer/printer_parsed_php5_test.go @@ -1211,7 +1211,8 @@ func TestParseAndPrintPhp5StaticVar(t *testing.T) { } func TestParseAndPrintPhp5StmtList(t *testing.T) { - src := `