diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 58de3b2..77d735f 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 3f5ef26..d3072b8 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -267,10 +267,13 @@ import ( start: top_statement_list { - yylex.(*Parser).rootNode = &ast.Root{ast.Node{}, $1} - yylex.(*Parser).rootNode.GetNode().Position = position.NewNodeListPosition($1) - - yylex.(*Parser).setFreeFloating(yylex.(*Parser).rootNode, token.End, yylex.(*Parser).currentToken.SkippedTokens) + yylex.(*Parser).rootNode = &ast.Root{ + Node: ast.Node{ + Position: position.NewNodeListPosition($1), + }, + Stmts: $1, + EndTkn: yylex.(*Parser).currentToken, + } } ; diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 3704052..b85c2a1 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 25adcd7..e40fa5f 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -288,12 +288,13 @@ import ( start: top_statement_list { - yylex.(*Parser).rootNode = &ast.Root{ast.Node{}, $1} - - // save position - yylex.(*Parser).rootNode.GetNode().Position = position.NewNodeListPosition($1) - - yylex.(*Parser).setFreeFloating(yylex.(*Parser).rootNode, token.End, yylex.(*Parser).currentToken.SkippedTokens) + yylex.(*Parser).rootNode = &ast.Root{ + Node: ast.Node{ + Position: position.NewNodeListPosition($1), + }, + Stmts: $1, + EndTkn: yylex.(*Parser).currentToken, + } } ; @@ -2754,13 +2755,15 @@ anonymous_class: Node: ast.Node{ Position: position.NewTokensPosition($1, $8), }, - ClassTkn: $1, - ArgumentList: $2, - Extends: $3, - Implements: $4, - OpenCurlyBracket: $6, - Stmts: $7, - CloseCurlyBracket: $8, + ClassTkn: $1, + OpenParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, + Arguments: $2.(*ast.ArgumentList).Arguments, + CloseParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, + Extends: $3, + Implements: $4, + OpenCurlyBracket: $6, + Stmts: $7, + CloseCurlyBracket: $8, } } ; diff --git a/pkg/ast/ast.go b/pkg/ast/ast.go index c0e84c2..526c4e8 100644 --- a/pkg/ast/ast.go +++ b/pkg/ast/ast.go @@ -24,7 +24,6 @@ type NodeVisitor interface { Variadic(n *Variadic) Parameter(n *Parameter) Identifier(n *Identifier) - ArgumentList(n *ArgumentList) Argument(n *Argument) StmtBreak(n *StmtBreak) diff --git a/pkg/ast/node.go b/pkg/ast/node.go index ccea997..e3298cb 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -23,7 +23,8 @@ func (n *Node) GetPosition() *position.Position { // Root node type Root struct { Node - Stmts []Vertex + Stmts []Vertex + EndTkn *token.Token } func (n *Root) Accept(v NodeVisitor) { @@ -87,19 +88,6 @@ func (n *Identifier) Accept(v NodeVisitor) { v.Identifier(n) } -// ArgumentList node -type ArgumentList struct { - Node - OpenParenthesisTkn *token.Token - Arguments []Vertex - SeparatorTkns []*token.Token - CloseParenthesisTkn *token.Token -} - -func (n *ArgumentList) Accept(v NodeVisitor) { - v.ArgumentList(n) -} - // Argument node type Argument struct { Node @@ -238,15 +226,17 @@ func (n *StmtCatch) Accept(v NodeVisitor) { // StmtClass node type StmtClass struct { Node - Modifiers []Vertex - ClassTkn *token.Token - ClassName Vertex - ArgumentList Vertex - Extends Vertex - Implements Vertex - OpenCurlyBracket *token.Token - Stmts []Vertex - CloseCurlyBracket *token.Token + Modifiers []Vertex + ClassTkn *token.Token + ClassName Vertex + OpenParenthesisTkn *token.Token + Arguments []Vertex + CloseParenthesisTkn *token.Token + Extends Vertex + Implements Vertex + OpenCurlyBracket *token.Token + Stmts []Vertex + CloseCurlyBracket *token.Token } func (n *StmtClass) Accept(v NodeVisitor) { @@ -2098,6 +2088,19 @@ func (n *ParserSeparatedList) Accept(v NodeVisitor) { v.ParserSeparatedList(n) } +// ArgumentList node +type ArgumentList struct { + Node + OpenParenthesisTkn *token.Token + Arguments []Vertex + SeparatorTkns []*token.Token + CloseParenthesisTkn *token.Token +} + +func (n *ArgumentList) Accept(v NodeVisitor) { + // do nothing +} + type ReturnType struct { Node ColonTkn *token.Token diff --git a/pkg/ast/traverser/dfs.go b/pkg/ast/traverser/dfs.go index bc119f8..6e3fe74 100644 --- a/pkg/ast/traverser/dfs.go +++ b/pkg/ast/traverser/dfs.go @@ -93,20 +93,6 @@ func (t *DFS) Traverse(n ast.Vertex) { if !t.visitor.EnterNode(nn) { return } - case *ast.ArgumentList: - if nn == nil { - return - } - if !t.visitor.EnterNode(nn) { - return - } - if nn.Arguments != nil { - t.visitor.Enter("Arguments", false) - for _, c := range nn.Arguments { - t.Traverse(c) - } - t.visitor.Leave("Arguments", false) - } case *ast.Argument: if nn == nil { return @@ -195,10 +181,12 @@ func (t *DFS) Traverse(n ast.Vertex) { } t.visitor.Leave("Modifiers", false) } - if nn.ArgumentList != nil { - t.visitor.Enter("ArgumentList", true) - t.Traverse(nn.ArgumentList) - t.visitor.Leave("ArgumentList", true) + if nn.Arguments != nil { + t.visitor.Enter("Arguments", false) + for _, c := range nn.Arguments { + t.Traverse(c) + } + t.visitor.Leave("Arguments", false) } if nn.Extends != nil { t.visitor.Enter("Extends", true) diff --git a/pkg/ast/visitor/dump.go b/pkg/ast/visitor/dump.go index 2e4f59b..ea0ae75 100644 --- a/pkg/ast/visitor/dump.go +++ b/pkg/ast/visitor/dump.go @@ -230,12 +230,6 @@ func (v *Dump) Identifier(n *ast.Identifier) { v.print(fmt.Sprintf("Value: []byte(%q),\n", n.Value)) } -func (v *Dump) ArgumentList(n *ast.ArgumentList) { - v.printIndentIfNotSingle(v.indent - 1) - v.print("&ast.ArgumentList{\n") - v.printNode(n.GetNode()) -} - func (v *Dump) Argument(n *ast.Argument) { v.printIndentIfNotSingle(v.indent - 1) v.print("&ast.Argument{\n") diff --git a/pkg/ast/visitor/null.go b/pkg/ast/visitor/null.go index 724f4a1..ce4f433 100644 --- a/pkg/ast/visitor/null.go +++ b/pkg/ast/visitor/null.go @@ -46,10 +46,6 @@ func (v *Null) Identifier(_ *ast.Identifier) { // do nothing } -func (v *Null) ArgumentList(_ *ast.ArgumentList) { - // do nothing -} - func (v *Null) Argument(_ *ast.Argument) { // do nothing } diff --git a/pkg/printer/pretty_printer.go b/pkg/printer/pretty_printer.go index b046302..eae729a 100644 --- a/pkg/printer/pretty_printer.go +++ b/pkg/printer/pretty_printer.go @@ -1450,9 +1450,9 @@ func (p *PrettyPrinter) printStmtClass(n ast.Vertex) { p.Print(nn.ClassName) } - if nn.ArgumentList != nil { + if nn.Arguments != nil { io.WriteString(p.w, "(") - p.joinPrint(", ", nn.ArgumentList.(*ast.ArgumentList).Arguments) + p.joinPrint(", ", nn.Arguments) io.WriteString(p.w, ")") } diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go index fc63109..328e0f9 100644 --- a/pkg/printer/printer.go +++ b/pkg/printer/printer.go @@ -2067,10 +2067,10 @@ func (p *Printer) printStmtClass(n ast.Vertex) { p.Print(nn.ClassName) } - if nn.ArgumentList != nil { - p.printFreeFloatingOrDefault(nn.ArgumentList, token.Start, "(") - p.joinPrint(",", nn.ArgumentList.(*ast.ArgumentList).Arguments) - p.printFreeFloatingOrDefault(nn.ArgumentList, token.End, ")") + if nn.Arguments != nil { + p.printToken(nn.OpenParenthesisTkn, "(") + p.joinPrint(",", nn.Arguments) + p.printToken(nn.CloseParenthesisTkn, ")") } if nn.Extends != nil {