From 592c9b9aff7162afc1ec118d53602c6e2da5652d Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Thu, 3 Dec 2020 22:20:50 +0200 Subject: [PATCH] [refactoring] update ast structure of "Print", "Reference", "Require" and "RequireOnce" nodes --- internal/php5/php5.go | Bin 279808 -> 279756 bytes internal/php5/php5.y | 70 +++++++++++++++++--------------- internal/php7/php7.go | Bin 228447 -> 228025 bytes internal/php7/php7.y | 91 ++++++++++++++++++++++-------------------- pkg/ast/node.go | 12 ++++-- 5 files changed, 93 insertions(+), 80 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 5cc24595fa7d880d35b6fcd5a228215c7bd7aab9..8aa85e6a3badd5a7044a8548daf487dc81b5ebe4 100644 GIT binary patch delta 3957 zcmZu!c~sR^9zXYfFFYUX!v&Q^9w_7r50K4;9x7sKN>VO_BWSpchD)YXHVV#kDn}FQ zeDCk~Smqr6dhdJh_j|wl=llJY zuMRuaG^Q^T0oeAOjMcxpDX;W0 zFT~@UI8}@Tt7IoM`;kL8bfEIXkuXhmMbF7{6w0T`Ftij%r&ir5MNC|x(F)9!y9A_R=R08%5(Vk`~I>o8sm+b*F~_djHHV~WT47H7S}w~ z&XnE2$6d6$7kMSZa@oAv3aKq@ z*Ox|#!IlEU_Nu_i{*)`yaQS?zVYR1aKV3b5Rto&%XV&JC@*~_HM0u#FmyyU%B85B2 z^b(pAS%G|AMruBLQ24F~)0g;ja;xfA?o+7BwHf^cnp1t(I)5y0)a* zYJ6l|I+HgF#eKRmosOywjBAHdE~R-qsG2J?P&`kDBW@Vwv1{T8C1L~rM^z0!>siPJ zbaxn?w1wX&S9@hu6sZ!WM@#$UV<)iSjOcA@#}Acb zq@SLjLw$uv#f?1a!AB#Q#mZVZECrsCtRU`at5=&w@_i=WTq>flFpvD+ag8E@+NC1e zB9W3yEhx{BJ#cU{SJjpTwHLv8ER$@>XqM?BkbH=1%H2=-V_GqNg0crVZ>csz!voB~ z9vBVvW6l3G`@%EM5a~8i{E&HO(SGV~^qj)932kQSgA*u5vJVy2_H7{MY@(Uq&_rP6 zM0&$2Tpcq~Z4;;*C;V~a5gKh$lZ-i!@-tRR`J&hKD0`psNvro$CNa6Fh6+u|_eE2h zaA02{x$yq|0ysXIZ@B;>QTZkHGKC7*+8SDerYzA-^C7n<_m3OJl9YBA z(P^vZV&HXB3B2oBVe@&Rkff;(jxLoEsEMKw)Ey8J@E+vbq##;?71P=9hrN`7pUgj2 zZ6)Ox5=v~+=S6i18)n)^S2j|jz@VAzrms(G>!m{v*e+)ah|*U3-P>h=zPm%t6*x1C z4;O8d@%q#*!?bx0<-Pha#b_3MLg3lo@-+iZ3@W!tfBp0x!!uz%A99Dq>v8WJIqbPRQM+fS|3n;Xm4#m4m80K7CNi&>I^Al^PaznI<=HV`x~q%gf} z3BB6}GIfz`o45nLn;CwGzsm+^nu8Q*^FIw9hpN!!?@^GH>B)vF zLcAU{!t=vt`?1?KIr{jpRH)17wGWX2;0MH$t@!1M?s7>gA<+2TIC=~)wE z%iU<4+Rd{s*@V+~Ft(n9WwliE77Eln49*I?u!j$Gig=x1I#Sw5Y6;9}3tcpJ?_(|= zkKu6bry16aLUT{|Pb0@8yXufr^oXyRcnR>=&!46}zWV1~BGk}N3Ye@@~>kI!^YQOoM$yI@NDxz@ab8G3~dF3m` z@fZ32aw_9I+ZH0AFEJhWQ!9T`Ba;^XFc?4OYii4e@n5jo)*MIS$QP#Ae9dt4OHLAx zO*ay|$X>dks~jP*_nTG$9@U|U|CTLjpI%X@{+3m>2es=JX6K-G82n90b{Ro~xCErLUM|Bv*#Stt0{ zql0czyy*kYxf&y|{Aadc#!_xMuJJ*r>m=ha@RqTPcRg?>{NR;pEIezZ1C_@)^V};T z2)fGcdf+H;pV7Z?k7c0fu(;dC&I?Vo$kCU6rT_4nH&lg#fiJ+CtmZX8+`df{ZR}}p z>jIAKw5=R}npe`nxbSEGz6%(Y?*bFWhmC&WR3shZR3n^;s%=O86LB74HyQ(d#hjvgDK`jUU<-~gv{IfPp#V#OJ9>bhvP z*Q^Kp`s}uE8;5R+QN!)e4ZBiU-yDqJ!TrlSS2x`drtO}dNR-!EuBy{vlL+q=phWrVouKx zu99&@a=6{A-({&h?e&;FVEIs$XSzQb{~pTWNU_6}KTKJpB@zd3@j94YV3v{RvYFMa g2fn4dJewz>+(aW}dKwP>%oDEz^WG61m@kX}0R_iA*Z=?k delta 3779 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 QvZ;?WdycTuvVn5`1!;e=oB#j- diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 581403b..bd1fe44 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -1443,13 +1443,13 @@ foreach_variable: } | '&' variable { - $$ = &ast.ExprReference{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprReference{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + AmpersandTkn: $1, + Var: $2, + } } | T_LIST '(' array_pair_list ')' { @@ -3581,13 +3581,13 @@ expr_without_variable: } | T_PRINT expr { - $$ = &ast.ExprPrint{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprPrint{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + PrintTkn: $1, + Expr: $2, + } } | T_YIELD { @@ -3759,23 +3759,24 @@ lexical_var: } | '&' T_VARIABLE { - identifier := &ast.Identifier{ + $$ = &ast.ExprReference{ Node: ast.Node{ - Position: position.NewTokenPosition($2), + Position: position.NewTokensPosition($1, $2), + }, + AmpersandTkn: $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, + }, }, - IdentifierTkn: $2, - Value: $2.Value, } - variable := &ast.ExprVariable{ast.Node{}, identifier} - $$ = &ast.ExprReference{ast.Node{}, variable} - - // save position - variable.GetNode().Position = position.NewTokenPosition($2) - $$.GetNode().Position = position.NewTokensPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating(variable, token.Start, $2.SkippedTokens) } ; @@ -4577,7 +4578,8 @@ array_pair: Node: ast.Node{ Position: position.NewTokenNodePosition($3, $4), }, - Var: $4, + AmpersandTkn: $3, + Var: $4, }, } } @@ -4591,7 +4593,8 @@ array_pair: Node: ast.Node{ Position: position.NewTokenNodePosition($1, $2), }, - Var: $2, + AmpersandTkn: $1, + Var: $2, }, } } @@ -4960,23 +4963,23 @@ internal_functions_in_yacc: } | T_REQUIRE expr { - $$ = &ast.ExprRequire{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprRequire{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + RequireTkn: $1, + Expr: $2, + } } | T_REQUIRE_ONCE expr { - $$ = &ast.ExprRequireOnce{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprRequireOnce{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + RequireOnceTkn: $1, + Expr: $2, + } } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index cadaa12..c6d4c8d 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -1288,7 +1288,8 @@ func (n *ExprPreInc) Accept(v NodeVisitor) { // ExprPrint node type ExprPrint struct { Node - Expr Vertex + PrintTkn *token.Token + Expr Vertex } func (n *ExprPrint) Accept(v NodeVisitor) { @@ -1310,7 +1311,8 @@ func (n *ExprPropertyFetch) Accept(v NodeVisitor) { // ExprReference node type ExprReference struct { Node - Var Vertex + AmpersandTkn *token.Token + Var Vertex } func (n *ExprReference) Accept(v NodeVisitor) { @@ -1320,7 +1322,8 @@ func (n *ExprReference) Accept(v NodeVisitor) { // ExprRequire node type ExprRequire struct { Node - Expr Vertex + RequireTkn *token.Token + Expr Vertex } func (n *ExprRequire) Accept(v NodeVisitor) { @@ -1330,7 +1333,8 @@ func (n *ExprRequire) Accept(v NodeVisitor) { // ExprRequireOnce node type ExprRequireOnce struct { Node - Expr Vertex + RequireOnceTkn *token.Token + Expr Vertex } func (n *ExprRequireOnce) Accept(v NodeVisitor) {