From 38141ce97f653badc43cc933db4d2f139a26c008 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Mon, 28 Dec 2020 00:38:39 +0200 Subject: [PATCH] refactoring: create "ScalarEncapsedStringVar" node --- internal/php5/parser_test.go | 120 ++++++++++++------------------ internal/php5/php5.go | Bin 265714 -> 265368 bytes internal/php5/php5.y | 58 ++++++--------- internal/php7/parser_test.go | 120 ++++++++++++------------------ internal/php7/php7.go | Bin 220503 -> 220157 bytes internal/php7/php7.y | 58 ++++++--------- pkg/ast/ast.go | 1 + pkg/ast/node.go | 19 +++++ pkg/ast/traverser/dfs.go | 17 +++++ pkg/ast/visitor/dumper.go | 16 ++++ pkg/ast/visitor/formatter.go | 15 ++++ pkg/ast/visitor/formatter_test.go | 49 ++++++++++++ pkg/ast/visitor/null.go | 4 + pkg/ast/visitor/printer.go | 9 +++ 14 files changed, 272 insertions(+), 214 deletions(-) diff --git a/internal/php5/parser_test.go b/internal/php5/parser_test.go index 928496a..c875222 100644 --- a/internal/php5/parser_test.go +++ b/internal/php5/parser_test.go @@ -4335,14 +4335,14 @@ func TestScalarEncapsed_DollarOpenCurlyBraces(t *testing.T) { }, Value: []byte("test "), }, - &ast.ParserBrackets{ + &ast.ScalarEncapsedStringVar{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 9, EndPos: 15, }, - OpenBracketTkn: &token.Token{ + DollarOpenCurlyBracketTkn: &token.Token{ ID: token.T_DOLLAR_OPEN_CURLY_BRACES, Value: []byte("${"), Position: &position.Position{ @@ -4352,34 +4352,26 @@ func TestScalarEncapsed_DollarOpenCurlyBraces(t *testing.T) { EndPos: 11, }, }, - Child: &ast.ExprVariable{ + VarName: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, EndPos: 14, }, - VarName: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING_VARNAME, + Value: []byte("foo"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, EndPos: 14, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING_VARNAME, - Value: []byte("foo"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 11, - EndPos: 14, - }, - }, - Value: []byte("foo"), }, + Value: []byte("foo"), }, - CloseBracketTkn: &token.Token{ + CloseCurlyBracketTkn: &token.Token{ ID: token.ID(125), Value: []byte("}"), Position: &position.Position{ @@ -4501,14 +4493,14 @@ func TestScalarEncapsed_DollarOpenCurlyBracesDimNumber(t *testing.T) { }, Value: []byte("test "), }, - &ast.ParserBrackets{ + &ast.ScalarEncapsedStringVar{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 9, - EndPos: 18, + EndPos: 15, }, - OpenBracketTkn: &token.Token{ + DollarOpenCurlyBracketTkn: &token.Token{ ID: token.T_DOLLAR_OPEN_CURLY_BRACES, Value: []byte("${"), Position: &position.Position{ @@ -4518,81 +4510,65 @@ func TestScalarEncapsed_DollarOpenCurlyBracesDimNumber(t *testing.T) { EndPos: 11, }, }, - Child: &ast.ExprArrayDimFetch{ + VarName: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, - EndPos: 17, + EndPos: 14, }, - Var: &ast.ExprVariable{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING_VARNAME, + Value: []byte("foo"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, EndPos: 14, }, - VarName: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 11, - EndPos: 14, - }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING_VARNAME, - Value: []byte("foo"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 11, - EndPos: 14, - }, - }, - Value: []byte("foo"), - }, }, - OpenBracketTkn: &token.Token{ - ID: token.ID(91), - Value: []byte("["), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 14, - EndPos: 15, - }, + Value: []byte("foo"), + }, + OpenSquareBracketTkn: &token.Token{ + ID: token.ID(91), + Value: []byte("["), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 14, + EndPos: 15, }, - Dim: &ast.ScalarLnumber{ + }, + Dim: &ast.ScalarLnumber{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 15, + EndPos: 16, + }, + NumberTkn: &token.Token{ + ID: token.T_LNUMBER, + Value: []byte("0"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 15, EndPos: 16, }, - NumberTkn: &token.Token{ - ID: token.T_LNUMBER, - Value: []byte("0"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 15, - EndPos: 16, - }, - }, - Value: []byte("0"), }, - CloseBracketTkn: &token.Token{ - ID: token.ID(93), - Value: []byte("]"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 16, - EndPos: 17, - }, + Value: []byte("0"), + }, + CloseSquareBracketTkn: &token.Token{ + ID: token.ID(93), + Value: []byte("]"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 16, + EndPos: 17, }, }, - CloseBracketTkn: &token.Token{ + CloseCurlyBracketTkn: &token.Token{ ID: token.ID(125), Value: []byte("}"), Position: &position.Position{ diff --git a/internal/php5/php5.go b/internal/php5/php5.go index ce0b005c6530a61e131770ea1a267e42ecea3cf3..b1468ec88a55742ff94f10ef7b3f7fce9a72bb3a 100644 GIT binary patch delta 751 zcmcIi-%FEW6y}`sZBF;YIoGE{VP8-)D#kXQuA5SfZ9!yGR5vBN7?oL@3%iU(7v6<; zPtp$-w646Eh<#8&O5Jo3%^(Q6Xhueq)G{g(i(XxSLD0nu=RBN;^E}UaSFX9QPP$8R zA9qJDCw=2dAF0P?(kC;|Fc%anPFBRlM^b2Vh>pq`vf|Vx-j7N@H(K{*Mn+OO4DRG+ z9M{_~a!%t#E{*APv>=hTXCIwNBD6Jhu@}m-FA6_g=k~%SMC>s-7#s2@6HVkCb=MIgI zrE+OZZ>KGIFeObmvBZrijIqOB-#?N$pWYb2<^|GW>>wusMQTC*G&P`iR<%#Fv9#B`IcxqO^}t z)U*UgcOf;XBFNuUEWf3OD8gT4(xM2V+R+Lbt~VVvtw^|2r^P8;v#5}dq~y|+a;KWx ag!^_afozZZUHQjsF`YK;24T*rMg9QPc<=E5 delta 725 zcmaiwT}YE*7>0SC=T*Pu+!id`()oQwNYD>1r*o2(RJw=^5$q(Yfks8;vi}3Y$nY#W zyNf_p*^vcS#7Bgd(9cQW&Vqs(9e6OzW)wkA>UCeCXC1uoJ~z+Lecd;1`o7)rjkW|i z8od$^4#tC|AKUSuJf6hiud)``Gh(6N;21_H#EqtV^&I zVz1Ge=xs}!>~2JOfCAKq_7Odt33CwZva%ZwEh$I8Nu_9*kgET$?nL^F_;9L&6VC5b zhhCNTiwB$LX%);F@#A@bJxC2xF%FE#3g_D1X^F$iOXU)V+z?fx`x$w0?KArpL5dbY z8j;x{A-wL&BY?d3{X>#2-ge`6^dqagA#+URgjDs3J1PD0qL+g{{kjvFHO z*sL69uB*Z6C{@7nv+nvX2Z_R<`)t}Df5uW$+9b%2B5Z;K|r4LMWX|Dz0POYX-8fv44xm>N6_rK&K pd)!cW^?0#r)fffpC32^s<;cR)#qR8aZ5q^Jj2UW(aKx=P{{erO^Hcx; diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 245e18a..5c2a399 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -5412,52 +5412,40 @@ encaps_var: } | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { - $$ = &ast.ParserBrackets{ - Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), - OpenBracketTkn: $1, - Child: &ast.ExprVariable{ - Position: yylex.(*Parser).builder.NewNodePosition($2), - VarName: $2, - }, - CloseBracketTkn: $3, + $$ = &ast.ScalarEncapsedStringVar{ + Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), + DollarOpenCurlyBracketTkn: $1, + VarName: $2, + CloseCurlyBracketTkn: $3, } } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { - $$ = &ast.ParserBrackets{ - Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), - OpenBracketTkn: $1, - Child: &ast.ExprVariable{ + $$ = &ast.ScalarEncapsedStringVar{ + Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), + DollarOpenCurlyBracketTkn: $1, + VarName: &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition($2), - VarName: &ast.Identifier{ - Position: yylex.(*Parser).builder.NewTokenPosition($2), - IdentifierTkn: $2, - Value: $2.Value, - }, + IdentifierTkn: $2, + Value: $2.Value, }, - CloseBracketTkn: $3, + CloseCurlyBracketTkn: $3, } } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { - $$ = &ast.ParserBrackets{ - Position: yylex.(*Parser).builder.NewTokensPosition($1, $6), - OpenBracketTkn: $1, - Child: &ast.ExprArrayDimFetch{ - Position: yylex.(*Parser).builder.NewTokensPosition($2, $5), - Var: &ast.ExprVariable{ - Position: yylex.(*Parser).builder.NewTokenPosition($2), - VarName: &ast.Identifier{ - Position: yylex.(*Parser).builder.NewTokenPosition($2), - IdentifierTkn: $2, - Value: $2.Value, - }, - }, - OpenBracketTkn: $3, - Dim: $4, - CloseBracketTkn: $5, + $$ = &ast.ScalarEncapsedStringVar{ + Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), + DollarOpenCurlyBracketTkn: $1, + VarName: &ast.Identifier{ + Position: yylex.(*Parser).builder.NewTokenPosition($2), + IdentifierTkn: $2, + Value: $2.Value, }, - CloseBracketTkn: $6, + OpenSquareBracketTkn: $3, + Dim: $4, + CloseSquareBracketTkn: $5, + CloseCurlyBracketTkn: $6, } } | T_CURLY_OPEN variable '}' diff --git a/internal/php7/parser_test.go b/internal/php7/parser_test.go index 4957b16..ca22168 100644 --- a/internal/php7/parser_test.go +++ b/internal/php7/parser_test.go @@ -4692,14 +4692,14 @@ func TestScalarEncapsed_DollarOpenCurlyBraces(t *testing.T) { }, Value: []byte("test "), }, - &ast.ParserBrackets{ + &ast.ScalarEncapsedStringVar{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 9, EndPos: 15, }, - OpenBracketTkn: &token.Token{ + DollarOpenCurlyBracketTkn: &token.Token{ ID: token.T_DOLLAR_OPEN_CURLY_BRACES, Value: []byte("${"), Position: &position.Position{ @@ -4709,34 +4709,26 @@ func TestScalarEncapsed_DollarOpenCurlyBraces(t *testing.T) { EndPos: 11, }, }, - Child: &ast.ExprVariable{ + VarName: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, EndPos: 14, }, - VarName: &ast.Identifier{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING_VARNAME, + Value: []byte("foo"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, EndPos: 14, }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING_VARNAME, - Value: []byte("foo"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 11, - EndPos: 14, - }, - }, - Value: []byte("foo"), }, + Value: []byte("foo"), }, - CloseBracketTkn: &token.Token{ + CloseCurlyBracketTkn: &token.Token{ ID: token.ID(125), Value: []byte("}"), Position: &position.Position{ @@ -4858,14 +4850,14 @@ func TestScalarEncapsed_DollarOpenCurlyBracesDimNumber(t *testing.T) { }, Value: []byte("test "), }, - &ast.ParserBrackets{ + &ast.ScalarEncapsedStringVar{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 9, - EndPos: 18, + EndPos: 15, }, - OpenBracketTkn: &token.Token{ + DollarOpenCurlyBracketTkn: &token.Token{ ID: token.T_DOLLAR_OPEN_CURLY_BRACES, Value: []byte("${"), Position: &position.Position{ @@ -4875,81 +4867,65 @@ func TestScalarEncapsed_DollarOpenCurlyBracesDimNumber(t *testing.T) { EndPos: 11, }, }, - Child: &ast.ExprArrayDimFetch{ + VarName: &ast.Identifier{ Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, - EndPos: 17, + EndPos: 14, }, - Var: &ast.ExprVariable{ + IdentifierTkn: &token.Token{ + ID: token.T_STRING_VARNAME, + Value: []byte("foo"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 11, EndPos: 14, }, - VarName: &ast.Identifier{ - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 11, - EndPos: 14, - }, - IdentifierTkn: &token.Token{ - ID: token.T_STRING_VARNAME, - Value: []byte("foo"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 11, - EndPos: 14, - }, - }, - Value: []byte("foo"), - }, }, - OpenBracketTkn: &token.Token{ - ID: token.ID(91), - Value: []byte("["), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 14, - EndPos: 15, - }, + Value: []byte("foo"), + }, + OpenSquareBracketTkn: &token.Token{ + ID: token.ID(91), + Value: []byte("["), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 14, + EndPos: 15, }, - Dim: &ast.ScalarLnumber{ + }, + Dim: &ast.ScalarLnumber{ + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 15, + EndPos: 16, + }, + NumberTkn: &token.Token{ + ID: token.T_LNUMBER, + Value: []byte("0"), Position: &position.Position{ StartLine: 1, EndLine: 1, StartPos: 15, EndPos: 16, }, - NumberTkn: &token.Token{ - ID: token.T_LNUMBER, - Value: []byte("0"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 15, - EndPos: 16, - }, - }, - Value: []byte("0"), }, - CloseBracketTkn: &token.Token{ - ID: token.ID(93), - Value: []byte("]"), - Position: &position.Position{ - StartLine: 1, - EndLine: 1, - StartPos: 16, - EndPos: 17, - }, + Value: []byte("0"), + }, + CloseSquareBracketTkn: &token.Token{ + ID: token.ID(93), + Value: []byte("]"), + Position: &position.Position{ + StartLine: 1, + EndLine: 1, + StartPos: 16, + EndPos: 17, }, }, - CloseBracketTkn: &token.Token{ + CloseCurlyBracketTkn: &token.Token{ ID: token.ID(125), Value: []byte("}"), Position: &position.Position{ diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 5e50fcea36c20a722094407fb3ee0e93ff883c89..f4271bafb5606a421be4c99726e3416aa24091e6 100644 GIT binary patch delta 632 zcmbV}Pe_w-7{_^@$7Y4EYf;m&t#|zq>E!00y~_o@Gi{^9_hs3vRB{Ksw6ZDLDGEAx z6GiAtbde5?AlSO}gCMAg@HkIFAQ*&nOX(04V!za5mpuF~58vna{eHgBr`N`&GAh9U zTZxC^z)Uzm`mqWJWV#89YwW@4cB$uF9{D8uA8qNu(g5|L8Yi!(XQEKZPonsoj>3-c z0hBxW5Po>&2!1E29&R@oa5s4$&N}47`x5yvx5|g{vr96FedXi-|9i>iFzgbg;4W!1 z^D$k6<&cT;vNl`2Pj$H2Eoq8jW0pgEMEI9UrIBkqmx_1tlVd3MYm)M3jrgWheE5|l zFK%VoIC!owF*UX=!d$PM`kPE6XSo3@TWsKa?{>0OGY3%}CJ#n!IfnHv${||OHMM-8 zlQ?6_5S+B65kD`x1fdI3hlVfw6yq65b6ZrEGjfBu-BO{8(kEo$U6q1}j&qH2ENLMq zM+*}juUz@a6vf6Mn`$j9cM0o*98vcMWIySaQqOkRpeMEJ#bxmkwIX&~%U5zTO?b%? zQBzm69E%AG?RY%7Dvd-PNG<4fw^>}6L)tGM!~8dW47;CCs0TeW+$E>Z?Ee* InntAc4+AyFx&QzG delta 603 zcma)&O=wd=6ot9>_9v;$kAgqXGCwj5vfQC zDiylWMFipCvJ1O3x^cjbF0>T7(Us`Nf(jyvxaiXAyee2+IWRDH;GFN=^Fw)FKk+;a z7@UaA1&#TjLHe=^8Zxs7FOO0K)@=#l=~pho-zLq-jguR-Bzx;qr_Y=}fk!WR2-OnT z;p#GN!-X6*qNl(vSD}0xA^ej9sB=AZrF&N#KH~vHFen!c344$JZ!?n{TKS z;W25){b3GcV2MW@t{>Yi-i>NXJKFcCdyCs$>1uL2rvkIct*E^vFD~!Y;lj3f@II+u zIa|C``Mvr2V={2pmMr$ArDbDjrHkE9)aTUD0`oK1<5*hOxId~UGIEZaVhN3ybug%A zqys7?UiEWSd_sfRI?JXSk4q1sl-DIB;%YH3OU%7dSS1dr+Xv+earDpBen?yn>-(gZ zjUAR<&R{L-{v)TjPR&io3{n54A7j!H#L#