[refactoring] update ast structure of "Unset" node

This commit is contained in:
Vadym Slizov 2020-09-14 17:19:17 +03:00
parent 8b4d65ac4d
commit 62fc16da97
7 changed files with 50 additions and 54 deletions

BIN
internal/php5/php5.go generated

Binary file not shown.

View File

@ -241,7 +241,7 @@ import (
%type <node> trait_method_reference_fully_qualified trait_method_reference trait_modifiers member_modifier method %type <node> trait_method_reference_fully_qualified trait_method_reference trait_modifiers member_modifier method
%type <node> static_scalar_value static_operation static_var_list global_var_list %type <node> static_scalar_value static_operation static_var_list global_var_list
%type <node> ctor_arguments function_call_parameter_list echo_expr_list %type <node> ctor_arguments function_call_parameter_list echo_expr_list
%type <node> trait_adaptations %type <node> trait_adaptations unset_variables
%type <node> switch_case_list %type <node> switch_case_list
%type <node> method_body %type <node> method_body
%type <node> foreach_statement for_statement while_statement %type <node> foreach_statement for_statement while_statement
@ -255,7 +255,7 @@ import (
%type <list> top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations %type <list> top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations
%type <list> inner_statement_list encaps_list isset_variables non_empty_array_pair_list %type <list> inner_statement_list encaps_list isset_variables non_empty_array_pair_list
%type <list> array_pair_list assignment_list lexical_var_list elseif_list new_elseif_list non_empty_for_expr %type <list> array_pair_list assignment_list lexical_var_list elseif_list new_elseif_list non_empty_for_expr
%type <list> for_expr case_list unset_variables declare_list catch_statement additional_catches %type <list> for_expr case_list declare_list catch_statement additional_catches
%type <list> non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list %type <list> non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list
%type <list> class_statement_list variable_modifiers method_modifiers class_variable_declaration %type <list> class_statement_list variable_modifiers method_modifiers class_variable_declaration
%type <list> interface_list non_empty_function_call_parameter_list trait_list trait_adaptation_list non_empty_trait_adaptation_list %type <list> interface_list non_empty_function_call_parameter_list trait_list trait_adaptation_list non_empty_trait_adaptation_list
@ -1084,17 +1084,13 @@ unticked_statement:
} }
| T_UNSET '(' unset_variables ')' ';' | T_UNSET '(' unset_variables ')' ';'
{ {
$$ = &ast.StmtUnset{ast.Node{}, $3} $3.(*ast.StmtUnset).UnsetTkn = $1
$3.(*ast.StmtUnset).OpenParenthesisTkn = $2
$3.(*ast.StmtUnset).CloseParenthesisTkn = $4
$3.(*ast.StmtUnset).SemiColonTkn = $5
$3.(*ast.StmtUnset).Node.Position = position.NewTokensPosition($1, $5)
// save position $$ = $3
$$.GetNode().Position = position.NewTokensPosition($1, $5)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.Unset, $2.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.VarList, $4.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.CloseParenthesisToken, $5.SkippedTokens)
yylex.(*Parser).setToken($$, token.SemiColon, $5.SkippedTokens)
} }
| T_FOREACH '(' variable T_AS foreach_variable foreach_optional_arg ')' foreach_statement | T_FOREACH '(' variable T_AS foreach_variable foreach_optional_arg ')' foreach_statement
{ {
@ -1334,14 +1330,16 @@ additional_catch:
unset_variables: unset_variables:
unset_variable unset_variable
{ {
$$ = []ast.Vertex{$1} $$ = &ast.StmtUnset{
Vars: []ast.Vertex{$1},
}
} }
| unset_variables ',' unset_variable | unset_variables ',' unset_variable
{ {
$$ = append($1, $3) $1.(*ast.StmtUnset).Vars = append($1.(*ast.StmtUnset).Vars, $3)
$1.(*ast.StmtUnset).SeparatorTkns = append($1.(*ast.StmtUnset).SeparatorTkns, $2)
// save comments $$ = $1
yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens)
} }
; ;

BIN
internal/php7/php7.go generated

Binary file not shown.

View File

@ -264,6 +264,7 @@ import (
%type <node> method_body %type <node> method_body
%type <node> foreach_statement for_statement while_statement %type <node> foreach_statement for_statement while_statement
%type <node> inline_function %type <node> inline_function
%type <node> unset_variables
%type <ClassExtends> extends_from %type <ClassExtends> extends_from
%type <ClassImplements> implements_list %type <ClassImplements> implements_list
%type <InterfaceExtends> interface_extends_list %type <InterfaceExtends> interface_extends_list
@ -277,7 +278,7 @@ import (
%type <list> encaps_list backticks_expr namespace_name catch_name_list catch_list class_const_list %type <list> encaps_list backticks_expr namespace_name catch_name_list catch_list class_const_list
%type <list> const_list for_exprs non_empty_for_exprs %type <list> const_list for_exprs non_empty_for_exprs
%type <list> unprefixed_use_declarations inline_use_declarations property_list %type <list> unprefixed_use_declarations inline_use_declarations property_list
%type <list> case_list trait_adaptation_list unset_variables %type <list> case_list trait_adaptation_list
%type <list> use_declarations lexical_var_list isset_variables non_empty_array_pair_list %type <list> use_declarations lexical_var_list isset_variables non_empty_array_pair_list
%type <list> array_pair_list non_empty_argument_list top_statement_list %type <list> array_pair_list non_empty_argument_list top_statement_list
%type <list> inner_statement_list parameter_list non_empty_parameter_list class_statement_list %type <list> inner_statement_list parameter_list non_empty_parameter_list class_statement_list
@ -998,21 +999,14 @@ statement:
} }
| T_UNSET '(' unset_variables possible_comma ')' ';' | T_UNSET '(' unset_variables possible_comma ')' ';'
{ {
$$ = &ast.StmtUnset{ast.Node{}, $3} $3.(*ast.StmtUnset).UnsetTkn = $1
$3.(*ast.StmtUnset).OpenParenthesisTkn = $2
$3.(*ast.StmtUnset).SeparatorTkns = append($3.(*ast.StmtUnset).SeparatorTkns, $4)
$3.(*ast.StmtUnset).CloseParenthesisTkn = $5
$3.(*ast.StmtUnset).SemiColonTkn = $6
$3.(*ast.StmtUnset).Node.Position = position.NewTokensPosition($1, $6)
// save position $$ = $3
$$.GetNode().Position = position.NewTokensPosition($1, $6)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloating($$, token.Unset, $2.SkippedTokens)
if $4 != nil {
yylex.(*Parser).setFreeFloating($$, token.VarList, append($4.SkippedTokens, $5.SkippedTokens...))
} else {
yylex.(*Parser).setFreeFloating($$, token.VarList, $5.SkippedTokens)
}
yylex.(*Parser).setFreeFloating($$, token.CloseParenthesisToken, $6.SkippedTokens)
yylex.(*Parser).setToken($$, token.SemiColon, $6.SkippedTokens)
} }
| T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
{ {
@ -1205,14 +1199,16 @@ finally_statement:
unset_variables: unset_variables:
unset_variable unset_variable
{ {
$$ = []ast.Vertex{$1} $$ = &ast.StmtUnset{
Vars: []ast.Vertex{$1},
}
} }
| unset_variables ',' unset_variable | unset_variables ',' unset_variable
{ {
$$ = append($1, $3) $1.(*ast.StmtUnset).Vars = append($1.(*ast.StmtUnset).Vars, $3)
$1.(*ast.StmtUnset).SeparatorTkns = append($1.(*ast.StmtUnset).SeparatorTkns, $2)
// save comments $$ = $1
yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.SkippedTokens)
} }
; ;

View File

@ -783,7 +783,12 @@ func (n *StmtTry) Accept(v NodeVisitor) {
// StmtUnset node // StmtUnset node
type StmtUnset struct { type StmtUnset struct {
Node Node
Vars []Vertex UnsetTkn *token.Token
OpenParenthesisTkn *token.Token
Vars []Vertex
SeparatorTkns []*token.Token
CloseParenthesisTkn *token.Token
SemiColonTkn *token.Token
} }
func (n *StmtUnset) Accept(v NodeVisitor) { func (n *StmtUnset) Accept(v NodeVisitor) {

View File

@ -204,3 +204,12 @@ func (v *FilterTokens) StmtEcho(n *ast.StmtEcho) {
func (v *FilterTokens) StmtInlineHtml(n *ast.StmtInlineHtml) { func (v *FilterTokens) StmtInlineHtml(n *ast.StmtInlineHtml) {
n.InlineHtmlTkn = nil n.InlineHtmlTkn = nil
} }
func (v *FilterTokens) StmtUnset(n *ast.StmtUnset) {
n.UnsetTkn = nil
n.OpenParenthesisTkn = nil
n.SeparatorTkns = nil
n.CloseParenthesisTkn = nil
n.SemiColonTkn = nil
n.SemiColonTkn = nil
}

View File

@ -2905,24 +2905,12 @@ func (p *Printer) printStmtTry(n ast.Vertex) {
p.printFreeFloating(nn, token.End) p.printFreeFloating(nn, token.End)
} }
func (p *Printer) printStmtUnset(n ast.Vertex) { func (p *Printer) printStmtUnset(n *ast.StmtUnset) {
nn := n.(*ast.StmtUnset) p.printToken(n.UnsetTkn, "unset")
p.printFreeFloating(nn, token.Start) p.printToken(n.OpenParenthesisTkn, "(")
p.printSeparatedList(n.Vars, n.SeparatorTkns, ",")
p.write([]byte("unset")) p.printToken(n.CloseParenthesisTkn, ")")
p.printFreeFloating(nn, token.Unset) p.printToken(n.SemiColonTkn, ";")
p.write([]byte("("))
p.joinPrint(",", nn.Vars)
p.printFreeFloating(nn, token.VarList)
p.write([]byte(")"))
p.printFreeFloating(nn, token.CloseParenthesisToken)
p.printFreeFloating(nn, token.SemiColon)
if n.GetNode().Tokens.IsEmpty() {
p.write([]byte(";"))
}
p.printFreeFloating(nn, token.End)
} }
func (p *Printer) printStmtUse(n *ast.StmtUse) { func (p *Printer) printStmtUse(n *ast.StmtUse) {