diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 51ae856..704561a 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 383a19d..1674719 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -4020,15 +4020,19 @@ combined_scalar_offset: } | T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']' { - str := &ast.ScalarString{ast.Node{}, $1.Value} + str := &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + StringTkn: $1, + Value: $1.Value, + } $$ = &ast.ExprArrayDimFetch{ast.Node{}, str, $3} // save position - str.GetNode().Position = position.NewTokenPosition($1) $$.GetNode().Position = position.NewNodeTokenPosition(str, $4) // save comments - yylex.(*Parser).setFreeFloating(str, token.Start, $1.SkippedTokens) yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens) yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens) } @@ -4517,83 +4521,83 @@ common_scalar: } | T_CONSTANT_ENCAPSED_STRING { - $$ = &ast.ScalarString{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + StringTkn: $1, + Value: $1.Value, + } } | T_LINE { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_FILE { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_DIR { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_TRAIT_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_METHOD_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_FUNC_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_NS_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { @@ -4734,13 +4738,13 @@ static_scalar_value: } | T_CLASS_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | static_operation { @@ -5213,13 +5217,13 @@ scalar: } | T_CLASS_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } ; @@ -6151,13 +6155,13 @@ encaps_var: encaps_var_offset: T_STRING { - $$ = &ast.ScalarString{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + StringTkn: $1, + Value: $1.Value, + } } | T_NUM_STRING { @@ -6171,7 +6175,13 @@ encaps_var_offset: Value: $1.Value, } } else { - $$ = &ast.ScalarString{ast.Node{}, $1.Value} + $$ = &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + StringTkn: $1, + Value: $1.Value, + } } // save position diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 0ae49e3..c075510 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 f896af8..b98517d 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -3931,13 +3931,13 @@ dereferencable_scalar: } | T_CONSTANT_ENCAPSED_STRING { - $$ = &ast.ScalarString{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + StringTkn: $1, + Value: $1.Value, + } } ; @@ -3964,83 +3964,83 @@ scalar: } | T_LINE { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_FILE { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_DIR { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_TRAIT_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_METHOD_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_FUNC_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_NS_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_CLASS_C { - $$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarMagicConstant{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + MagicConstTkn: $1, + Value: $1.Value, + } } | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { @@ -4790,13 +4790,13 @@ encaps_var: encaps_var_offset: T_STRING { - $$ = &ast.ScalarString{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + StringTkn: $1, + Value: $1.Value, + } } | T_NUM_STRING { @@ -4810,14 +4810,14 @@ encaps_var_offset: Value: $1.Value, } } else { - $$ = &ast.ScalarString{ast.Node{}, $1.Value} + $$ = &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + StringTkn: $1, + Value: $1.Value, + } } - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | '-' T_NUM_STRING { @@ -4833,16 +4833,17 @@ encaps_var_offset: Value: $2.Value, } $$ = &ast.ExprUnaryMinus{ast.Node{}, lnumber} + $$.GetNode().Position = position.NewTokensPosition($1, $2) } else { - $2.Value = append([]byte("-"), $2.Value...) - $$ = &ast.ScalarString{ast.Node{}, $2.Value} + $$ = &ast.ScalarString{ + Node: ast.Node{ + Position: position.NewTokensPosition($1, $2), + }, + MinusTkn: $1, + StringTkn: $2, + Value: append([]byte("-"), $2.Value...), + } } - - // save position - $$.GetNode().Position = position.NewTokensPosition($1, $2) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) } | T_VARIABLE { diff --git a/pkg/ast/node.go b/pkg/ast/node.go index a1b04f4..d395f57 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -172,7 +172,8 @@ func (n *ScalarLnumber) Accept(v NodeVisitor) { // ScalarMagicConstant node type ScalarMagicConstant struct { Node - Value []byte + MagicConstTkn *token.Token + Value []byte } func (n *ScalarMagicConstant) Accept(v NodeVisitor) { @@ -182,7 +183,9 @@ func (n *ScalarMagicConstant) Accept(v NodeVisitor) { // ScalarString node type ScalarString struct { Node - Value []byte + MinusTkn *token.Token + StringTkn *token.Token + Value []byte } func (n *ScalarString) Accept(v NodeVisitor) {