diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 15333e8..400b632 100644 Binary files a/internal/php5/php5.go and b/internal/php5/php5.go differ 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 a4b4d5d..387a163 100644 Binary files a/internal/php7/php7.go and b/internal/php7/php7.go differ 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) {