diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 7492a95..8e6d434 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 53276ee..0c3d768 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -1141,14 +1141,12 @@ unticked_statement: } | ';' { - $$ = &ast.StmtNop{ast.Node{}, } - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $1.SkippedTokens) + $$ = &ast.StmtNop{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + SemiColonTkn: $1, + } } | T_TRY '{' inner_statement_list '}' catch_statement finally_statement { @@ -2420,13 +2418,12 @@ trait_list: trait_adaptations: ';' { - $$ = &ast.StmtNop{ast.Node{}, } - - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $1.SkippedTokens) + $$ = &ast.StmtNop{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + SemiColonTkn: $1, + } } | '{' trait_adaptation_list '}' { @@ -2587,14 +2584,12 @@ trait_modifiers: method_body: ';' /* abstract method */ { - $$ = &ast.StmtNop{ast.Node{}, } - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $1.SkippedTokens) + $$ = &ast.StmtNop{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + SemiColonTkn: $1, + } } | '{' inner_statement_list '}' { diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 6ecb7f7..5c6b024 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 79efe9d..969ed05 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -1051,14 +1051,12 @@ statement: } | ';' { - $$ = &ast.StmtNop{ast.Node{}, } - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $1.SkippedTokens) + $$ = &ast.StmtNop{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + SemiColonTkn: $1, + } } | T_TRY '{' inner_statement_list '}' catch_list finally_statement { @@ -2203,13 +2201,12 @@ name_list: trait_adaptations: ';' { - $$ = &ast.StmtNop{ast.Node{}, } - - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $1.SkippedTokens) + $$ = &ast.StmtNop{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + SemiColonTkn: $1, + } } | '{' '}' { @@ -2372,14 +2369,12 @@ absolute_trait_method_reference: method_body: ';' /* abstract method */ { - $$ = &ast.StmtNop{ast.Node{}, } - - // save position - $$.GetNode().Position = position.NewTokenPosition($1) - - // save comments - yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens) - yylex.(*Parser).setToken($$, token.SemiColon, $1.SkippedTokens) + $$ = &ast.StmtNop{ + Node: ast.Node{ + Position: position.NewTokenPosition($1), + }, + SemiColonTkn: $1, + } } | '{' inner_statement_list '}' { diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 845c124..b16ad15 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -597,6 +597,7 @@ func (n *StmtNamespace) Accept(v NodeVisitor) { // StmtNop node type StmtNop struct { Node + SemiColonTkn *token.Token } func (n *StmtNop) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/filter_tokens.go b/pkg/ast/visitor/filter_tokens.go index 63fc40e..fc28ce8 100644 --- a/pkg/ast/visitor/filter_tokens.go +++ b/pkg/ast/visitor/filter_tokens.go @@ -235,3 +235,7 @@ func (v *FilterTokens) StmtDeclare(n *ast.StmtDeclare) { n.EndDeclareTkn = nil n.SemiColonTkn = nil } + +func (v *FilterTokens) StmtNop(n *ast.StmtNop) { + n.SemiColonTkn = nil +} diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index 9195d83..07318bd 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2581,13 +2581,8 @@ func (p *Printer) printStmtNamespace(n *ast.StmtNamespace) { p.printToken(n.SemiColonTkn, ";") } -func (p *Printer) printStmtNop(n ast.Vertex) { - p.printFreeFloatingOrDefault(n, token.Start, p.bufStart) - p.printFreeFloating(n, token.SemiColon) - if n.GetNode().Tokens.IsEmpty() { - p.write([]byte(";")) - } - p.printFreeFloating(n, token.End) +func (p *Printer) printStmtNop(n *ast.StmtNop) { + p.printToken(n.SemiColonTkn, ";") } func (p *Printer) printStmtPropertyList(n ast.Vertex) {