diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 1e89fea..51b160f 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 f905e1d..e529812 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -4493,23 +4493,23 @@ ctor_arguments: common_scalar: T_LNUMBER { - $$ = &ast.ScalarLnumber{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarLnumber{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + NumberTkn: $1, + Value: $1.Value, + } } | T_DNUMBER { - $$ = &ast.ScalarDnumber{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarDnumber{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + NumberTkn: $1, + Value: $1.Value, + } } | T_CONSTANT_ENCAPSED_STRING { @@ -6146,7 +6146,13 @@ encaps_var_offset: { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(string($1.Value)); err == nil { - $$ = &ast.ScalarLnumber{ast.Node{}, $1.Value} + $$ = &ast.ScalarLnumber{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + NumberTkn: $1, + Value: $1.Value, + } } else { $$ = &ast.ScalarString{ast.Node{}, $1.Value} } diff --git a/internal/php7/php7.go b/internal/php7/php7.go index a66ce92..1ee2e1f 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 b246064..d171ae7 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -3940,23 +3940,23 @@ dereferencable_scalar: scalar: T_LNUMBER { - $$ = &ast.ScalarLnumber{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarLnumber{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + NumberTkn: $1, + Value: $1.Value, + } } | T_DNUMBER { - $$ = &ast.ScalarDnumber{ast.Node{}, $1.Value} - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) + $$ = &ast.ScalarDnumber{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + NumberTkn: $1, + Value: $1.Value, + } } | T_LINE { @@ -4785,7 +4785,13 @@ encaps_var_offset: { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(string($1.Value)); err == nil { - $$ = &ast.ScalarLnumber{ast.Node{}, $1.Value} + $$ = &ast.ScalarLnumber{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + NumberTkn: $1, + Value: $1.Value, + } } else { $$ = &ast.ScalarString{ast.Node{}, $1.Value} } @@ -4798,13 +4804,17 @@ encaps_var_offset: } | '-' T_NUM_STRING { - var lnumber *ast.ScalarLnumber - // TODO: add option to handle 64 bit integer _, err := strconv.Atoi(string($2.Value)); isInt := err == nil if isInt { - lnumber = &ast.ScalarLnumber{ast.Node{}, $2.Value} + lnumber := &ast.ScalarLnumber{ + Node: ast.Node{ + Position: position.NewTokenPosition($2), + }, + NumberTkn: $2, + Value: $2.Value, + } $$ = &ast.ExprUnaryMinus{ast.Node{}, lnumber} } else { $2.Value = append([]byte("-"), $2.Value...) @@ -4812,9 +4822,6 @@ encaps_var_offset: } // save position - if isInt { - lnumber.GetNode().Position = position.NewTokensPosition($1, $2) - } $$.GetNode().Position = position.NewTokensPosition($1, $2) // save comments diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 9cc59f4..5e6e373 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -115,7 +115,8 @@ func (n *Argument) Accept(v NodeVisitor) { // ScalarDnumber node type ScalarDnumber struct { Node - Value []byte + NumberTkn *token.Token + Value []byte } func (n *ScalarDnumber) Accept(v NodeVisitor) { @@ -156,7 +157,8 @@ func (n *ScalarHeredoc) Accept(v NodeVisitor) { // ScalarLnumber node type ScalarLnumber struct { Node - Value []byte + NumberTkn *token.Token + Value []byte } func (n *ScalarLnumber) Accept(v NodeVisitor) {