From 47b974a3a4b06eb7ed69763ef6eff5eeac006e98 Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Mon, 30 Nov 2020 23:42:56 +0200 Subject: [PATCH] [refactoring] update ast structure of "array" and "list" nodes --- internal/php5/php5.go | Bin 282363 -> 285766 bytes internal/php5/php5.y | 256 ++++++++++++++++++++++------------ internal/php7/php7.go | Bin 233605 -> 233306 bytes internal/php7/php7.y | 167 ++++++++++++---------- pkg/ast/ast.go | 2 - pkg/ast/node.go | 32 ++--- pkg/ast/traverser/dfs.go | 28 ---- pkg/ast/visitor/dump.go | 12 -- pkg/ast/visitor/null.go | 8 -- pkg/printer/pretty_printer.go | 20 --- pkg/printer/printer.go | 28 ---- 11 files changed, 267 insertions(+), 286 deletions(-) diff --git a/internal/php5/php5.go b/internal/php5/php5.go index e0f706672208dfb76d0b02449f6d5e4e66d5ffad..02fee28e28b405cb478392fb497f54438f618a99 100644 GIT binary patch delta 16509 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 AQUCw| delta 14061 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 diff --git a/internal/php5/php5.y b/internal/php5/php5.y index 19cb72b..5a00d67 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -238,9 +238,9 @@ import ( %type trait_method_reference_fully_qualified trait_method_reference trait_modifiers member_modifier method %type static_scalar_value static_operation static_var_list global_var_list %type ctor_arguments function_call_parameter_list echo_expr_list class_variable_declaration -%type trait_adaptations unset_variables declare_list -%type switch_case_list non_empty_function_call_parameter_list -%type method_body trait_reference_list +%type trait_adaptations unset_variables declare_list non_empty_array_pair_list array_pair_list +%type switch_case_list non_empty_function_call_parameter_list assignment_list +%type method_body trait_reference_list static_array_pair_list non_empty_static_array_pair_list %type foreach_statement for_statement while_statement %type foreach_variable foreach_optional_arg %type extends_from interface_list trait_list @@ -249,13 +249,13 @@ import ( %type lexical_vars %type top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations -%type inner_statement_list encaps_list isset_variables non_empty_array_pair_list -%type array_pair_list assignment_list lexical_var_list elseif_list new_elseif_list non_empty_for_expr +%type inner_statement_list encaps_list isset_variables +%type lexical_var_list elseif_list new_elseif_list non_empty_for_expr %type for_expr case_list catch_statement additional_catches %type non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list %type class_statement_list variable_modifiers method_modifiers %type trait_adaptation_list non_empty_trait_adaptation_list -%type non_empty_member_modifiers backticks_expr static_array_pair_list non_empty_static_array_pair_list +%type non_empty_member_modifiers backticks_expr %type chaining_dereference chaining_instance_call chaining_method_or_property instance_call variable_property %type method_or_not array_method_dereference object_property object_dim_list dynamic_class_name_variable_property @@ -1620,15 +1620,23 @@ foreach_variable: } | T_LIST '(' assignment_list ')' { - $$ = &ast.ExprList{ast.Node{}, $3} + pairList := $3.(*ast.ParserSeparatedList) + fistPair := pairList.Items[0].(*ast.ExprArrayItem) - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) + if fistPair.Key == nil && fistPair.Val == nil && len(pairList.Items) == 1 { + pairList.Items = nil + } - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.List, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $4.SkippedTokens) + $$ = &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ListTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } } ; @@ -3129,7 +3137,23 @@ new_expr: expr_without_variable: T_LIST '(' assignment_list ')' '=' expr { - listNode := &ast.ExprList{ast.Node{}, $3} + pairList := $3.(*ast.ParserSeparatedList) + fistPair := pairList.Items[0].(*ast.ExprArrayItem) + + if fistPair.Key == nil && fistPair.Val == nil && len(pairList.Items) == 1 { + pairList.Items = nil + } + + listNode := &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ListTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } $$ = &ast.ExprAssign{ast.Node{}, listNode, $6} // save position @@ -4051,26 +4075,28 @@ combined_scalar_offset: combined_scalar: T_ARRAY '(' array_pair_list ')' { - $$ = &ast.ExprArray{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Array, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $4.SkippedTokens) + $$ = &ast.ExprArray{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ArrayTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } } | '[' array_pair_list ']' { - $$ = &ast.ExprShortArray{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $3.SkippedTokens) + $$ = &ast.ExprArray{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBracketTkn: $1, + Items: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $3, + } } ; @@ -4710,26 +4736,28 @@ static_scalar_value: } | T_ARRAY '(' static_array_pair_list ')' { - $$ = &ast.ExprArray{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Array, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $4.SkippedTokens) + $$ = &ast.ExprArray{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ArrayTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } } | '[' static_array_pair_list ']' { - $$ = &ast.ExprShortArray{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $3.SkippedTokens) + $$ = &ast.ExprArray{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBracketTkn: $1, + Items: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $3, + } } | static_class_constant { @@ -5229,16 +5257,16 @@ scalar: static_array_pair_list: /* empty */ { - $$ = nil + $$ = &ast.ParserSeparatedList{} } | non_empty_static_array_pair_list possible_comma { - $$ = $1 - - // save comments if $2 != nil { - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, &ast.ExprArrayItem{}) } + + $$ = $1 } ; @@ -5257,32 +5285,41 @@ non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_scalar_value T_DOUBLE_ARROW static_scalar_value { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, $3, $5} - $$ = append($1, arrayItem) + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, arrayItem) + + $$ = $1 // save position arrayItem.GetNode().Position = position.NewNodesPosition($3, $5) // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) yylex.(*Parser).MoveFreeFloating($3, arrayItem) yylex.(*Parser).setFreeFloating(arrayItem, token.Expr, $4.SkippedTokens) } | non_empty_static_array_pair_list ',' static_scalar_value { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, $3} - $$ = append($1, arrayItem) + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, arrayItem) + + $$ = $1 // save position arrayItem.GetNode().Position = position.NewNodePosition($3) // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) yylex.(*Parser).MoveFreeFloating($3, arrayItem) } | static_scalar_value T_DOUBLE_ARROW static_scalar_value { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, $1, $3} - $$ = []ast.Vertex{arrayItem} + + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{arrayItem}, + } // save position arrayItem.GetNode().Position = position.NewNodesPosition($1, $3) @@ -5294,7 +5331,10 @@ non_empty_static_array_pair_list: | static_scalar_value { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, $1} - $$ = []ast.Vertex{arrayItem} + + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{arrayItem}, + } // save position arrayItem.GetNode().Position = position.NewNodePosition($1) @@ -5804,21 +5844,15 @@ simple_indirect_reference: assignment_list: assignment_list ',' assignment_list_element { - if len($1) == 0 { - $1 = []ast.Vertex{&ast.ExprArrayItem{ast.Node{}, false, nil, nil}} - } + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, $3) - $$ = append($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) + $$ = $1 } | assignment_list_element { - if $1.(*ast.ExprArrayItem).Key == nil && $1.(*ast.ExprArrayItem).Val == nil { - $$ = []ast.Vertex{} - } else { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, } } ; @@ -5837,7 +5871,23 @@ assignment_list_element: } | T_LIST '(' assignment_list ')' { - listNode := &ast.ExprList{ast.Node{}, $3} + pairList := $3.(*ast.ParserSeparatedList) + fistPair := pairList.Items[0].(*ast.ExprArrayItem) + + if fistPair.Key == nil && fistPair.Val == nil && len(pairList.Items) == 1 { + pairList.Items = nil + } + + listNode := &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ListTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } $$ = &ast.ExprArrayItem{ast.Node{}, false, nil, listNode} // save position @@ -5859,20 +5909,16 @@ assignment_list_element: array_pair_list: /* empty */ { - $$ = []ast.Vertex{} + $$ = &ast.ParserSeparatedList{} } | non_empty_array_pair_list possible_comma { + if $2 != nil { + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, &ast.ExprArrayItem{}) + } + $$ = $1 - - if $2 != nil { - $$ = append($1, &ast.ExprArrayItem{ast.Node{}, false, nil, nil}) - } - - // save comments - if $2 != nil { - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) - } } ; @@ -5880,32 +5926,41 @@ non_empty_array_pair_list: non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, $3, $5} - $$ = append($1, arrayItem) + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, arrayItem) + + $$ = $1 // save position arrayItem.GetNode().Position = position.NewNodesPosition($3, $5) // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) yylex.(*Parser).MoveFreeFloating($3, arrayItem) yylex.(*Parser).setFreeFloating(arrayItem, token.Expr, $4.SkippedTokens) } | non_empty_array_pair_list ',' expr { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, $3} - $$ = append($1, arrayItem) + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, arrayItem) + + $$ = $1 // save position arrayItem.GetNode().Position = position.NewNodePosition($3) // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) yylex.(*Parser).MoveFreeFloating($3, arrayItem) } | expr T_DOUBLE_ARROW expr { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, $1, $3} - $$ = []ast.Vertex{arrayItem} + + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{arrayItem}, + } // save position arrayItem.GetNode().Position = position.NewNodesPosition($1, $3) @@ -5917,7 +5972,10 @@ non_empty_array_pair_list: | expr { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, $1} - $$ = []ast.Vertex{arrayItem} + + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{arrayItem}, + } // save position arrayItem.GetNode().Position = position.NewNodePosition($1) @@ -5929,14 +5987,17 @@ non_empty_array_pair_list: { reference := &ast.ExprReference{ast.Node{}, $6} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, $3, reference} - $$ = append($1, arrayItem) + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, arrayItem) + + $$ = $1 // save position reference.GetNode().Position = position.NewTokenNodePosition($5, $6) arrayItem.GetNode().Position = position.NewNodesPosition($3, $6) // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) yylex.(*Parser).MoveFreeFloating($3, arrayItem) yylex.(*Parser).setFreeFloating(arrayItem, token.Expr, $4.SkippedTokens) yylex.(*Parser).setFreeFloating(reference, token.Start, $5.SkippedTokens) @@ -5945,21 +6006,27 @@ non_empty_array_pair_list: { reference := &ast.ExprReference{ast.Node{}, $4} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, reference} - $$ = append($1, arrayItem) + + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, arrayItem) + + $$ = $1 // save position reference.GetNode().Position = position.NewTokenNodePosition($3, $4) arrayItem.GetNode().Position = position.NewTokenNodePosition($3, $4) // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) yylex.(*Parser).setFreeFloating(arrayItem, token.Start, $3.SkippedTokens) } | expr T_DOUBLE_ARROW '&' w_variable { reference := &ast.ExprReference{ast.Node{}, $4} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, $1, reference} - $$ = []ast.Vertex{arrayItem} + + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{arrayItem}, + } // save position reference.GetNode().Position = position.NewTokenNodePosition($3, $4) @@ -5974,7 +6041,10 @@ non_empty_array_pair_list: { reference := &ast.ExprReference{ast.Node{}, $2} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, reference} - $$ = []ast.Vertex{arrayItem} + + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{arrayItem}, + } // save position reference.GetNode().Position = position.NewTokenNodePosition($1, $2) diff --git a/internal/php7/php7.go b/internal/php7/php7.go index f1be513b8e453605caa05a0e97a6a11db0fb3400..ba1e751d6b2de139a2f9582bec51db57003c4523 100644 GIT binary patch delta 9135 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 IA5gyk0U&d-dH?_b diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 062068b..4591ec7 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -242,7 +242,7 @@ import ( %type static_var_list static_var class_statement trait_adaptation trait_precedence trait_alias %type absolute_trait_method_reference trait_method_reference property echo_expr %type new_expr anonymous_class class_name class_name_reference simple_variable -%type internal_functions_in_yacc +%type internal_functions_in_yacc non_empty_array_pair_list array_pair_list %type exit_expr scalar lexical_var function_call member_name property_name %type variable_class_name dereferencable_scalar constant dereferencable %type callable_expr callable_variable static_member new_variable @@ -276,8 +276,8 @@ import ( %type for_exprs non_empty_for_exprs %type unprefixed_use_declarations inline_use_declarations %type case_list trait_adaptation_list -%type use_declarations lexical_var_list isset_variables non_empty_array_pair_list -%type array_pair_list top_statement_list +%type use_declarations lexical_var_list isset_variables +%type top_statement_list %type inner_statement_list parameter_list non_empty_parameter_list class_statement_list %type method_modifiers variable_modifiers %type non_empty_member_modifiers class_modifiers @@ -1454,26 +1454,28 @@ foreach_variable: } | T_LIST '(' array_pair_list ')' { - $$ = &ast.ExprList{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.List, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $4.SkippedTokens) + $$ = &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ListTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } } | '[' array_pair_list ']' { - $$ = &ast.ExprShortList{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save commentsc - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $3.SkippedTokens) + $$ = &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBracketTkn: $1, + Items: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $3, + } } ; @@ -2802,31 +2804,41 @@ new_expr: expr_without_variable: T_LIST '(' array_pair_list ')' '=' expr { - listNode := &ast.ExprList{ast.Node{}, $3} + listNode := &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ListTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } $$ = &ast.ExprAssign{ast.Node{}, listNode, $6} // save position - listNode.GetNode().Position = position.NewTokensPosition($1, $4) $$.GetNode().Position = position.NewTokenNodePosition($1, $6) // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating(listNode, token.List, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating(listNode, token.ArrayPairList, $4.SkippedTokens) yylex.(*Parser).setFreeFloating($$, token.Var, $5.SkippedTokens) } | '[' array_pair_list ']' '=' expr { - shortList := &ast.ExprShortList{ast.Node{}, $2} - $$ = &ast.ExprAssign{ast.Node{}, shortList, $5} + listNode := &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBracketTkn: $1, + Items: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $3, + } + $$ = &ast.ExprAssign{ast.Node{}, listNode, $5} // save position - shortList.GetNode().Position = position.NewTokensPosition($1, $3) $$.GetNode().Position = position.NewTokenNodePosition($1, $5) // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating(shortList, token.ArrayPairList, $3.SkippedTokens) yylex.(*Parser).setFreeFloating($$, token.Var, $4.SkippedTokens) } | variable '=' expr @@ -3890,26 +3902,28 @@ ctor_arguments: dereferencable_scalar: T_ARRAY '(' array_pair_list ')' { - $$ = &ast.ExprArray{ast.Node{}, $3} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.Array, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $4.SkippedTokens) + $$ = &ast.ExprArray{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ArrayTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } } | '[' array_pair_list ']' { - $$ = &ast.ExprShortArray{ast.Node{}, $2} - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating($$, token.ArrayPairList, $3.SkippedTokens) + $$ = &ast.ExprArray{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $3), + }, + OpenBracketTkn: $1, + Items: $2.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $2.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $3, + } } | T_CONSTANT_ENCAPSED_STRING { @@ -4474,6 +4488,13 @@ property_name: array_pair_list: non_empty_array_pair_list { + pairList := $1.(*ast.ParserSeparatedList) + fistPair := pairList.Items[0].(*ast.ExprArrayItem) + + if fistPair.Key == nil && fistPair.Val == nil && len(pairList.Items) == 1 { + pairList.Items = nil + } + $$ = $1 } ; @@ -4481,7 +4502,7 @@ array_pair_list: possible_array_pair: /* empty */ { - $$ = &ast.ExprArrayItem{ast.Node{}, false, nil, nil} + $$ = &ast.ExprArrayItem{} } | array_pair { @@ -4492,21 +4513,15 @@ possible_array_pair: non_empty_array_pair_list: non_empty_array_pair_list ',' possible_array_pair { - if len($1) == 0 { - $1 = []ast.Vertex{&ast.ExprArrayItem{ast.Node{}, false, nil, nil}} - } + $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) + $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, $3) - $$ = append($1, $3) - - // save comments - yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens) + $$ = $1 } | possible_array_pair { - if $1.(*ast.ExprArrayItem).Key == nil && $1.(*ast.ExprArrayItem).Val == nil { - $$ = []ast.Vertex{} - } else { - $$ = []ast.Vertex{$1} + $$ = &ast.ParserSeparatedList{ + Items: []ast.Vertex{$1}, } } ; @@ -4571,35 +4586,41 @@ array_pair: } | expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')' { - // TODO: Cannot use list() as standalone expression - listNode := &ast.ExprList{ast.Node{}, $5} + listNode := &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($3, $6), + }, + ListTkn: $3, + OpenBracketTkn: $4, + Items: $5.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $5.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $6, + } $$ = &ast.ExprArrayItem{ast.Node{}, false, $1, listNode} // save position - listNode.GetNode().Position = position.NewTokensPosition($3, $6) $$.GetNode().Position = position.NewNodeTokenPosition($1, $6) // save comments yylex.(*Parser).MoveFreeFloating($1, $$) yylex.(*Parser).setFreeFloating($$, token.Expr, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating(listNode, token.Start, $3.SkippedTokens) - yylex.(*Parser).setFreeFloating(listNode, token.List, $4.SkippedTokens) - yylex.(*Parser).setFreeFloating(listNode, token.ArrayPairList, $6.SkippedTokens) } | T_LIST '(' array_pair_list ')' { - // TODO: Cannot use list() as standalone expression - listNode := &ast.ExprList{ast.Node{}, $3} + listNode := &ast.ExprList{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $4), + }, + ListTkn: $1, + OpenBracketTkn: $2, + Items: $3.(*ast.ParserSeparatedList).Items, + SeparatorTkns: $3.(*ast.ParserSeparatedList).SeparatorTkns, + CloseBracketTkn: $4, + } $$ = &ast.ExprArrayItem{ast.Node{}, false, nil, listNode} // save position - listNode.GetNode().Position = position.NewTokensPosition($1, $4) $$.GetNode().Position = position.NewTokensPosition($1, $4) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setFreeFloating(listNode, token.List, $2.SkippedTokens) - yylex.(*Parser).setFreeFloating(listNode, token.ArrayPairList, $4.SkippedTokens) } ; diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index 7e02236..c0e84c2 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -113,8 +113,6 @@ type NodeVisitor interface { ExprRequire(n *ExprRequire) ExprRequireOnce(n *ExprRequireOnce) ExprShellExec(n *ExprShellExec) - ExprShortArray(n *ExprShortArray) - ExprShortList(n *ExprShortList) ExprStaticCall(n *ExprStaticCall) ExprStaticPropertyFetch(n *ExprStaticPropertyFetch) ExprTernary(n *ExprTernary) diff --git a/pkg/ast/node.go b/pkg/ast/node.go index de467de..9322ae3 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -939,7 +939,11 @@ func (n *StmtWhile) Accept(v NodeVisitor) { // ExprArray node type ExprArray struct { Node - Items []Vertex + ArrayTkn *token.Token + OpenBracketTkn *token.Token + Items []Vertex + SeparatorTkns []*token.Token + CloseBracketTkn *token.Token } func (n *ExprArray) Accept(v NodeVisitor) { @@ -1166,7 +1170,11 @@ func (n *ExprIsset) Accept(v NodeVisitor) { // ExprList node type ExprList struct { Node - Items []Vertex + ListTkn *token.Token + OpenBracketTkn *token.Token + Items []Vertex + SeparatorTkns []*token.Token + CloseBracketTkn *token.Token } func (n *ExprList) Accept(v NodeVisitor) { @@ -1297,26 +1305,6 @@ func (n *ExprShellExec) Accept(v NodeVisitor) { v.ExprShellExec(n) } -// ExprShortArray node -type ExprShortArray struct { - Node - Items []Vertex -} - -func (n *ExprShortArray) Accept(v NodeVisitor) { - v.ExprShortArray(n) -} - -// ExprShortList node -type ExprShortList struct { - Node - Items []Vertex -} - -func (n *ExprShortList) Accept(v NodeVisitor) { - v.ExprShortList(n) -} - // ExprStaticCall node type ExprStaticCall struct { Node diff --git a/pkg/ast/traverser/dfs.go b/pkg/ast/traverser/dfs.go index 8a6cdec..3da2562 100644 --- a/pkg/ast/traverser/dfs.go +++ b/pkg/ast/traverser/dfs.go @@ -1543,34 +1543,6 @@ func (t *DFS) Traverse(n ast.Vertex) { } t.visitor.Leave("Parts", false) } - case *ast.ExprShortArray: - if nn == nil { - return - } - if !t.visitor.EnterNode(nn) { - return - } - if nn.Items != nil { - t.visitor.Enter("Items", false) - for _, c := range nn.Items { - t.Traverse(c) - } - t.visitor.Leave("Items", false) - } - case *ast.ExprShortList: - if nn == nil { - return - } - if !t.visitor.EnterNode(nn) { - return - } - if nn.Items != nil { - t.visitor.Enter("Items", false) - for _, c := range nn.Items { - t.Traverse(c) - } - t.visitor.Leave("Items", false) - } case *ast.ExprStaticCall: if nn == nil { return diff --git a/pkg/ast/visitor/dump.go b/pkg/ast/visitor/dump.go index 6586d8c..45dc2c2 100644 --- a/pkg/ast/visitor/dump.go +++ b/pkg/ast/visitor/dump.go @@ -812,18 +812,6 @@ func (v *Dump) ExprShellExec(n *ast.ExprShellExec) { v.printNode(n.GetNode()) } -func (v *Dump) ExprShortArray(n *ast.ExprShortArray) { - v.printIndentIfNotSingle(v.indent - 1) - v.print("&ast.ExprShortArray{\n") - v.printNode(n.GetNode()) -} - -func (v *Dump) ExprShortList(n *ast.ExprShortList) { - v.printIndentIfNotSingle(v.indent - 1) - v.print("&ast.ExprShortList{\n") - v.printNode(n.GetNode()) -} - func (v *Dump) ExprStaticCall(n *ast.ExprStaticCall) { v.printIndentIfNotSingle(v.indent - 1) v.print("&ast.ExprStaticCall{\n") diff --git a/pkg/ast/visitor/null.go b/pkg/ast/visitor/null.go index f5e1467..724f4a1 100644 --- a/pkg/ast/visitor/null.go +++ b/pkg/ast/visitor/null.go @@ -394,14 +394,6 @@ func (v *Null) ExprShellExec(_ *ast.ExprShellExec) { // do nothing } -func (v *Null) ExprShortArray(_ *ast.ExprShortArray) { - // do nothing -} - -func (v *Null) ExprShortList(_ *ast.ExprShortList) { - // do nothing -} - func (v *Null) ExprStaticCall(_ *ast.ExprStaticCall) { // do nothing } diff --git a/pkg/printer/pretty_printer.go b/pkg/printer/pretty_printer.go index fdd297f..4f51213 100644 --- a/pkg/printer/pretty_printer.go +++ b/pkg/printer/pretty_printer.go @@ -274,10 +274,6 @@ func (p *PrettyPrinter) printNode(n ast.Vertex) { p.printExprRequireOnce(n) case *ast.ExprShellExec: p.printExprShellExec(n) - case *ast.ExprShortArray: - p.printExprShortArray(n) - case *ast.ExprShortList: - p.printExprShortList(n) case *ast.ExprStaticCall: p.printExprStaticCall(n) case *ast.ExprStaticPropertyFetch: @@ -1240,22 +1236,6 @@ func (p *PrettyPrinter) printExprShellExec(n ast.Vertex) { io.WriteString(p.w, "`") } -func (p *PrettyPrinter) printExprShortArray(n ast.Vertex) { - nn := n.(*ast.ExprShortArray) - - io.WriteString(p.w, "[") - p.joinPrint(", ", nn.Items) - io.WriteString(p.w, "]") -} - -func (p *PrettyPrinter) printExprShortList(n ast.Vertex) { - nn := n.(*ast.ExprShortList) - - io.WriteString(p.w, "[") - p.joinPrint(", ", nn.Items) - io.WriteString(p.w, "]") -} - func (p *PrettyPrinter) printExprStaticCall(n ast.Vertex) { nn := n.(*ast.ExprStaticCall) diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index ea131e5..0080044 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -363,10 +363,6 @@ func (p *Printer) printNode(n ast.Vertex) { p.printExprRequireOnce(n) case *ast.ExprShellExec: p.printExprShellExec(n) - case *ast.ExprShortArray: - p.printExprShortArray(n) - case *ast.ExprShortList: - p.printExprShortList(n) case *ast.ExprStaticCall: p.printExprStaticCall(n) case *ast.ExprStaticPropertyFetch: @@ -1837,30 +1833,6 @@ func (p *Printer) printExprShellExec(n ast.Vertex) { p.printFreeFloating(nn, token.End) } -func (p *Printer) printExprShortArray(n ast.Vertex) { - nn := n.(*ast.ExprShortArray) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("[")) - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, token.ArrayPairList) - p.write([]byte("]")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprShortList(n ast.Vertex) { - nn := n.(*ast.ExprShortList) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("[")) - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, token.ArrayPairList) - p.write([]byte("]")) - - p.printFreeFloating(nn, token.End) -} - func (p *Printer) printExprStaticCall(n ast.Vertex) { nn := n.(*ast.ExprStaticCall) p.printFreeFloating(nn, token.Start)