From 01d695c41641bd6b59bee4d6a0d06f4a94efa0be Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Fri, 4 Dec 2020 00:13:28 +0200 Subject: [PATCH] [refactoring] update ast structure of "ArrayDimFetch", "UnaryMinus", "ExprUnaryPlus" and "Variable" nodes --- internal/php5/php5.go | Bin 279157 -> 276089 bytes internal/php5/php5.y | 580 ++++++++++++++++++++---------------------- internal/php7/php7.go | Bin 227356 -> 226870 bytes internal/php7/php7.y | 368 ++++++++++++++------------- pkg/ast/node.go | 19 +- 5 files changed, 477 insertions(+), 490 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index e289a39460857f0382b93f1310b412be43a4b2bc..e6a9141b2d7608c887850fbc0a6f48b3854bf5d2 100644 GIT binary patch delta 11344 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 delta 13011 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 diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 35a1e60..3990144 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -15,7 +15,6 @@ import ( node ast.Vertex token *token.Token list []ast.Vertex - simpleIndirectReference simpleIndirectReference ClosureUse *ast.ExprClosureUse } @@ -260,7 +259,7 @@ import ( %type method_or_not array_method_dereference object_property object_dim_list dynamic_class_name_variable_property %type dynamic_class_name_variable_properties variable_properties -%type simple_indirect_reference +%type simple_indirect_reference %type is_reference is_variadic %% @@ -1206,34 +1205,31 @@ catch_statement: } | T_CATCH '(' fully_qualified_class_name T_VARIABLE ')' '{' inner_statement_list '}' additional_catches { - identifier := &ast.Identifier{ - Node: ast.Node{ - Position: position.NewTokenPosition($4), - }, - IdentifierTkn: $4, - Value: $4.Value, - } - variable := &ast.ExprVariable{ast.Node{}, identifier} catch := &ast.StmtCatch{ Node: ast.Node{ Position: position.NewTokensPosition($1, $8), }, - CatchTkn: $1, - OpenParenthesisTkn: $2, - Types: []ast.Vertex{$3}, - Var: variable, + CatchTkn: $1, + OpenParenthesisTkn: $2, + Types: []ast.Vertex{$3}, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + IdentifierTkn: $4, + Value: $4.Value, + }, + }, CloseParenthesisTkn: $5, OpenCurlyBracketTkn: $6, Stmts: $7, CloseCurlyBracketTkn: $8, } $$ = append([]ast.Vertex{catch}, $9...) - - // save position - variable.GetNode().Position = position.NewTokenPosition($4) - - // save comments - yylex.(*Parser).setFreeFloating(variable, token.Start, $4.SkippedTokens) } ; @@ -1281,33 +1277,30 @@ non_empty_additional_catches: additional_catch: T_CATCH '(' fully_qualified_class_name T_VARIABLE ')' '{' inner_statement_list '}' { - identifier := &ast.Identifier{ - Node: ast.Node{ - Position: position.NewTokenPosition($4), - }, - IdentifierTkn: $4, - Value: $4.Value, - } - variable := &ast.ExprVariable{ast.Node{}, identifier} $$ = &ast.StmtCatch{ Node: ast.Node{ Position: position.NewTokensPosition($1, $8), }, - CatchTkn: $1, - OpenParenthesisTkn: $2, - Types: []ast.Vertex{$3}, - Var: variable, + CatchTkn: $1, + OpenParenthesisTkn: $2, + Types: []ast.Vertex{$3}, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + IdentifierTkn: $4, + Value: $4.Value, + }, + }, CloseParenthesisTkn: $5, OpenCurlyBracketTkn: $6, Stmts: $7, CloseCurlyBracketTkn: $8, } - - // save position - variable.GetNode().Position = position.NewTokenPosition($4) - - // save comments - yylex.(*Parser).setFreeFloating(variable, token.Start, $4.SkippedTokens) } ; @@ -2032,19 +2025,20 @@ non_empty_parameter_list: parameter: optional_class_type is_reference is_variadic T_VARIABLE { - identifier := &ast.Identifier{ + var variable ast.Vertex + variable = &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($4), }, - IdentifierTkn: $4, - Value: $4.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + IdentifierTkn: $4, + Value: $4.Value, + }, } - var variable ast.Vertex - variable = &ast.ExprVariable{ast.Node{}, identifier} - variable.GetNode().Position = position.NewTokenPosition($4) - yylex.(*Parser).setFreeFloating(variable, token.Start, $4.SkippedTokens) - if $3 != nil { variable = &ast.Variadic{ Node: ast.Node{ @@ -2084,20 +2078,20 @@ parameter: } | optional_class_type is_reference is_variadic T_VARIABLE '=' expr { - identifier := &ast.Identifier{ + var variable ast.Vertex + variable = &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($4), }, - IdentifierTkn: $4, - Value: $4.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($4), + }, + IdentifierTkn: $4, + Value: $4.Value, + }, } - var variable ast.Vertex - variable = &ast.ExprVariable{ast.Node{}, identifier} - variable.GetNode().Position = position.NewTokenPosition($4) - yylex.(*Parser).setFreeFloating(variable, token.Start, $4.SkippedTokens) - yylex.(*Parser).setFreeFloating(variable, token.End, $5.SkippedTokens) - if $3 != nil { variable = &ast.Variadic{ Node: ast.Node{ @@ -2290,42 +2284,45 @@ global_var_list: global_var: T_VARIABLE { - name := &ast.Identifier{ + $$ = &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, } - $$ = &ast.ExprVariable{ast.Node{}, name} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | '$' r_variable { - $$ = &ast.ExprVariable{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + DollarTkn: $1, + VarName: $2, + } } | '$' '{' expr '}' { - $$ = &ast.ExprVariable{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($3, token.Start, append($2.SkippedTokens, $3.GetNode().Tokens[token.Start]...)) - yylex.(*Parser).setFreeFloatingTokens($3, token.End, append($3.GetNode().Tokens[token.End], $4.SkippedTokens...)) + $$ = &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + DollarTkn: $1, + VarName: &ast.ParserBrackets{ + Node: ast.Node{ + Position: position.NewTokensPosition($2, $4), + }, + OpenBracketTkn: $2, + Child: $3, + CloseBracketTkn: $4, + }, + } } ; @@ -2333,117 +2330,101 @@ global_var: static_var_list: static_var_list ',' T_VARIABLE { - identifier := &ast.Identifier{ - Node: ast.Node{ - Position: position.NewTokenPosition($3), - }, - IdentifierTkn: $3, - Value: $3.Value, - } - variable := &ast.ExprVariable{ast.Node{}, identifier} - $1.(*ast.StmtStatic).Vars = append($1.(*ast.StmtStatic).Vars, &ast.StmtStaticVar{ Node: ast.Node{ Position: position.NewTokenPosition($3), }, - Var: variable, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, + }, + }, }) $1.(*ast.StmtStatic).SeparatorTkns = append($1.(*ast.StmtStatic).SeparatorTkns, $2) $$ = $1 - - // save position - variable.GetNode().Position = position.NewTokenPosition($3) - - // save comments - yylex.(*Parser).setFreeFloating(variable, token.Start, $3.SkippedTokens) } | static_var_list ',' T_VARIABLE '=' static_scalar { - identifier := &ast.Identifier{ - Node: ast.Node{ - Position: position.NewTokenPosition($3), - }, - IdentifierTkn: $3, - Value: $3.Value, - } - variable := &ast.ExprVariable{ast.Node{}, identifier} - $1.(*ast.StmtStatic).Vars = append($1.(*ast.StmtStatic).Vars, &ast.StmtStaticVar{ Node: ast.Node{ Position: position.NewTokenNodePosition($3, $5), }, - Var: variable, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($3), + }, + IdentifierTkn: $3, + Value: $3.Value, + }, + }, EqualTkn: $4, Expr: $5, }) $1.(*ast.StmtStatic).SeparatorTkns = append($1.(*ast.StmtStatic).SeparatorTkns, $2) $$ = $1 - - // save position - variable.GetNode().Position = position.NewTokenPosition($3) - - // save comments - yylex.(*Parser).setFreeFloating(variable, token.Start, $3.SkippedTokens) } | T_VARIABLE { - identifier := &ast.Identifier{ - Node: ast.Node{ - Position: position.NewTokenPosition($1), - }, - IdentifierTkn: $1, - Value: $1.Value, - } - variable := &ast.ExprVariable{ast.Node{}, identifier} - $$ = &ast.StmtStatic{ Vars: []ast.Vertex{ &ast.StmtStaticVar{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - Var: variable, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, + }, }, }, } - - // save position - variable.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating(variable, token.Start, $1.SkippedTokens) } | T_VARIABLE '=' static_scalar { - identifier := &ast.Identifier{ - Node: ast.Node{ - Position: position.NewTokenPosition($1), - }, - IdentifierTkn: $1, - Value: $1.Value, - } - variable := &ast.ExprVariable{ast.Node{}, identifier} - $$ = &ast.StmtStatic{ Vars: []ast.Vertex{ &ast.StmtStaticVar{ Node: ast.Node{ Position: position.NewTokenNodePosition($1, $3), }, - Var: variable, + Var: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, + }, EqualTkn: $2, Expr: $3, }, }, } - - // save position - variable.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating(variable, token.Start, $1.SkippedTokens) } ; @@ -3609,23 +3590,23 @@ expr_without_variable: } | '+' expr %prec T_INC { - $$ = &ast.ExprUnaryPlus{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprUnaryPlus{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + PlusTkn: $1, + Expr: $2, + } } | '-' expr %prec T_INC { - $$ = &ast.ExprUnaryMinus{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprUnaryMinus{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + MinusTkn: $1, + Expr: $2, + } } | '!' expr { @@ -5184,23 +5165,23 @@ static_operation: } | '+' static_scalar_value { - $$ = &ast.ExprUnaryPlus{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprUnaryPlus{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + PlusTkn: $1, + Expr: $2, + } } | '-' static_scalar_value { - $$ = &ast.ExprUnaryMinus{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokenNodePosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ExprUnaryMinus{ + Node: ast.Node{ + Position: position.NewTokenNodePosition($1, $2), + }, + MinusTkn: $1, + Expr: $2, + } } | '(' static_scalar_value ')' { @@ -5267,20 +5248,18 @@ general_constant: scalar: T_STRING_VARNAME { - name := &ast.Identifier{ + $$ = &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, } - $$ = &ast.ExprVariable{ast.Node{}, name} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | general_constant { @@ -5676,13 +5655,13 @@ variable_without_objects: } | simple_indirect_reference reference_variable { - $1.last.VarName = $2 - - for _, n := range($1.all) { - n.GetNode().Position = position.NewNodesPosition(n, $2) + for i := len($1)-1; i>=0; i-- { + $1[i].(*ast.ExprVariable).VarName = $2 + $1[i].(*ast.ExprVariable).Node.Position = position.NewNodesPosition($1[i], $2) + $2 = $1[i] } - $$ = $1.all[0] + $$ = $1[0] } ; @@ -5768,13 +5747,13 @@ base_variable: } | simple_indirect_reference reference_variable { - $1.last.VarName = $2 - - for _, n := range($1.all) { - n.GetNode().Position = position.NewNodesPosition(n, $2) + for i := len($1)-1; i>=0; i-- { + $1[i].(*ast.ExprVariable).VarName = $2 + $1[i].(*ast.ExprVariable).Node.Position = position.NewNodesPosition($1[i], $2) + $2 = $1[i] } - $$ = $1.all[0] + $$ = $1[0] } | static_member { @@ -5817,32 +5796,35 @@ reference_variable: compound_variable: T_VARIABLE { - name := &ast.Identifier{ + $$ = &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, } - $$ = &ast.ExprVariable{ast.Node{}, name} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | '$' '{' expr '}' { - $$ = &ast.ExprVariable{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($3, token.Start, append($2.SkippedTokens, $3.GetNode().Tokens[token.Start]...)) - yylex.(*Parser).setFreeFloatingTokens($3, token.End, append($3.GetNode().Tokens[token.End], $4.SkippedTokens...)) + $$ = &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + DollarTkn: $1, + VarName: &ast.ParserBrackets{ + Node: ast.Node{ + Position: position.NewTokensPosition($2, $4), + }, + OpenBracketTkn: $2, + Child: $3, + CloseBracketTkn: $4, + }, + } } ; @@ -5945,29 +5927,23 @@ variable_name: simple_indirect_reference: '$' { - n := &ast.ExprVariable{ast.Node{}, nil} - $$ = simpleIndirectReference{[]*ast.ExprVariable{n}, n} - - // save position - n.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating(n, token.Start, $1.SkippedTokens) + $$ = []ast.Vertex{ + &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + DollarTkn: $1, + }, + } } | simple_indirect_reference '$' { - n := &ast.ExprVariable{ast.Node{}, nil} - - $1.last.VarName = n - $1.all = append($1.all, n) - $1.last = n - $$ = $1 - - // save position - n.GetNode().Position = position.NewTokenPosition($2) - - // save comments - yylex.(*Parser).setFreeFloating(n, token.Start, $2.SkippedTokens) + $$ = append($1, &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewTokenPosition($2), + }, + DollarTkn: $2, + }) } ; @@ -6229,20 +6205,18 @@ encaps_list: encaps_var: T_VARIABLE { - name := &ast.Identifier{ + $$ = &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, } - $$ = &ast.ExprVariable{ast.Node{}, name} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | T_VARIABLE '[' encaps_var_offset ']' { @@ -6297,45 +6271,28 @@ encaps_var: } | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { - variable := &ast.ExprVariable{ast.Node{}, $2} - - $$ = variable - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setToken($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.End, $3.SkippedTokens) + $$ = &ast.ParserBrackets{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBracketTkn: $1, + Child: &ast.ExprVariable{ + Node: ast.Node{ + Position: position.NewNodePosition($2), + }, + VarName: $2, + }, + CloseBracketTkn: $3, + } } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { - name := &ast.Identifier{ + $$ = &ast.ParserBrackets{ Node: ast.Node{ - Position: position.NewTokenPosition($2), + Position: position.NewTokensPosition($1, $3), }, - IdentifierTkn: $2, - Value: $2.Value, - } - variable := &ast.ExprVariable{ast.Node{}, name} - - $$ = variable - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setToken($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.End, $3.SkippedTokens) - } - | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' - { - $$ = &ast.ExprArrayDimFetch{ - Node: ast.Node{ - Position: position.NewTokensPosition($1, $6), - }, - OpenCurlyBracketTkn: $1, - Var: &ast.ExprVariable{ + OpenBracketTkn: $1, + Child: &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($2), }, @@ -6347,19 +6304,49 @@ encaps_var: Value: $2.Value, }, }, - OpenBracketTkn: $3, - Dim: $4, - CloseBracketTkn: $5, - CloseCurlyBracketTkn: $6, + CloseBracketTkn: $3, + } + } + | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' + { + $$ = &ast.ParserBrackets{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $6), + }, + OpenBracketTkn: $1, + Child: &ast.ExprArrayDimFetch{ + Node: ast.Node{ + Position: position.NewTokensPosition($2, $5), + }, + 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, + }, + }, + OpenBracketTkn: $3, + Dim: $4, + CloseBracketTkn: $5, + }, + CloseBracketTkn: $6, } } | T_CURLY_OPEN variable '}' { - $$ = $2; - - // save comments - yylex.(*Parser).setToken($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloatingTokens($$, token.End, $3.SkippedTokens) + $$ = &ast.ParserBrackets{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBracketTkn: $1, + Child: $2, + CloseBracketTkn: $3, + } } ; @@ -6403,20 +6390,18 @@ encaps_var_offset: } | T_VARIABLE { - identifier := &ast.Identifier{ + $$ = &ast.ExprVariable{ Node: ast.Node{ Position: position.NewTokenPosition($1), }, - IdentifierTkn: $1, - Value: $1.Value, + VarName: &ast.Identifier{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + IdentifierTkn: $1, + Value: $1.Value, + }, } - $$ = &ast.ExprVariable{ast.Node{}, identifier} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } ; @@ -6617,8 +6602,3 @@ class_name_scalar: ; %% - -type simpleIndirectReference struct { - all []*ast.ExprVariable - last *ast.ExprVariable -} diff --git a/internal/php7/php7.go b/internal/php7/php7.go index db2863b83e139ce0a0aeaa1c50950a308a864e97..351c5c167838cd6f69c547a5c24abcad62bd400e 100644 GIT binary patch delta 12051 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