From b90400d993e3792158d9964916113bb0b6f950c6 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Tue, 1 Dec 2020 09:51:47 +0200 Subject: [PATCH] [refactoring] update ast structure of "BitwiseNot", "BooleanNot", "ClassConstFetch" and "Clone" nodes --- internal/php5/php5.go | Bin 281709 -> 279588 bytes internal/php5/php5.y | 185 ++++++++++++++++++++---------------------- internal/php7/php7.go | Bin 230494 -> 229978 bytes internal/php7/php7.y | 88 ++++++++++---------- pkg/ast/node.go | 14 ++-- 5 files changed, 142 insertions(+), 145 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 15333e8fb87dd725d30af520cc36111d63cb8e2a..400b6321ab4933a50290f567732a20071c11e3c0 100644 GIT binary patch delta 8218 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 UJ^`6J7rj9KA3lX*mjRaVpC1lqSO5S3 delta 9287 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 CKZP*> diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 6989c2c..e06b9ac 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -3220,13 +3220,13 @@ expr_without_variable: } | T_CLONE expr { - $$ = &ast.ExprClone{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprClone{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + CloneTkn: $1, + Expr: $2, + } } | variable T_PLUS_EQUAL expr { @@ -3609,23 +3609,23 @@ expr_without_variable: } | '!' expr { - $$ = &ast.ExprBooleanNot{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprBooleanNot{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + ExclamationTkn: $1, + Expr: $2, + } } | '~' expr { - $$ = &ast.ExprBitwiseNot{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprBitwiseNot{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + TildaTkn: $1, + Expr: $2, + } } | expr T_IS_IDENTICAL expr { @@ -4665,21 +4665,20 @@ common_scalar: static_class_constant: class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { - target := &ast.Identifier{ + $$ = &ast.ExprClassConstFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + ConstantName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.ExprClassConstFetch{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } ; @@ -4867,23 +4866,23 @@ static_operation: } | '!' static_scalar_value { - $$ = &ast.ExprBooleanNot{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprBooleanNot{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + ExclamationTkn: $1, + Expr: $2, + } } | '~' static_scalar_value { - $$ = &ast.ExprBitwiseNot{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprBitwiseNot{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + TildaTkn: $1, + Expr: $2, + } } | static_scalar_value '|' static_scalar_value { @@ -6445,81 +6444,77 @@ isset_variable: class_constant: class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { - target := &ast.Identifier{ + $$ = &ast.ExprClassConstFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + ConstantName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.ExprClassConstFetch{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { - target := &ast.Identifier{ + $$ = &ast.ExprClassConstFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + ConstantName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.ExprClassConstFetch{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } ; static_class_name_scalar: class_name T_PAAMAYIM_NEKUDOTAYIM T_CLASS { - target := &ast.Identifier{ + $$ = &ast.ExprClassConstFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + ConstantName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.ExprClassConstFetch{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } ; class_name_scalar: class_name T_PAAMAYIM_NEKUDOTAYIM T_CLASS { - target := &ast.Identifier{ + $$ = &ast.ExprClassConstFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + ConstantName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.ExprClassConstFetch{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } ; diff --git a/internal/php7/php7.go b/internal/php7/php7.go index a4b4d5db4675dcb044fc92c950f5610a23b62155..387a16334850235098a4fd2b51ca2f4a6243ed3c 100644 GIT binary patch delta 1671 zcmbtUTTE0}6wN-{0fxW;J_d1M?toDXRGkONpjD@UK&cj_q(&;?p;Re|fHYAn@kP}S zjc6N|O{>ME#-El9HT8tXHW>B8q>a=zHnk7b#-vRX%A}FscHfx+NyA_N?!J4kb=KK? z?eptN+k;+P@KhS*9Xp+N;&dA6(`o9?dVH5h`FMC;d2ld9iI(EFJ?+gn8=|FHQLL;m z_EG}whA2U|)~Y7~EKXH3%B>srZEtJb-PqlNBTvbR!GMZ~{(zF6;n4h{>iiGPQq$75 zqjA<#{=A@uyRc}I=E60iEXbbENmyoZ9nLtF9Rn{Z3$4Z_gIzdO!7*rkPG!aw?`hxL z-PqoZ;3=v{z)(GSI+x4Pxj{MpA5H&)2#p;sC#NIH&ZW3(68NxiJpb6eJkux&zxsx~Gv-LvSSH@QDG`N*051y^cz(hG)^q`B|2tysp z1$Q&AMMIV<#ur&Ufk%hg(03N|1De*Hf%{8@FBCsT|H@JcMRW8aTM-PDREQ zxJq*((D9p!2*Isv#oU$Aj_E27_YfxBqUOdGW$2ImTuS)T%|3kNZ`26u!>)QyNp%oA_+jX#kKOypHS(K|$yPM1U zjI-w;Sus{A7jCGaSd3JwIr!@arC{J?GjW-c_0P?`O_|Oxko-EuX>ndg*cT2YCvwb{ z3oT4kpfA43?m|E+3sasJg&{(Fm)OF5dh}=)k12BN;9FeH=Cfev%>BG0JZM9I ze1LaRB)gLI3q5kna83Uaj@7+~qJ}W89Wl#%kw#xRDvd5MCs2UCNAxa+kI7-OWb!=L K$Vi{>W$(YnBO!wT delta 1678 zcmcIkYfzMB6rS@QVC4>qAObFs2)YQn%WaW_Ray|!;Swc^m^Z*MbG>9ZWCLQ8HIZn> zGbuS#(?4pkCf*-76U=B%O%eRe8bZ4{jTh*LO*569Z$H4DvA_NJX1;TI-*e9MJm8^P7MTzblQsIQjdKIGMwx}Q7dcla{m^!UOaP_>}?`P{j zdX+vHba=pi)@Uw|bcO^6x5*d$zm__)fXm^~Di%}W zoQTjEE<@^{G-GxeX7oKV-5-%m6(h+Pm(M0QEtF_=4Cmm7h3vufYqNo;VkOXVh7z=n zyFj)czJZ#lhQurDfqc}1Ch}q8!0u@We ztd5t!$Wnex<=D*<16z5qcBk<>M7jE#C;1n`4O9i+MI)gntez3%)H9Nt|ntIkOINDDrI5cv}e8;n@B+|o!s9O3?i0(4b2 zA0^z%60Cp!QYGWFn<`KrbFrID*<7`A8M*wRb~_C4etj6NWlouVyhZNF+{LR+1P61( z_wFEBF+1EQLVmss<@C*LlrJOLcPKleUGi(r>hHc?DEb&VDZE#%;xHeeRz%g)Jk&R_ z4c?uchRIQ7(K37y`N^(qwUjA9${jU{XN#rj(=LjGyOx6g>$rj4J*2w@hX*>k;Fgy1 z^v`aVwtZuWLPF5EmY?t|^xInYh#a+}luwZ%vjjA_R3%n;r1OtUOpO%7TR;Kmdq&nX zIb4NfUKw98;hHEHxQ2!(9o6N$&*Vl__25LBcCRy76Gi)kxT?pd0@1x*h<)Qjvfw?5 z_FR&(+s~^YWK?h*Cf0M)+)W*re4O8&Gm8ywR_gm3xK7PEOASFiik%y|0p2=J)!r&T zLW1A4MXiUUM(`V-6#Ry_kww2%!|Oz(xR|Aikyy*+qL4LDQ!0{HP>AlX<>DC$+Y}r} zDRFK|c4P7~#pH)$WDN@*`H{iIgu z(Rx0sf^zM~6Nc0EoP|?EDpvPz<9-s|$ig)1;qAOZN{Y~ZyR2oG1K1>Vj(9D)N%GN| zfXEh}kAhaJ!{5!^ONIK}9)4M=T)R%$%bS?;{hAm^=S++RsxS=QP}k8SkFANGZ;!^j z{GB4F?mxsej5A@vhT%tFD_iu^7r24oEShm@aqb~AIh(YrjZ>BRn8=YJ-FA$3nq=$0 mUNRE%OrYOy7oZCbLJH7*o!-Q!9n!+_=VaYwxL9NyXXn4;5+$wx diff --git a/internal/php7/php7.y b/internal/php7/php7.y index ffe6f94..7b12137 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -2866,13 +2866,13 @@ expr_without_variable: } | T_CLONE expr { - $$ = &ast.ExprClone{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprClone{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + CloneTkn: $1, + Expr: $2, + } } | variable T_PLUS_EQUAL expr { @@ -3267,23 +3267,23 @@ expr_without_variable: } | '!' expr { - $$ = &ast.ExprBooleanNot{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprBooleanNot{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + ExclamationTkn: $1, + Expr: $2, + } } | '~' expr { - $$ = &ast.ExprBitwiseNot{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprBitwiseNot{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + TildaTkn: $1, + Expr: $2, + } } | expr T_IS_IDENTICAL expr { @@ -4112,39 +4112,37 @@ constant: } | class_name T_PAAMAYIM_NEKUDOTAYIM identifier { - target := &ast.Identifier{ + $$ = &ast.ExprClassConstFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + ConstantName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.ExprClassConstFetch{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM identifier { - target := &ast.Identifier{ + $$ = &ast.ExprClassConstFetch{ Node: ast.Node{ - Position: position.NewTokenPosition($3), + Position: position.NewNodeTokenPosition($1, $3), + }, + Class: $1, + DoubleColonTkn: $2, + ConstantName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, }, - IdentifierTkn: $3, - Value: $3.Value, } - $$ = &ast.ExprClassConstFetch{ast.Node{}, $1, target} - - // save position - $$.GetNode().Position = position.NewNodeTokenPosition($1, $3) - - // save comments - yylex.(*Parser).MoveFreeFloating($1, $$) - yylex.(*Parser).setFreeFloating($$, token.Name, $2.SkippedTokens) } ; diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 990171c..31f5458 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -1000,7 +1000,8 @@ func (n *ExprArrowFunction) Accept(v NodeVisitor) { // ExprBitwiseNot node type ExprBitwiseNot struct { Node - Expr Vertex + TildaTkn *token.Token + Expr Vertex } func (n *ExprBitwiseNot) Accept(v NodeVisitor) { @@ -1010,7 +1011,8 @@ func (n *ExprBitwiseNot) Accept(v NodeVisitor) { // ExprBooleanNot node type ExprBooleanNot struct { Node - Expr Vertex + ExclamationTkn *token.Token + Expr Vertex } func (n *ExprBooleanNot) Accept(v NodeVisitor) { @@ -1020,8 +1022,9 @@ func (n *ExprBooleanNot) Accept(v NodeVisitor) { // ExprClassConstFetch node type ExprClassConstFetch struct { Node - Class Vertex - ConstantName Vertex + Class Vertex + DoubleColonTkn *token.Token + ConstantName Vertex } func (n *ExprClassConstFetch) Accept(v NodeVisitor) { @@ -1031,7 +1034,8 @@ func (n *ExprClassConstFetch) Accept(v NodeVisitor) { // ExprClone node type ExprClone struct { Node - Expr Vertex + CloneTkn *token.Token + Expr Vertex } func (n *ExprClone) Accept(v NodeVisitor) {