diff --git a/cmd/php-parser/main.go b/cmd/php-parser/main.go index 569dd30..33d03e0 100644 --- a/cmd/php-parser/main.go +++ b/cmd/php-parser/main.go @@ -13,8 +13,8 @@ import ( "github.com/pkg/profile" "github.com/yookoala/realpath" - "github.com/z7zmey/php-parser/pkg/parser" "github.com/z7zmey/php-parser/pkg/ast/visitor" + "github.com/z7zmey/php-parser/pkg/parser" ) var wg sync.WaitGroup diff --git a/internal/php5/parser.go b/internal/php5/parser.go index 060be97..d4ec16d 100644 --- a/internal/php5/parser.go +++ b/internal/php5/parser.go @@ -2,6 +2,7 @@ package php5 import ( "bytes" + "fmt" "github.com/z7zmey/php-parser/internal/positionbuilder" "github.com/z7zmey/php-parser/internal/scanner" @@ -132,10 +133,25 @@ func (l *Parser) GetFreeFloatingToken(t *scanner.Token) []token.Token { return []token.Token{} } - tokens := make([]token.Token, len(t.Tokens)) - copy(tokens, t.Tokens) + return []token.Token{ + { + ID: token.ID(t.ID), + Value: t.Value, + }, + } +} - return tokens +func (l *Parser) addDollarToken(v ast.Vertex) { + if l.Lexer.GetWithFreeFloating() == false { + return + } + + l.setFreeFloating(v, token.Dollar, []token.Token{ + { + ID: token.ID('$'), + Value: []byte("$"), + }, + }) } func (l *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast.Vertex) { @@ -159,6 +175,8 @@ func (l *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast. } vlen := len(semiColon[0].Value) + fmt.Printf("vlen: %q\n", string(semiColon[0].Value)) + tlen := 2 if bytes.HasSuffix(semiColon[0].Value, []byte("?>\n")) { tlen = 3 diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 0b7071c..b63ef14 100644 --- a/internal/php5/php5.go +++ b/internal/php5/php5.go @@ -346,7 +346,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -// line internal/php5/php5.y:7171 +// line internal/php5/php5.y:7193 type simpleIndirectReference struct { all []*ast.ExprVariable @@ -3589,6 +3589,7 @@ yydefault: yylex.(*Parser).setFreeFloating(catchNode, token.Start, yyDollar[1].token.Tokens) yylex.(*Parser).setFreeFloating(catchNode, token.Catch, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[4].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(catchNode, token.Var, yyDollar[5].token.Tokens) yylex.(*Parser).setFreeFloating(catchNode, token.Cond, yyDollar[6].token.Tokens) yylex.(*Parser).setFreeFloating(catchNode, token.Stmts, yyDollar[8].token.Tokens) @@ -3597,7 +3598,7 @@ yydefault: } case 77: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1444 +// line internal/php5/php5.y:1445 { yyVAL.node = nil @@ -3605,7 +3606,7 @@ yydefault: } case 78: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:1450 +// line internal/php5/php5.y:1451 { yyVAL.node = &ast.StmtFinally{ast.Node{}, yyDollar[3].list} @@ -3621,7 +3622,7 @@ yydefault: } case 79: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1467 +// line internal/php5/php5.y:1468 { yyVAL.list = yyDollar[1].list @@ -3629,7 +3630,7 @@ yydefault: } case 80: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1473 +// line internal/php5/php5.y:1474 { yyVAL.list = []ast.Vertex{} @@ -3637,7 +3638,7 @@ yydefault: } case 81: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1482 +// line internal/php5/php5.y:1483 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -3645,7 +3646,7 @@ yydefault: } case 82: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1488 +// line internal/php5/php5.y:1489 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -3653,7 +3654,7 @@ yydefault: } case 83: yyDollar = yyS[yypt-8 : yypt+1] -// line internal/php5/php5.y:1497 +// line internal/php5/php5.y:1498 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[4].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -3668,6 +3669,7 @@ yydefault: yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Catch, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[4].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, yyDollar[5].token.Tokens) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Cond, yyDollar[6].token.Tokens) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Stmts, yyDollar[8].token.Tokens) @@ -3676,7 +3678,7 @@ yydefault: } case 84: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1521 +// line internal/php5/php5.y:1523 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -3684,7 +3686,7 @@ yydefault: } case 85: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:1527 +// line internal/php5/php5.y:1529 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -3695,7 +3697,7 @@ yydefault: } case 86: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1539 +// line internal/php5/php5.y:1541 { yyVAL.node = yyDollar[1].node @@ -3703,7 +3705,7 @@ yydefault: } case 87: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1548 +// line internal/php5/php5.y:1550 { yyVAL.node = yyDollar[1].node @@ -3711,7 +3713,7 @@ yydefault: } case 88: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1557 +// line internal/php5/php5.y:1559 { yyVAL.node = yyDollar[1].node @@ -3719,31 +3721,31 @@ yydefault: } case 89: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1566 +// line internal/php5/php5.y:1568 { yyVAL.token = nil } case 90: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1570 +// line internal/php5/php5.y:1572 { yyVAL.token = yyDollar[1].token } case 91: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1577 +// line internal/php5/php5.y:1579 { yyVAL.token = nil } case 92: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1581 +// line internal/php5/php5.y:1583 { yyVAL.token = yyDollar[1].token } case 93: yyDollar = yyS[yypt-9 : yypt+1] -// line internal/php5/php5.y:1588 +// line internal/php5/php5.y:1590 { name := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.StmtFunction{ast.Node{}, yyDollar[2].token != nil, name, yyDollar[5].list, nil, yyDollar[8].list} @@ -3769,7 +3771,7 @@ yydefault: } case 94: yyDollar = yyS[yypt-7 : yypt+1] -// line internal/php5/php5.y:1615 +// line internal/php5/php5.y:1617 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} switch n := yyDollar[1].node.(type) { @@ -3799,7 +3801,7 @@ yydefault: } case 95: yyDollar = yyS[yypt-6 : yypt+1] -// line internal/php5/php5.y:1643 +// line internal/php5/php5.y:1645 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} yyVAL.node = &ast.StmtInterface{ast.Node{}, name, yyDollar[3].InterfaceExtends, yyDollar[5].list} @@ -3818,7 +3820,7 @@ yydefault: } case 96: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1664 +// line internal/php5/php5.y:1666 { yyVAL.node = &ast.StmtClass{ast.Node{}, nil, nil, nil, nil, nil, nil} @@ -3832,7 +3834,7 @@ yydefault: } case 97: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1676 +// line internal/php5/php5.y:1678 { classModifier := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.StmtClass{ast.Node{}, nil, []ast.Vertex{classModifier}, nil, nil, nil, nil} @@ -3849,7 +3851,7 @@ yydefault: } case 98: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1691 +// line internal/php5/php5.y:1693 { yyVAL.node = &ast.StmtTrait{ast.Node{}, nil, nil} @@ -3863,7 +3865,7 @@ yydefault: } case 99: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1703 +// line internal/php5/php5.y:1705 { classModifier := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.StmtClass{ast.Node{}, nil, []ast.Vertex{classModifier}, nil, nil, nil, nil} @@ -3880,7 +3882,7 @@ yydefault: } case 100: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1721 +// line internal/php5/php5.y:1723 { yyVAL.ClassExtends = nil @@ -3888,7 +3890,7 @@ yydefault: } case 101: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1727 +// line internal/php5/php5.y:1729 { yyVAL.ClassExtends = &ast.StmtClassExtends{ast.Node{}, yyDollar[2].node} @@ -3902,13 +3904,13 @@ yydefault: } case 102: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1742 +// line internal/php5/php5.y:1744 { yyVAL.token = yyDollar[1].token } case 103: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1749 +// line internal/php5/php5.y:1751 { yyVAL.InterfaceExtends = nil @@ -3916,7 +3918,7 @@ yydefault: } case 104: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1755 +// line internal/php5/php5.y:1757 { yyVAL.InterfaceExtends = &ast.StmtInterfaceExtends{ast.Node{}, yyDollar[2].list} @@ -3930,7 +3932,7 @@ yydefault: } case 105: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1770 +// line internal/php5/php5.y:1772 { yyVAL.ClassImplements = nil @@ -3938,7 +3940,7 @@ yydefault: } case 106: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1776 +// line internal/php5/php5.y:1778 { yyVAL.ClassImplements = &ast.StmtClassImplements{ast.Node{}, yyDollar[2].list} @@ -3952,7 +3954,7 @@ yydefault: } case 107: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1791 +// line internal/php5/php5.y:1793 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -3960,7 +3962,7 @@ yydefault: } case 108: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:1797 +// line internal/php5/php5.y:1799 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -3971,7 +3973,7 @@ yydefault: } case 109: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:1809 +// line internal/php5/php5.y:1811 { yyVAL.node = nil @@ -3979,7 +3981,7 @@ yydefault: } case 110: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1815 +// line internal/php5/php5.y:1817 { yyVAL.node = yyDollar[2].node @@ -3990,7 +3992,7 @@ yydefault: } case 111: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1827 +// line internal/php5/php5.y:1829 { yyVAL.node = yyDollar[1].node @@ -3998,7 +4000,7 @@ yydefault: } case 112: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:1833 +// line internal/php5/php5.y:1835 { yyVAL.node = &ast.ExprReference{ast.Node{}, yyDollar[2].node} @@ -4012,7 +4014,7 @@ yydefault: } case 113: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:1845 +// line internal/php5/php5.y:1847 { yyVAL.node = &ast.ExprList{ast.Node{}, yyDollar[3].list} @@ -4028,7 +4030,7 @@ yydefault: } case 114: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1862 +// line internal/php5/php5.y:1864 { yyVAL.node = &ast.StmtFor{ast.Node{}, nil, nil, nil, yyDollar[1].node} @@ -4039,7 +4041,7 @@ yydefault: } case 115: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:1871 +// line internal/php5/php5.y:1873 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltFor{ast.Node{}, nil, nil, nil, stmtList} @@ -4058,7 +4060,7 @@ yydefault: } case 116: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1891 +// line internal/php5/php5.y:1893 { yyVAL.node = &ast.StmtForeach{ast.Node{}, nil, nil, nil, yyDollar[1].node} @@ -4069,7 +4071,7 @@ yydefault: } case 117: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:1900 +// line internal/php5/php5.y:1902 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltForeach{ast.Node{}, nil, nil, nil, stmtList} @@ -4088,7 +4090,7 @@ yydefault: } case 118: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:1921 +// line internal/php5/php5.y:1923 { yyVAL.node = &ast.StmtDeclare{ast.Node{}, false, nil, yyDollar[1].node} @@ -4099,7 +4101,7 @@ yydefault: } case 119: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:1930 +// line internal/php5/php5.y:1932 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtDeclare{ast.Node{}, true, nil, stmtList} @@ -4118,7 +4120,7 @@ yydefault: } case 120: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:1951 +// line internal/php5/php5.y:1953 { name := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} constant := &ast.StmtConstant{ast.Node{}, name, yyDollar[3].node} @@ -4136,7 +4138,7 @@ yydefault: } case 121: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:1967 +// line internal/php5/php5.y:1969 { name := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} constant := &ast.StmtConstant{ast.Node{}, name, yyDollar[5].node} @@ -4155,7 +4157,7 @@ yydefault: } case 122: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:1988 +// line internal/php5/php5.y:1990 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtSwitch{ast.Node{}, nil, caseList} @@ -4172,7 +4174,7 @@ yydefault: } case 123: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2003 +// line internal/php5/php5.y:2005 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.StmtSwitch{ast.Node{}, nil, caseList} @@ -4190,7 +4192,7 @@ yydefault: } case 124: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2019 +// line internal/php5/php5.y:2021 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltSwitch{ast.Node{}, nil, caseList} @@ -4209,7 +4211,7 @@ yydefault: } case 125: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:2036 +// line internal/php5/php5.y:2038 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[3].list} @@ -4230,7 +4232,7 @@ yydefault: } case 126: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2059 +// line internal/php5/php5.y:2061 { yyVAL.list = []ast.Vertex{} @@ -4238,7 +4240,7 @@ yydefault: } case 127: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:2065 +// line internal/php5/php5.y:2067 { _case := &ast.StmtCase{ast.Node{}, yyDollar[3].node, yyDollar[5].list} yyVAL.list = append(yyDollar[1].list, _case) @@ -4255,7 +4257,7 @@ yydefault: } case 128: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2080 +// line internal/php5/php5.y:2082 { _default := &ast.StmtDefault{ast.Node{}, yyDollar[4].list} yyVAL.list = append(yyDollar[1].list, _default) @@ -4272,19 +4274,19 @@ yydefault: } case 129: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2099 +// line internal/php5/php5.y:2101 { yyVAL.token = yyDollar[1].token } case 130: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2103 +// line internal/php5/php5.y:2105 { yyVAL.token = yyDollar[1].token } case 131: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2111 +// line internal/php5/php5.y:2113 { yyVAL.node = &ast.StmtWhile{ast.Node{}, nil, yyDollar[1].node} @@ -4295,7 +4297,7 @@ yydefault: } case 132: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2120 +// line internal/php5/php5.y:2122 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltWhile{ast.Node{}, nil, stmtList} @@ -4314,7 +4316,7 @@ yydefault: } case 133: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2142 +// line internal/php5/php5.y:2144 { yyVAL.list = nil @@ -4322,7 +4324,7 @@ yydefault: } case 134: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2148 +// line internal/php5/php5.y:2150 { _elseIf := &ast.StmtElseIf{ast.Node{}, yyDollar[3].node, yyDollar[4].node} yyVAL.list = append(yyDollar[1].list, _elseIf) @@ -4345,7 +4347,7 @@ yydefault: } case 135: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2171 +// line internal/php5/php5.y:2173 { yyVAL.list = nil @@ -4353,7 +4355,7 @@ yydefault: } case 136: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:2177 +// line internal/php5/php5.y:2179 { stmts := &ast.StmtStmtList{ast.Node{}, yyDollar[5].list} _elseIf := &ast.StmtAltElseIf{ast.Node{}, yyDollar[3].node, stmts} @@ -4379,7 +4381,7 @@ yydefault: } case 137: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2203 +// line internal/php5/php5.y:2205 { yyVAL.node = nil @@ -4387,7 +4389,7 @@ yydefault: } case 138: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2209 +// line internal/php5/php5.y:2211 { yyVAL.node = &ast.StmtElse{ast.Node{}, yyDollar[2].node} @@ -4401,7 +4403,7 @@ yydefault: } case 139: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2225 +// line internal/php5/php5.y:2227 { yyVAL.node = nil @@ -4409,7 +4411,7 @@ yydefault: } case 140: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2231 +// line internal/php5/php5.y:2233 { stmts := &ast.StmtStmtList{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.StmtAltElse{ast.Node{}, stmts} @@ -4426,7 +4428,7 @@ yydefault: } case 141: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2250 +// line internal/php5/php5.y:2252 { yyVAL.list = yyDollar[1].list @@ -4434,7 +4436,7 @@ yydefault: } case 142: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2256 +// line internal/php5/php5.y:2258 { yyVAL.list = nil @@ -4442,7 +4444,7 @@ yydefault: } case 143: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2265 +// line internal/php5/php5.y:2267 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4450,7 +4452,7 @@ yydefault: } case 144: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2271 +// line internal/php5/php5.y:2273 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4461,7 +4463,7 @@ yydefault: } case 145: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2283 +// line internal/php5/php5.y:2285 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[4].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4491,6 +4493,7 @@ yydefault: yylex.(*Parser).setFreeFloating(yyVAL.node, token.Ampersand, yyDollar[3].token.Tokens) } yylex.(*Parser).setFreeFloating(yyVAL.node, token.Variadic, yyDollar[4].token.Tokens) + yylex.(*Parser).addDollarToken(variable) // normalize if yyDollar[3].token == nil { @@ -4510,7 +4513,7 @@ yydefault: } case 146: yyDollar = yyS[yypt-6 : yypt+1] -// line internal/php5/php5.y:2327 +// line internal/php5/php5.y:2330 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[4].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4541,6 +4544,7 @@ yydefault: } yylex.(*Parser).setFreeFloating(yyVAL.node, token.Variadic, yyDollar[4].token.Tokens) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, yyDollar[5].token.Tokens) + yylex.(*Parser).addDollarToken(variable) // normalize if yyDollar[3].token == nil { @@ -4560,7 +4564,7 @@ yydefault: } case 147: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2376 +// line internal/php5/php5.y:2380 { yyVAL.node = nil @@ -4568,7 +4572,7 @@ yydefault: } case 148: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2382 +// line internal/php5/php5.y:2386 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -4582,7 +4586,7 @@ yydefault: } case 149: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2394 +// line internal/php5/php5.y:2398 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -4596,7 +4600,7 @@ yydefault: } case 150: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2406 +// line internal/php5/php5.y:2410 { yyVAL.node = yyDollar[1].node @@ -4604,7 +4608,7 @@ yydefault: } case 151: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2416 +// line internal/php5/php5.y:2420 { yyVAL.node = &ast.ArgumentList{ast.Node{}, nil} @@ -4619,7 +4623,7 @@ yydefault: } case 152: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2429 +// line internal/php5/php5.y:2433 { yyVAL.node = &ast.ArgumentList{ast.Node{}, yyDollar[2].list} @@ -4634,7 +4638,7 @@ yydefault: } case 153: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2442 +// line internal/php5/php5.y:2446 { arg := &ast.Argument{ast.Node{}, false, false, yyDollar[2].node} yyVAL.node = &ast.ArgumentList{ast.Node{}, []ast.Vertex{arg}} @@ -4651,7 +4655,7 @@ yydefault: } case 154: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2461 +// line internal/php5/php5.y:2465 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4659,7 +4663,7 @@ yydefault: } case 155: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2467 +// line internal/php5/php5.y:2471 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4670,7 +4674,7 @@ yydefault: } case 156: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2479 +// line internal/php5/php5.y:2483 { yyVAL.node = &ast.Argument{ast.Node{}, false, false, yyDollar[1].node} @@ -4684,7 +4688,7 @@ yydefault: } case 157: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2491 +// line internal/php5/php5.y:2495 { yyVAL.node = &ast.Argument{ast.Node{}, false, false, yyDollar[1].node} @@ -4698,7 +4702,7 @@ yydefault: } case 158: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2503 +// line internal/php5/php5.y:2507 { yyVAL.node = &ast.Argument{ast.Node{}, false, true, yyDollar[2].node} @@ -4712,7 +4716,7 @@ yydefault: } case 159: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2515 +// line internal/php5/php5.y:2519 { yyVAL.node = &ast.Argument{ast.Node{}, true, false, yyDollar[2].node} @@ -4726,7 +4730,7 @@ yydefault: } case 160: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2530 +// line internal/php5/php5.y:2534 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4737,7 +4741,7 @@ yydefault: } case 161: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2539 +// line internal/php5/php5.y:2543 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4745,7 +4749,7 @@ yydefault: } case 162: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2549 +// line internal/php5/php5.y:2553 { name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, name} @@ -4756,12 +4760,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 163: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2563 +// line internal/php5/php5.y:2568 { yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[2].node} @@ -4776,7 +4781,7 @@ yydefault: } case 164: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2576 +// line internal/php5/php5.y:2581 { yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[3].node} @@ -4793,7 +4798,7 @@ yydefault: } case 165: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2595 +// line internal/php5/php5.y:2600 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[3].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4807,13 +4812,14 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(lastNode(yyDollar[1].list), token.End, yyDollar[2].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, yyDollar[3].token.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 166: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:2613 +// line internal/php5/php5.y:2619 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[3].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4827,6 +4833,7 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(lastNode(yyDollar[1].list), token.End, yyDollar[2].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, yyDollar[3].token.Tokens) yylex.(*Parser).setFreeFloating(staticVar, token.Var, yyDollar[4].token.Tokens) @@ -4834,7 +4841,7 @@ yydefault: } case 167: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2632 +// line internal/php5/php5.y:2639 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4847,13 +4854,14 @@ yydefault: staticVar.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenPosition(yyDollar[1].token) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, yyDollar[1].token.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 168: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2649 +// line internal/php5/php5.y:2657 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4866,6 +4874,7 @@ yydefault: staticVar.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, yyDollar[1].token.Tokens) yylex.(*Parser).setFreeFloating(staticVar, token.Var, yyDollar[2].token.Tokens) @@ -4873,7 +4882,7 @@ yydefault: } case 169: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2671 +// line internal/php5/php5.y:2680 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -4881,7 +4890,7 @@ yydefault: } case 170: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2677 +// line internal/php5/php5.y:2686 { yyVAL.list = []ast.Vertex{} @@ -4889,7 +4898,7 @@ yydefault: } case 171: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2687 +// line internal/php5/php5.y:2696 { yyVAL.node = &ast.StmtPropertyList{ast.Node{}, yyDollar[1].list, nil, yyDollar[2].list} @@ -4905,7 +4914,7 @@ yydefault: } case 172: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2701 +// line internal/php5/php5.y:2710 { yyVAL.node = yyDollar[1].node @@ -4920,7 +4929,7 @@ yydefault: } case 173: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2714 +// line internal/php5/php5.y:2723 { yyVAL.node = yyDollar[1].node @@ -4928,7 +4937,7 @@ yydefault: } case 174: yyDollar = yyS[yypt-8 : yypt+1] -// line internal/php5/php5.y:2720 +// line internal/php5/php5.y:2729 { name := &ast.Identifier{ast.Node{}, yyDollar[4].token.Value} yyVAL.node = &ast.StmtClassMethod{ast.Node{}, yyDollar[3].token != nil, name, yyDollar[1].list, yyDollar[6].list, nil, yyDollar[8].node} @@ -4961,7 +4970,7 @@ yydefault: } case 175: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2754 +// line internal/php5/php5.y:2763 { yyVAL.node = &ast.StmtTraitUse{ast.Node{}, yyDollar[2].list, yyDollar[3].node} @@ -4975,7 +4984,7 @@ yydefault: } case 176: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2769 +// line internal/php5/php5.y:2778 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4983,7 +4992,7 @@ yydefault: } case 177: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2775 +// line internal/php5/php5.y:2784 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4994,7 +5003,7 @@ yydefault: } case 178: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2787 +// line internal/php5/php5.y:2796 { yyVAL.node = &ast.StmtNop{ast.Node{}} @@ -5008,7 +5017,7 @@ yydefault: } case 179: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2799 +// line internal/php5/php5.y:2808 { yyVAL.node = &ast.StmtTraitAdaptationList{ast.Node{}, yyDollar[2].list} @@ -5022,7 +5031,7 @@ yydefault: } case 180: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2814 +// line internal/php5/php5.y:2823 { yyVAL.list = nil @@ -5030,7 +5039,7 @@ yydefault: } case 181: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2820 +// line internal/php5/php5.y:2829 { yyVAL.list = yyDollar[1].list @@ -5038,7 +5047,7 @@ yydefault: } case 182: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2829 +// line internal/php5/php5.y:2838 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5046,7 +5055,7 @@ yydefault: } case 183: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2835 +// line internal/php5/php5.y:2844 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -5054,7 +5063,7 @@ yydefault: } case 184: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2844 +// line internal/php5/php5.y:2853 { yyVAL.node = yyDollar[1].node @@ -5066,7 +5075,7 @@ yydefault: } case 185: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:2854 +// line internal/php5/php5.y:2863 { yyVAL.node = yyDollar[1].node @@ -5078,7 +5087,7 @@ yydefault: } case 186: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2867 +// line internal/php5/php5.y:2876 { yyVAL.node = &ast.StmtTraitUsePrecedence{ast.Node{}, yyDollar[1].node, yyDollar[3].list} @@ -5093,7 +5102,7 @@ yydefault: } case 187: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2883 +// line internal/php5/php5.y:2892 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5101,7 +5110,7 @@ yydefault: } case 188: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2889 +// line internal/php5/php5.y:2898 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5112,7 +5121,7 @@ yydefault: } case 189: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2901 +// line internal/php5/php5.y:2910 { name := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.StmtTraitMethodRef{ast.Node{}, nil, name} @@ -5128,7 +5137,7 @@ yydefault: } case 190: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2915 +// line internal/php5/php5.y:2924 { yyVAL.node = yyDollar[1].node @@ -5136,7 +5145,7 @@ yydefault: } case 191: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2924 +// line internal/php5/php5.y:2933 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.StmtTraitMethodRef{ast.Node{}, yyDollar[1].node, target} @@ -5154,7 +5163,7 @@ yydefault: } case 192: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:2943 +// line internal/php5/php5.y:2952 { alias := &ast.Identifier{ast.Node{}, yyDollar[4].token.Value} yyVAL.node = &ast.StmtTraitUseAlias{ast.Node{}, yyDollar[1].node, yyDollar[3].node, alias} @@ -5172,7 +5181,7 @@ yydefault: } case 193: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:2959 +// line internal/php5/php5.y:2968 { yyVAL.node = &ast.StmtTraitUseAlias{ast.Node{}, yyDollar[1].node, yyDollar[3].node, nil} @@ -5187,7 +5196,7 @@ yydefault: } case 194: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:2975 +// line internal/php5/php5.y:2984 { yyVAL.node = nil @@ -5195,7 +5204,7 @@ yydefault: } case 195: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2981 +// line internal/php5/php5.y:2990 { yyVAL.node = yyDollar[1].node @@ -5203,7 +5212,7 @@ yydefault: } case 196: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:2990 +// line internal/php5/php5.y:2999 { yyVAL.node = &ast.StmtNop{ast.Node{}} @@ -5218,7 +5227,7 @@ yydefault: } case 197: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3003 +// line internal/php5/php5.y:3012 { yyVAL.node = &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} @@ -5233,7 +5242,7 @@ yydefault: } case 198: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3019 +// line internal/php5/php5.y:3028 { yyVAL.list = yyDollar[1].list @@ -5241,7 +5250,7 @@ yydefault: } case 199: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3025 +// line internal/php5/php5.y:3034 { modifier := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{modifier} @@ -5256,7 +5265,7 @@ yydefault: } case 200: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:3041 +// line internal/php5/php5.y:3050 { yyVAL.list = nil @@ -5264,7 +5273,7 @@ yydefault: } case 201: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3047 +// line internal/php5/php5.y:3056 { yyVAL.list = yyDollar[1].list @@ -5272,7 +5281,7 @@ yydefault: } case 202: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3056 +// line internal/php5/php5.y:3065 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5280,7 +5289,7 @@ yydefault: } case 203: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3062 +// line internal/php5/php5.y:3071 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -5288,7 +5297,7 @@ yydefault: } case 204: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3071 +// line internal/php5/php5.y:3080 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5302,7 +5311,7 @@ yydefault: } case 205: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3083 +// line internal/php5/php5.y:3092 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5316,7 +5325,7 @@ yydefault: } case 206: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3095 +// line internal/php5/php5.y:3104 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5330,7 +5339,7 @@ yydefault: } case 207: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3107 +// line internal/php5/php5.y:3116 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5344,7 +5353,7 @@ yydefault: } case 208: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3119 +// line internal/php5/php5.y:3128 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5358,7 +5367,7 @@ yydefault: } case 209: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3131 +// line internal/php5/php5.y:3140 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5372,7 +5381,7 @@ yydefault: } case 210: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3146 +// line internal/php5/php5.y:3155 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[3].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -5385,6 +5394,7 @@ yydefault: property.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenPosition(yyDollar[3].token) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(lastNode(yyDollar[1].list), token.End, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(property, token.Start, yyDollar[3].token.Tokens) @@ -5392,7 +5402,7 @@ yydefault: } case 211: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:3164 +// line internal/php5/php5.y:3174 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[3].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -5406,6 +5416,7 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(lastNode(yyDollar[1].list), token.End, yyDollar[2].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(property, token.Start, yyDollar[3].token.Tokens) yylex.(*Parser).setFreeFloating(property, token.Var, yyDollar[4].token.Tokens) @@ -5413,7 +5424,7 @@ yydefault: } case 212: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3183 +// line internal/php5/php5.y:3194 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -5426,13 +5437,14 @@ yydefault: property.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenPosition(yyDollar[1].token) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(property, token.Start, yyDollar[1].token.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 213: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3200 +// line internal/php5/php5.y:3212 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -5445,6 +5457,7 @@ yydefault: property.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(property, token.Start, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(property, token.Var, yyDollar[2].token.Tokens) @@ -5452,7 +5465,7 @@ yydefault: } case 214: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:3221 +// line internal/php5/php5.y:3234 { name := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} constant := &ast.StmtConstant{ast.Node{}, name, yyDollar[5].node} @@ -5475,7 +5488,7 @@ yydefault: } case 215: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:3242 +// line internal/php5/php5.y:3255 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} constant := &ast.StmtConstant{ast.Node{}, name, yyDollar[4].node} @@ -5495,7 +5508,7 @@ yydefault: } case 216: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3263 +// line internal/php5/php5.y:3276 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5506,7 +5519,7 @@ yydefault: } case 217: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3272 +// line internal/php5/php5.y:3285 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5514,7 +5527,7 @@ yydefault: } case 218: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:3282 +// line internal/php5/php5.y:3295 { yyVAL.list = nil @@ -5522,7 +5535,7 @@ yydefault: } case 219: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3288 +// line internal/php5/php5.y:3301 { yyVAL.list = yyDollar[1].list @@ -5530,7 +5543,7 @@ yydefault: } case 220: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3297 +// line internal/php5/php5.y:3310 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5541,7 +5554,7 @@ yydefault: } case 221: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3306 +// line internal/php5/php5.y:3319 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5549,7 +5562,7 @@ yydefault: } case 222: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3315 +// line internal/php5/php5.y:3328 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) @@ -5557,7 +5570,7 @@ yydefault: } case 223: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3321 +// line internal/php5/php5.y:3334 { yyVAL.list = yyDollar[1].list @@ -5565,7 +5578,7 @@ yydefault: } case 224: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:3330 +// line internal/php5/php5.y:3343 { fetch := &ast.ExprArrayDimFetch{ast.Node{}, nil, yyDollar[3].node} yyVAL.list = append(yyDollar[1].list, fetch) @@ -5581,7 +5594,7 @@ yydefault: } case 225: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3344 +// line internal/php5/php5.y:3357 { fetch := &ast.ExprArrayDimFetch{ast.Node{}, nil, yyDollar[2].node} yyVAL.list = []ast.Vertex{fetch} @@ -5597,7 +5610,7 @@ yydefault: } case 226: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3361 +// line internal/php5/php5.y:3374 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) @@ -5605,7 +5618,7 @@ yydefault: } case 227: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3367 +// line internal/php5/php5.y:3380 { yyVAL.list = yyDollar[1].list @@ -5613,7 +5626,7 @@ yydefault: } case 228: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3373 +// line internal/php5/php5.y:3386 { yyVAL.list = yyDollar[1].list @@ -5621,7 +5634,7 @@ yydefault: } case 229: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:3382 +// line internal/php5/php5.y:3395 { yyVAL.list = nil @@ -5629,7 +5642,7 @@ yydefault: } case 230: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:3388 +// line internal/php5/php5.y:3401 { yyVAL.list = yyDollar[1].list @@ -5637,7 +5650,7 @@ yydefault: } case 231: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3397 +// line internal/php5/php5.y:3410 { if yyDollar[3].node != nil { @@ -5655,7 +5668,7 @@ yydefault: } case 232: yyDollar = yyS[yypt-6 : yypt+1] -// line internal/php5/php5.y:3416 +// line internal/php5/php5.y:3429 { listNode := &ast.ExprList{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.ExprAssign{ast.Node{}, listNode, yyDollar[6].node} @@ -5674,7 +5687,7 @@ yydefault: } case 233: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3433 +// line internal/php5/php5.y:3446 { yyVAL.node = &ast.ExprAssign{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5689,7 +5702,7 @@ yydefault: } case 234: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:3446 +// line internal/php5/php5.y:3459 { yyVAL.node = &ast.ExprAssignReference{ast.Node{}, yyDollar[1].node, yyDollar[4].node} @@ -5705,7 +5718,7 @@ yydefault: } case 235: yyDollar = yyS[yypt-6 : yypt+1] -// line internal/php5/php5.y:3460 +// line internal/php5/php5.y:3473 { var _new *ast.ExprNew @@ -5734,7 +5747,7 @@ yydefault: } case 236: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3487 +// line internal/php5/php5.y:3500 { yyVAL.node = &ast.ExprClone{ast.Node{}, yyDollar[2].node} @@ -5748,7 +5761,7 @@ yydefault: } case 237: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3499 +// line internal/php5/php5.y:3512 { yyVAL.node = &ast.ExprAssignPlus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5762,7 +5775,7 @@ yydefault: } case 238: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3511 +// line internal/php5/php5.y:3524 { yyVAL.node = &ast.ExprAssignMinus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5777,7 +5790,7 @@ yydefault: } case 239: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3524 +// line internal/php5/php5.y:3537 { yyVAL.node = &ast.ExprAssignMul{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5792,7 +5805,7 @@ yydefault: } case 240: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3537 +// line internal/php5/php5.y:3550 { yyVAL.node = &ast.ExprAssignPow{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5807,7 +5820,7 @@ yydefault: } case 241: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3550 +// line internal/php5/php5.y:3563 { yyVAL.node = &ast.ExprAssignDiv{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5822,7 +5835,7 @@ yydefault: } case 242: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3563 +// line internal/php5/php5.y:3576 { yyVAL.node = &ast.ExprAssignConcat{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5837,7 +5850,7 @@ yydefault: } case 243: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3576 +// line internal/php5/php5.y:3589 { yyVAL.node = &ast.ExprAssignMod{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5852,7 +5865,7 @@ yydefault: } case 244: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3589 +// line internal/php5/php5.y:3602 { yyVAL.node = &ast.ExprAssignBitwiseAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5867,7 +5880,7 @@ yydefault: } case 245: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3602 +// line internal/php5/php5.y:3615 { yyVAL.node = &ast.ExprAssignBitwiseOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5882,7 +5895,7 @@ yydefault: } case 246: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3615 +// line internal/php5/php5.y:3628 { yyVAL.node = &ast.ExprAssignBitwiseXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5897,7 +5910,7 @@ yydefault: } case 247: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3628 +// line internal/php5/php5.y:3641 { yyVAL.node = &ast.ExprAssignShiftLeft{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5912,7 +5925,7 @@ yydefault: } case 248: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3641 +// line internal/php5/php5.y:3654 { yyVAL.node = &ast.ExprAssignShiftRight{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5927,7 +5940,7 @@ yydefault: } case 249: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3654 +// line internal/php5/php5.y:3667 { yyVAL.node = &ast.ExprPostInc{ast.Node{}, yyDollar[1].node} @@ -5942,7 +5955,7 @@ yydefault: } case 250: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3667 +// line internal/php5/php5.y:3680 { yyVAL.node = &ast.ExprPreInc{ast.Node{}, yyDollar[2].node} @@ -5956,7 +5969,7 @@ yydefault: } case 251: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3679 +// line internal/php5/php5.y:3692 { yyVAL.node = &ast.ExprPostDec{ast.Node{}, yyDollar[1].node} @@ -5971,7 +5984,7 @@ yydefault: } case 252: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3692 +// line internal/php5/php5.y:3705 { yyVAL.node = &ast.ExprPreDec{ast.Node{}, yyDollar[2].node} @@ -5985,7 +5998,7 @@ yydefault: } case 253: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3704 +// line internal/php5/php5.y:3717 { yyVAL.node = &ast.ExprBinaryBooleanOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6000,7 +6013,7 @@ yydefault: } case 254: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3717 +// line internal/php5/php5.y:3730 { yyVAL.node = &ast.ExprBinaryBooleanAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6015,7 +6028,7 @@ yydefault: } case 255: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3730 +// line internal/php5/php5.y:3743 { yyVAL.node = &ast.ExprBinaryLogicalOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6030,7 +6043,7 @@ yydefault: } case 256: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3743 +// line internal/php5/php5.y:3756 { yyVAL.node = &ast.ExprBinaryLogicalAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6045,7 +6058,7 @@ yydefault: } case 257: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3756 +// line internal/php5/php5.y:3769 { yyVAL.node = &ast.ExprBinaryLogicalXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6060,7 +6073,7 @@ yydefault: } case 258: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3769 +// line internal/php5/php5.y:3782 { yyVAL.node = &ast.ExprBinaryBitwiseOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6075,7 +6088,7 @@ yydefault: } case 259: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3782 +// line internal/php5/php5.y:3795 { yyVAL.node = &ast.ExprBinaryBitwiseAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6090,7 +6103,7 @@ yydefault: } case 260: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3795 +// line internal/php5/php5.y:3808 { yyVAL.node = &ast.ExprBinaryBitwiseXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6105,7 +6118,7 @@ yydefault: } case 261: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3808 +// line internal/php5/php5.y:3821 { yyVAL.node = &ast.ExprBinaryConcat{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6120,7 +6133,7 @@ yydefault: } case 262: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3821 +// line internal/php5/php5.y:3834 { yyVAL.node = &ast.ExprBinaryPlus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6135,7 +6148,7 @@ yydefault: } case 263: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3834 +// line internal/php5/php5.y:3847 { yyVAL.node = &ast.ExprBinaryMinus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6150,7 +6163,7 @@ yydefault: } case 264: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3847 +// line internal/php5/php5.y:3860 { yyVAL.node = &ast.ExprBinaryMul{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6165,7 +6178,7 @@ yydefault: } case 265: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3860 +// line internal/php5/php5.y:3873 { yyVAL.node = &ast.ExprBinaryPow{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6180,7 +6193,7 @@ yydefault: } case 266: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3873 +// line internal/php5/php5.y:3886 { yyVAL.node = &ast.ExprBinaryDiv{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6195,7 +6208,7 @@ yydefault: } case 267: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3886 +// line internal/php5/php5.y:3899 { yyVAL.node = &ast.ExprBinaryMod{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6210,7 +6223,7 @@ yydefault: } case 268: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3899 +// line internal/php5/php5.y:3912 { yyVAL.node = &ast.ExprBinaryShiftLeft{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6225,7 +6238,7 @@ yydefault: } case 269: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3912 +// line internal/php5/php5.y:3925 { yyVAL.node = &ast.ExprBinaryShiftRight{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6240,7 +6253,7 @@ yydefault: } case 270: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3925 +// line internal/php5/php5.y:3938 { yyVAL.node = &ast.ExprUnaryPlus{ast.Node{}, yyDollar[2].node} @@ -6254,7 +6267,7 @@ yydefault: } case 271: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3937 +// line internal/php5/php5.y:3950 { yyVAL.node = &ast.ExprUnaryMinus{ast.Node{}, yyDollar[2].node} @@ -6268,7 +6281,7 @@ yydefault: } case 272: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3949 +// line internal/php5/php5.y:3962 { yyVAL.node = &ast.ExprBooleanNot{ast.Node{}, yyDollar[2].node} @@ -6282,7 +6295,7 @@ yydefault: } case 273: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:3961 +// line internal/php5/php5.y:3974 { yyVAL.node = &ast.ExprBitwiseNot{ast.Node{}, yyDollar[2].node} @@ -6296,7 +6309,7 @@ yydefault: } case 274: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3973 +// line internal/php5/php5.y:3986 { yyVAL.node = &ast.ExprBinaryIdentical{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6311,7 +6324,7 @@ yydefault: } case 275: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3986 +// line internal/php5/php5.y:3999 { yyVAL.node = &ast.ExprBinaryNotIdentical{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6326,7 +6339,7 @@ yydefault: } case 276: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:3999 +// line internal/php5/php5.y:4012 { yyVAL.node = &ast.ExprBinaryEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6341,7 +6354,7 @@ yydefault: } case 277: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4012 +// line internal/php5/php5.y:4025 { yyVAL.node = &ast.ExprBinaryNotEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6357,7 +6370,7 @@ yydefault: } case 278: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4026 +// line internal/php5/php5.y:4039 { yyVAL.node = &ast.ExprBinarySmaller{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6372,7 +6385,7 @@ yydefault: } case 279: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4039 +// line internal/php5/php5.y:4052 { yyVAL.node = &ast.ExprBinarySmallerOrEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6387,7 +6400,7 @@ yydefault: } case 280: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4052 +// line internal/php5/php5.y:4065 { yyVAL.node = &ast.ExprBinaryGreater{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6402,7 +6415,7 @@ yydefault: } case 281: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4065 +// line internal/php5/php5.y:4078 { yyVAL.node = &ast.ExprBinaryGreaterOrEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6417,7 +6430,7 @@ yydefault: } case 282: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4078 +// line internal/php5/php5.y:4091 { yyVAL.node = &ast.ExprInstanceOf{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6432,7 +6445,7 @@ yydefault: } case 283: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4091 +// line internal/php5/php5.y:4104 { yyVAL.node = yyDollar[1].node @@ -6445,7 +6458,7 @@ yydefault: } case 284: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4100 +// line internal/php5/php5.y:4113 { yyVAL.node = yyDollar[1].node @@ -6453,7 +6466,7 @@ yydefault: } case 285: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4106 +// line internal/php5/php5.y:4119 { yyVAL.node = yyDollar[2].node @@ -6487,7 +6500,7 @@ yydefault: } case 286: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:4138 +// line internal/php5/php5.y:4151 { yyVAL.node = &ast.ExprTernary{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[5].node} @@ -6503,7 +6516,7 @@ yydefault: } case 287: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4152 +// line internal/php5/php5.y:4165 { yyVAL.node = &ast.ExprTernary{ast.Node{}, yyDollar[1].node, nil, yyDollar[4].node} @@ -6519,7 +6532,7 @@ yydefault: } case 288: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4166 +// line internal/php5/php5.y:4179 { yyVAL.node = yyDollar[1].node @@ -6527,7 +6540,7 @@ yydefault: } case 289: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4172 +// line internal/php5/php5.y:4185 { yyVAL.node = &ast.ExprCastInt{ast.Node{}, yyDollar[2].node} @@ -6542,7 +6555,7 @@ yydefault: } case 290: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4185 +// line internal/php5/php5.y:4198 { yyVAL.node = &ast.ExprCastDouble{ast.Node{}, yyDollar[2].node} @@ -6557,7 +6570,7 @@ yydefault: } case 291: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4198 +// line internal/php5/php5.y:4211 { yyVAL.node = &ast.ExprCastString{ast.Node{}, yyDollar[2].node} @@ -6572,7 +6585,7 @@ yydefault: } case 292: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4211 +// line internal/php5/php5.y:4224 { yyVAL.node = &ast.ExprCastArray{ast.Node{}, yyDollar[2].node} @@ -6587,7 +6600,7 @@ yydefault: } case 293: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4224 +// line internal/php5/php5.y:4237 { yyVAL.node = &ast.ExprCastObject{ast.Node{}, yyDollar[2].node} @@ -6602,7 +6615,7 @@ yydefault: } case 294: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4237 +// line internal/php5/php5.y:4250 { yyVAL.node = &ast.ExprCastBool{ast.Node{}, yyDollar[2].node} @@ -6617,7 +6630,7 @@ yydefault: } case 295: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4250 +// line internal/php5/php5.y:4263 { yyVAL.node = &ast.ExprCastUnset{ast.Node{}, yyDollar[2].node} @@ -6632,7 +6645,7 @@ yydefault: } case 296: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4263 +// line internal/php5/php5.y:4276 { e := yyDollar[2].node.(*ast.ExprExit) yyVAL.node = yyDollar[2].node @@ -6655,7 +6668,7 @@ yydefault: } case 297: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4284 +// line internal/php5/php5.y:4297 { yyVAL.node = &ast.ExprErrorSuppress{ast.Node{}, yyDollar[2].node} @@ -6669,7 +6682,7 @@ yydefault: } case 298: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4296 +// line internal/php5/php5.y:4309 { yyVAL.node = yyDollar[1].node @@ -6677,7 +6690,7 @@ yydefault: } case 299: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4302 +// line internal/php5/php5.y:4315 { yyVAL.node = yyDollar[1].node @@ -6685,7 +6698,7 @@ yydefault: } case 300: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4308 +// line internal/php5/php5.y:4321 { yyVAL.node = yyDollar[1].node @@ -6693,7 +6706,7 @@ yydefault: } case 301: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4314 +// line internal/php5/php5.y:4327 { yyVAL.node = &ast.ExprShellExec{ast.Node{}, yyDollar[2].list} @@ -6707,7 +6720,7 @@ yydefault: } case 302: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4326 +// line internal/php5/php5.y:4339 { yyVAL.node = &ast.ExprPrint{ast.Node{}, yyDollar[2].node} @@ -6721,7 +6734,7 @@ yydefault: } case 303: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4338 +// line internal/php5/php5.y:4351 { yyVAL.node = &ast.ExprYield{ast.Node{}, nil, nil} @@ -6735,7 +6748,7 @@ yydefault: } case 304: yyDollar = yyS[yypt-9 : yypt+1] -// line internal/php5/php5.y:4350 +// line internal/php5/php5.y:4363 { yyVAL.node = &ast.ExprClosure{ast.Node{}, yyDollar[2].token != nil, false, yyDollar[4].list, yyDollar[6].ClosureUse, nil, yyDollar[8].list} @@ -6764,7 +6777,7 @@ yydefault: } case 305: yyDollar = yyS[yypt-10 : yypt+1] -// line internal/php5/php5.y:4376 +// line internal/php5/php5.y:4389 { yyVAL.node = &ast.ExprClosure{ast.Node{}, yyDollar[3].token != nil, true, yyDollar[5].list, yyDollar[7].ClosureUse, nil, yyDollar[9].list} @@ -6794,7 +6807,7 @@ yydefault: } case 306: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4406 +// line internal/php5/php5.y:4419 { yyVAL.node = &ast.ExprYield{ast.Node{}, nil, yyDollar[2].node} @@ -6808,7 +6821,7 @@ yydefault: } case 307: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4418 +// line internal/php5/php5.y:4431 { yyVAL.node = &ast.ExprYield{ast.Node{}, nil, yyDollar[2].node} @@ -6822,21 +6835,6 @@ yydefault: } case 308: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4430 - { - yyVAL.node = &ast.ExprYield{ast.Node{}, yyDollar[2].node, yyDollar[4].node} - - // save position - yyVAL.node.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node) - - // save comments - yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) - yylex.(*Parser).setFreeFloating(yyVAL.node, token.Expr, yyDollar[3].token.Tokens) - - yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) - } - case 309: - yyDollar = yyS[yypt-4 : yypt+1] // line internal/php5/php5.y:4443 { yyVAL.node = &ast.ExprYield{ast.Node{}, yyDollar[2].node, yyDollar[4].node} @@ -6850,9 +6848,24 @@ yydefault: yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } + case 309: + yyDollar = yyS[yypt-4 : yypt+1] +// line internal/php5/php5.y:4456 + { + yyVAL.node = &ast.ExprYield{ast.Node{}, yyDollar[2].node, yyDollar[4].node} + + // save position + yyVAL.node.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node) + + // save comments + yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).setFreeFloating(yyVAL.node, token.Expr, yyDollar[3].token.Tokens) + + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) + } case 310: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4459 +// line internal/php5/php5.y:4472 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6868,7 +6881,7 @@ yydefault: } case 311: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4473 +// line internal/php5/php5.y:4486 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6884,7 +6897,7 @@ yydefault: } case 312: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4487 +// line internal/php5/php5.y:4500 { str := &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, str, yyDollar[3].node} @@ -6902,7 +6915,7 @@ yydefault: } case 313: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4503 +// line internal/php5/php5.y:4516 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6918,7 +6931,7 @@ yydefault: } case 314: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4520 +// line internal/php5/php5.y:4533 { yyVAL.node = &ast.ExprArray{ast.Node{}, yyDollar[3].list} @@ -6934,7 +6947,7 @@ yydefault: } case 315: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4534 +// line internal/php5/php5.y:4547 { yyVAL.node = &ast.ExprShortArray{ast.Node{}, yyDollar[2].list} @@ -6949,13 +6962,13 @@ yydefault: } case 316: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4550 +// line internal/php5/php5.y:4563 { yyVAL.token = yyDollar[1].token } case 317: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:4557 +// line internal/php5/php5.y:4570 { yyVAL.ClosureUse = nil @@ -6963,7 +6976,7 @@ yydefault: } case 318: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4563 +// line internal/php5/php5.y:4576 { yyVAL.ClosureUse = &ast.ExprClosureUse{ast.Node{}, yyDollar[3].list} @@ -6979,7 +6992,7 @@ yydefault: } case 319: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4580 +// line internal/php5/php5.y:4593 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[3].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -6992,12 +7005,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(lastNode(yyDollar[1].list), token.End, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[3].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 320: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4596 +// line internal/php5/php5.y:4610 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[4].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -7013,12 +7027,13 @@ yydefault: yylex.(*Parser).setFreeFloating(lastNode(yyDollar[1].list), token.End, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(reference, token.Start, yyDollar[3].token.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[4].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 321: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4615 +// line internal/php5/php5.y:4630 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -7030,12 +7045,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 322: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4630 +// line internal/php5/php5.y:4646 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[2].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -7050,12 +7066,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(reference, token.Start, yyDollar[1].token.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[2].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 323: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4651 +// line internal/php5/php5.y:4668 { name := &ast.NameName{ast.Node{}, yyDollar[1].list} yyVAL.node = &ast.ExprFunctionCall{ast.Node{}, name, yyDollar[2].node.(*ast.ArgumentList)} @@ -7071,7 +7088,7 @@ yydefault: } case 324: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4665 +// line internal/php5/php5.y:4682 { funcName := &ast.NameRelative{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.ExprFunctionCall{ast.Node{}, funcName, yyDollar[4].node.(*ast.ArgumentList)} @@ -7088,7 +7105,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4680 +// line internal/php5/php5.y:4697 { funcName := &ast.NameFullyQualified{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.ExprFunctionCall{ast.Node{}, funcName, yyDollar[3].node.(*ast.ArgumentList)} @@ -7104,7 +7121,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4694 +// line internal/php5/php5.y:4711 { yyVAL.node = &ast.ExprStaticCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)} @@ -7119,7 +7136,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4707 +// line internal/php5/php5.y:4724 { yyVAL.node = &ast.ExprStaticCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)} @@ -7134,7 +7151,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4720 +// line internal/php5/php5.y:4737 { yyVAL.node = &ast.ExprStaticCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)} @@ -7149,7 +7166,7 @@ yydefault: } case 329: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4733 +// line internal/php5/php5.y:4750 { yyVAL.node = &ast.ExprStaticCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)} @@ -7164,7 +7181,7 @@ yydefault: } case 330: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4746 +// line internal/php5/php5.y:4763 { yyVAL.node = &ast.ExprFunctionCall{ast.Node{}, yyDollar[1].node, yyDollar[2].node.(*ast.ArgumentList)} @@ -7178,7 +7195,7 @@ yydefault: } case 331: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4761 +// line internal/php5/php5.y:4778 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -7192,7 +7209,7 @@ yydefault: } case 332: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4773 +// line internal/php5/php5.y:4790 { yyVAL.node = &ast.NameName{ast.Node{}, yyDollar[1].list} @@ -7206,7 +7223,7 @@ yydefault: } case 333: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4785 +// line internal/php5/php5.y:4802 { yyVAL.node = &ast.NameRelative{ast.Node{}, yyDollar[3].list} @@ -7221,7 +7238,7 @@ yydefault: } case 334: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4798 +// line internal/php5/php5.y:4815 { yyVAL.node = &ast.NameFullyQualified{ast.Node{}, yyDollar[2].list} @@ -7235,7 +7252,7 @@ yydefault: } case 335: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4813 +// line internal/php5/php5.y:4830 { yyVAL.node = &ast.NameName{ast.Node{}, yyDollar[1].list} @@ -7249,7 +7266,7 @@ yydefault: } case 336: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:4825 +// line internal/php5/php5.y:4842 { yyVAL.node = &ast.NameRelative{ast.Node{}, yyDollar[3].list} @@ -7264,7 +7281,7 @@ yydefault: } case 337: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4838 +// line internal/php5/php5.y:4855 { yyVAL.node = &ast.NameFullyQualified{ast.Node{}, yyDollar[2].list} @@ -7278,7 +7295,7 @@ yydefault: } case 338: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4853 +// line internal/php5/php5.y:4870 { yyVAL.node = yyDollar[1].node @@ -7286,7 +7303,7 @@ yydefault: } case 339: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4859 +// line internal/php5/php5.y:4876 { yyVAL.node = yyDollar[1].node @@ -7294,7 +7311,7 @@ yydefault: } case 340: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:4868 +// line internal/php5/php5.y:4885 { yyVAL.node = yyDollar[1].node @@ -7337,7 +7354,7 @@ yydefault: } case 341: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4909 +// line internal/php5/php5.y:4926 { yyVAL.node = yyDollar[1].node @@ -7345,7 +7362,7 @@ yydefault: } case 342: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4919 +// line internal/php5/php5.y:4936 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) @@ -7353,7 +7370,7 @@ yydefault: } case 343: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:4925 +// line internal/php5/php5.y:4942 { yyVAL.list = []ast.Vertex{} @@ -7361,7 +7378,7 @@ yydefault: } case 344: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4935 +// line internal/php5/php5.y:4952 { yyVAL.list = yyDollar[2].list @@ -7372,7 +7389,7 @@ yydefault: } case 345: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:4947 +// line internal/php5/php5.y:4964 { yyVAL.node = &ast.ExprExit{ast.Node{}, false, nil} @@ -7380,7 +7397,7 @@ yydefault: } case 346: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:4953 +// line internal/php5/php5.y:4970 { yyVAL.node = &ast.ExprExit{ast.Node{}, false, nil} @@ -7395,7 +7412,7 @@ yydefault: } case 347: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4966 +// line internal/php5/php5.y:4983 { yyVAL.node = &ast.ExprExit{ast.Node{}, false, yyDollar[1].node} @@ -7416,7 +7433,7 @@ yydefault: } case 348: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:4986 +// line internal/php5/php5.y:5003 { yyVAL.list = []ast.Vertex{} @@ -7424,7 +7441,7 @@ yydefault: } case 349: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:4992 +// line internal/php5/php5.y:5009 { part := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{part} @@ -7436,7 +7453,7 @@ yydefault: } case 350: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5002 +// line internal/php5/php5.y:5019 { yyVAL.list = yyDollar[1].list @@ -7444,7 +7461,7 @@ yydefault: } case 351: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:5011 +// line internal/php5/php5.y:5028 { yyVAL.node = nil @@ -7452,7 +7469,7 @@ yydefault: } case 352: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5017 +// line internal/php5/php5.y:5034 { yyVAL.node = yyDollar[1].node @@ -7460,7 +7477,7 @@ yydefault: } case 353: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5026 +// line internal/php5/php5.y:5043 { yyVAL.node = &ast.ScalarLnumber{ast.Node{}, yyDollar[1].token.Value} @@ -7474,7 +7491,7 @@ yydefault: } case 354: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5038 +// line internal/php5/php5.y:5055 { yyVAL.node = &ast.ScalarDnumber{ast.Node{}, yyDollar[1].token.Value} @@ -7488,7 +7505,7 @@ yydefault: } case 355: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5050 +// line internal/php5/php5.y:5067 { yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value} @@ -7502,7 +7519,7 @@ yydefault: } case 356: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5062 +// line internal/php5/php5.y:5079 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7516,7 +7533,7 @@ yydefault: } case 357: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5074 +// line internal/php5/php5.y:5091 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7530,7 +7547,7 @@ yydefault: } case 358: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5086 +// line internal/php5/php5.y:5103 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7544,7 +7561,7 @@ yydefault: } case 359: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5098 +// line internal/php5/php5.y:5115 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7558,7 +7575,7 @@ yydefault: } case 360: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5110 +// line internal/php5/php5.y:5127 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7572,7 +7589,7 @@ yydefault: } case 361: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5122 +// line internal/php5/php5.y:5139 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7586,7 +7603,7 @@ yydefault: } case 362: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5134 +// line internal/php5/php5.y:5151 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7600,7 +7617,7 @@ yydefault: } case 363: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5146 +// line internal/php5/php5.y:5163 { encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[2].token.Value} yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, []ast.Vertex{encapsed}} @@ -7616,7 +7633,7 @@ yydefault: } case 364: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5160 +// line internal/php5/php5.y:5177 { yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, nil} @@ -7630,7 +7647,7 @@ yydefault: } case 365: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5175 +// line internal/php5/php5.y:5192 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.ExprClassConstFetch{ast.Node{}, yyDollar[1].node, target} @@ -7648,7 +7665,7 @@ yydefault: } case 366: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5194 +// line internal/php5/php5.y:5211 { yyVAL.node = yyDollar[1].node @@ -7656,7 +7673,7 @@ yydefault: } case 367: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5203 +// line internal/php5/php5.y:5220 { yyVAL.node = yyDollar[1].node @@ -7664,7 +7681,7 @@ yydefault: } case 368: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5209 +// line internal/php5/php5.y:5226 { yyVAL.node = yyDollar[1].node @@ -7672,7 +7689,7 @@ yydefault: } case 369: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5215 +// line internal/php5/php5.y:5232 { name := &ast.NameName{ast.Node{}, yyDollar[1].list} yyVAL.node = &ast.ExprConstFetch{ast.Node{}, name} @@ -7688,7 +7705,7 @@ yydefault: } case 370: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5229 +// line internal/php5/php5.y:5246 { name := &ast.NameRelative{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.ExprConstFetch{ast.Node{}, name} @@ -7705,7 +7722,7 @@ yydefault: } case 371: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5244 +// line internal/php5/php5.y:5261 { name := &ast.NameFullyQualified{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.ExprConstFetch{ast.Node{}, name} @@ -7721,7 +7738,7 @@ yydefault: } case 372: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:5258 +// line internal/php5/php5.y:5275 { yyVAL.node = &ast.ExprArray{ast.Node{}, yyDollar[3].list} @@ -7737,7 +7754,7 @@ yydefault: } case 373: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5272 +// line internal/php5/php5.y:5289 { yyVAL.node = &ast.ExprShortArray{ast.Node{}, yyDollar[2].list} @@ -7752,7 +7769,7 @@ yydefault: } case 374: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5285 +// line internal/php5/php5.y:5302 { yyVAL.node = yyDollar[1].node @@ -7760,7 +7777,7 @@ yydefault: } case 375: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5291 +// line internal/php5/php5.y:5308 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7774,7 +7791,7 @@ yydefault: } case 376: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5303 +// line internal/php5/php5.y:5320 { yyVAL.node = yyDollar[1].node @@ -7782,7 +7799,7 @@ yydefault: } case 377: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:5312 +// line internal/php5/php5.y:5329 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7798,7 +7815,7 @@ yydefault: } case 378: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5326 +// line internal/php5/php5.y:5343 { yyVAL.node = &ast.ExprBinaryPlus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7813,7 +7830,7 @@ yydefault: } case 379: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5339 +// line internal/php5/php5.y:5356 { yyVAL.node = &ast.ExprBinaryMinus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7828,7 +7845,7 @@ yydefault: } case 380: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5352 +// line internal/php5/php5.y:5369 { yyVAL.node = &ast.ExprBinaryMul{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7843,7 +7860,7 @@ yydefault: } case 381: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5365 +// line internal/php5/php5.y:5382 { yyVAL.node = &ast.ExprBinaryPow{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7858,7 +7875,7 @@ yydefault: } case 382: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5378 +// line internal/php5/php5.y:5395 { yyVAL.node = &ast.ExprBinaryDiv{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7873,7 +7890,7 @@ yydefault: } case 383: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5391 +// line internal/php5/php5.y:5408 { yyVAL.node = &ast.ExprBinaryMod{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7888,7 +7905,7 @@ yydefault: } case 384: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5404 +// line internal/php5/php5.y:5421 { yyVAL.node = &ast.ExprBooleanNot{ast.Node{}, yyDollar[2].node} @@ -7902,7 +7919,7 @@ yydefault: } case 385: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5416 +// line internal/php5/php5.y:5433 { yyVAL.node = &ast.ExprBitwiseNot{ast.Node{}, yyDollar[2].node} @@ -7916,7 +7933,7 @@ yydefault: } case 386: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5428 +// line internal/php5/php5.y:5445 { yyVAL.node = &ast.ExprBinaryBitwiseOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7931,7 +7948,7 @@ yydefault: } case 387: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5441 +// line internal/php5/php5.y:5458 { yyVAL.node = &ast.ExprBinaryBitwiseAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7946,7 +7963,7 @@ yydefault: } case 388: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5454 +// line internal/php5/php5.y:5471 { yyVAL.node = &ast.ExprBinaryBitwiseXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7961,7 +7978,7 @@ yydefault: } case 389: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5467 +// line internal/php5/php5.y:5484 { yyVAL.node = &ast.ExprBinaryShiftLeft{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7976,7 +7993,7 @@ yydefault: } case 390: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5480 +// line internal/php5/php5.y:5497 { yyVAL.node = &ast.ExprBinaryShiftRight{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7991,7 +8008,7 @@ yydefault: } case 391: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5493 +// line internal/php5/php5.y:5510 { yyVAL.node = &ast.ExprBinaryConcat{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8006,7 +8023,7 @@ yydefault: } case 392: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5506 +// line internal/php5/php5.y:5523 { yyVAL.node = &ast.ExprBinaryLogicalXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8021,7 +8038,7 @@ yydefault: } case 393: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5519 +// line internal/php5/php5.y:5536 { yyVAL.node = &ast.ExprBinaryLogicalAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8036,7 +8053,7 @@ yydefault: } case 394: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5532 +// line internal/php5/php5.y:5549 { yyVAL.node = &ast.ExprBinaryLogicalOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8051,7 +8068,7 @@ yydefault: } case 395: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5545 +// line internal/php5/php5.y:5562 { yyVAL.node = &ast.ExprBinaryBooleanAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8066,7 +8083,7 @@ yydefault: } case 396: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5558 +// line internal/php5/php5.y:5575 { yyVAL.node = &ast.ExprBinaryBooleanOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8081,7 +8098,7 @@ yydefault: } case 397: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5571 +// line internal/php5/php5.y:5588 { yyVAL.node = &ast.ExprBinaryIdentical{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8096,7 +8113,7 @@ yydefault: } case 398: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5584 +// line internal/php5/php5.y:5601 { yyVAL.node = &ast.ExprBinaryNotIdentical{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8111,7 +8128,7 @@ yydefault: } case 399: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5597 +// line internal/php5/php5.y:5614 { yyVAL.node = &ast.ExprBinaryEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8126,7 +8143,7 @@ yydefault: } case 400: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5610 +// line internal/php5/php5.y:5627 { yyVAL.node = &ast.ExprBinaryNotEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8142,7 +8159,7 @@ yydefault: } case 401: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5624 +// line internal/php5/php5.y:5641 { yyVAL.node = &ast.ExprBinarySmaller{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8157,7 +8174,7 @@ yydefault: } case 402: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5637 +// line internal/php5/php5.y:5654 { yyVAL.node = &ast.ExprBinaryGreater{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8172,7 +8189,7 @@ yydefault: } case 403: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5650 +// line internal/php5/php5.y:5667 { yyVAL.node = &ast.ExprBinarySmallerOrEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8187,7 +8204,7 @@ yydefault: } case 404: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5663 +// line internal/php5/php5.y:5680 { yyVAL.node = &ast.ExprBinaryGreaterOrEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8202,7 +8219,7 @@ yydefault: } case 405: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:5676 +// line internal/php5/php5.y:5693 { yyVAL.node = &ast.ExprTernary{ast.Node{}, yyDollar[1].node, nil, yyDollar[4].node} @@ -8218,7 +8235,7 @@ yydefault: } case 406: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:5690 +// line internal/php5/php5.y:5707 { yyVAL.node = &ast.ExprTernary{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[5].node} @@ -8234,7 +8251,7 @@ yydefault: } case 407: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5704 +// line internal/php5/php5.y:5721 { yyVAL.node = &ast.ExprUnaryPlus{ast.Node{}, yyDollar[2].node} @@ -8248,7 +8265,7 @@ yydefault: } case 408: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5716 +// line internal/php5/php5.y:5733 { yyVAL.node = &ast.ExprUnaryMinus{ast.Node{}, yyDollar[2].node} @@ -8262,7 +8279,7 @@ yydefault: } case 409: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5728 +// line internal/php5/php5.y:5745 { yyVAL.node = yyDollar[2].node @@ -8274,7 +8291,7 @@ yydefault: } case 410: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5741 +// line internal/php5/php5.y:5758 { yyVAL.node = yyDollar[1].node @@ -8282,7 +8299,7 @@ yydefault: } case 411: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5747 +// line internal/php5/php5.y:5764 { name := &ast.NameName{ast.Node{}, yyDollar[1].list} yyVAL.node = &ast.ExprConstFetch{ast.Node{}, name} @@ -8298,7 +8315,7 @@ yydefault: } case 412: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5761 +// line internal/php5/php5.y:5778 { name := &ast.NameRelative{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.ExprConstFetch{ast.Node{}, name} @@ -8315,7 +8332,7 @@ yydefault: } case 413: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5776 +// line internal/php5/php5.y:5793 { name := &ast.NameFullyQualified{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.ExprConstFetch{ast.Node{}, name} @@ -8331,7 +8348,7 @@ yydefault: } case 414: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5793 +// line internal/php5/php5.y:5810 { name := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.ExprVariable{ast.Node{}, name} @@ -8347,7 +8364,7 @@ yydefault: } case 415: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5807 +// line internal/php5/php5.y:5824 { yyVAL.node = yyDollar[1].node @@ -8355,7 +8372,7 @@ yydefault: } case 416: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5813 +// line internal/php5/php5.y:5830 { yyVAL.node = yyDollar[1].node @@ -8363,7 +8380,7 @@ yydefault: } case 417: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5819 +// line internal/php5/php5.y:5836 { yyVAL.node = yyDollar[1].node @@ -8371,7 +8388,7 @@ yydefault: } case 418: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5825 +// line internal/php5/php5.y:5842 { yyVAL.node = &ast.ScalarEncapsed{ast.Node{}, yyDollar[2].list} @@ -8385,7 +8402,7 @@ yydefault: } case 419: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5837 +// line internal/php5/php5.y:5854 { yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, yyDollar[2].list} @@ -8399,7 +8416,7 @@ yydefault: } case 420: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5849 +// line internal/php5/php5.y:5866 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -8413,7 +8430,7 @@ yydefault: } case 421: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:5864 +// line internal/php5/php5.y:5881 { yyVAL.list = nil @@ -8421,7 +8438,7 @@ yydefault: } case 422: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:5870 +// line internal/php5/php5.y:5887 { yyVAL.list = yyDollar[1].list @@ -8434,19 +8451,19 @@ yydefault: } case 423: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:5884 +// line internal/php5/php5.y:5901 { yyVAL.token = nil } case 424: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5888 +// line internal/php5/php5.y:5905 { yyVAL.token = yyDollar[1].token } case 425: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:5895 +// line internal/php5/php5.y:5912 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, yyDollar[3].node, yyDollar[5].node} yyVAL.list = append(yyDollar[1].list, arrayItem) @@ -8463,7 +8480,7 @@ yydefault: } case 426: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5910 +// line internal/php5/php5.y:5927 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[3].node} yyVAL.list = append(yyDollar[1].list, arrayItem) @@ -8479,7 +8496,7 @@ yydefault: } case 427: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5924 +// line internal/php5/php5.y:5941 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, yyDollar[3].node} yyVAL.list = []ast.Vertex{arrayItem} @@ -8495,7 +8512,7 @@ yydefault: } case 428: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5938 +// line internal/php5/php5.y:5955 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[1].node} yyVAL.list = []ast.Vertex{arrayItem} @@ -8510,7 +8527,7 @@ yydefault: } case 429: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5954 +// line internal/php5/php5.y:5971 { yyVAL.node = yyDollar[1].node @@ -8518,7 +8535,7 @@ yydefault: } case 430: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:5960 +// line internal/php5/php5.y:5977 { yyVAL.node = yyDollar[1].node @@ -8526,7 +8543,7 @@ yydefault: } case 431: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5969 +// line internal/php5/php5.y:5986 { yyVAL.node = yyDollar[2].node @@ -8544,7 +8561,7 @@ yydefault: } case 432: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:5985 +// line internal/php5/php5.y:6002 { yyVAL.node = yyDollar[2].node @@ -8562,7 +8579,7 @@ yydefault: } case 433: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6005 +// line internal/php5/php5.y:6022 { yyVAL.node = yyDollar[1].node @@ -8570,7 +8587,7 @@ yydefault: } case 434: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6015 +// line internal/php5/php5.y:6032 { yyVAL.node = yyDollar[1].node @@ -8578,7 +8595,7 @@ yydefault: } case 435: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6024 +// line internal/php5/php5.y:6041 { yyVAL.node = yyDollar[1].node @@ -8586,7 +8603,7 @@ yydefault: } case 436: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:6033 +// line internal/php5/php5.y:6050 { yyVAL.node = yyDollar[1].node @@ -8646,7 +8663,7 @@ yydefault: } case 437: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6091 +// line internal/php5/php5.y:6108 { yyVAL.node = yyDollar[1].node @@ -8654,7 +8671,7 @@ yydefault: } case 438: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6100 +// line internal/php5/php5.y:6117 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].list...) @@ -8662,7 +8679,7 @@ yydefault: } case 439: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:6106 +// line internal/php5/php5.y:6123 { yyVAL.list = []ast.Vertex{} @@ -8670,7 +8687,7 @@ yydefault: } case 440: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6116 +// line internal/php5/php5.y:6133 { if yyDollar[3].list != nil { yyDollar[3].list[0].(*ast.ExprMethodCall).Method = yyDollar[2].list[len(yyDollar[2].list)-1].(*ast.ExprPropertyFetch).Property @@ -8686,7 +8703,7 @@ yydefault: } case 441: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6133 +// line internal/php5/php5.y:6150 { fetch := &ast.ExprArrayDimFetch{ast.Node{}, nil, yyDollar[3].node} yyVAL.list = append(yyDollar[1].list, fetch) @@ -8702,7 +8719,7 @@ yydefault: } case 442: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6147 +// line internal/php5/php5.y:6164 { fetch := &ast.ExprArrayDimFetch{ast.Node{}, nil, yyDollar[3].node} yyVAL.list = []ast.Vertex{yyDollar[1].node, fetch} @@ -8718,7 +8735,7 @@ yydefault: } case 443: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6164 +// line internal/php5/php5.y:6181 { yyVAL.node = &ast.ExprMethodCall{ast.Node{}, nil, nil, yyDollar[1].node.(*ast.ArgumentList)} @@ -8729,7 +8746,7 @@ yydefault: } case 444: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6176 +// line internal/php5/php5.y:6193 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -8737,7 +8754,7 @@ yydefault: } case 445: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6182 +// line internal/php5/php5.y:6199 { yyVAL.list = yyDollar[1].list @@ -8745,7 +8762,7 @@ yydefault: } case 446: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:6188 +// line internal/php5/php5.y:6205 { yyVAL.list = nil @@ -8753,7 +8770,7 @@ yydefault: } case 447: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6197 +// line internal/php5/php5.y:6214 { yyVAL.node = yyDollar[1].node @@ -8761,7 +8778,7 @@ yydefault: } case 448: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6203 +// line internal/php5/php5.y:6220 { yyDollar[1].simpleIndirectReference.last.VarName = yyDollar[2].node @@ -8775,7 +8792,7 @@ yydefault: } case 449: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6218 +// line internal/php5/php5.y:6235 { yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8790,7 +8807,7 @@ yydefault: } case 450: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6231 +// line internal/php5/php5.y:6248 { yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8805,7 +8822,7 @@ yydefault: } case 451: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6247 +// line internal/php5/php5.y:6264 { yyVAL.node = yyDollar[1].node @@ -8813,7 +8830,7 @@ yydefault: } case 452: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6256 +// line internal/php5/php5.y:6273 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8829,7 +8846,7 @@ yydefault: } case 453: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6270 +// line internal/php5/php5.y:6287 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8845,7 +8862,7 @@ yydefault: } case 454: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6287 +// line internal/php5/php5.y:6304 { yyVAL.node = yyDollar[1].node @@ -8853,7 +8870,7 @@ yydefault: } case 455: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6293 +// line internal/php5/php5.y:6310 { yyVAL.node = yyDollar[1].node @@ -8861,7 +8878,7 @@ yydefault: } case 456: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6299 +// line internal/php5/php5.y:6316 { yyVAL.node = yyDollar[1].node @@ -8869,7 +8886,7 @@ yydefault: } case 457: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6309 +// line internal/php5/php5.y:6326 { yyVAL.node = yyDollar[1].node @@ -8877,7 +8894,7 @@ yydefault: } case 458: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6315 +// line internal/php5/php5.y:6332 { yyDollar[1].simpleIndirectReference.last.VarName = yyDollar[2].node @@ -8891,7 +8908,7 @@ yydefault: } case 459: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6327 +// line internal/php5/php5.y:6344 { yyVAL.node = yyDollar[1].node @@ -8899,7 +8916,7 @@ yydefault: } case 460: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6336 +// line internal/php5/php5.y:6353 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8915,7 +8932,7 @@ yydefault: } case 461: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6350 +// line internal/php5/php5.y:6367 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -8931,7 +8948,7 @@ yydefault: } case 462: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6364 +// line internal/php5/php5.y:6381 { yyVAL.node = yyDollar[1].node @@ -8939,7 +8956,7 @@ yydefault: } case 463: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6374 +// line internal/php5/php5.y:6391 { name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, name} @@ -8950,12 +8967,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 464: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6388 +// line internal/php5/php5.y:6406 { yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[3].node} @@ -8972,7 +8990,7 @@ yydefault: } case 465: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:6406 +// line internal/php5/php5.y:6424 { yyVAL.node = nil @@ -8980,7 +8998,7 @@ yydefault: } case 466: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6412 +// line internal/php5/php5.y:6430 { yyVAL.node = yyDollar[1].node @@ -8988,7 +9006,7 @@ yydefault: } case 467: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6422 +// line internal/php5/php5.y:6440 { yyVAL.list = yyDollar[1].list @@ -8996,7 +9014,7 @@ yydefault: } case 468: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6428 +// line internal/php5/php5.y:6446 { fetch := &ast.ExprPropertyFetch{ast.Node{}, nil, yyDollar[1].node} yyVAL.list = []ast.Vertex{fetch} @@ -9008,7 +9026,7 @@ yydefault: } case 469: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6441 +// line internal/php5/php5.y:6459 { fetch := &ast.ExprArrayDimFetch{ast.Node{}, nil, yyDollar[3].node} yyVAL.list = append(yyDollar[1].list, fetch) @@ -9024,7 +9042,7 @@ yydefault: } case 470: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6455 +// line internal/php5/php5.y:6473 { fetch := &ast.ExprArrayDimFetch{ast.Node{}, nil, yyDollar[3].node} yyVAL.list = append(yyDollar[1].list, fetch) @@ -9040,7 +9058,7 @@ yydefault: } case 471: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6469 +// line internal/php5/php5.y:6487 { fetch := &ast.ExprPropertyFetch{ast.Node{}, nil, yyDollar[1].node} yyVAL.list = []ast.Vertex{fetch} @@ -9052,7 +9070,7 @@ yydefault: } case 472: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6482 +// line internal/php5/php5.y:6500 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -9066,7 +9084,7 @@ yydefault: } case 473: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6494 +// line internal/php5/php5.y:6512 { yyVAL.node = yyDollar[2].node @@ -9081,7 +9099,7 @@ yydefault: } case 474: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6510 +// line internal/php5/php5.y:6528 { n := &ast.ExprVariable{ast.Node{}, nil} yyVAL.simpleIndirectReference = simpleIndirectReference{[]*ast.ExprVariable{n}, n} @@ -9097,7 +9115,7 @@ yydefault: } case 475: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6524 +// line internal/php5/php5.y:6542 { n := &ast.ExprVariable{ast.Node{}, nil} @@ -9117,7 +9135,7 @@ yydefault: } case 476: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6545 +// line internal/php5/php5.y:6563 { if len(yyDollar[1].list) == 0 { yyDollar[1].list = []ast.Vertex{&ast.ExprArrayItem{ast.Node{}, false, nil, nil}} @@ -9132,7 +9150,7 @@ yydefault: } case 477: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6558 +// line internal/php5/php5.y:6576 { if yyDollar[1].node.(*ast.ExprArrayItem).Key == nil && yyDollar[1].node.(*ast.ExprArrayItem).Val == nil { yyVAL.list = []ast.Vertex{} @@ -9144,7 +9162,7 @@ yydefault: } case 478: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6572 +// line internal/php5/php5.y:6590 { yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[1].node} @@ -9158,7 +9176,7 @@ yydefault: } case 479: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6584 +// line internal/php5/php5.y:6602 { listNode := &ast.ExprList{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, listNode} @@ -9176,7 +9194,7 @@ yydefault: } case 480: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:6600 +// line internal/php5/php5.y:6618 { yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, nil} @@ -9184,7 +9202,7 @@ yydefault: } case 481: yyDollar = yyS[yypt-0 : yypt+1] -// line internal/php5/php5.y:6610 +// line internal/php5/php5.y:6628 { yyVAL.list = []ast.Vertex{} @@ -9192,7 +9210,7 @@ yydefault: } case 482: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6616 +// line internal/php5/php5.y:6634 { yyVAL.list = yyDollar[1].list @@ -9209,7 +9227,7 @@ yydefault: } case 483: yyDollar = yyS[yypt-5 : yypt+1] -// line internal/php5/php5.y:6634 +// line internal/php5/php5.y:6652 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, yyDollar[3].node, yyDollar[5].node} yyVAL.list = append(yyDollar[1].list, arrayItem) @@ -9226,7 +9244,7 @@ yydefault: } case 484: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6649 +// line internal/php5/php5.y:6667 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[3].node} yyVAL.list = append(yyDollar[1].list, arrayItem) @@ -9242,7 +9260,7 @@ yydefault: } case 485: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6663 +// line internal/php5/php5.y:6681 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, yyDollar[3].node} yyVAL.list = []ast.Vertex{arrayItem} @@ -9258,7 +9276,7 @@ yydefault: } case 486: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6677 +// line internal/php5/php5.y:6695 { arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[1].node} yyVAL.list = []ast.Vertex{arrayItem} @@ -9273,7 +9291,7 @@ yydefault: } case 487: yyDollar = yyS[yypt-6 : yypt+1] -// line internal/php5/php5.y:6690 +// line internal/php5/php5.y:6708 { reference := &ast.ExprReference{ast.Node{}, yyDollar[6].node} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, yyDollar[3].node, reference} @@ -9293,7 +9311,7 @@ yydefault: } case 488: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6708 +// line internal/php5/php5.y:6726 { reference := &ast.ExprReference{ast.Node{}, yyDollar[4].node} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, reference} @@ -9311,7 +9329,7 @@ yydefault: } case 489: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6724 +// line internal/php5/php5.y:6742 { reference := &ast.ExprReference{ast.Node{}, yyDollar[4].node} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, reference} @@ -9330,7 +9348,7 @@ yydefault: } case 490: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6741 +// line internal/php5/php5.y:6759 { reference := &ast.ExprReference{ast.Node{}, yyDollar[2].node} arrayItem := &ast.ExprArrayItem{ast.Node{}, false, nil, reference} @@ -9347,7 +9365,7 @@ yydefault: } case 491: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6759 +// line internal/php5/php5.y:6777 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -9355,7 +9373,7 @@ yydefault: } case 492: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6765 +// line internal/php5/php5.y:6783 { encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[2].token.Value} yyVAL.list = append(yyDollar[1].list, encapsed) @@ -9370,7 +9388,7 @@ yydefault: } case 493: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6778 +// line internal/php5/php5.y:6796 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -9378,7 +9396,7 @@ yydefault: } case 494: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:6784 +// line internal/php5/php5.y:6802 { encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{encapsed, yyDollar[2].node} @@ -9393,7 +9411,7 @@ yydefault: } case 495: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6800 +// line internal/php5/php5.y:6818 { name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, name} @@ -9404,12 +9422,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 496: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6814 +// line internal/php5/php5.y:6833 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -9421,6 +9440,7 @@ yydefault: yyVAL.node.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, append(yyDollar[2].token.Tokens, yylex.(*Parser).GetFreeFloatingToken(yyDollar[2].token)...)) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Expr, append(yyDollar[4].token.Tokens, yylex.(*Parser).GetFreeFloatingToken(yyDollar[4].token)...)) @@ -9428,7 +9448,7 @@ yydefault: } case 497: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6831 +// line internal/php5/php5.y:6851 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -9442,6 +9462,7 @@ yydefault: yyVAL.node.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(fetch, token.Start, yyDollar[3].token.Tokens) @@ -9449,7 +9470,7 @@ yydefault: } case 498: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6850 +// line internal/php5/php5.y:6871 { variable := &ast.ExprVariable{ast.Node{}, yyDollar[2].node} @@ -9466,7 +9487,7 @@ yydefault: } case 499: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6865 +// line internal/php5/php5.y:6886 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} variable := &ast.ExprVariable{ast.Node{}, name} @@ -9485,7 +9506,7 @@ yydefault: } case 500: yyDollar = yyS[yypt-6 : yypt+1] -// line internal/php5/php5.y:6882 +// line internal/php5/php5.y:6903 { identifier := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -9506,7 +9527,7 @@ yydefault: } case 501: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:6901 +// line internal/php5/php5.y:6922 { yyVAL.node = yyDollar[2].node @@ -9518,7 +9539,7 @@ yydefault: } case 502: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6914 +// line internal/php5/php5.y:6935 { yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value} @@ -9532,7 +9553,7 @@ yydefault: } case 503: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6926 +// line internal/php5/php5.y:6947 { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { @@ -9551,7 +9572,7 @@ yydefault: } case 504: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:6943 +// line internal/php5/php5.y:6964 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, identifier} @@ -9562,12 +9583,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 505: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6960 +// line internal/php5/php5.y:6982 { yyVAL.node = &ast.ExprIsset{ast.Node{}, yyDollar[3].list} @@ -9583,7 +9605,7 @@ yydefault: } case 506: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6974 +// line internal/php5/php5.y:6996 { yyVAL.node = &ast.ExprEmpty{ast.Node{}, yyDollar[3].node} @@ -9599,7 +9621,7 @@ yydefault: } case 507: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:6988 +// line internal/php5/php5.y:7010 { yyVAL.node = &ast.ExprEmpty{ast.Node{}, yyDollar[3].node} @@ -9615,7 +9637,7 @@ yydefault: } case 508: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:7002 +// line internal/php5/php5.y:7024 { yyVAL.node = &ast.ExprInclude{ast.Node{}, yyDollar[2].node} @@ -9629,7 +9651,7 @@ yydefault: } case 509: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:7014 +// line internal/php5/php5.y:7036 { yyVAL.node = &ast.ExprIncludeOnce{ast.Node{}, yyDollar[2].node} @@ -9643,7 +9665,7 @@ yydefault: } case 510: yyDollar = yyS[yypt-4 : yypt+1] -// line internal/php5/php5.y:7026 +// line internal/php5/php5.y:7048 { yyVAL.node = &ast.ExprEval{ast.Node{}, yyDollar[3].node} @@ -9659,7 +9681,7 @@ yydefault: } case 511: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:7040 +// line internal/php5/php5.y:7062 { yyVAL.node = &ast.ExprRequire{ast.Node{}, yyDollar[2].node} @@ -9673,7 +9695,7 @@ yydefault: } case 512: yyDollar = yyS[yypt-2 : yypt+1] -// line internal/php5/php5.y:7052 +// line internal/php5/php5.y:7074 { yyVAL.node = &ast.ExprRequireOnce{ast.Node{}, yyDollar[2].node} @@ -9687,7 +9709,7 @@ yydefault: } case 513: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:7067 +// line internal/php5/php5.y:7089 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -9695,7 +9717,7 @@ yydefault: } case 514: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:7073 +// line internal/php5/php5.y:7095 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -9706,7 +9728,7 @@ yydefault: } case 515: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:7085 +// line internal/php5/php5.y:7107 { yyVAL.node = yyDollar[1].node @@ -9714,7 +9736,7 @@ yydefault: } case 516: yyDollar = yyS[yypt-1 : yypt+1] -// line internal/php5/php5.y:7091 +// line internal/php5/php5.y:7113 { yyVAL.node = yyDollar[1].node @@ -9722,7 +9744,7 @@ yydefault: } case 517: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:7100 +// line internal/php5/php5.y:7122 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.ExprClassConstFetch{ast.Node{}, yyDollar[1].node, target} @@ -9740,7 +9762,7 @@ yydefault: } case 518: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:7116 +// line internal/php5/php5.y:7138 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.ExprClassConstFetch{ast.Node{}, yyDollar[1].node, target} @@ -9758,7 +9780,7 @@ yydefault: } case 519: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:7135 +// line internal/php5/php5.y:7157 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.ExprClassConstFetch{ast.Node{}, yyDollar[1].node, target} @@ -9776,7 +9798,7 @@ yydefault: } case 520: yyDollar = yyS[yypt-3 : yypt+1] -// line internal/php5/php5.y:7154 +// line internal/php5/php5.y:7176 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.ExprClassConstFetch{ast.Node{}, yyDollar[1].node, target} diff --git a/internal/php5/php5.y b/internal/php5/php5.y index fc42063..082430d 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -1431,6 +1431,7 @@ catch_statement: yylex.(*Parser).setFreeFloating(catchNode, token.Start, $1.Tokens) yylex.(*Parser).setFreeFloating(catchNode, token.Catch, $2.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $4.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(catchNode, token.Var, $5.Tokens) yylex.(*Parser).setFreeFloating(catchNode, token.Cond, $6.Tokens) yylex.(*Parser).setFreeFloating(catchNode, token.Stmts, $8.Tokens) @@ -1508,6 +1509,7 @@ additional_catch: yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) yylex.(*Parser).setFreeFloating($$, token.Catch, $2.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $4.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating($$, token.Var, $5.Tokens) yylex.(*Parser).setFreeFloating($$, token.Cond, $6.Tokens) yylex.(*Parser).setFreeFloating($$, token.Stmts, $8.Tokens) @@ -2309,6 +2311,7 @@ parameter: yylex.(*Parser).setFreeFloating($$, token.Ampersand, $3.Tokens) } yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Tokens) + yylex.(*Parser).addDollarToken(variable) // normalize if $3 == nil { @@ -2354,6 +2357,7 @@ parameter: } yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Tokens) yylex.(*Parser).setFreeFloating($$, token.Var, $5.Tokens) + yylex.(*Parser).addDollarToken(variable) // normalize if $3 == nil { @@ -2556,6 +2560,7 @@ global_var: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -2605,6 +2610,7 @@ static_var_list: // save comments yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, $3.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) @@ -2623,6 +2629,7 @@ static_var_list: // save comments yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, $3.Tokens) yylex.(*Parser).setFreeFloating(staticVar, token.Var, $4.Tokens) @@ -2641,6 +2648,7 @@ static_var_list: staticVar.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenPosition($1) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, $1.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) @@ -2658,6 +2666,7 @@ static_var_list: staticVar.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenNodePosition($1, $3) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(staticVar, token.Start, $1.Tokens) yylex.(*Parser).setFreeFloating(staticVar, token.Var, $2.Tokens) @@ -3155,6 +3164,7 @@ class_variable_declaration: property.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenPosition($3) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Tokens) yylex.(*Parser).setFreeFloating(property, token.Start, $3.Tokens) @@ -3174,6 +3184,7 @@ class_variable_declaration: // save comments yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(property, token.Start, $3.Tokens) yylex.(*Parser).setFreeFloating(property, token.Var, $4.Tokens) @@ -3192,6 +3203,7 @@ class_variable_declaration: property.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenPosition($1) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(property, token.Start, $1.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) @@ -3209,6 +3221,7 @@ class_variable_declaration: property.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokenNodePosition($1, $3) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(property, token.Start, $2.Tokens) yylex.(*Parser).setFreeFloating(property, token.Var, $2.Tokens) @@ -4589,6 +4602,7 @@ lexical_var_list: // save comments yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $3.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4608,6 +4622,7 @@ lexical_var_list: yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Tokens) yylex.(*Parser).setFreeFloating(reference, token.Start, $3.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $4.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4623,6 +4638,7 @@ lexical_var_list: // save comments yylex.(*Parser).setFreeFloating(variable, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4641,6 +4657,7 @@ lexical_var_list: // save comments yylex.(*Parser).setFreeFloating(reference, token.Start, $1.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $2.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -6381,6 +6398,7 @@ compound_variable: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -6807,6 +6825,7 @@ encaps_var: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -6822,6 +6841,7 @@ encaps_var: $$.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition($1, $4) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating($$, token.Var, append($2.Tokens, yylex.(*Parser).GetFreeFloatingToken($2)...)) yylex.(*Parser).setFreeFloating($$, token.Expr, append($4.Tokens, yylex.(*Parser).GetFreeFloatingToken($4)...)) @@ -6841,6 +6861,7 @@ encaps_var: $$.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating($$, token.Var, $2.Tokens) yylex.(*Parser).setFreeFloating(fetch, token.Start, $3.Tokens) @@ -6950,6 +6971,7 @@ encaps_var_offset: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } diff --git a/internal/php7/parser.go b/internal/php7/parser.go index cb42f54..a960984 100644 --- a/internal/php7/parser.go +++ b/internal/php7/parser.go @@ -131,10 +131,25 @@ func (l *Parser) GetFreeFloatingToken(t *scanner.Token) []token.Token { return []token.Token{} } - tokens := make([]token.Token, len(t.Tokens)) - copy(tokens, t.Tokens) + return []token.Token{ + { + ID: token.ID(t.ID), + Value: t.Value, + }, + } +} - return tokens +func (l *Parser) addDollarToken(v ast.Vertex) { + if l.Lexer.GetWithFreeFloating() == false { + return + } + + l.setFreeFloating(v, token.Dollar, []token.Token{ + { + ID: token.ID('$'), + Value: []byte("$"), + }, + }) } func (l *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast.Vertex) { diff --git a/internal/php7/parser_test.go b/internal/php7/parser_test.go index 25490fc..bceae9c 100644 --- a/internal/php7/parser_test.go +++ b/internal/php7/parser_test.go @@ -982,7 +982,7 @@ func TestPhp7ParameterNode(t *testing.T) { EndPos: 51, }, }, - ReturnsRef: false, + ReturnsRef: false, FunctionName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -1183,7 +1183,7 @@ func TestPhp7ParameterNode(t *testing.T) { EndPos: 117, }, }, - ReturnsRef: false, + ReturnsRef: false, MethodName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -1397,8 +1397,8 @@ func TestPhp7ParameterNode(t *testing.T) { EndPos: 162, }, }, - ReturnsRef: false, - Static: false, + ReturnsRef: false, + Static: false, Params: []ast.Vertex{ &ast.Parameter{ Node: ast.Node{ @@ -1577,8 +1577,8 @@ func TestPhp7ParameterNode(t *testing.T) { EndPos: 214, }, }, - Static: true, - ReturnsRef: false, + Static: true, + ReturnsRef: false, Params: []ast.Vertex{ &ast.Parameter{ Node: ast.Node{ @@ -4376,7 +4376,7 @@ func TestStmtClassMethod_SimpleClassMethod(t *testing.T) { EndPos: 31, }, }, - ReturnsRef: false, + ReturnsRef: false, MethodName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -4454,7 +4454,7 @@ func TestStmtClassMethod_PrivateProtectedClassMethod(t *testing.T) { EndPos: 45, }, }, - ReturnsRef: false, + ReturnsRef: false, MethodName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -4511,7 +4511,7 @@ func TestStmtClassMethod_PrivateProtectedClassMethod(t *testing.T) { EndPos: 73, }, }, - ReturnsRef: false, + ReturnsRef: false, MethodName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -4602,7 +4602,7 @@ func TestStmtClassMethod_Php7ClassMethod(t *testing.T) { EndPos: 52, }, }, - ReturnsRef: true, + ReturnsRef: true, MethodName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -4740,7 +4740,7 @@ func TestStmtClassMethod_AbstractClassMethod(t *testing.T) { EndPos: 54, }, }, - ReturnsRef: false, + ReturnsRef: false, MethodName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -4854,7 +4854,7 @@ func TestStmtClassMethod_Php7AbstractClassMethod(t *testing.T) { EndPos: 51, }, }, - ReturnsRef: false, + ReturnsRef: false, MethodName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -7300,7 +7300,7 @@ func TestStmtFunction(t *testing.T) { EndPos: 20, }, }, - ReturnsRef: false, + ReturnsRef: false, FunctionName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -7345,7 +7345,7 @@ func TestStmtFunction_Return(t *testing.T) { EndPos: 27, }, }, - ReturnsRef: false, + ReturnsRef: false, FunctionName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -7401,7 +7401,7 @@ func TestStmtFunction_ReturnVar(t *testing.T) { EndPos: 51, }, }, - ReturnsRef: false, + ReturnsRef: false, FunctionName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -7568,7 +7568,7 @@ func TestStmtFunction_Ref(t *testing.T) { EndPos: 30, }, }, - ReturnsRef: true, + ReturnsRef: true, FunctionName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -7635,7 +7635,7 @@ func TestStmtFunction_ReturnType(t *testing.T) { EndPos: 27, }, }, - ReturnsRef: true, + ReturnsRef: true, FunctionName: &ast.Identifier{ Node: ast.Node{ Position: &position.Position{ @@ -14535,8 +14535,8 @@ func TestExprArrowFunction(t *testing.T) { EndPos: 13, }, }, - ReturnsRef: false, - Static: false, + ReturnsRef: false, + Static: false, Expr: &ast.ExprVariable{ Node: ast.Node{ Position: &position.Position{ @@ -14600,8 +14600,8 @@ func TestExprArrowFunction_ReturnType(t *testing.T) { EndPos: 22, }, }, - Static: false, - ReturnsRef: true, + Static: false, + ReturnsRef: true, ReturnType: &ast.NameName{ Node: ast.Node{ Position: &position.Position{ @@ -15080,9 +15080,9 @@ func TestExprClosure(t *testing.T) { EndPos: 15, }, }, - ReturnsRef: false, - Static: false, - Stmts: []ast.Vertex{}, + ReturnsRef: false, + Static: false, + Stmts: []ast.Vertex{}, }, }, }, @@ -15125,8 +15125,8 @@ func TestExprClosure_Use(t *testing.T) { EndPos: 36, }, }, - ReturnsRef: false, - Static: false, + ReturnsRef: false, + Static: false, Params: []ast.Vertex{ &ast.Parameter{ Node: ast.Node{ @@ -15302,8 +15302,8 @@ func TestExprClosure_Use2(t *testing.T) { EndPos: 36, }, }, - ReturnsRef: false, - Static: false, + ReturnsRef: false, + Static: false, Params: []ast.Vertex{ &ast.Parameter{ Node: ast.Node{ @@ -15479,8 +15479,8 @@ func TestExprClosure_ReturnType(t *testing.T) { EndPos: 22, }, }, - ReturnsRef: false, - Static: false, + ReturnsRef: false, + Static: false, ReturnType: &ast.NameName{ Node: ast.Node{ Position: &position.Position{ diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 9a3f30a..0900ad3 100644 --- a/internal/php7/php7.go +++ b/internal/php7/php7.go @@ -346,7 +346,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -// line internal/php7/php7.y:5655 +// line internal/php7/php7.y:5671 // line yacctab:1 var yyExca = [...]int{ @@ -3724,6 +3724,7 @@ yydefault: yylex.(*Parser).setFreeFloating(catch, token.Start, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(catch, token.Catch, yyDollar[3].token.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[5].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(catch, token.Var, yyDollar[6].token.Tokens) yylex.(*Parser).setFreeFloating(catch, token.Cond, yyDollar[7].token.Tokens) yylex.(*Parser).setFreeFloating(catch, token.Stmts, yyDollar[9].token.Tokens) @@ -3732,7 +3733,7 @@ yydefault: } case 158: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1380 + // line internal/php7/php7.y:1381 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -3740,7 +3741,7 @@ yydefault: } case 159: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1386 + // line internal/php7/php7.y:1387 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -3751,7 +3752,7 @@ yydefault: } case 160: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1398 + // line internal/php7/php7.y:1399 { yyVAL.node = nil @@ -3759,7 +3760,7 @@ yydefault: } case 161: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1404 + // line internal/php7/php7.y:1405 { yyVAL.node = &ast.StmtFinally{ast.Node{}, yyDollar[3].list} @@ -3775,7 +3776,7 @@ yydefault: } case 162: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1421 + // line internal/php7/php7.y:1422 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -3783,7 +3784,7 @@ yydefault: } case 163: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1427 + // line internal/php7/php7.y:1428 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -3794,7 +3795,7 @@ yydefault: } case 164: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1439 + // line internal/php7/php7.y:1440 { yyVAL.node = yyDollar[1].node @@ -3802,7 +3803,7 @@ yydefault: } case 165: yyDollar = yyS[yypt-11 : yypt+1] - // line internal/php7/php7.y:1448 + // line internal/php7/php7.y:1449 { name := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.StmtFunction{ast.Node{}, yyDollar[2].token != nil, name, yyDollar[6].list, yyDollar[8].node, yyDollar[10].list} @@ -3838,31 +3839,31 @@ yydefault: } case 166: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1484 + // line internal/php7/php7.y:1485 { yyVAL.token = nil } case 167: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1488 + // line internal/php7/php7.y:1489 { yyVAL.token = yyDollar[1].token } case 168: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1495 + // line internal/php7/php7.y:1496 { yyVAL.token = nil } case 169: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1499 + // line internal/php7/php7.y:1500 { yyVAL.token = yyDollar[1].token } case 170: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:1506 + // line internal/php7/php7.y:1507 { name := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.StmtClass{ast.Node{}, name, yyDollar[1].list, nil, yyDollar[4].ClassExtends, yyDollar[5].ClassImplements, yyDollar[8].list} @@ -3882,7 +3883,7 @@ yydefault: } case 171: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php7/php7.y:1524 + // line internal/php7/php7.y:1525 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} yyVAL.node = &ast.StmtClass{ast.Node{}, name, nil, nil, yyDollar[3].ClassExtends, yyDollar[4].ClassImplements, yyDollar[7].list} @@ -3901,7 +3902,7 @@ yydefault: } case 172: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1544 + // line internal/php7/php7.y:1545 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -3909,7 +3910,7 @@ yydefault: } case 173: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1550 + // line internal/php7/php7.y:1551 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -3917,7 +3918,7 @@ yydefault: } case 174: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1559 + // line internal/php7/php7.y:1560 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -3931,7 +3932,7 @@ yydefault: } case 175: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1571 + // line internal/php7/php7.y:1572 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -3945,7 +3946,7 @@ yydefault: } case 176: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1586 + // line internal/php7/php7.y:1587 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} yyVAL.node = &ast.StmtTrait{ast.Node{}, name, yyDollar[5].list} @@ -3964,7 +3965,7 @@ yydefault: } case 177: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:1606 + // line internal/php7/php7.y:1607 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} yyVAL.node = &ast.StmtInterface{ast.Node{}, name, yyDollar[3].InterfaceExtends, yyDollar[6].list} @@ -3983,7 +3984,7 @@ yydefault: } case 178: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1626 + // line internal/php7/php7.y:1627 { yyVAL.ClassExtends = nil @@ -3991,7 +3992,7 @@ yydefault: } case 179: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1632 + // line internal/php7/php7.y:1633 { yyVAL.ClassExtends = &ast.StmtClassExtends{ast.Node{}, yyDollar[2].node} @@ -4005,7 +4006,7 @@ yydefault: } case 180: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1647 + // line internal/php7/php7.y:1648 { yyVAL.InterfaceExtends = nil @@ -4013,7 +4014,7 @@ yydefault: } case 181: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1653 + // line internal/php7/php7.y:1654 { yyVAL.InterfaceExtends = &ast.StmtInterfaceExtends{ast.Node{}, yyDollar[2].list} @@ -4027,7 +4028,7 @@ yydefault: } case 182: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1668 + // line internal/php7/php7.y:1669 { yyVAL.ClassImplements = nil @@ -4035,7 +4036,7 @@ yydefault: } case 183: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1674 + // line internal/php7/php7.y:1675 { yyVAL.ClassImplements = &ast.StmtClassImplements{ast.Node{}, yyDollar[2].list} @@ -4049,7 +4050,7 @@ yydefault: } case 184: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1689 + // line internal/php7/php7.y:1690 { yyVAL.node = yyDollar[1].node @@ -4057,7 +4058,7 @@ yydefault: } case 185: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1695 + // line internal/php7/php7.y:1696 { yyVAL.node = &ast.ExprReference{ast.Node{}, yyDollar[2].node} @@ -4071,7 +4072,7 @@ yydefault: } case 186: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1707 + // line internal/php7/php7.y:1708 { yyVAL.node = &ast.ExprList{ast.Node{}, yyDollar[3].list} @@ -4087,7 +4088,7 @@ yydefault: } case 187: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1721 + // line internal/php7/php7.y:1722 { yyVAL.node = &ast.ExprShortList{ast.Node{}, yyDollar[2].list} @@ -4102,7 +4103,7 @@ yydefault: } case 188: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1737 + // line internal/php7/php7.y:1738 { yyVAL.node = &ast.StmtFor{ast.Node{}, nil, nil, nil, yyDollar[1].node} @@ -4113,7 +4114,7 @@ yydefault: } case 189: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1746 + // line internal/php7/php7.y:1747 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltFor{ast.Node{}, nil, nil, nil, stmtList} @@ -4132,7 +4133,7 @@ yydefault: } case 190: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1766 + // line internal/php7/php7.y:1767 { yyVAL.node = &ast.StmtForeach{ast.Node{}, nil, nil, nil, yyDollar[1].node} @@ -4143,7 +4144,7 @@ yydefault: } case 191: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1775 + // line internal/php7/php7.y:1776 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltForeach{ast.Node{}, nil, nil, nil, stmtList} @@ -4162,7 +4163,7 @@ yydefault: } case 192: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1795 + // line internal/php7/php7.y:1796 { yyVAL.node = &ast.StmtDeclare{ast.Node{}, false, nil, yyDollar[1].node} @@ -4173,7 +4174,7 @@ yydefault: } case 193: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1804 + // line internal/php7/php7.y:1805 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtDeclare{ast.Node{}, true, nil, stmtList} @@ -4192,7 +4193,7 @@ yydefault: } case 194: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1824 + // line internal/php7/php7.y:1825 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtSwitch{ast.Node{}, nil, caseList} @@ -4209,7 +4210,7 @@ yydefault: } case 195: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1839 + // line internal/php7/php7.y:1840 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.StmtSwitch{ast.Node{}, nil, caseList} @@ -4227,7 +4228,7 @@ yydefault: } case 196: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1855 + // line internal/php7/php7.y:1856 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltSwitch{ast.Node{}, nil, caseList} @@ -4246,7 +4247,7 @@ yydefault: } case 197: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1872 + // line internal/php7/php7.y:1873 { caseList := &ast.StmtCaseList{ast.Node{}, yyDollar[3].list} @@ -4267,7 +4268,7 @@ yydefault: } case 198: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1894 + // line internal/php7/php7.y:1895 { yyVAL.list = []ast.Vertex{} @@ -4275,7 +4276,7 @@ yydefault: } case 199: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1900 + // line internal/php7/php7.y:1901 { _case := &ast.StmtCase{ast.Node{}, yyDollar[3].node, yyDollar[5].list} yyVAL.list = append(yyDollar[1].list, _case) @@ -4292,7 +4293,7 @@ yydefault: } case 200: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1915 + // line internal/php7/php7.y:1916 { _default := &ast.StmtDefault{ast.Node{}, yyDollar[4].list} yyVAL.list = append(yyDollar[1].list, _default) @@ -4309,19 +4310,19 @@ yydefault: } case 201: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1933 + // line internal/php7/php7.y:1934 { yyVAL.token = yyDollar[1].token } case 202: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1937 + // line internal/php7/php7.y:1938 { yyVAL.token = yyDollar[1].token } case 203: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1944 + // line internal/php7/php7.y:1945 { yyVAL.node = &ast.StmtWhile{ast.Node{}, nil, yyDollar[1].node} @@ -4332,7 +4333,7 @@ yydefault: } case 204: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1953 + // line internal/php7/php7.y:1954 { stmtList := &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.StmtAltWhile{ast.Node{}, nil, stmtList} @@ -4351,7 +4352,7 @@ yydefault: } case 205: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1973 + // line internal/php7/php7.y:1974 { yyVAL.node = &ast.StmtIf{ast.Node{}, yyDollar[3].node, yyDollar[5].node, nil, nil} @@ -4367,7 +4368,7 @@ yydefault: } case 206: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1987 + // line internal/php7/php7.y:1988 { _elseIf := &ast.StmtElseIf{ast.Node{}, yyDollar[4].node, yyDollar[6].node} yyDollar[1].node.(*ast.StmtIf).ElseIf = append(yyDollar[1].node.(*ast.StmtIf).ElseIf, _elseIf) @@ -4387,7 +4388,7 @@ yydefault: } case 207: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2008 + // line internal/php7/php7.y:2009 { yyVAL.node = yyDollar[1].node @@ -4395,7 +4396,7 @@ yydefault: } case 208: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2014 + // line internal/php7/php7.y:2015 { _else := &ast.StmtElse{ast.Node{}, yyDollar[3].node} yyDollar[1].node.(*ast.StmtIf).Else = _else @@ -4413,7 +4414,7 @@ yydefault: } case 209: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:2033 + // line internal/php7/php7.y:2034 { stmts := &ast.StmtStmtList{ast.Node{}, yyDollar[6].list} yyVAL.node = &ast.StmtAltIf{ast.Node{}, yyDollar[3].node, stmts, nil, nil} @@ -4432,7 +4433,7 @@ yydefault: } case 210: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:2050 + // line internal/php7/php7.y:2051 { stmts := &ast.StmtStmtList{ast.Node{}, yyDollar[7].list} _elseIf := &ast.StmtAltElseIf{ast.Node{}, yyDollar[4].node, stmts} @@ -4454,7 +4455,7 @@ yydefault: } case 211: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2073 + // line internal/php7/php7.y:2074 { yyVAL.node = yyDollar[1].node @@ -4470,7 +4471,7 @@ yydefault: } case 212: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:2087 + // line internal/php7/php7.y:2088 { stmts := &ast.StmtStmtList{ast.Node{}, yyDollar[4].list} _else := &ast.StmtAltElse{ast.Node{}, stmts} @@ -4494,7 +4495,7 @@ yydefault: } case 213: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2112 + // line internal/php7/php7.y:2113 { yyVAL.list = yyDollar[1].list @@ -4502,7 +4503,7 @@ yydefault: } case 214: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2118 + // line internal/php7/php7.y:2119 { yyVAL.list = nil @@ -4510,7 +4511,7 @@ yydefault: } case 215: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2127 + // line internal/php7/php7.y:2128 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4518,7 +4519,7 @@ yydefault: } case 216: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2133 + // line internal/php7/php7.y:2134 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4529,7 +4530,7 @@ yydefault: } case 217: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2145 + // line internal/php7/php7.y:2146 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[4].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4560,6 +4561,8 @@ yydefault: } yylex.(*Parser).setFreeFloating(yyVAL.node, token.Variadic, yyDollar[4].token.Tokens) + yylex.(*Parser).addDollarToken(variable) + // normalize if yyDollar[3].token == nil { yylex.(*Parser).setFreeFloating(yyVAL.node, token.Ampersand, yyVAL.node.GetNode().Tokens[token.Variadic]) @@ -4578,7 +4581,7 @@ yydefault: } case 218: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:2189 + // line internal/php7/php7.y:2192 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[4].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4610,6 +4613,8 @@ yydefault: yylex.(*Parser).setFreeFloating(yyVAL.node, token.Variadic, yyDollar[4].token.Tokens) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, yyDollar[5].token.Tokens) + yylex.(*Parser).addDollarToken(variable) + // normalize if yyDollar[3].token == nil { yylex.(*Parser).setFreeFloating(yyVAL.node, token.Ampersand, yyVAL.node.GetNode().Tokens[token.Variadic]) @@ -4628,7 +4633,7 @@ yydefault: } case 219: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2237 + // line internal/php7/php7.y:2242 { yyVAL.node = nil @@ -4636,7 +4641,7 @@ yydefault: } case 220: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2243 + // line internal/php7/php7.y:2248 { yyVAL.node = yyDollar[1].node @@ -4644,7 +4649,7 @@ yydefault: } case 221: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2252 + // line internal/php7/php7.y:2257 { yyVAL.node = yyDollar[1].node @@ -4652,7 +4657,7 @@ yydefault: } case 222: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2258 + // line internal/php7/php7.y:2263 { yyVAL.node = &ast.Nullable{ast.Node{}, yyDollar[2].node} @@ -4666,7 +4671,7 @@ yydefault: } case 223: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2273 + // line internal/php7/php7.y:2278 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -4680,7 +4685,7 @@ yydefault: } case 224: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2285 + // line internal/php7/php7.y:2290 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -4694,7 +4699,7 @@ yydefault: } case 225: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2297 + // line internal/php7/php7.y:2302 { yyVAL.node = yyDollar[1].node @@ -4702,7 +4707,7 @@ yydefault: } case 226: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2306 + // line internal/php7/php7.y:2311 { yyVAL.node = nil @@ -4710,7 +4715,7 @@ yydefault: } case 227: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2312 + // line internal/php7/php7.y:2317 { yyVAL.node = yyDollar[2].node @@ -4721,7 +4726,7 @@ yydefault: } case 228: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2324 + // line internal/php7/php7.y:2329 { yyVAL.node = &ast.ArgumentList{ast.Node{}, nil} @@ -4736,7 +4741,7 @@ yydefault: } case 229: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2337 + // line internal/php7/php7.y:2342 { yyVAL.node = &ast.ArgumentList{ast.Node{}, yyDollar[2].list} @@ -4755,7 +4760,7 @@ yydefault: } case 230: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2357 + // line internal/php7/php7.y:2362 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4763,7 +4768,7 @@ yydefault: } case 231: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2363 + // line internal/php7/php7.y:2368 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4774,7 +4779,7 @@ yydefault: } case 232: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2375 + // line internal/php7/php7.y:2380 { yyVAL.node = &ast.Argument{ast.Node{}, false, false, yyDollar[1].node} @@ -4788,7 +4793,7 @@ yydefault: } case 233: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2387 + // line internal/php7/php7.y:2392 { yyVAL.node = &ast.Argument{ast.Node{}, true, false, yyDollar[2].node} @@ -4802,7 +4807,7 @@ yydefault: } case 234: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2402 + // line internal/php7/php7.y:2407 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4813,7 +4818,7 @@ yydefault: } case 235: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2411 + // line internal/php7/php7.y:2416 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4821,7 +4826,7 @@ yydefault: } case 236: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2420 + // line internal/php7/php7.y:2425 { yyVAL.node = yyDollar[1].node @@ -4829,7 +4834,7 @@ yydefault: } case 237: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2429 + // line internal/php7/php7.y:2434 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -4840,7 +4845,7 @@ yydefault: } case 238: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2438 + // line internal/php7/php7.y:2443 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4848,7 +4853,7 @@ yydefault: } case 239: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2447 + // line internal/php7/php7.y:2452 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4861,12 +4866,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 240: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2463 + // line internal/php7/php7.y:2469 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -4879,13 +4885,14 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, yyDollar[2].token.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 241: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2483 + // line internal/php7/php7.y:2490 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -4893,7 +4900,7 @@ yydefault: } case 242: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2489 + // line internal/php7/php7.y:2496 { yyVAL.list = []ast.Vertex{} @@ -4901,7 +4908,7 @@ yydefault: } case 243: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2498 + // line internal/php7/php7.y:2505 { yyVAL.node = &ast.StmtPropertyList{ast.Node{}, yyDollar[1].list, yyDollar[2].node, yyDollar[3].list} @@ -4917,7 +4924,7 @@ yydefault: } case 244: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2512 + // line internal/php7/php7.y:2519 { yyVAL.node = &ast.StmtClassConstList{ast.Node{}, yyDollar[1].list, yyDollar[3].list} @@ -4938,7 +4945,7 @@ yydefault: } case 245: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2531 + // line internal/php7/php7.y:2538 { yyVAL.node = &ast.StmtTraitUse{ast.Node{}, yyDollar[2].list, yyDollar[3].node} @@ -4952,7 +4959,7 @@ yydefault: } case 246: yyDollar = yyS[yypt-10 : yypt+1] - // line internal/php7/php7.y:2543 + // line internal/php7/php7.y:2550 { name := &ast.Identifier{ast.Node{}, yyDollar[4].token.Value} yyVAL.node = &ast.StmtClassMethod{ast.Node{}, yyDollar[3].token != nil, name, yyDollar[1].list, yyDollar[7].list, yyDollar[9].node, yyDollar[10].node} @@ -4989,7 +4996,7 @@ yydefault: } case 247: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2580 + // line internal/php7/php7.y:2587 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -4997,7 +5004,7 @@ yydefault: } case 248: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2586 + // line internal/php7/php7.y:2593 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5008,7 +5015,7 @@ yydefault: } case 249: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2598 + // line internal/php7/php7.y:2605 { yyVAL.node = &ast.StmtNop{ast.Node{}} @@ -5022,7 +5029,7 @@ yydefault: } case 250: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2611 + // line internal/php7/php7.y:2618 { yyVAL.node = &ast.StmtTraitAdaptationList{ast.Node{}, nil} @@ -5036,7 +5043,7 @@ yydefault: } case 251: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2623 + // line internal/php7/php7.y:2630 { yyVAL.node = &ast.StmtTraitAdaptationList{ast.Node{}, yyDollar[2].list} @@ -5050,7 +5057,7 @@ yydefault: } case 252: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2638 + // line internal/php7/php7.y:2645 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5058,7 +5065,7 @@ yydefault: } case 253: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2644 + // line internal/php7/php7.y:2651 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -5066,7 +5073,7 @@ yydefault: } case 254: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2653 + // line internal/php7/php7.y:2660 { yyVAL.node = yyDollar[1].node @@ -5078,7 +5085,7 @@ yydefault: } case 255: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2663 + // line internal/php7/php7.y:2670 { yyVAL.node = yyDollar[1].node @@ -5090,7 +5097,7 @@ yydefault: } case 256: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2676 + // line internal/php7/php7.y:2683 { yyVAL.node = &ast.StmtTraitUsePrecedence{ast.Node{}, yyDollar[1].node, yyDollar[3].list} @@ -5105,7 +5112,7 @@ yydefault: } case 257: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2692 + // line internal/php7/php7.y:2699 { alias := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.StmtTraitUseAlias{ast.Node{}, yyDollar[1].node, nil, alias} @@ -5123,7 +5130,7 @@ yydefault: } case 258: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2708 + // line internal/php7/php7.y:2715 { alias := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.StmtTraitUseAlias{ast.Node{}, yyDollar[1].node, nil, alias} @@ -5141,7 +5148,7 @@ yydefault: } case 259: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2724 + // line internal/php7/php7.y:2731 { alias := &ast.Identifier{ast.Node{}, yyDollar[4].token.Value} yyVAL.node = &ast.StmtTraitUseAlias{ast.Node{}, yyDollar[1].node, yyDollar[3].node, alias} @@ -5159,7 +5166,7 @@ yydefault: } case 260: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2740 + // line internal/php7/php7.y:2747 { yyVAL.node = &ast.StmtTraitUseAlias{ast.Node{}, yyDollar[1].node, yyDollar[3].node, nil} @@ -5174,7 +5181,7 @@ yydefault: } case 261: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2756 + // line internal/php7/php7.y:2763 { name := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.StmtTraitMethodRef{ast.Node{}, nil, name} @@ -5190,7 +5197,7 @@ yydefault: } case 262: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2770 + // line internal/php7/php7.y:2777 { yyVAL.node = yyDollar[1].node @@ -5198,7 +5205,7 @@ yydefault: } case 263: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2779 + // line internal/php7/php7.y:2786 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.StmtTraitMethodRef{ast.Node{}, yyDollar[1].node, target} @@ -5216,7 +5223,7 @@ yydefault: } case 264: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2798 + // line internal/php7/php7.y:2805 { yyVAL.node = &ast.StmtNop{ast.Node{}} @@ -5231,7 +5238,7 @@ yydefault: } case 265: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2811 + // line internal/php7/php7.y:2818 { yyVAL.node = &ast.StmtStmtList{ast.Node{}, yyDollar[2].list} @@ -5246,7 +5253,7 @@ yydefault: } case 266: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2827 + // line internal/php7/php7.y:2834 { yyVAL.list = yyDollar[1].list @@ -5254,7 +5261,7 @@ yydefault: } case 267: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2833 + // line internal/php7/php7.y:2840 { modifier := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{modifier} @@ -5269,7 +5276,7 @@ yydefault: } case 268: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2849 + // line internal/php7/php7.y:2856 { yyVAL.list = nil @@ -5277,7 +5284,7 @@ yydefault: } case 269: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2855 + // line internal/php7/php7.y:2862 { yyVAL.list = yyDollar[1].list @@ -5285,7 +5292,7 @@ yydefault: } case 270: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2864 + // line internal/php7/php7.y:2871 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5293,7 +5300,7 @@ yydefault: } case 271: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2870 + // line internal/php7/php7.y:2877 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -5301,7 +5308,7 @@ yydefault: } case 272: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2879 + // line internal/php7/php7.y:2886 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5315,7 +5322,7 @@ yydefault: } case 273: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2891 + // line internal/php7/php7.y:2898 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5329,7 +5336,7 @@ yydefault: } case 274: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2903 + // line internal/php7/php7.y:2910 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5343,7 +5350,7 @@ yydefault: } case 275: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2915 + // line internal/php7/php7.y:2922 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5357,7 +5364,7 @@ yydefault: } case 276: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2927 + // line internal/php7/php7.y:2934 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5371,7 +5378,7 @@ yydefault: } case 277: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2939 + // line internal/php7/php7.y:2946 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -5385,7 +5392,7 @@ yydefault: } case 278: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2954 + // line internal/php7/php7.y:2961 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5396,7 +5403,7 @@ yydefault: } case 279: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2963 + // line internal/php7/php7.y:2970 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5404,7 +5411,7 @@ yydefault: } case 280: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2972 + // line internal/php7/php7.y:2979 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -5417,12 +5424,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 281: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2988 + // line internal/php7/php7.y:2996 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -5435,13 +5443,14 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, yyDollar[2].token.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 282: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3008 + // line internal/php7/php7.y:3017 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5452,7 +5461,7 @@ yydefault: } case 283: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3017 + // line internal/php7/php7.y:3026 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5460,7 +5469,7 @@ yydefault: } case 284: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3026 + // line internal/php7/php7.y:3035 { name := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.StmtConstant{ast.Node{}, name, yyDollar[3].node} @@ -5477,7 +5486,7 @@ yydefault: } case 285: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3044 + // line internal/php7/php7.y:3053 { name := &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} yyVAL.node = &ast.StmtConstant{ast.Node{}, name, yyDollar[3].node} @@ -5494,7 +5503,7 @@ yydefault: } case 286: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3062 + // line internal/php7/php7.y:3071 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5505,7 +5514,7 @@ yydefault: } case 287: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3071 + // line internal/php7/php7.y:3080 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5513,7 +5522,7 @@ yydefault: } case 288: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3080 + // line internal/php7/php7.y:3089 { yyVAL.node = yyDollar[1].node @@ -5521,7 +5530,7 @@ yydefault: } case 289: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3089 + // line internal/php7/php7.y:3098 { yyVAL.list = nil @@ -5529,7 +5538,7 @@ yydefault: } case 290: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3095 + // line internal/php7/php7.y:3104 { yyVAL.list = yyDollar[1].list @@ -5537,7 +5546,7 @@ yydefault: } case 291: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3104 + // line internal/php7/php7.y:3113 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -5548,7 +5557,7 @@ yydefault: } case 292: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3113 + // line internal/php7/php7.y:3122 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -5556,7 +5565,7 @@ yydefault: } case 293: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php7/php7.y:3122 + // line internal/php7/php7.y:3131 { if yyDollar[2].node != nil { yyVAL.node = &ast.StmtClass{ast.Node{}, nil, nil, yyDollar[2].node.(*ast.ArgumentList), yyDollar[3].ClassExtends, yyDollar[4].ClassImplements, yyDollar[7].list} @@ -5576,7 +5585,7 @@ yydefault: } case 294: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3143 + // line internal/php7/php7.y:3152 { if yyDollar[3].node != nil { yyVAL.node = &ast.ExprNew{ast.Node{}, yyDollar[2].node, yyDollar[3].node.(*ast.ArgumentList)} @@ -5593,7 +5602,7 @@ yydefault: } case 295: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3158 + // line internal/php7/php7.y:3167 { yyVAL.node = &ast.ExprNew{ast.Node{}, yyDollar[2].node, nil} @@ -5607,7 +5616,7 @@ yydefault: } case 296: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:3173 + // line internal/php7/php7.y:3182 { listNode := &ast.ExprList{ast.Node{}, yyDollar[3].list} yyVAL.node = &ast.ExprAssign{ast.Node{}, listNode, yyDollar[6].node} @@ -5626,7 +5635,7 @@ yydefault: } case 297: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:3190 + // line internal/php7/php7.y:3199 { shortList := &ast.ExprShortList{ast.Node{}, yyDollar[2].list} yyVAL.node = &ast.ExprAssign{ast.Node{}, shortList, yyDollar[5].node} @@ -5644,7 +5653,7 @@ yydefault: } case 298: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3206 + // line internal/php7/php7.y:3215 { yyVAL.node = &ast.ExprAssign{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5659,7 +5668,7 @@ yydefault: } case 299: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3219 + // line internal/php7/php7.y:3228 { yyVAL.node = &ast.ExprAssignReference{ast.Node{}, yyDollar[1].node, yyDollar[4].node} @@ -5675,7 +5684,7 @@ yydefault: } case 300: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3233 + // line internal/php7/php7.y:3242 { yyVAL.node = &ast.ExprClone{ast.Node{}, yyDollar[2].node} @@ -5689,7 +5698,7 @@ yydefault: } case 301: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3245 + // line internal/php7/php7.y:3254 { yyVAL.node = &ast.ExprAssignPlus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5704,7 +5713,7 @@ yydefault: } case 302: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3258 + // line internal/php7/php7.y:3267 { yyVAL.node = &ast.ExprAssignMinus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5719,7 +5728,7 @@ yydefault: } case 303: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3271 + // line internal/php7/php7.y:3280 { yyVAL.node = &ast.ExprAssignMul{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5734,7 +5743,7 @@ yydefault: } case 304: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3284 + // line internal/php7/php7.y:3293 { yyVAL.node = &ast.ExprAssignPow{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5749,7 +5758,7 @@ yydefault: } case 305: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3297 + // line internal/php7/php7.y:3306 { yyVAL.node = &ast.ExprAssignDiv{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5764,7 +5773,7 @@ yydefault: } case 306: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3310 + // line internal/php7/php7.y:3319 { yyVAL.node = &ast.ExprAssignConcat{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5779,7 +5788,7 @@ yydefault: } case 307: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3323 + // line internal/php7/php7.y:3332 { yyVAL.node = &ast.ExprAssignMod{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5794,7 +5803,7 @@ yydefault: } case 308: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3336 + // line internal/php7/php7.y:3345 { yyVAL.node = &ast.ExprAssignBitwiseAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5809,7 +5818,7 @@ yydefault: } case 309: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3349 + // line internal/php7/php7.y:3358 { yyVAL.node = &ast.ExprAssignBitwiseOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5824,7 +5833,7 @@ yydefault: } case 310: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3362 + // line internal/php7/php7.y:3371 { yyVAL.node = &ast.ExprAssignBitwiseXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5839,7 +5848,7 @@ yydefault: } case 311: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3375 + // line internal/php7/php7.y:3384 { yyVAL.node = &ast.ExprAssignShiftLeft{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5854,7 +5863,7 @@ yydefault: } case 312: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3388 + // line internal/php7/php7.y:3397 { yyVAL.node = &ast.ExprAssignShiftRight{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5869,7 +5878,7 @@ yydefault: } case 313: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3401 + // line internal/php7/php7.y:3410 { yyVAL.node = &ast.ExprAssignCoalesce{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5884,7 +5893,7 @@ yydefault: } case 314: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3414 + // line internal/php7/php7.y:3423 { yyVAL.node = &ast.ExprPostInc{ast.Node{}, yyDollar[1].node} @@ -5899,7 +5908,7 @@ yydefault: } case 315: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3427 + // line internal/php7/php7.y:3436 { yyVAL.node = &ast.ExprPreInc{ast.Node{}, yyDollar[2].node} @@ -5913,7 +5922,7 @@ yydefault: } case 316: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3439 + // line internal/php7/php7.y:3448 { yyVAL.node = &ast.ExprPostDec{ast.Node{}, yyDollar[1].node} @@ -5928,7 +5937,7 @@ yydefault: } case 317: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3452 + // line internal/php7/php7.y:3461 { yyVAL.node = &ast.ExprPreDec{ast.Node{}, yyDollar[2].node} @@ -5942,7 +5951,7 @@ yydefault: } case 318: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3464 + // line internal/php7/php7.y:3473 { yyVAL.node = &ast.ExprBinaryBooleanOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5957,7 +5966,7 @@ yydefault: } case 319: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3477 + // line internal/php7/php7.y:3486 { yyVAL.node = &ast.ExprBinaryBooleanAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5972,7 +5981,7 @@ yydefault: } case 320: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3490 + // line internal/php7/php7.y:3499 { yyVAL.node = &ast.ExprBinaryLogicalOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -5987,7 +5996,7 @@ yydefault: } case 321: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3503 + // line internal/php7/php7.y:3512 { yyVAL.node = &ast.ExprBinaryLogicalAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6002,7 +6011,7 @@ yydefault: } case 322: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3516 + // line internal/php7/php7.y:3525 { yyVAL.node = &ast.ExprBinaryLogicalXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6017,7 +6026,7 @@ yydefault: } case 323: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3529 + // line internal/php7/php7.y:3538 { yyVAL.node = &ast.ExprBinaryBitwiseOr{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6032,7 +6041,7 @@ yydefault: } case 324: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3542 + // line internal/php7/php7.y:3551 { yyVAL.node = &ast.ExprBinaryBitwiseAnd{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6047,7 +6056,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3555 + // line internal/php7/php7.y:3564 { yyVAL.node = &ast.ExprBinaryBitwiseXor{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6062,7 +6071,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3568 + // line internal/php7/php7.y:3577 { yyVAL.node = &ast.ExprBinaryConcat{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6077,7 +6086,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3581 + // line internal/php7/php7.y:3590 { yyVAL.node = &ast.ExprBinaryPlus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6092,7 +6101,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3594 + // line internal/php7/php7.y:3603 { yyVAL.node = &ast.ExprBinaryMinus{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6107,7 +6116,7 @@ yydefault: } case 329: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3607 + // line internal/php7/php7.y:3616 { yyVAL.node = &ast.ExprBinaryMul{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6122,7 +6131,7 @@ yydefault: } case 330: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3620 + // line internal/php7/php7.y:3629 { yyVAL.node = &ast.ExprBinaryPow{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6137,7 +6146,7 @@ yydefault: } case 331: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3633 + // line internal/php7/php7.y:3642 { yyVAL.node = &ast.ExprBinaryDiv{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6152,7 +6161,7 @@ yydefault: } case 332: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3646 + // line internal/php7/php7.y:3655 { yyVAL.node = &ast.ExprBinaryMod{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6167,7 +6176,7 @@ yydefault: } case 333: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3659 + // line internal/php7/php7.y:3668 { yyVAL.node = &ast.ExprBinaryShiftLeft{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6182,7 +6191,7 @@ yydefault: } case 334: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3672 + // line internal/php7/php7.y:3681 { yyVAL.node = &ast.ExprBinaryShiftRight{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6197,7 +6206,7 @@ yydefault: } case 335: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3685 + // line internal/php7/php7.y:3694 { yyVAL.node = &ast.ExprUnaryPlus{ast.Node{}, yyDollar[2].node} @@ -6211,7 +6220,7 @@ yydefault: } case 336: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3697 + // line internal/php7/php7.y:3706 { yyVAL.node = &ast.ExprUnaryMinus{ast.Node{}, yyDollar[2].node} @@ -6225,7 +6234,7 @@ yydefault: } case 337: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3709 + // line internal/php7/php7.y:3718 { yyVAL.node = &ast.ExprBooleanNot{ast.Node{}, yyDollar[2].node} @@ -6239,7 +6248,7 @@ yydefault: } case 338: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3721 + // line internal/php7/php7.y:3730 { yyVAL.node = &ast.ExprBitwiseNot{ast.Node{}, yyDollar[2].node} @@ -6253,7 +6262,7 @@ yydefault: } case 339: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3733 + // line internal/php7/php7.y:3742 { yyVAL.node = &ast.ExprBinaryIdentical{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6268,7 +6277,7 @@ yydefault: } case 340: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3746 + // line internal/php7/php7.y:3755 { yyVAL.node = &ast.ExprBinaryNotIdentical{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6283,7 +6292,7 @@ yydefault: } case 341: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3759 + // line internal/php7/php7.y:3768 { yyVAL.node = &ast.ExprBinaryEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6298,7 +6307,7 @@ yydefault: } case 342: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3772 + // line internal/php7/php7.y:3781 { yyVAL.node = &ast.ExprBinaryNotEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6314,7 +6323,7 @@ yydefault: } case 343: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3786 + // line internal/php7/php7.y:3795 { yyVAL.node = &ast.ExprBinarySmaller{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6329,7 +6338,7 @@ yydefault: } case 344: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3799 + // line internal/php7/php7.y:3808 { yyVAL.node = &ast.ExprBinarySmallerOrEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6344,7 +6353,7 @@ yydefault: } case 345: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3812 + // line internal/php7/php7.y:3821 { yyVAL.node = &ast.ExprBinaryGreater{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6359,7 +6368,7 @@ yydefault: } case 346: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3825 + // line internal/php7/php7.y:3834 { yyVAL.node = &ast.ExprBinaryGreaterOrEqual{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6374,7 +6383,7 @@ yydefault: } case 347: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3838 + // line internal/php7/php7.y:3847 { yyVAL.node = &ast.ExprBinarySpaceship{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6389,7 +6398,7 @@ yydefault: } case 348: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3851 + // line internal/php7/php7.y:3860 { yyVAL.node = &ast.ExprInstanceOf{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6404,7 +6413,7 @@ yydefault: } case 349: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3864 + // line internal/php7/php7.y:3873 { yyVAL.node = yyDollar[2].node @@ -6416,7 +6425,7 @@ yydefault: } case 350: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3874 + // line internal/php7/php7.y:3883 { yyVAL.node = yyDollar[1].node @@ -6424,7 +6433,7 @@ yydefault: } case 351: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:3880 + // line internal/php7/php7.y:3889 { yyVAL.node = &ast.ExprTernary{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[5].node} @@ -6440,7 +6449,7 @@ yydefault: } case 352: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3894 + // line internal/php7/php7.y:3903 { yyVAL.node = &ast.ExprTernary{ast.Node{}, yyDollar[1].node, nil, yyDollar[4].node} @@ -6456,7 +6465,7 @@ yydefault: } case 353: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3908 + // line internal/php7/php7.y:3917 { yyVAL.node = &ast.ExprBinaryCoalesce{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -6471,7 +6480,7 @@ yydefault: } case 354: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3921 + // line internal/php7/php7.y:3930 { yyVAL.node = yyDollar[1].node @@ -6479,7 +6488,7 @@ yydefault: } case 355: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3927 + // line internal/php7/php7.y:3936 { yyVAL.node = &ast.ExprCastInt{ast.Node{}, yyDollar[2].node} @@ -6494,7 +6503,7 @@ yydefault: } case 356: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3940 + // line internal/php7/php7.y:3949 { yyVAL.node = &ast.ExprCastDouble{ast.Node{}, yyDollar[2].node} @@ -6509,7 +6518,7 @@ yydefault: } case 357: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3953 + // line internal/php7/php7.y:3962 { yyVAL.node = &ast.ExprCastString{ast.Node{}, yyDollar[2].node} @@ -6524,7 +6533,7 @@ yydefault: } case 358: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3966 + // line internal/php7/php7.y:3975 { yyVAL.node = &ast.ExprCastArray{ast.Node{}, yyDollar[2].node} @@ -6539,7 +6548,7 @@ yydefault: } case 359: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3979 + // line internal/php7/php7.y:3988 { yyVAL.node = &ast.ExprCastObject{ast.Node{}, yyDollar[2].node} @@ -6554,7 +6563,7 @@ yydefault: } case 360: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3992 + // line internal/php7/php7.y:4001 { yyVAL.node = &ast.ExprCastBool{ast.Node{}, yyDollar[2].node} @@ -6569,7 +6578,7 @@ yydefault: } case 361: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4005 + // line internal/php7/php7.y:4014 { yyVAL.node = &ast.ExprCastUnset{ast.Node{}, yyDollar[2].node} @@ -6584,7 +6593,7 @@ yydefault: } case 362: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4018 + // line internal/php7/php7.y:4027 { var e *ast.ExprExit if yyDollar[2].node != nil { @@ -6613,7 +6622,7 @@ yydefault: } case 363: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4045 + // line internal/php7/php7.y:4054 { yyVAL.node = &ast.ExprErrorSuppress{ast.Node{}, yyDollar[2].node} @@ -6627,7 +6636,7 @@ yydefault: } case 364: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4057 + // line internal/php7/php7.y:4066 { yyVAL.node = yyDollar[1].node @@ -6635,7 +6644,7 @@ yydefault: } case 365: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4063 + // line internal/php7/php7.y:4072 { yyVAL.node = &ast.ExprShellExec{ast.Node{}, yyDollar[2].list} @@ -6649,7 +6658,7 @@ yydefault: } case 366: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4075 + // line internal/php7/php7.y:4084 { yyVAL.node = &ast.ExprPrint{ast.Node{}, yyDollar[2].node} @@ -6663,7 +6672,7 @@ yydefault: } case 367: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4087 + // line internal/php7/php7.y:4096 { yyVAL.node = &ast.ExprYield{ast.Node{}, nil, nil} @@ -6677,7 +6686,7 @@ yydefault: } case 368: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4099 + // line internal/php7/php7.y:4108 { yyVAL.node = &ast.ExprYield{ast.Node{}, nil, yyDollar[2].node} @@ -6691,7 +6700,7 @@ yydefault: } case 369: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4111 + // line internal/php7/php7.y:4120 { yyVAL.node = &ast.ExprYield{ast.Node{}, yyDollar[2].node, yyDollar[4].node} @@ -6706,7 +6715,7 @@ yydefault: } case 370: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4124 + // line internal/php7/php7.y:4133 { yyVAL.node = &ast.ExprYieldFrom{ast.Node{}, yyDollar[2].node} @@ -6720,7 +6729,7 @@ yydefault: } case 371: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4136 + // line internal/php7/php7.y:4145 { yyVAL.node = yyDollar[1].node @@ -6728,7 +6737,7 @@ yydefault: } case 372: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4142 + // line internal/php7/php7.y:4151 { yyVAL.node = yyDollar[2].node @@ -6751,7 +6760,7 @@ yydefault: } case 373: yyDollar = yyS[yypt-11 : yypt+1] - // line internal/php7/php7.y:4165 + // line internal/php7/php7.y:4174 { yyVAL.node = &ast.ExprClosure{ast.Node{}, yyDollar[2].token != nil, false, yyDollar[5].list, yyDollar[7].ClosureUse, yyDollar[8].node, yyDollar[10].list} @@ -6788,7 +6797,7 @@ yydefault: } case 374: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:4197 + // line internal/php7/php7.y:4206 { yyVAL.node = &ast.ExprArrowFunction{ast.Node{}, yyDollar[2].token != nil, false, yyDollar[4].list, yyDollar[6].node, yyDollar[9].node} @@ -6820,7 +6829,7 @@ yydefault: } case 375: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:4228 + // line internal/php7/php7.y:4237 { yyVAL.str = yylex.(*Parser).Lexer.GetPhpDocComment() yylex.(*Parser).Lexer.SetPhpDocComment("") @@ -6829,19 +6838,19 @@ yydefault: } case 376: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:4238 + // line internal/php7/php7.y:4247 { yyVAL.token = nil } case 377: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4242 + // line internal/php7/php7.y:4251 { yyVAL.token = yyDollar[1].token } case 378: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:4249 + // line internal/php7/php7.y:4258 { yyVAL.ClosureUse = nil @@ -6849,7 +6858,7 @@ yydefault: } case 379: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4255 + // line internal/php7/php7.y:4264 { yyVAL.ClosureUse = &ast.ExprClosureUse{ast.Node{}, yyDollar[3].list} @@ -6865,7 +6874,7 @@ yydefault: } case 380: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4272 + // line internal/php7/php7.y:4281 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -6876,7 +6885,7 @@ yydefault: } case 381: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4281 + // line internal/php7/php7.y:4290 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -6884,7 +6893,7 @@ yydefault: } case 382: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4290 + // line internal/php7/php7.y:4299 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, identifier} @@ -6895,12 +6904,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 383: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4304 + // line internal/php7/php7.y:4314 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[2].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -6914,12 +6924,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, yyDollar[2].token.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 384: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4324 + // line internal/php7/php7.y:4335 { yyVAL.node = &ast.ExprFunctionCall{ast.Node{}, yyDollar[1].node, yyDollar[2].node.(*ast.ArgumentList)} @@ -6933,7 +6944,7 @@ yydefault: } case 385: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4336 + // line internal/php7/php7.y:4347 { yyVAL.node = &ast.ExprStaticCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)} @@ -6948,7 +6959,7 @@ yydefault: } case 386: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4349 + // line internal/php7/php7.y:4360 { yyVAL.node = &ast.ExprStaticCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)} @@ -6963,7 +6974,7 @@ yydefault: } case 387: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4362 + // line internal/php7/php7.y:4373 { yyVAL.node = &ast.ExprFunctionCall{ast.Node{}, yyDollar[1].node, yyDollar[2].node.(*ast.ArgumentList)} @@ -6977,7 +6988,7 @@ yydefault: } case 388: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4377 + // line internal/php7/php7.y:4388 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -6991,7 +7002,7 @@ yydefault: } case 389: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4389 + // line internal/php7/php7.y:4400 { yyVAL.node = yyDollar[1].node @@ -6999,7 +7010,7 @@ yydefault: } case 390: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4398 + // line internal/php7/php7.y:4409 { yyVAL.node = yyDollar[1].node @@ -7007,7 +7018,7 @@ yydefault: } case 391: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4404 + // line internal/php7/php7.y:4415 { yyVAL.node = yyDollar[1].node @@ -7015,7 +7026,7 @@ yydefault: } case 392: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:4413 + // line internal/php7/php7.y:4424 { yyVAL.node = nil @@ -7023,7 +7034,7 @@ yydefault: } case 393: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4419 + // line internal/php7/php7.y:4430 { yyVAL.node = &ast.ExprExit{ast.Node{}, false, yyDollar[2].node} @@ -7038,7 +7049,7 @@ yydefault: } case 394: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:4435 + // line internal/php7/php7.y:4446 { yyVAL.list = []ast.Vertex{} @@ -7046,7 +7057,7 @@ yydefault: } case 395: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4441 + // line internal/php7/php7.y:4452 { part := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{part} @@ -7058,7 +7069,7 @@ yydefault: } case 396: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4451 + // line internal/php7/php7.y:4462 { yyVAL.list = yyDollar[1].list @@ -7066,7 +7077,7 @@ yydefault: } case 397: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:4460 + // line internal/php7/php7.y:4471 { yyVAL.node = nil @@ -7074,7 +7085,7 @@ yydefault: } case 398: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4466 + // line internal/php7/php7.y:4477 { yyVAL.node = yyDollar[1].node @@ -7082,7 +7093,7 @@ yydefault: } case 399: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4475 + // line internal/php7/php7.y:4486 { yyVAL.node = &ast.ExprArray{ast.Node{}, yyDollar[3].list} @@ -7098,7 +7109,7 @@ yydefault: } case 400: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4489 + // line internal/php7/php7.y:4500 { yyVAL.node = &ast.ExprShortArray{ast.Node{}, yyDollar[2].list} @@ -7113,7 +7124,7 @@ yydefault: } case 401: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4502 + // line internal/php7/php7.y:4513 { yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value} @@ -7127,7 +7138,7 @@ yydefault: } case 402: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4517 + // line internal/php7/php7.y:4528 { yyVAL.node = &ast.ScalarLnumber{ast.Node{}, yyDollar[1].token.Value} @@ -7141,7 +7152,7 @@ yydefault: } case 403: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4529 + // line internal/php7/php7.y:4540 { yyVAL.node = &ast.ScalarDnumber{ast.Node{}, yyDollar[1].token.Value} @@ -7155,7 +7166,7 @@ yydefault: } case 404: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4541 + // line internal/php7/php7.y:4552 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7169,7 +7180,7 @@ yydefault: } case 405: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4553 + // line internal/php7/php7.y:4564 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7183,7 +7194,7 @@ yydefault: } case 406: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4565 + // line internal/php7/php7.y:4576 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7197,7 +7208,7 @@ yydefault: } case 407: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4577 + // line internal/php7/php7.y:4588 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7211,7 +7222,7 @@ yydefault: } case 408: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4589 + // line internal/php7/php7.y:4600 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7225,7 +7236,7 @@ yydefault: } case 409: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4601 + // line internal/php7/php7.y:4612 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7239,7 +7250,7 @@ yydefault: } case 410: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4613 + // line internal/php7/php7.y:4624 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7253,7 +7264,7 @@ yydefault: } case 411: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4625 + // line internal/php7/php7.y:4636 { yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value} @@ -7267,7 +7278,7 @@ yydefault: } case 412: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4637 + // line internal/php7/php7.y:4648 { encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[2].token.Value} yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, []ast.Vertex{encapsed}} @@ -7283,7 +7294,7 @@ yydefault: } case 413: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4651 + // line internal/php7/php7.y:4662 { yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, nil} @@ -7297,7 +7308,7 @@ yydefault: } case 414: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4663 + // line internal/php7/php7.y:4674 { yyVAL.node = &ast.ScalarEncapsed{ast.Node{}, yyDollar[2].list} @@ -7311,7 +7322,7 @@ yydefault: } case 415: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4675 + // line internal/php7/php7.y:4686 { yyVAL.node = &ast.ScalarHeredoc{ast.Node{}, yyDollar[1].token.Value, yyDollar[2].list} @@ -7325,7 +7336,7 @@ yydefault: } case 416: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4687 + // line internal/php7/php7.y:4698 { yyVAL.node = yyDollar[1].node @@ -7333,7 +7344,7 @@ yydefault: } case 417: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4693 + // line internal/php7/php7.y:4704 { yyVAL.node = yyDollar[1].node @@ -7341,7 +7352,7 @@ yydefault: } case 418: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4702 + // line internal/php7/php7.y:4713 { yyVAL.node = &ast.ExprConstFetch{ast.Node{}, yyDollar[1].node} @@ -7355,7 +7366,7 @@ yydefault: } case 419: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4714 + // line internal/php7/php7.y:4725 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.ExprClassConstFetch{ast.Node{}, yyDollar[1].node, target} @@ -7373,7 +7384,7 @@ yydefault: } case 420: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4730 + // line internal/php7/php7.y:4741 { target := &ast.Identifier{ast.Node{}, yyDollar[3].token.Value} yyVAL.node = &ast.ExprClassConstFetch{ast.Node{}, yyDollar[1].node, target} @@ -7391,7 +7402,7 @@ yydefault: } case 421: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4749 + // line internal/php7/php7.y:4760 { yyVAL.node = yyDollar[1].node @@ -7399,7 +7410,7 @@ yydefault: } case 422: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4755 + // line internal/php7/php7.y:4766 { yyVAL.node = yyDollar[1].node @@ -7407,7 +7418,7 @@ yydefault: } case 423: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:4764 + // line internal/php7/php7.y:4775 { yyVAL.node = nil @@ -7415,7 +7426,7 @@ yydefault: } case 424: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4770 + // line internal/php7/php7.y:4781 { yyVAL.node = yyDollar[1].node @@ -7423,7 +7434,7 @@ yydefault: } case 425: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4779 + // line internal/php7/php7.y:4790 { yyVAL.node = yyDollar[1].node @@ -7431,7 +7442,7 @@ yydefault: } case 426: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4788 + // line internal/php7/php7.y:4799 { yyVAL.node = yyDollar[1].node @@ -7439,7 +7450,7 @@ yydefault: } case 427: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4794 + // line internal/php7/php7.y:4805 { yyVAL.node = yyDollar[2].node @@ -7451,7 +7462,7 @@ yydefault: } case 428: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4804 + // line internal/php7/php7.y:4815 { yyVAL.node = yyDollar[1].node @@ -7459,7 +7470,7 @@ yydefault: } case 429: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4813 + // line internal/php7/php7.y:4824 { yyVAL.node = yyDollar[1].node @@ -7467,7 +7478,7 @@ yydefault: } case 430: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4819 + // line internal/php7/php7.y:4830 { yyVAL.node = yyDollar[2].node @@ -7479,7 +7490,7 @@ yydefault: } case 431: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4829 + // line internal/php7/php7.y:4840 { yyVAL.node = yyDollar[1].node @@ -7487,7 +7498,7 @@ yydefault: } case 432: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4838 + // line internal/php7/php7.y:4849 { yyVAL.node = yyDollar[1].node @@ -7495,7 +7506,7 @@ yydefault: } case 433: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4844 + // line internal/php7/php7.y:4855 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7511,7 +7522,7 @@ yydefault: } case 434: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4858 + // line internal/php7/php7.y:4869 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7527,7 +7538,7 @@ yydefault: } case 435: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4872 + // line internal/php7/php7.y:4883 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7543,7 +7554,7 @@ yydefault: } case 436: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4886 + // line internal/php7/php7.y:4897 { yyVAL.node = &ast.ExprMethodCall{ast.Node{}, yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*ast.ArgumentList)} @@ -7558,7 +7569,7 @@ yydefault: } case 437: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4899 + // line internal/php7/php7.y:4910 { yyVAL.node = yyDollar[1].node @@ -7566,7 +7577,7 @@ yydefault: } case 438: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4908 + // line internal/php7/php7.y:4919 { yyVAL.node = yyDollar[1].node @@ -7574,7 +7585,7 @@ yydefault: } case 439: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4914 + // line internal/php7/php7.y:4925 { yyVAL.node = yyDollar[1].node @@ -7582,7 +7593,7 @@ yydefault: } case 440: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4920 + // line internal/php7/php7.y:4931 { yyVAL.node = &ast.ExprPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7597,7 +7608,7 @@ yydefault: } case 441: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4936 + // line internal/php7/php7.y:4947 { name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, name} @@ -7608,12 +7619,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 442: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4950 + // line internal/php7/php7.y:4962 { yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[3].node} @@ -7630,7 +7642,7 @@ yydefault: } case 443: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4965 + // line internal/php7/php7.y:4977 { yyVAL.node = &ast.ExprVariable{ast.Node{}, yyDollar[2].node} @@ -7645,7 +7657,7 @@ yydefault: } case 444: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4981 + // line internal/php7/php7.y:4993 { yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7660,7 +7672,7 @@ yydefault: } case 445: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4994 + // line internal/php7/php7.y:5006 { yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7675,7 +7687,7 @@ yydefault: } case 446: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5010 + // line internal/php7/php7.y:5022 { yyVAL.node = yyDollar[1].node @@ -7683,7 +7695,7 @@ yydefault: } case 447: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:5016 + // line internal/php7/php7.y:5028 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7699,7 +7711,7 @@ yydefault: } case 448: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:5030 + // line internal/php7/php7.y:5042 { yyVAL.node = &ast.ExprArrayDimFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7715,7 +7727,7 @@ yydefault: } case 449: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5044 + // line internal/php7/php7.y:5056 { yyVAL.node = &ast.ExprPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7730,7 +7742,7 @@ yydefault: } case 450: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5057 + // line internal/php7/php7.y:5069 { yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7745,7 +7757,7 @@ yydefault: } case 451: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5070 + // line internal/php7/php7.y:5082 { yyVAL.node = &ast.ExprStaticPropertyFetch{ast.Node{}, yyDollar[1].node, yyDollar[3].node} @@ -7760,7 +7772,7 @@ yydefault: } case 452: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5086 + // line internal/php7/php7.y:5098 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -7774,7 +7786,7 @@ yydefault: } case 453: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5098 + // line internal/php7/php7.y:5110 { yyVAL.node = yyDollar[2].node @@ -7786,7 +7798,7 @@ yydefault: } case 454: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5108 + // line internal/php7/php7.y:5120 { yyVAL.node = yyDollar[1].node @@ -7794,7 +7806,7 @@ yydefault: } case 455: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5117 + // line internal/php7/php7.y:5129 { yyVAL.node = &ast.Identifier{ast.Node{}, yyDollar[1].token.Value} @@ -7808,7 +7820,7 @@ yydefault: } case 456: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5129 + // line internal/php7/php7.y:5141 { yyVAL.node = yyDollar[2].node @@ -7820,7 +7832,7 @@ yydefault: } case 457: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5139 + // line internal/php7/php7.y:5151 { yyVAL.node = yyDollar[1].node @@ -7828,7 +7840,7 @@ yydefault: } case 458: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5148 + // line internal/php7/php7.y:5160 { yyVAL.list = yyDollar[1].list @@ -7836,7 +7848,7 @@ yydefault: } case 459: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:5157 + // line internal/php7/php7.y:5169 { yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, nil} @@ -7844,7 +7856,7 @@ yydefault: } case 460: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5163 + // line internal/php7/php7.y:5175 { yyVAL.node = yyDollar[1].node @@ -7852,7 +7864,7 @@ yydefault: } case 461: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5172 + // line internal/php7/php7.y:5184 { if len(yyDollar[1].list) == 0 { yyDollar[1].list = []ast.Vertex{&ast.ExprArrayItem{ast.Node{}, false, nil, nil}} @@ -7867,7 +7879,7 @@ yydefault: } case 462: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5185 + // line internal/php7/php7.y:5197 { if yyDollar[1].node.(*ast.ExprArrayItem).Key == nil && yyDollar[1].node.(*ast.ExprArrayItem).Val == nil { yyVAL.list = []ast.Vertex{} @@ -7879,7 +7891,7 @@ yydefault: } case 463: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5198 + // line internal/php7/php7.y:5210 { yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, yyDollar[3].node} @@ -7894,7 +7906,7 @@ yydefault: } case 464: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5211 + // line internal/php7/php7.y:5223 { yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, yyDollar[1].node} @@ -7908,7 +7920,7 @@ yydefault: } case 465: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:5223 + // line internal/php7/php7.y:5235 { reference := &ast.ExprReference{ast.Node{}, yyDollar[4].node} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, yyDollar[1].node, reference} @@ -7926,7 +7938,7 @@ yydefault: } case 466: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5239 + // line internal/php7/php7.y:5251 { reference := &ast.ExprReference{ast.Node{}, yyDollar[2].node} yyVAL.node = &ast.ExprArrayItem{ast.Node{}, false, nil, reference} @@ -7942,7 +7954,7 @@ yydefault: } case 467: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5253 + // line internal/php7/php7.y:5265 { yyVAL.node = &ast.ExprArrayItem{ast.Node{}, true, nil, yyDollar[2].node} @@ -7956,7 +7968,7 @@ yydefault: } case 468: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:5265 + // line internal/php7/php7.y:5277 { // TODO: Cannot use list() as standalone expression listNode := &ast.ExprList{ast.Node{}, yyDollar[5].list} @@ -7977,7 +7989,7 @@ yydefault: } case 469: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:5284 + // line internal/php7/php7.y:5296 { // TODO: Cannot use list() as standalone expression listNode := &ast.ExprList{ast.Node{}, yyDollar[3].list} @@ -7996,7 +8008,7 @@ yydefault: } case 470: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5304 + // line internal/php7/php7.y:5316 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -8004,7 +8016,7 @@ yydefault: } case 471: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5310 + // line internal/php7/php7.y:5322 { encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[2].token.Value} yyVAL.list = append(yyDollar[1].list, encapsed) @@ -8019,7 +8031,7 @@ yydefault: } case 472: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5323 + // line internal/php7/php7.y:5335 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -8027,7 +8039,7 @@ yydefault: } case 473: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5329 + // line internal/php7/php7.y:5341 { encapsed := &ast.ScalarEncapsedStringPart{ast.Node{}, yyDollar[1].token.Value} yyVAL.list = []ast.Vertex{encapsed, yyDollar[2].node} @@ -8042,7 +8054,7 @@ yydefault: } case 474: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5345 + // line internal/php7/php7.y:5357 { name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, name} @@ -8053,12 +8065,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 475: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:5359 + // line internal/php7/php7.y:5372 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -8070,6 +8083,7 @@ yydefault: yyVAL.node.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, append(yyDollar[2].token.Tokens, yylex.(*Parser).GetFreeFloatingToken(yyDollar[2].token)...)) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Expr, append(yyDollar[4].token.Tokens, yylex.(*Parser).GetFreeFloatingToken(yyDollar[4].token)...)) @@ -8077,7 +8091,7 @@ yydefault: } case 476: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5376 + // line internal/php7/php7.y:5390 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -8091,6 +8105,7 @@ yydefault: yyVAL.node.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(yyVAL.node, token.Var, yyDollar[2].token.Tokens) yylex.(*Parser).setFreeFloating(fetch, token.Start, yyDollar[3].token.Tokens) @@ -8098,7 +8113,7 @@ yydefault: } case 477: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5395 + // line internal/php7/php7.y:5410 { variable := &ast.ExprVariable{ast.Node{}, yyDollar[2].node} @@ -8115,7 +8130,7 @@ yydefault: } case 478: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5410 + // line internal/php7/php7.y:5425 { name := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} variable := &ast.ExprVariable{ast.Node{}, name} @@ -8134,7 +8149,7 @@ yydefault: } case 479: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:5427 + // line internal/php7/php7.y:5442 { identifier := &ast.Identifier{ast.Node{}, yyDollar[2].token.Value} variable := &ast.ExprVariable{ast.Node{}, identifier} @@ -8155,7 +8170,7 @@ yydefault: } case 480: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5446 + // line internal/php7/php7.y:5461 { yyVAL.node = yyDollar[2].node @@ -8167,7 +8182,7 @@ yydefault: } case 481: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5459 + // line internal/php7/php7.y:5474 { yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value} @@ -8181,7 +8196,7 @@ yydefault: } case 482: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5471 + // line internal/php7/php7.y:5486 { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { @@ -8200,7 +8215,7 @@ yydefault: } case 483: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5488 + // line internal/php7/php7.y:5503 { var lnumber *ast.ScalarLnumber // TODO: add option to handle 64 bit integer @@ -8228,7 +8243,7 @@ yydefault: } case 484: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5514 + // line internal/php7/php7.y:5529 { identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc(yyDollar[1].token.Value, isDollar)} yyVAL.node = &ast.ExprVariable{ast.Node{}, identifier} @@ -8239,12 +8254,13 @@ yydefault: // save comments yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.Tokens) + yylex.(*Parser).addDollarToken(yyVAL.node) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 485: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:5531 + // line internal/php7/php7.y:5547 { yyVAL.node = &ast.ExprIsset{ast.Node{}, yyDollar[3].list} @@ -8264,7 +8280,7 @@ yydefault: } case 486: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:5549 + // line internal/php7/php7.y:5565 { yyVAL.node = &ast.ExprEmpty{ast.Node{}, yyDollar[3].node} @@ -8280,7 +8296,7 @@ yydefault: } case 487: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5563 + // line internal/php7/php7.y:5579 { yyVAL.node = &ast.ExprInclude{ast.Node{}, yyDollar[2].node} @@ -8294,7 +8310,7 @@ yydefault: } case 488: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5575 + // line internal/php7/php7.y:5591 { yyVAL.node = &ast.ExprIncludeOnce{ast.Node{}, yyDollar[2].node} @@ -8308,7 +8324,7 @@ yydefault: } case 489: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:5587 + // line internal/php7/php7.y:5603 { yyVAL.node = &ast.ExprEval{ast.Node{}, yyDollar[3].node} @@ -8324,7 +8340,7 @@ yydefault: } case 490: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5601 + // line internal/php7/php7.y:5617 { yyVAL.node = &ast.ExprRequire{ast.Node{}, yyDollar[2].node} @@ -8338,7 +8354,7 @@ yydefault: } case 491: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:5613 + // line internal/php7/php7.y:5629 { yyVAL.node = &ast.ExprRequireOnce{ast.Node{}, yyDollar[2].node} @@ -8352,7 +8368,7 @@ yydefault: } case 492: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5628 + // line internal/php7/php7.y:5644 { yyVAL.list = []ast.Vertex{yyDollar[1].node} @@ -8360,7 +8376,7 @@ yydefault: } case 493: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:5634 + // line internal/php7/php7.y:5650 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -8371,7 +8387,7 @@ yydefault: } case 494: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:5646 + // line internal/php7/php7.y:5662 { yyVAL.node = yyDollar[1].node diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 9f08fa4..cd147ff 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -1368,6 +1368,7 @@ catch_list: yylex.(*Parser).setFreeFloating(catch, token.Start, $2.Tokens) yylex.(*Parser).setFreeFloating(catch, token.Catch, $3.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $5.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating(catch, token.Var, $6.Tokens) yylex.(*Parser).setFreeFloating(catch, token.Cond, $7.Tokens) yylex.(*Parser).setFreeFloating(catch, token.Stmts, $9.Tokens) @@ -2172,6 +2173,8 @@ parameter: } yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Tokens) + yylex.(*Parser).addDollarToken(variable) + // normalize if $3 == nil { yylex.(*Parser).setFreeFloating($$, token.Ampersand, $$.GetNode().Tokens[token.Variadic]); delete($$.GetNode().Tokens, token.Variadic) @@ -2217,6 +2220,8 @@ parameter: yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Tokens) yylex.(*Parser).setFreeFloating($$, token.Var, $5.Tokens) + yylex.(*Parser).addDollarToken(variable) + // normalize if $3 == nil { yylex.(*Parser).setFreeFloating($$, token.Ampersand, $$.GetNode().Tokens[token.Variadic]); delete($$.GetNode().Tokens, token.Variadic) @@ -2456,6 +2461,7 @@ static_var: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -2472,6 +2478,7 @@ static_var: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating($$, token.Var, $2.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) @@ -2981,6 +2988,7 @@ property: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -2997,6 +3005,7 @@ property: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating($$, token.Var, $2.Tokens) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) @@ -4297,6 +4306,7 @@ lexical_var: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4314,6 +4324,7 @@ lexical_var: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) yylex.(*Parser).setFreeFloating(variable, token.Start, $2.Tokens) + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4943,6 +4954,7 @@ simple_variable: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -5352,6 +5364,7 @@ encaps_var: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -5367,6 +5380,7 @@ encaps_var: $$.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition($1, $4) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating($$, token.Var, append($2.Tokens, yylex.(*Parser).GetFreeFloatingToken($2)...)) yylex.(*Parser).setFreeFloating($$, token.Expr, append($4.Tokens, yylex.(*Parser).GetFreeFloatingToken($4)...)) @@ -5386,6 +5400,7 @@ encaps_var: $$.GetNode().Position = yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3) // save comments + yylex.(*Parser).addDollarToken(variable) yylex.(*Parser).setFreeFloating($$, token.Var, $2.Tokens) yylex.(*Parser).setFreeFloating(fetch, token.Start, $3.Tokens) @@ -5521,6 +5536,7 @@ encaps_var_offset: // save comments yylex.(*Parser).setFreeFloating($$, token.Start, $1.Tokens) + yylex.(*Parser).addDollarToken($$) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go index 3764cec..0d411e1 100644 --- a/internal/scanner/scanner.go +++ b/internal/scanner/scanner.go @@ -22867,6 +22867,7 @@ func (lex *Lexer) Lex(lval Lval) int { token.Tokens = lex.Tokens token.Value = lex.data[lex.ts:lex.te] + token.ID = tok lval.Token(token) diff --git a/internal/scanner/scanner.rl b/internal/scanner/scanner.rl index 5eec481..d9195f2 100644 --- a/internal/scanner/scanner.rl +++ b/internal/scanner/scanner.rl @@ -510,6 +510,7 @@ func (lex *Lexer) Lex(lval Lval) int { token.Tokens = lex.Tokens token.Value = lex.data[lex.ts:lex.te] + token.ID = tok lval.Token(token) diff --git a/internal/scanner/token.go b/internal/scanner/token.go index d45a12e..7c07126 100644 --- a/internal/scanner/token.go +++ b/internal/scanner/token.go @@ -6,6 +6,7 @@ import ( // Token value returned by lexer type Token struct { + ID TokenID Value []byte Tokens []token.Token StartLine int diff --git a/pkg/ast/visitor/namespace_resolver.go b/pkg/ast/visitor/namespace_resolver.go index f79378c..3029c5c 100644 --- a/pkg/ast/visitor/namespace_resolver.go +++ b/pkg/ast/visitor/namespace_resolver.go @@ -27,7 +27,7 @@ func NewNamespaceResolver() *NamespaceResolver { func (nsr *NamespaceResolver) EnterNode(n ast.Vertex) bool { n.Accept(nsr) - + if !nsr.goDeep { nsr.goDeep = true return false @@ -54,7 +54,7 @@ func (nsr *NamespaceResolver) StmtUseList(n *ast.StmtUseList) { for _, nn := range n.Uses { nsr.AddAlias(useType, nn, nil) } - + nsr.goDeep = false } diff --git a/pkg/ast/visitor/namespace_resolver_test.go b/pkg/ast/visitor/namespace_resolver_test.go index 61ed537..607aa9e 100644 --- a/pkg/ast/visitor/namespace_resolver_test.go +++ b/pkg/ast/visitor/namespace_resolver_test.go @@ -194,8 +194,8 @@ func TestResolveInstanceCatch(t *testing.T) { nameBC, nameF, }, - Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, - Stmts: []ast.Vertex{}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, + Stmts: []ast.Vertex{}, }, }, }, @@ -407,7 +407,7 @@ func TestResolveClassName(t *testing.T) { nameBC := &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("B")}, &ast.NameNamePart{Value: []byte("C")}}} class := &ast.StmtClass{ - ClassName: &ast.Identifier{Value: []byte("A")}, + ClassName: &ast.Identifier{Value: []byte("A")}, Extends: &ast.StmtClassExtends{ ClassName: nameAB, }, @@ -472,8 +472,8 @@ func TestResolveInterfaceName(t *testing.T) { func TestResolveTraitName(t *testing.T) { traitNode := &ast.StmtTrait{ - TraitName: &ast.Identifier{Value: []byte("A")}, - Stmts: []ast.Vertex{}, + TraitName: &ast.Identifier{Value: []byte("A")}, + Stmts: []ast.Vertex{}, } stxTree := &ast.StmtStmtList{ @@ -498,14 +498,14 @@ func TestResolveFunctionName(t *testing.T) { nameBC := &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("B")}, &ast.NameNamePart{Value: []byte("C")}}} functionNode := &ast.StmtFunction{ - ReturnsRef: false, - FunctionName: &ast.Identifier{Value: []byte("A")}, + ReturnsRef: false, + FunctionName: &ast.Identifier{Value: []byte("A")}, Params: []ast.Vertex{ &ast.Parameter{ - ByRef: false, - Variadic: false, - Type: nameAB, - Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, + ByRef: false, + Variadic: false, + Type: nameAB, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, }, }, ReturnType: &ast.Nullable{Expr: nameBC}, @@ -536,14 +536,14 @@ func TestResolveMethodName(t *testing.T) { nameBC := &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("B")}, &ast.NameNamePart{Value: []byte("C")}}} methodNode := &ast.StmtClassMethod{ - ReturnsRef: false, - MethodName: &ast.Identifier{Value: []byte("A")}, + ReturnsRef: false, + MethodName: &ast.Identifier{Value: []byte("A")}, Params: []ast.Vertex{ &ast.Parameter{ - ByRef: false, - Variadic: false, - Type: nameAB, - Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, + ByRef: false, + Variadic: false, + Type: nameAB, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, }, }, ReturnType: &ast.Nullable{Expr: nameBC}, @@ -569,14 +569,14 @@ func TestResolveClosureName(t *testing.T) { nameBC := &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("B")}, &ast.NameNamePart{Value: []byte("C")}}} closureNode := &ast.ExprClosure{ - ReturnsRef: false, - Static: false, + ReturnsRef: false, + Static: false, Params: []ast.Vertex{ &ast.Parameter{ - ByRef: false, - Variadic: false, - Type: nameAB, - Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, + ByRef: false, + Variadic: false, + Type: nameAB, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, }, }, ClosureUse: nil, @@ -600,12 +600,12 @@ func TestResolveConstantsName(t *testing.T) { nameAB := &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("A")}, &ast.NameNamePart{Value: []byte("B")}}} constantB := &ast.StmtConstant{ - ConstantName: &ast.Identifier{Value: []byte("B")}, - Expr: &ast.ScalarLnumber{Value: []byte("1")}, + ConstantName: &ast.Identifier{Value: []byte("B")}, + Expr: &ast.ScalarLnumber{Value: []byte("1")}, } constantC := &ast.StmtConstant{ - ConstantName: &ast.Identifier{Value: []byte("C")}, - Expr: &ast.ScalarLnumber{Value: []byte("1")}, + ConstantName: &ast.Identifier{Value: []byte("C")}, + Expr: &ast.ScalarLnumber{Value: []byte("1")}, } stxTree := &ast.StmtStmtList{ @@ -644,12 +644,12 @@ func TestResolveNamespaces(t *testing.T) { relativeNameCE := &ast.NameRelative{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("C")}, &ast.NameNamePart{Value: []byte("E")}}} constantB := &ast.StmtConstant{ - ConstantName: &ast.Identifier{Value: []byte("B")}, - Expr: &ast.ScalarLnumber{Value: []byte("1")}, + ConstantName: &ast.Identifier{Value: []byte("B")}, + Expr: &ast.ScalarLnumber{Value: []byte("1")}, } constantC := &ast.StmtConstant{ - ConstantName: &ast.Identifier{Value: []byte("C")}, - Expr: &ast.ScalarLnumber{Value: []byte("1")}, + ConstantName: &ast.Identifier{Value: []byte("C")}, + Expr: &ast.ScalarLnumber{Value: []byte("1")}, } stxTree := &ast.StmtStmtList{ diff --git a/printer/pretty_printer.go b/pkg/printer/pretty_printer.go similarity index 54% rename from printer/pretty_printer.go rename to pkg/printer/pretty_printer.go index 95de96f..37a1a71 100644 --- a/printer/pretty_printer.go +++ b/pkg/printer/pretty_printer.go @@ -4,15 +4,7 @@ import ( "io" "strings" - "github.com/z7zmey/php-parser/node/stmt" - - "github.com/z7zmey/php-parser/node" - "github.com/z7zmey/php-parser/node/expr" - "github.com/z7zmey/php-parser/node/expr/assign" - "github.com/z7zmey/php-parser/node/expr/binary" - "github.com/z7zmey/php-parser/node/expr/cast" - "github.com/z7zmey/php-parser/node/name" - "github.com/z7zmey/php-parser/node/scalar" + "github.com/z7zmey/php-parser/pkg/ast" ) type PrettyPrinter struct { @@ -30,11 +22,11 @@ func NewPrettyPrinter(w io.Writer, indentStr string) *PrettyPrinter { } } -func (p *PrettyPrinter) Print(n node.Node) { +func (p *PrettyPrinter) Print(n ast.Vertex) { p.printNode(n) } -func (p *PrettyPrinter) joinPrint(glue string, nn []node.Node) { +func (p *PrettyPrinter) joinPrint(glue string, nn []ast.Vertex) { for k, n := range nn { if k > 0 { io.WriteString(p.w, glue) @@ -44,7 +36,7 @@ func (p *PrettyPrinter) joinPrint(glue string, nn []node.Node) { } } -func (p *PrettyPrinter) printNodes(nn []node.Node) { +func (p *PrettyPrinter) printNodes(nn []ast.Vertex) { p.indentDepth++ l := len(nn) - 1 for k, n := range nn { @@ -63,367 +55,367 @@ func (p *PrettyPrinter) printIndent() { } } -func (p *PrettyPrinter) printNode(n node.Node) { +func (p *PrettyPrinter) printNode(n ast.Vertex) { switch n.(type) { // node - case *node.Root: + case *ast.Root: p.printNodeRoot(n) - case *node.Identifier: + case *ast.Identifier: p.printNodeIdentifier(n) - case *node.Parameter: + case *ast.Parameter: p.printNodeParameter(n) - case *node.Nullable: + case *ast.Nullable: p.printNodeNullable(n) - case *node.Argument: + case *ast.Argument: p.printNodeArgument(n) // name - case *name.NamePart: + case *ast.NameNamePart: p.printNameNamePart(n) - case *name.Name: + case *ast.NameName: p.printNameName(n) - case *name.FullyQualified: + case *ast.NameFullyQualified: p.printNameFullyQualified(n) - case *name.Relative: + case *ast.NameRelative: p.printNameRelative(n) // scalar - case *scalar.Lnumber: + case *ast.ScalarLnumber: p.printScalarLNumber(n) - case *scalar.Dnumber: + case *ast.ScalarDnumber: p.printScalarDNumber(n) - case *scalar.String: + case *ast.ScalarString: p.printScalarString(n) - case *scalar.EncapsedStringPart: + case *ast.ScalarEncapsedStringPart: p.printScalarEncapsedStringPart(n) - case *scalar.Encapsed: + case *ast.ScalarEncapsed: p.printScalarEncapsed(n) - case *scalar.Heredoc: + case *ast.ScalarHeredoc: p.printScalarHeredoc(n) - case *scalar.MagicConstant: + case *ast.ScalarMagicConstant: p.printScalarMagicConstant(n) // assign - case *assign.Assign: - p.printAssign(n) - case *assign.Reference: - p.printReference(n) - case *assign.BitwiseAnd: + case *ast.ExprAssign: + p.printAssignAssign(n) + case *ast.ExprAssignReference: + p.printAssignReference(n) + case *ast.ExprAssignBitwiseAnd: p.printAssignBitwiseAnd(n) - case *assign.BitwiseOr: + case *ast.ExprAssignBitwiseOr: p.printAssignBitwiseOr(n) - case *assign.BitwiseXor: + case *ast.ExprAssignBitwiseXor: p.printAssignBitwiseXor(n) - case *assign.Concat: + case *ast.ExprAssignConcat: p.printAssignConcat(n) - case *assign.Div: + case *ast.ExprAssignDiv: p.printAssignDiv(n) - case *assign.Minus: + case *ast.ExprAssignMinus: p.printAssignMinus(n) - case *assign.Mod: + case *ast.ExprAssignMod: p.printAssignMod(n) - case *assign.Mul: + case *ast.ExprAssignMul: p.printAssignMul(n) - case *assign.Plus: + case *ast.ExprAssignPlus: p.printAssignPlus(n) - case *assign.Pow: + case *ast.ExprAssignPow: p.printAssignPow(n) - case *assign.ShiftLeft: + case *ast.ExprAssignShiftLeft: p.printAssignShiftLeft(n) - case *assign.ShiftRight: + case *ast.ExprAssignShiftRight: p.printAssignShiftRight(n) // binary - case *binary.BitwiseAnd: + case *ast.ExprBinaryBitwiseAnd: p.printBinaryBitwiseAnd(n) - case *binary.BitwiseOr: + case *ast.ExprBinaryBitwiseOr: p.printBinaryBitwiseOr(n) - case *binary.BitwiseXor: + case *ast.ExprBinaryBitwiseXor: p.printBinaryBitwiseXor(n) - case *binary.BooleanAnd: + case *ast.ExprBinaryBooleanAnd: p.printBinaryBooleanAnd(n) - case *binary.BooleanOr: + case *ast.ExprBinaryBooleanOr: p.printBinaryBooleanOr(n) - case *binary.Coalesce: + case *ast.ExprBinaryCoalesce: p.printBinaryCoalesce(n) - case *binary.Concat: + case *ast.ExprBinaryConcat: p.printBinaryConcat(n) - case *binary.Div: + case *ast.ExprBinaryDiv: p.printBinaryDiv(n) - case *binary.Equal: + case *ast.ExprBinaryEqual: p.printBinaryEqual(n) - case *binary.GreaterOrEqual: + case *ast.ExprBinaryGreaterOrEqual: p.printBinaryGreaterOrEqual(n) - case *binary.Greater: + case *ast.ExprBinaryGreater: p.printBinaryGreater(n) - case *binary.Identical: + case *ast.ExprBinaryIdentical: p.printBinaryIdentical(n) - case *binary.LogicalAnd: + case *ast.ExprBinaryLogicalAnd: p.printBinaryLogicalAnd(n) - case *binary.LogicalOr: + case *ast.ExprBinaryLogicalOr: p.printBinaryLogicalOr(n) - case *binary.LogicalXor: + case *ast.ExprBinaryLogicalXor: p.printBinaryLogicalXor(n) - case *binary.Minus: + case *ast.ExprBinaryMinus: p.printBinaryMinus(n) - case *binary.Mod: + case *ast.ExprBinaryMod: p.printBinaryMod(n) - case *binary.Mul: + case *ast.ExprBinaryMul: p.printBinaryMul(n) - case *binary.NotEqual: + case *ast.ExprBinaryNotEqual: p.printBinaryNotEqual(n) - case *binary.NotIdentical: + case *ast.ExprBinaryNotIdentical: p.printBinaryNotIdentical(n) - case *binary.Plus: + case *ast.ExprBinaryPlus: p.printBinaryPlus(n) - case *binary.Pow: + case *ast.ExprBinaryPow: p.printBinaryPow(n) - case *binary.ShiftLeft: + case *ast.ExprBinaryShiftLeft: p.printBinaryShiftLeft(n) - case *binary.ShiftRight: + case *ast.ExprBinaryShiftRight: p.printBinaryShiftRight(n) - case *binary.SmallerOrEqual: + case *ast.ExprBinarySmallerOrEqual: p.printBinarySmallerOrEqual(n) - case *binary.Smaller: + case *ast.ExprBinarySmaller: p.printBinarySmaller(n) - case *binary.Spaceship: + case *ast.ExprBinarySpaceship: p.printBinarySpaceship(n) // cast - case *cast.Array: + case *ast.ExprCastArray: p.printArray(n) - case *cast.Bool: + case *ast.ExprCastBool: p.printBool(n) - case *cast.Double: + case *ast.ExprCastDouble: p.printDouble(n) - case *cast.Int: + case *ast.ExprCastInt: p.printInt(n) - case *cast.Object: + case *ast.ExprCastObject: p.printObject(n) - case *cast.String: + case *ast.ExprCastString: p.printString(n) - case *cast.Unset: + case *ast.ExprCastUnset: p.printUnset(n) // expr - case *expr.ArrayDimFetch: + case *ast.ExprArrayDimFetch: p.printExprArrayDimFetch(n) - case *expr.ArrayItem: + case *ast.ExprArrayItem: p.printExprArrayItem(n) - case *expr.Array: + case *ast.ExprArray: p.printExprArray(n) - case *expr.BitwiseNot: + case *ast.ExprBitwiseNot: p.printExprBitwiseNot(n) - case *expr.BooleanNot: + case *ast.ExprBooleanNot: p.printExprBooleanNot(n) - case *expr.ClassConstFetch: + case *ast.ExprClassConstFetch: p.printExprClassConstFetch(n) - case *expr.Clone: + case *ast.ExprClone: p.printExprClone(n) - case *expr.ClosureUse: + case *ast.ExprClosureUse: p.printExprClosureUse(n) - case *expr.Closure: + case *ast.ExprClosure: p.printExprClosure(n) - case *expr.ConstFetch: + case *ast.ExprConstFetch: p.printExprConstFetch(n) - case *expr.Empty: + case *ast.ExprEmpty: p.printExprEmpty(n) - case *expr.ErrorSuppress: + case *ast.ExprErrorSuppress: p.printExprErrorSuppress(n) - case *expr.Eval: + case *ast.ExprEval: p.printExprEval(n) - case *expr.Exit: + case *ast.ExprExit: p.printExprExit(n) - case *expr.FunctionCall: + case *ast.ExprFunctionCall: p.printExprFunctionCall(n) - case *expr.Include: + case *ast.ExprInclude: p.printExprInclude(n) - case *expr.IncludeOnce: + case *ast.ExprIncludeOnce: p.printExprIncludeOnce(n) - case *expr.InstanceOf: + case *ast.ExprInstanceOf: p.printExprInstanceOf(n) - case *expr.Isset: + case *ast.ExprIsset: p.printExprIsset(n) - case *expr.List: + case *ast.ExprList: p.printExprList(n) - case *expr.MethodCall: + case *ast.ExprMethodCall: p.printExprMethodCall(n) - case *expr.New: + case *ast.ExprNew: p.printExprNew(n) - case *expr.PostDec: + case *ast.ExprPostDec: p.printExprPostDec(n) - case *expr.PostInc: + case *ast.ExprPostInc: p.printExprPostInc(n) - case *expr.PreDec: + case *ast.ExprPreDec: p.printExprPreDec(n) - case *expr.PreInc: + case *ast.ExprPreInc: p.printExprPreInc(n) - case *expr.Print: + case *ast.ExprPrint: p.printExprPrint(n) - case *expr.PropertyFetch: + case *ast.ExprPropertyFetch: p.printExprPropertyFetch(n) - case *expr.Reference: + case *ast.ExprReference: p.printExprReference(n) - case *expr.Require: + case *ast.ExprRequire: p.printExprRequire(n) - case *expr.RequireOnce: + case *ast.ExprRequireOnce: p.printExprRequireOnce(n) - case *expr.ShellExec: + case *ast.ExprShellExec: p.printExprShellExec(n) - case *expr.ShortArray: + case *ast.ExprShortArray: p.printExprShortArray(n) - case *expr.ShortList: + case *ast.ExprShortList: p.printExprShortList(n) - case *expr.StaticCall: + case *ast.ExprStaticCall: p.printExprStaticCall(n) - case *expr.StaticPropertyFetch: + case *ast.ExprStaticPropertyFetch: p.printExprStaticPropertyFetch(n) - case *expr.Ternary: + case *ast.ExprTernary: p.printExprTernary(n) - case *expr.UnaryMinus: + case *ast.ExprUnaryMinus: p.printExprUnaryMinus(n) - case *expr.UnaryPlus: + case *ast.ExprUnaryPlus: p.printExprUnaryPlus(n) - case *expr.Variable: + case *ast.ExprVariable: p.printExprVariable(n) - case *expr.YieldFrom: + case *ast.ExprYieldFrom: p.printExprYieldFrom(n) - case *expr.Yield: + case *ast.ExprYield: p.printExprYield(n) // stmt - case *stmt.AltElseIf: + case *ast.StmtAltElseIf: p.printStmtAltElseIf(n) - case *stmt.AltElse: + case *ast.StmtAltElse: p.printStmtAltElse(n) - case *stmt.AltFor: + case *ast.StmtAltFor: p.printStmtAltFor(n) - case *stmt.AltForeach: + case *ast.StmtAltForeach: p.printStmtAltForeach(n) - case *stmt.AltIf: + case *ast.StmtAltIf: p.printStmtAltIf(n) - case *stmt.AltSwitch: + case *ast.StmtAltSwitch: p.printStmtAltSwitch(n) - case *stmt.AltWhile: + case *ast.StmtAltWhile: p.printStmtAltWhile(n) - case *stmt.Break: + case *ast.StmtBreak: p.printStmtBreak(n) - case *stmt.Case: + case *ast.StmtCase: p.printStmtCase(n) - case *stmt.Catch: + case *ast.StmtCatch: p.printStmtCatch(n) - case *stmt.ClassMethod: + case *ast.StmtClassMethod: p.printStmtClassMethod(n) - case *stmt.Class: + case *ast.StmtClass: p.printStmtClass(n) - case *stmt.ClassConstList: + case *ast.StmtClassConstList: p.printStmtClassConstList(n) - case *stmt.Constant: + case *ast.StmtConstant: p.printStmtConstant(n) - case *stmt.Continue: + case *ast.StmtContinue: p.printStmtContinue(n) - case *stmt.Declare: + case *ast.StmtDeclare: p.printStmtDeclare(n) - case *stmt.Default: + case *ast.StmtDefault: p.printStmtDefault(n) - case *stmt.Do: + case *ast.StmtDo: p.printStmtDo(n) - case *stmt.Echo: + case *ast.StmtEcho: p.printStmtEcho(n) - case *stmt.ElseIf: + case *ast.StmtElseIf: p.printStmtElseif(n) - case *stmt.Else: + case *ast.StmtElse: p.printStmtElse(n) - case *stmt.Expression: + case *ast.StmtExpression: p.printStmtExpression(n) - case *stmt.Finally: + case *ast.StmtFinally: p.printStmtFinally(n) - case *stmt.For: + case *ast.StmtFor: p.printStmtFor(n) - case *stmt.Foreach: + case *ast.StmtForeach: p.printStmtForeach(n) - case *stmt.Function: + case *ast.StmtFunction: p.printStmtFunction(n) - case *stmt.Global: + case *ast.StmtGlobal: p.printStmtGlobal(n) - case *stmt.Goto: + case *ast.StmtGoto: p.printStmtGoto(n) - case *stmt.GroupUse: + case *ast.StmtGroupUse: p.printStmtGroupUse(n) - case *stmt.HaltCompiler: + case *ast.StmtHaltCompiler: p.printStmtHaltCompiler(n) - case *stmt.If: + case *ast.StmtIf: p.printStmtIf(n) - case *stmt.InlineHtml: + case *ast.StmtInlineHtml: p.printStmtInlineHTML(n) - case *stmt.Interface: + case *ast.StmtInterface: p.printStmtInterface(n) - case *stmt.Label: + case *ast.StmtLabel: p.printStmtLabel(n) - case *stmt.Namespace: + case *ast.StmtNamespace: p.printStmtNamespace(n) - case *stmt.Nop: + case *ast.StmtNop: p.printStmtNop(n) - case *stmt.PropertyList: + case *ast.StmtPropertyList: p.printStmtPropertyList(n) - case *stmt.Property: + case *ast.StmtProperty: p.printStmtProperty(n) - case *stmt.Return: + case *ast.StmtReturn: p.printStmtReturn(n) - case *stmt.StaticVar: + case *ast.StmtStaticVar: p.printStmtStaticVar(n) - case *stmt.Static: + case *ast.StmtStatic: p.printStmtStatic(n) - case *stmt.StmtList: + case *ast.StmtStmtList: p.printStmtStmtList(n) - case *stmt.Switch: + case *ast.StmtSwitch: p.printStmtSwitch(n) - case *stmt.Throw: + case *ast.StmtThrow: p.printStmtThrow(n) - case *stmt.TraitMethodRef: + case *ast.StmtTraitMethodRef: p.printStmtTraitMethodRef(n) - case *stmt.TraitUseAlias: + case *ast.StmtTraitUseAlias: p.printStmtTraitUseAlias(n) - case *stmt.TraitUsePrecedence: + case *ast.StmtTraitUsePrecedence: p.printStmtTraitUsePrecedence(n) - case *stmt.TraitUse: + case *ast.StmtTraitUse: p.printStmtTraitUse(n) - case *stmt.Trait: + case *ast.StmtTrait: p.printStmtTrait(n) - case *stmt.Try: + case *ast.StmtTry: p.printStmtTry(n) - case *stmt.Unset: + case *ast.StmtUnset: p.printStmtUnset(n) - case *stmt.UseList: + case *ast.StmtUseList: p.printStmtUseList(n) - case *stmt.Use: + case *ast.StmtUse: p.printStmtUse(n) - case *stmt.While: + case *ast.StmtWhile: p.printStmtWhile(n) } } // node -func (p *PrettyPrinter) printNodeRoot(n node.Node) { - v := n.(*node.Root) +func (p *PrettyPrinter) printNodeRoot(n ast.Vertex) { + v := n.(*ast.Root) if len(v.Stmts) > 0 { firstStmt := v.Stmts[0] v.Stmts = v.Stmts[1:] switch fs := firstStmt.(type) { - case *stmt.InlineHtml: - io.WriteString(p.w, fs.Value) + case *ast.StmtInlineHtml: + io.WriteString(p.w, string(fs.Value)) io.WriteString(p.w, " 0 { @@ -506,8 +498,8 @@ func (p *PrettyPrinter) printNameName(n node.Node) { } } -func (p *PrettyPrinter) printNameFullyQualified(n node.Node) { - nn := n.(*name.FullyQualified) +func (p *PrettyPrinter) printNameFullyQualified(n ast.Vertex) { + nn := n.(*ast.NameFullyQualified) for _, part := range nn.Parts { io.WriteString(p.w, "\\") @@ -515,8 +507,8 @@ func (p *PrettyPrinter) printNameFullyQualified(n node.Node) { } } -func (p *PrettyPrinter) printNameRelative(n node.Node) { - nn := n.(*name.Relative) +func (p *PrettyPrinter) printNameRelative(n ast.Vertex) { + nn := n.(*ast.NameRelative) io.WriteString(p.w, "namespace") for _, part := range nn.Parts { @@ -527,34 +519,34 @@ func (p *PrettyPrinter) printNameRelative(n node.Node) { // scalar -func (p *PrettyPrinter) printScalarLNumber(n node.Node) { - v := n.(*scalar.Lnumber).Value +func (p *PrettyPrinter) printScalarLNumber(n ast.Vertex) { + v := string(n.(*ast.ScalarLnumber).Value) io.WriteString(p.w, v) } -func (p *PrettyPrinter) printScalarDNumber(n node.Node) { - v := n.(*scalar.Dnumber).Value +func (p *PrettyPrinter) printScalarDNumber(n ast.Vertex) { + v := string(n.(*ast.ScalarDnumber).Value) io.WriteString(p.w, v) } -func (p *PrettyPrinter) printScalarString(n node.Node) { - v := n.(*scalar.String).Value +func (p *PrettyPrinter) printScalarString(n ast.Vertex) { + v := string(n.(*ast.ScalarString).Value) io.WriteString(p.w, v) } -func (p *PrettyPrinter) printScalarEncapsedStringPart(n node.Node) { - v := n.(*scalar.EncapsedStringPart).Value +func (p *PrettyPrinter) printScalarEncapsedStringPart(n ast.Vertex) { + v := string(n.(*ast.ScalarEncapsedStringPart).Value) io.WriteString(p.w, v) } -func (p *PrettyPrinter) printScalarEncapsed(n node.Node) { - nn := n.(*scalar.Encapsed) +func (p *PrettyPrinter) printScalarEncapsed(n ast.Vertex) { + nn := n.(*ast.ScalarEncapsed) io.WriteString(p.w, "\"") for _, part := range nn.Parts { switch part.(type) { - case *scalar.EncapsedStringPart: + case *ast.ScalarEncapsedStringPart: p.Print(part) default: io.WriteString(p.w, "{") @@ -566,14 +558,14 @@ func (p *PrettyPrinter) printScalarEncapsed(n node.Node) { io.WriteString(p.w, "\"") } -func (p *PrettyPrinter) printScalarHeredoc(n node.Node) { - nn := n.(*scalar.Heredoc) +func (p *PrettyPrinter) printScalarHeredoc(n ast.Vertex) { + nn := n.(*ast.ScalarHeredoc) - io.WriteString(p.w, nn.Label) + io.WriteString(p.w, string(nn.Label)) for _, part := range nn.Parts { switch part.(type) { - case *scalar.EncapsedStringPart: + case *ast.ScalarEncapsedStringPart: p.Print(part) default: io.WriteString(p.w, "{") @@ -582,326 +574,326 @@ func (p *PrettyPrinter) printScalarHeredoc(n node.Node) { } } - io.WriteString(p.w, strings.Trim(nn.Label, "<\"'\n")) + io.WriteString(p.w, strings.Trim(string(nn.Label), "<\"'\n")) } -func (p *PrettyPrinter) printScalarMagicConstant(n node.Node) { - v := n.(*scalar.MagicConstant).Value +func (p *PrettyPrinter) printScalarMagicConstant(n ast.Vertex) { + v := string(n.(*ast.ScalarMagicConstant).Value) io.WriteString(p.w, v) } // Assign -func (p *PrettyPrinter) printAssign(n node.Node) { - nn := n.(*assign.Assign) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignAssign(n ast.Vertex) { + nn := n.(*ast.ExprAssign) + p.Print(nn.Var) io.WriteString(p.w, " = ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printReference(n node.Node) { - nn := n.(*assign.Reference) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignReference(n ast.Vertex) { + nn := n.(*ast.ExprAssignReference) + p.Print(nn.Var) io.WriteString(p.w, " =& ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignBitwiseAnd(n node.Node) { - nn := n.(*assign.BitwiseAnd) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignBitwiseAnd(n ast.Vertex) { + nn := n.(*ast.ExprAssignBitwiseAnd) + p.Print(nn.Var) io.WriteString(p.w, " &= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignBitwiseOr(n node.Node) { - nn := n.(*assign.BitwiseOr) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignBitwiseOr(n ast.Vertex) { + nn := n.(*ast.ExprAssignBitwiseOr) + p.Print(nn.Var) io.WriteString(p.w, " |= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignBitwiseXor(n node.Node) { - nn := n.(*assign.BitwiseXor) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignBitwiseXor(n ast.Vertex) { + nn := n.(*ast.ExprAssignBitwiseXor) + p.Print(nn.Var) io.WriteString(p.w, " ^= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignConcat(n node.Node) { - nn := n.(*assign.Concat) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignConcat(n ast.Vertex) { + nn := n.(*ast.ExprAssignConcat) + p.Print(nn.Var) io.WriteString(p.w, " .= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignDiv(n node.Node) { - nn := n.(*assign.Div) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignDiv(n ast.Vertex) { + nn := n.(*ast.ExprAssignDiv) + p.Print(nn.Var) io.WriteString(p.w, " /= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignMinus(n node.Node) { - nn := n.(*assign.Minus) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignMinus(n ast.Vertex) { + nn := n.(*ast.ExprAssignMinus) + p.Print(nn.Var) io.WriteString(p.w, " -= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignMod(n node.Node) { - nn := n.(*assign.Mod) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignMod(n ast.Vertex) { + nn := n.(*ast.ExprAssignMod) + p.Print(nn.Var) io.WriteString(p.w, " %= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignMul(n node.Node) { - nn := n.(*assign.Mul) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignMul(n ast.Vertex) { + nn := n.(*ast.ExprAssignMul) + p.Print(nn.Var) io.WriteString(p.w, " *= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignPlus(n node.Node) { - nn := n.(*assign.Plus) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignPlus(n ast.Vertex) { + nn := n.(*ast.ExprAssignPlus) + p.Print(nn.Var) io.WriteString(p.w, " += ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignPow(n node.Node) { - nn := n.(*assign.Pow) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignPow(n ast.Vertex) { + nn := n.(*ast.ExprAssignPow) + p.Print(nn.Var) io.WriteString(p.w, " **= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignShiftLeft(n node.Node) { - nn := n.(*assign.ShiftLeft) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignShiftLeft(n ast.Vertex) { + nn := n.(*ast.ExprAssignShiftLeft) + p.Print(nn.Var) io.WriteString(p.w, " <<= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } -func (p *PrettyPrinter) printAssignShiftRight(n node.Node) { - nn := n.(*assign.ShiftRight) - p.Print(nn.Variable) +func (p *PrettyPrinter) printAssignShiftRight(n ast.Vertex) { + nn := n.(*ast.ExprAssignShiftRight) + p.Print(nn.Var) io.WriteString(p.w, " >>= ") - p.Print(nn.Expression) + p.Print(nn.Expr) } // binary -func (p *PrettyPrinter) printBinaryBitwiseAnd(n node.Node) { - nn := n.(*binary.BitwiseAnd) +func (p *PrettyPrinter) printBinaryBitwiseAnd(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBitwiseAnd) p.Print(nn.Left) io.WriteString(p.w, " & ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryBitwiseOr(n node.Node) { - nn := n.(*binary.BitwiseOr) +func (p *PrettyPrinter) printBinaryBitwiseOr(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBitwiseOr) p.Print(nn.Left) io.WriteString(p.w, " | ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryBitwiseXor(n node.Node) { - nn := n.(*binary.BitwiseXor) +func (p *PrettyPrinter) printBinaryBitwiseXor(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBitwiseXor) p.Print(nn.Left) io.WriteString(p.w, " ^ ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryBooleanAnd(n node.Node) { - nn := n.(*binary.BooleanAnd) +func (p *PrettyPrinter) printBinaryBooleanAnd(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBooleanAnd) p.Print(nn.Left) io.WriteString(p.w, " && ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryBooleanOr(n node.Node) { - nn := n.(*binary.BooleanOr) +func (p *PrettyPrinter) printBinaryBooleanOr(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBooleanOr) p.Print(nn.Left) io.WriteString(p.w, " || ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryCoalesce(n node.Node) { - nn := n.(*binary.Coalesce) +func (p *PrettyPrinter) printBinaryCoalesce(n ast.Vertex) { + nn := n.(*ast.ExprBinaryCoalesce) p.Print(nn.Left) io.WriteString(p.w, " ?? ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryConcat(n node.Node) { - nn := n.(*binary.Concat) +func (p *PrettyPrinter) printBinaryConcat(n ast.Vertex) { + nn := n.(*ast.ExprBinaryConcat) p.Print(nn.Left) io.WriteString(p.w, " . ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryDiv(n node.Node) { - nn := n.(*binary.Div) +func (p *PrettyPrinter) printBinaryDiv(n ast.Vertex) { + nn := n.(*ast.ExprBinaryDiv) p.Print(nn.Left) io.WriteString(p.w, " / ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryEqual(n node.Node) { - nn := n.(*binary.Equal) +func (p *PrettyPrinter) printBinaryEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinaryEqual) p.Print(nn.Left) io.WriteString(p.w, " == ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryGreaterOrEqual(n node.Node) { - nn := n.(*binary.GreaterOrEqual) +func (p *PrettyPrinter) printBinaryGreaterOrEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinaryGreaterOrEqual) p.Print(nn.Left) io.WriteString(p.w, " >= ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryGreater(n node.Node) { - nn := n.(*binary.Greater) +func (p *PrettyPrinter) printBinaryGreater(n ast.Vertex) { + nn := n.(*ast.ExprBinaryGreater) p.Print(nn.Left) io.WriteString(p.w, " > ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryIdentical(n node.Node) { - nn := n.(*binary.Identical) +func (p *PrettyPrinter) printBinaryIdentical(n ast.Vertex) { + nn := n.(*ast.ExprBinaryIdentical) p.Print(nn.Left) io.WriteString(p.w, " === ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryLogicalAnd(n node.Node) { - nn := n.(*binary.LogicalAnd) +func (p *PrettyPrinter) printBinaryLogicalAnd(n ast.Vertex) { + nn := n.(*ast.ExprBinaryLogicalAnd) p.Print(nn.Left) io.WriteString(p.w, " and ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryLogicalOr(n node.Node) { - nn := n.(*binary.LogicalOr) +func (p *PrettyPrinter) printBinaryLogicalOr(n ast.Vertex) { + nn := n.(*ast.ExprBinaryLogicalOr) p.Print(nn.Left) io.WriteString(p.w, " or ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryLogicalXor(n node.Node) { - nn := n.(*binary.LogicalXor) +func (p *PrettyPrinter) printBinaryLogicalXor(n ast.Vertex) { + nn := n.(*ast.ExprBinaryLogicalXor) p.Print(nn.Left) io.WriteString(p.w, " xor ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryMinus(n node.Node) { - nn := n.(*binary.Minus) +func (p *PrettyPrinter) printBinaryMinus(n ast.Vertex) { + nn := n.(*ast.ExprBinaryMinus) p.Print(nn.Left) io.WriteString(p.w, " - ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryMod(n node.Node) { - nn := n.(*binary.Mod) +func (p *PrettyPrinter) printBinaryMod(n ast.Vertex) { + nn := n.(*ast.ExprBinaryMod) p.Print(nn.Left) io.WriteString(p.w, " % ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryMul(n node.Node) { - nn := n.(*binary.Mul) +func (p *PrettyPrinter) printBinaryMul(n ast.Vertex) { + nn := n.(*ast.ExprBinaryMul) p.Print(nn.Left) io.WriteString(p.w, " * ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryNotEqual(n node.Node) { - nn := n.(*binary.NotEqual) +func (p *PrettyPrinter) printBinaryNotEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinaryNotEqual) p.Print(nn.Left) io.WriteString(p.w, " != ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryNotIdentical(n node.Node) { - nn := n.(*binary.NotIdentical) +func (p *PrettyPrinter) printBinaryNotIdentical(n ast.Vertex) { + nn := n.(*ast.ExprBinaryNotIdentical) p.Print(nn.Left) io.WriteString(p.w, " !== ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryPlus(n node.Node) { - nn := n.(*binary.Plus) +func (p *PrettyPrinter) printBinaryPlus(n ast.Vertex) { + nn := n.(*ast.ExprBinaryPlus) p.Print(nn.Left) io.WriteString(p.w, " + ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryPow(n node.Node) { - nn := n.(*binary.Pow) +func (p *PrettyPrinter) printBinaryPow(n ast.Vertex) { + nn := n.(*ast.ExprBinaryPow) p.Print(nn.Left) io.WriteString(p.w, " ** ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryShiftLeft(n node.Node) { - nn := n.(*binary.ShiftLeft) +func (p *PrettyPrinter) printBinaryShiftLeft(n ast.Vertex) { + nn := n.(*ast.ExprBinaryShiftLeft) p.Print(nn.Left) io.WriteString(p.w, " << ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinaryShiftRight(n node.Node) { - nn := n.(*binary.ShiftRight) +func (p *PrettyPrinter) printBinaryShiftRight(n ast.Vertex) { + nn := n.(*ast.ExprBinaryShiftRight) p.Print(nn.Left) io.WriteString(p.w, " >> ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinarySmallerOrEqual(n node.Node) { - nn := n.(*binary.SmallerOrEqual) +func (p *PrettyPrinter) printBinarySmallerOrEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinarySmallerOrEqual) p.Print(nn.Left) io.WriteString(p.w, " <= ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinarySmaller(n node.Node) { - nn := n.(*binary.Smaller) +func (p *PrettyPrinter) printBinarySmaller(n ast.Vertex) { + nn := n.(*ast.ExprBinarySmaller) p.Print(nn.Left) io.WriteString(p.w, " < ") p.Print(nn.Right) } -func (p *PrettyPrinter) printBinarySpaceship(n node.Node) { - nn := n.(*binary.Spaceship) +func (p *PrettyPrinter) printBinarySpaceship(n ast.Vertex) { + nn := n.(*ast.ExprBinarySpaceship) p.Print(nn.Left) io.WriteString(p.w, " <=> ") @@ -910,50 +902,50 @@ func (p *PrettyPrinter) printBinarySpaceship(n node.Node) { // cast -func (p *PrettyPrinter) printArray(n node.Node) { - nn := n.(*cast.Array) +func (p *PrettyPrinter) printArray(n ast.Vertex) { + nn := n.(*ast.ExprCastArray) io.WriteString(p.w, "(array)") p.Print(nn.Expr) } -func (p *PrettyPrinter) printBool(n node.Node) { - nn := n.(*cast.Bool) +func (p *PrettyPrinter) printBool(n ast.Vertex) { + nn := n.(*ast.ExprCastBool) io.WriteString(p.w, "(bool)") p.Print(nn.Expr) } -func (p *PrettyPrinter) printDouble(n node.Node) { - nn := n.(*cast.Double) +func (p *PrettyPrinter) printDouble(n ast.Vertex) { + nn := n.(*ast.ExprCastDouble) io.WriteString(p.w, "(float)") p.Print(nn.Expr) } -func (p *PrettyPrinter) printInt(n node.Node) { - nn := n.(*cast.Int) +func (p *PrettyPrinter) printInt(n ast.Vertex) { + nn := n.(*ast.ExprCastInt) io.WriteString(p.w, "(int)") p.Print(nn.Expr) } -func (p *PrettyPrinter) printObject(n node.Node) { - nn := n.(*cast.Object) +func (p *PrettyPrinter) printObject(n ast.Vertex) { + nn := n.(*ast.ExprCastObject) io.WriteString(p.w, "(object)") p.Print(nn.Expr) } -func (p *PrettyPrinter) printString(n node.Node) { - nn := n.(*cast.String) +func (p *PrettyPrinter) printString(n ast.Vertex) { + nn := n.(*ast.ExprCastString) io.WriteString(p.w, "(string)") p.Print(nn.Expr) } -func (p *PrettyPrinter) printUnset(n node.Node) { - nn := n.(*cast.Unset) +func (p *PrettyPrinter) printUnset(n ast.Vertex) { + nn := n.(*ast.ExprCastUnset) io.WriteString(p.w, "(unset)") p.Print(nn.Expr) @@ -961,16 +953,16 @@ func (p *PrettyPrinter) printUnset(n node.Node) { // expr -func (p *PrettyPrinter) printExprArrayDimFetch(n node.Node) { - nn := n.(*expr.ArrayDimFetch) - p.Print(nn.Variable) +func (p *PrettyPrinter) printExprArrayDimFetch(n ast.Vertex) { + nn := n.(*ast.ExprArrayDimFetch) + p.Print(nn.Var) io.WriteString(p.w, "[") p.Print(nn.Dim) io.WriteString(p.w, "]") } -func (p *PrettyPrinter) printExprArrayItem(n node.Node) { - nn := n.(*expr.ArrayItem) +func (p *PrettyPrinter) printExprArrayItem(n ast.Vertex) { + nn := n.(*ast.ExprArrayItem) if nn.Key != nil { p.Print(nn.Key) @@ -980,51 +972,51 @@ func (p *PrettyPrinter) printExprArrayItem(n node.Node) { p.Print(nn.Val) } -func (p *PrettyPrinter) printExprArray(n node.Node) { - nn := n.(*expr.Array) +func (p *PrettyPrinter) printExprArray(n ast.Vertex) { + nn := n.(*ast.ExprArray) io.WriteString(p.w, "array(") p.joinPrint(", ", nn.Items) io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprBitwiseNot(n node.Node) { - nn := n.(*expr.BitwiseNot) +func (p *PrettyPrinter) printExprBitwiseNot(n ast.Vertex) { + nn := n.(*ast.ExprBitwiseNot) io.WriteString(p.w, "~") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprBooleanNot(n node.Node) { - nn := n.(*expr.BooleanNot) +func (p *PrettyPrinter) printExprBooleanNot(n ast.Vertex) { + nn := n.(*ast.ExprBooleanNot) io.WriteString(p.w, "!") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprClassConstFetch(n node.Node) { - nn := n.(*expr.ClassConstFetch) +func (p *PrettyPrinter) printExprClassConstFetch(n ast.Vertex) { + nn := n.(*ast.ExprClassConstFetch) p.Print(nn.Class) io.WriteString(p.w, "::") - io.WriteString(p.w, nn.ConstantName.(*node.Identifier).Value) + io.WriteString(p.w, string(nn.ConstantName.(*ast.Identifier).Value)) } -func (p *PrettyPrinter) printExprClone(n node.Node) { - nn := n.(*expr.Clone) +func (p *PrettyPrinter) printExprClone(n ast.Vertex) { + nn := n.(*ast.ExprClone) io.WriteString(p.w, "clone ") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprClosureUse(n node.Node) { - nn := n.(*expr.ClosureUse) +func (p *PrettyPrinter) printExprClosureUse(n ast.Vertex) { + nn := n.(*ast.ExprClosureUse) io.WriteString(p.w, "use (") p.joinPrint(", ", nn.Uses) io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprClosure(n node.Node) { - nn := n.(*expr.Closure) +func (p *PrettyPrinter) printExprClosure(n ast.Vertex) { + nn := n.(*ast.ExprClosure) if nn.Static { io.WriteString(p.w, "static ") @@ -1057,37 +1049,37 @@ func (p *PrettyPrinter) printExprClosure(n node.Node) { io.WriteString(p.w, "}") } -func (p *PrettyPrinter) printExprConstFetch(n node.Node) { - nn := n.(*expr.ConstFetch) +func (p *PrettyPrinter) printExprConstFetch(n ast.Vertex) { + nn := n.(*ast.ExprConstFetch) - p.Print(nn.Constant) + p.Print(nn.Const) } -func (p *PrettyPrinter) printExprEmpty(n node.Node) { - nn := n.(*expr.Empty) +func (p *PrettyPrinter) printExprEmpty(n ast.Vertex) { + nn := n.(*ast.ExprEmpty) io.WriteString(p.w, "empty(") p.Print(nn.Expr) io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprErrorSuppress(n node.Node) { - nn := n.(*expr.ErrorSuppress) +func (p *PrettyPrinter) printExprErrorSuppress(n ast.Vertex) { + nn := n.(*ast.ExprErrorSuppress) io.WriteString(p.w, "@") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprEval(n node.Node) { - nn := n.(*expr.Eval) +func (p *PrettyPrinter) printExprEval(n ast.Vertex) { + nn := n.(*ast.ExprEval) io.WriteString(p.w, "eval(") p.Print(nn.Expr) io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprExit(n node.Node) { - nn := n.(*expr.Exit) +func (p *PrettyPrinter) printExprExit(n ast.Vertex) { + nn := n.(*ast.ExprExit) if nn.Die { io.WriteString(p.w, "die(") @@ -1098,8 +1090,8 @@ func (p *PrettyPrinter) printExprExit(n node.Node) { io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprFunctionCall(n node.Node) { - nn := n.(*expr.FunctionCall) +func (p *PrettyPrinter) printExprFunctionCall(n ast.Vertex) { + nn := n.(*ast.ExprFunctionCall) p.Print(nn.Function) io.WriteString(p.w, "(") @@ -1107,48 +1099,48 @@ func (p *PrettyPrinter) printExprFunctionCall(n node.Node) { io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprInclude(n node.Node) { - nn := n.(*expr.Include) +func (p *PrettyPrinter) printExprInclude(n ast.Vertex) { + nn := n.(*ast.ExprInclude) io.WriteString(p.w, "include ") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprIncludeOnce(n node.Node) { - nn := n.(*expr.IncludeOnce) +func (p *PrettyPrinter) printExprIncludeOnce(n ast.Vertex) { + nn := n.(*ast.ExprIncludeOnce) io.WriteString(p.w, "include_once ") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprInstanceOf(n node.Node) { - nn := n.(*expr.InstanceOf) +func (p *PrettyPrinter) printExprInstanceOf(n ast.Vertex) { + nn := n.(*ast.ExprInstanceOf) p.Print(nn.Expr) io.WriteString(p.w, " instanceof ") p.Print(nn.Class) } -func (p *PrettyPrinter) printExprIsset(n node.Node) { - nn := n.(*expr.Isset) +func (p *PrettyPrinter) printExprIsset(n ast.Vertex) { + nn := n.(*ast.ExprIsset) io.WriteString(p.w, "isset(") - p.joinPrint(", ", nn.Variables) + p.joinPrint(", ", nn.Vars) io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprList(n node.Node) { - nn := n.(*expr.List) +func (p *PrettyPrinter) printExprList(n ast.Vertex) { + nn := n.(*ast.ExprList) io.WriteString(p.w, "list(") p.joinPrint(", ", nn.Items) io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprMethodCall(n node.Node) { - nn := n.(*expr.MethodCall) +func (p *PrettyPrinter) printExprMethodCall(n ast.Vertex) { + nn := n.(*ast.ExprMethodCall) - p.Print(nn.Variable) + p.Print(nn.Var) io.WriteString(p.w, "->") p.Print(nn.Method) io.WriteString(p.w, "(") @@ -1156,8 +1148,8 @@ func (p *PrettyPrinter) printExprMethodCall(n node.Node) { io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprNew(n node.Node) { - nn := n.(*expr.New) +func (p *PrettyPrinter) printExprNew(n ast.Vertex) { + nn := n.(*ast.ExprNew) io.WriteString(p.w, "new ") p.Print(nn.Class) @@ -1169,78 +1161,78 @@ func (p *PrettyPrinter) printExprNew(n node.Node) { } } -func (p *PrettyPrinter) printExprPostDec(n node.Node) { - nn := n.(*expr.PostDec) +func (p *PrettyPrinter) printExprPostDec(n ast.Vertex) { + nn := n.(*ast.ExprPostDec) - p.Print(nn.Variable) + p.Print(nn.Var) io.WriteString(p.w, "--") } -func (p *PrettyPrinter) printExprPostInc(n node.Node) { - nn := n.(*expr.PostInc) +func (p *PrettyPrinter) printExprPostInc(n ast.Vertex) { + nn := n.(*ast.ExprPostInc) - p.Print(nn.Variable) + p.Print(nn.Var) io.WriteString(p.w, "++") } -func (p *PrettyPrinter) printExprPreDec(n node.Node) { - nn := n.(*expr.PreDec) +func (p *PrettyPrinter) printExprPreDec(n ast.Vertex) { + nn := n.(*ast.ExprPreDec) io.WriteString(p.w, "--") - p.Print(nn.Variable) + p.Print(nn.Var) } -func (p *PrettyPrinter) printExprPreInc(n node.Node) { - nn := n.(*expr.PreInc) +func (p *PrettyPrinter) printExprPreInc(n ast.Vertex) { + nn := n.(*ast.ExprPreInc) io.WriteString(p.w, "++") - p.Print(nn.Variable) + p.Print(nn.Var) } -func (p *PrettyPrinter) printExprPrint(n node.Node) { - nn := n.(*expr.Print) +func (p *PrettyPrinter) printExprPrint(n ast.Vertex) { + nn := n.(*ast.ExprPrint) io.WriteString(p.w, "print(") p.Print(nn.Expr) io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprPropertyFetch(n node.Node) { - nn := n.(*expr.PropertyFetch) +func (p *PrettyPrinter) printExprPropertyFetch(n ast.Vertex) { + nn := n.(*ast.ExprPropertyFetch) - p.Print(nn.Variable) + p.Print(nn.Var) io.WriteString(p.w, "->") p.Print(nn.Property) } -func (p *PrettyPrinter) printExprReference(n node.Node) { - nn := n.(*expr.Reference) +func (p *PrettyPrinter) printExprReference(n ast.Vertex) { + nn := n.(*ast.ExprReference) io.WriteString(p.w, "&") - p.Print(nn.Variable) + p.Print(nn.Var) } -func (p *PrettyPrinter) printExprRequire(n node.Node) { - nn := n.(*expr.Require) +func (p *PrettyPrinter) printExprRequire(n ast.Vertex) { + nn := n.(*ast.ExprRequire) io.WriteString(p.w, "require ") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprRequireOnce(n node.Node) { - nn := n.(*expr.RequireOnce) +func (p *PrettyPrinter) printExprRequireOnce(n ast.Vertex) { + nn := n.(*ast.ExprRequireOnce) io.WriteString(p.w, "require_once ") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprShellExec(n node.Node) { - nn := n.(*expr.ShellExec) +func (p *PrettyPrinter) printExprShellExec(n ast.Vertex) { + nn := n.(*ast.ExprShellExec) io.WriteString(p.w, "`") for _, part := range nn.Parts { switch part.(type) { - case *scalar.EncapsedStringPart: + case *ast.ScalarEncapsedStringPart: p.Print(part) default: io.WriteString(p.w, "{") @@ -1251,24 +1243,24 @@ func (p *PrettyPrinter) printExprShellExec(n node.Node) { io.WriteString(p.w, "`") } -func (p *PrettyPrinter) printExprShortArray(n node.Node) { - nn := n.(*expr.ShortArray) +func (p *PrettyPrinter) printExprShortArray(n ast.Vertex) { + nn := n.(*ast.ExprShortArray) io.WriteString(p.w, "[") p.joinPrint(", ", nn.Items) io.WriteString(p.w, "]") } -func (p *PrettyPrinter) printExprShortList(n node.Node) { - nn := n.(*expr.ShortList) +func (p *PrettyPrinter) printExprShortList(n ast.Vertex) { + nn := n.(*ast.ExprShortList) io.WriteString(p.w, "[") p.joinPrint(", ", nn.Items) io.WriteString(p.w, "]") } -func (p *PrettyPrinter) printExprStaticCall(n node.Node) { - nn := n.(*expr.StaticCall) +func (p *PrettyPrinter) printExprStaticCall(n ast.Vertex) { + nn := n.(*ast.ExprStaticCall) p.Print(nn.Class) io.WriteString(p.w, "::") @@ -1278,16 +1270,16 @@ func (p *PrettyPrinter) printExprStaticCall(n node.Node) { io.WriteString(p.w, ")") } -func (p *PrettyPrinter) printExprStaticPropertyFetch(n node.Node) { - nn := n.(*expr.StaticPropertyFetch) +func (p *PrettyPrinter) printExprStaticPropertyFetch(n ast.Vertex) { + nn := n.(*ast.ExprStaticPropertyFetch) p.Print(nn.Class) io.WriteString(p.w, "::") p.Print(nn.Property) } -func (p *PrettyPrinter) printExprTernary(n node.Node) { - nn := n.(*expr.Ternary) +func (p *PrettyPrinter) printExprTernary(n ast.Vertex) { + nn := n.(*ast.ExprTernary) p.Print(nn.Condition) io.WriteString(p.w, " ?") @@ -1302,35 +1294,35 @@ func (p *PrettyPrinter) printExprTernary(n node.Node) { p.Print(nn.IfFalse) } -func (p *PrettyPrinter) printExprUnaryMinus(n node.Node) { - nn := n.(*expr.UnaryMinus) +func (p *PrettyPrinter) printExprUnaryMinus(n ast.Vertex) { + nn := n.(*ast.ExprUnaryMinus) io.WriteString(p.w, "-") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprUnaryPlus(n node.Node) { - nn := n.(*expr.UnaryPlus) +func (p *PrettyPrinter) printExprUnaryPlus(n ast.Vertex) { + nn := n.(*ast.ExprUnaryPlus) io.WriteString(p.w, "+") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprVariable(n node.Node) { - nn := n.(*expr.Variable) +func (p *PrettyPrinter) printExprVariable(n ast.Vertex) { + nn := n.(*ast.ExprVariable) io.WriteString(p.w, "$") p.Print(nn.VarName) } -func (p *PrettyPrinter) printExprYieldFrom(n node.Node) { - nn := n.(*expr.YieldFrom) +func (p *PrettyPrinter) printExprYieldFrom(n ast.Vertex) { + nn := n.(*ast.ExprYieldFrom) io.WriteString(p.w, "yield from ") p.Print(nn.Expr) } -func (p *PrettyPrinter) printExprYield(n node.Node) { - nn := n.(*expr.Yield) +func (p *PrettyPrinter) printExprYield(n ast.Vertex) { + nn := n.(*ast.ExprYield) io.WriteString(p.w, "yield ") @@ -1344,32 +1336,32 @@ func (p *PrettyPrinter) printExprYield(n node.Node) { // smtm -func (p *PrettyPrinter) printStmtAltElseIf(n node.Node) { - nn := n.(*stmt.AltElseIf) +func (p *PrettyPrinter) printStmtAltElseIf(n ast.Vertex) { + nn := n.(*ast.StmtAltElseIf) io.WriteString(p.w, "elseif (") p.Print(nn.Cond) io.WriteString(p.w, ") :") - if s := nn.Stmt.(*stmt.StmtList).Stmts; len(s) > 0 { + if s := nn.Stmt.(*ast.StmtStmtList).Stmts; len(s) > 0 { io.WriteString(p.w, "\n") p.printNodes(s) } } -func (p *PrettyPrinter) printStmtAltElse(n node.Node) { - nn := n.(*stmt.AltElse) +func (p *PrettyPrinter) printStmtAltElse(n ast.Vertex) { + nn := n.(*ast.StmtAltElse) io.WriteString(p.w, "else :") - if s := nn.Stmt.(*stmt.StmtList).Stmts; len(s) > 0 { + if s := nn.Stmt.(*ast.StmtStmtList).Stmts; len(s) > 0 { io.WriteString(p.w, "\n") p.printNodes(s) } } -func (p *PrettyPrinter) printStmtAltFor(n node.Node) { - nn := n.(*stmt.AltFor) +func (p *PrettyPrinter) printStmtAltFor(n ast.Vertex) { + nn := n.(*ast.StmtAltFor) io.WriteString(p.w, "for (") p.joinPrint(", ", nn.Init) @@ -1379,7 +1371,7 @@ func (p *PrettyPrinter) printStmtAltFor(n node.Node) { p.joinPrint(", ", nn.Loop) io.WriteString(p.w, ") :\n") - s := nn.Stmt.(*stmt.StmtList) + s := nn.Stmt.(*ast.StmtStmtList) p.printNodes(s.Stmts) io.WriteString(p.w, "\n") p.printIndent() @@ -1387,8 +1379,8 @@ func (p *PrettyPrinter) printStmtAltFor(n node.Node) { io.WriteString(p.w, "endfor;") } -func (p *PrettyPrinter) printStmtAltForeach(n node.Node) { - nn := n.(*stmt.AltForeach) +func (p *PrettyPrinter) printStmtAltForeach(n ast.Vertex) { + nn := n.(*ast.StmtAltForeach) io.WriteString(p.w, "foreach (") p.Print(nn.Expr) @@ -1399,11 +1391,11 @@ func (p *PrettyPrinter) printStmtAltForeach(n node.Node) { io.WriteString(p.w, " => ") } - p.Print(nn.Variable) + p.Print(nn.Var) io.WriteString(p.w, ") :\n") - s := nn.Stmt.(*stmt.StmtList) + s := nn.Stmt.(*ast.StmtStmtList) p.printNodes(s.Stmts) io.WriteString(p.w, "\n") @@ -1411,14 +1403,14 @@ func (p *PrettyPrinter) printStmtAltForeach(n node.Node) { io.WriteString(p.w, "endforeach;") } -func (p *PrettyPrinter) printStmtAltIf(n node.Node) { - nn := n.(*stmt.AltIf) +func (p *PrettyPrinter) printStmtAltIf(n ast.Vertex) { + nn := n.(*ast.StmtAltIf) io.WriteString(p.w, "if (") p.Print(nn.Cond) io.WriteString(p.w, ") :\n") - s := nn.Stmt.(*stmt.StmtList) + s := nn.Stmt.(*ast.StmtStmtList) p.printNodes(s.Stmts) for _, elseif := range nn.ElseIf { @@ -1438,8 +1430,8 @@ func (p *PrettyPrinter) printStmtAltIf(n node.Node) { io.WriteString(p.w, "endif;") } -func (p *PrettyPrinter) printStmtAltSwitch(n node.Node) { - nn := n.(*stmt.AltSwitch) +func (p *PrettyPrinter) printStmtAltSwitch(n ast.Vertex) { + nn := n.(*ast.StmtAltSwitch) io.WriteString(p.w, "switch (") p.Print(nn.Cond) @@ -1453,14 +1445,14 @@ func (p *PrettyPrinter) printStmtAltSwitch(n node.Node) { io.WriteString(p.w, "endswitch;") } -func (p *PrettyPrinter) printStmtAltWhile(n node.Node) { - nn := n.(*stmt.AltWhile) +func (p *PrettyPrinter) printStmtAltWhile(n ast.Vertex) { + nn := n.(*ast.StmtAltWhile) io.WriteString(p.w, "while (") p.Print(nn.Cond) io.WriteString(p.w, ") :\n") - s := nn.Stmt.(*stmt.StmtList) + s := nn.Stmt.(*ast.StmtStmtList) p.printNodes(s.Stmts) io.WriteString(p.w, "\n") @@ -1468,8 +1460,8 @@ func (p *PrettyPrinter) printStmtAltWhile(n node.Node) { io.WriteString(p.w, "endwhile;") } -func (p *PrettyPrinter) printStmtBreak(n node.Node) { - nn := n.(*stmt.Break) +func (p *PrettyPrinter) printStmtBreak(n ast.Vertex) { + nn := n.(*ast.StmtBreak) io.WriteString(p.w, "break") if nn.Expr != nil { @@ -1480,8 +1472,8 @@ func (p *PrettyPrinter) printStmtBreak(n node.Node) { io.WriteString(p.w, ";") } -func (p *PrettyPrinter) printStmtCase(n node.Node) { - nn := n.(*stmt.Case) +func (p *PrettyPrinter) printStmtCase(n ast.Vertex) { + nn := n.(*ast.StmtCase) io.WriteString(p.w, "case ") p.Print(nn.Cond) @@ -1493,13 +1485,13 @@ func (p *PrettyPrinter) printStmtCase(n node.Node) { } } -func (p *PrettyPrinter) printStmtCatch(n node.Node) { - nn := n.(*stmt.Catch) +func (p *PrettyPrinter) printStmtCatch(n ast.Vertex) { + nn := n.(*ast.StmtCatch) io.WriteString(p.w, "catch (") p.joinPrint(" | ", nn.Types) io.WriteString(p.w, " ") - p.Print(nn.Variable) + p.Print(nn.Var) io.WriteString(p.w, ") {\n") p.printNodes(nn.Stmts) io.WriteString(p.w, "\n") @@ -1507,8 +1499,8 @@ func (p *PrettyPrinter) printStmtCatch(n node.Node) { io.WriteString(p.w, "}") } -func (p *PrettyPrinter) printStmtClassMethod(n node.Node) { - nn := n.(*stmt.ClassMethod) +func (p *PrettyPrinter) printStmtClassMethod(n ast.Vertex) { + nn := n.(*ast.StmtClassMethod) if nn.Modifiers != nil { p.joinPrint(" ", nn.Modifiers) @@ -1531,7 +1523,7 @@ func (p *PrettyPrinter) printStmtClassMethod(n node.Node) { } switch s := nn.Stmt.(type) { - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, "\n") p.printIndent() io.WriteString(p.w, "{\n") @@ -1544,8 +1536,8 @@ func (p *PrettyPrinter) printStmtClassMethod(n node.Node) { } } -func (p *PrettyPrinter) printStmtClass(n node.Node) { - nn := n.(*stmt.Class) +func (p *PrettyPrinter) printStmtClass(n ast.Vertex) { + nn := n.(*ast.StmtClass) if nn.Modifiers != nil { p.joinPrint(" ", nn.Modifiers) @@ -1583,8 +1575,8 @@ func (p *PrettyPrinter) printStmtClass(n node.Node) { io.WriteString(p.w, "}") } -func (p *PrettyPrinter) printStmtClassConstList(n node.Node) { - nn := n.(*stmt.ClassConstList) +func (p *PrettyPrinter) printStmtClassConstList(n ast.Vertex) { + nn := n.(*ast.StmtClassConstList) if nn.Modifiers != nil { p.joinPrint(" ", nn.Modifiers) @@ -1597,16 +1589,16 @@ func (p *PrettyPrinter) printStmtClassConstList(n node.Node) { io.WriteString(p.w, ";") } -func (p *PrettyPrinter) printStmtConstant(n node.Node) { - nn := n.(*stmt.Constant) +func (p *PrettyPrinter) printStmtConstant(n ast.Vertex) { + nn := n.(*ast.StmtConstant) p.Print(nn.ConstantName) io.WriteString(p.w, " = ") p.Print(nn.Expr) } -func (p *PrettyPrinter) printStmtContinue(n node.Node) { - nn := n.(*stmt.Continue) +func (p *PrettyPrinter) printStmtContinue(n ast.Vertex) { + nn := n.(*ast.StmtContinue) io.WriteString(p.w, "continue") if nn.Expr != nil { @@ -1617,18 +1609,18 @@ func (p *PrettyPrinter) printStmtContinue(n node.Node) { io.WriteString(p.w, ";") } -func (p *PrettyPrinter) printStmtDeclare(n node.Node) { - nn := n.(*stmt.Declare) +func (p *PrettyPrinter) printStmtDeclare(n ast.Vertex) { + nn := n.(*ast.StmtDeclare) io.WriteString(p.w, "declare(") p.joinPrint(", ", nn.Consts) io.WriteString(p.w, ")") switch s := nn.Stmt.(type) { - case *stmt.Nop: + case *ast.StmtNop: p.Print(s) break - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, " ") p.Print(s) default: @@ -1640,8 +1632,8 @@ func (p *PrettyPrinter) printStmtDeclare(n node.Node) { } } -func (p *PrettyPrinter) printStmtDefault(n node.Node) { - nn := n.(*stmt.Default) +func (p *PrettyPrinter) printStmtDefault(n ast.Vertex) { + nn := n.(*ast.StmtDefault) io.WriteString(p.w, "default:") if len(nn.Stmts) > 0 { @@ -1650,12 +1642,12 @@ func (p *PrettyPrinter) printStmtDefault(n node.Node) { } } -func (p *PrettyPrinter) printStmtDo(n node.Node) { - nn := n.(*stmt.Do) +func (p *PrettyPrinter) printStmtDo(n ast.Vertex) { + nn := n.(*ast.StmtDo) io.WriteString(p.w, "do") switch s := nn.Stmt.(type) { - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, " ") p.Print(s) io.WriteString(p.w, " ") @@ -1674,25 +1666,25 @@ func (p *PrettyPrinter) printStmtDo(n node.Node) { io.WriteString(p.w, ");") } -func (p *PrettyPrinter) printStmtEcho(n node.Node) { - nn := n.(*stmt.Echo) +func (p *PrettyPrinter) printStmtEcho(n ast.Vertex) { + nn := n.(*ast.StmtEcho) io.WriteString(p.w, "echo ") p.joinPrint(", ", nn.Exprs) io.WriteString(p.w, ";") } -func (p *PrettyPrinter) printStmtElseif(n node.Node) { - nn := n.(*stmt.ElseIf) +func (p *PrettyPrinter) printStmtElseif(n ast.Vertex) { + nn := n.(*ast.StmtElseIf) io.WriteString(p.w, "elseif (") p.Print(nn.Cond) io.WriteString(p.w, ")") switch s := nn.Stmt.(type) { - case *stmt.Nop: + case *ast.StmtNop: p.Print(s) break - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, " ") p.Print(s) default: @@ -1704,16 +1696,16 @@ func (p *PrettyPrinter) printStmtElseif(n node.Node) { } } -func (p *PrettyPrinter) printStmtElse(n node.Node) { - nn := n.(*stmt.Else) +func (p *PrettyPrinter) printStmtElse(n ast.Vertex) { + nn := n.(*ast.StmtElse) io.WriteString(p.w, "else") switch s := nn.Stmt.(type) { - case *stmt.Nop: + case *ast.StmtNop: p.Print(s) break - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, " ") p.Print(s) default: @@ -1725,16 +1717,16 @@ func (p *PrettyPrinter) printStmtElse(n node.Node) { } } -func (p *PrettyPrinter) printStmtExpression(n node.Node) { - nn := n.(*stmt.Expression) +func (p *PrettyPrinter) printStmtExpression(n ast.Vertex) { + nn := n.(*ast.StmtExpression) p.Print(nn.Expr) io.WriteString(p.w, ";") } -func (p *PrettyPrinter) printStmtFinally(n node.Node) { - nn := n.(*stmt.Finally) +func (p *PrettyPrinter) printStmtFinally(n ast.Vertex) { + nn := n.(*ast.StmtFinally) io.WriteString(p.w, "finally {\n") p.printNodes(nn.Stmts) @@ -1743,8 +1735,8 @@ func (p *PrettyPrinter) printStmtFinally(n node.Node) { io.WriteString(p.w, "}") } -func (p *PrettyPrinter) printStmtFor(n node.Node) { - nn := n.(*stmt.For) +func (p *PrettyPrinter) printStmtFor(n ast.Vertex) { + nn := n.(*ast.StmtFor) io.WriteString(p.w, "for (") p.joinPrint(", ", nn.Init) @@ -1755,10 +1747,10 @@ func (p *PrettyPrinter) printStmtFor(n node.Node) { io.WriteString(p.w, ")") switch s := nn.Stmt.(type) { - case *stmt.Nop: + case *ast.StmtNop: p.Print(s) break - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, " ") p.Print(s) default: @@ -1770,8 +1762,8 @@ func (p *PrettyPrinter) printStmtFor(n node.Node) { } } -func (p *PrettyPrinter) printStmtForeach(n node.Node) { - nn := n.(*stmt.Foreach) +func (p *PrettyPrinter) printStmtForeach(n ast.Vertex) { + nn := n.(*ast.StmtForeach) io.WriteString(p.w, "foreach (") p.Print(nn.Expr) @@ -1782,14 +1774,14 @@ func (p *PrettyPrinter) printStmtForeach(n node.Node) { io.WriteString(p.w, " => ") } - p.Print(nn.Variable) + p.Print(nn.Var) io.WriteString(p.w, ")") switch s := nn.Stmt.(type) { - case *stmt.Nop: + case *ast.StmtNop: p.Print(s) break - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, " ") p.Print(s) default: @@ -1801,8 +1793,8 @@ func (p *PrettyPrinter) printStmtForeach(n node.Node) { } } -func (p *PrettyPrinter) printStmtFunction(n node.Node) { - nn := n.(*stmt.Function) +func (p *PrettyPrinter) printStmtFunction(n ast.Vertex) { + nn := n.(*ast.StmtFunction) io.WriteString(p.w, "function ") @@ -1828,24 +1820,24 @@ func (p *PrettyPrinter) printStmtFunction(n node.Node) { io.WriteString(p.w, "}") } -func (p *PrettyPrinter) printStmtGlobal(n node.Node) { - nn := n.(*stmt.Global) +func (p *PrettyPrinter) printStmtGlobal(n ast.Vertex) { + nn := n.(*ast.StmtGlobal) io.WriteString(p.w, "global ") p.joinPrint(", ", nn.Vars) io.WriteString(p.w, ";") } -func (p *PrettyPrinter) printStmtGoto(n node.Node) { - nn := n.(*stmt.Goto) +func (p *PrettyPrinter) printStmtGoto(n ast.Vertex) { + nn := n.(*ast.StmtGoto) io.WriteString(p.w, "goto ") p.Print(nn.Label) io.WriteString(p.w, ";") } -func (p *PrettyPrinter) printStmtGroupUse(n node.Node) { - nn := n.(*stmt.GroupUse) +func (p *PrettyPrinter) printStmtGroupUse(n ast.Vertex) { + nn := n.(*ast.StmtGroupUse) io.WriteString(p.w, "use ") @@ -1860,22 +1852,22 @@ func (p *PrettyPrinter) printStmtGroupUse(n node.Node) { io.WriteString(p.w, "};") } -func (p *PrettyPrinter) printStmtHaltCompiler(n node.Node) { +func (p *PrettyPrinter) printStmtHaltCompiler(n ast.Vertex) { io.WriteString(p.w, "__halt_compiler();") } -func (p *PrettyPrinter) printStmtIf(n node.Node) { - nn := n.(*stmt.If) +func (p *PrettyPrinter) printStmtIf(n ast.Vertex) { + nn := n.(*ast.StmtIf) io.WriteString(p.w, "if (") p.Print(nn.Cond) io.WriteString(p.w, ")") switch s := nn.Stmt.(type) { - case *stmt.Nop: + case *ast.StmtNop: p.Print(s) break - case *stmt.StmtList: + case *ast.StmtStmtList: io.WriteString(p.w, " ") p.Print(s) default: @@ -1900,16 +1892,16 @@ func (p *PrettyPrinter) printStmtIf(n node.Node) { } } -func (p *PrettyPrinter) printStmtInlineHTML(n node.Node) { - nn := n.(*stmt.InlineHtml) +func (p *PrettyPrinter) printStmtInlineHTML(n ast.Vertex) { + nn := n.(*ast.StmtInlineHtml) io.WriteString(p.w, "?>") - io.WriteString(p.w, nn.Value) + io.WriteString(p.w, string(nn.Value)) io.WriteString(p.w, "HTML"}, - &stmt.Expression{ - Expr: &scalar.Heredoc{ - Label: "<<<\"LBL\"\n", - Parts: []node.Node{ - &scalar.EncapsedStringPart{Value: "hello world\n"}, + p.Print(&ast.Root{ + Stmts: []ast.Vertex{ + &ast.StmtInlineHtml{Value: []byte("
HTML
")}, + &ast.StmtExpression{ + Expr: &ast.ScalarHeredoc{ + Label: []byte("<<<\"LBL\"\n"), + Parts: []ast.Vertex{ + &ast.ScalarEncapsedStringPart{Value: []byte("hello world\n")}, }, }, }, @@ -114,7 +107,7 @@ func TestPrintIdentifier(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&node.Identifier{Value: "test"}) + p.Print(&ast.Identifier{Value: []byte("test")}) if o.String() != `test` { t.Errorf("TestPrintIdentifier is failed\n") @@ -125,12 +118,12 @@ func TestPrintParameter(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&node.Parameter{ + p.Print(&ast.Parameter{ ByRef: false, Variadic: true, - VariableType: &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - DefaultValue: &scalar.String{Value: "'default'"}, + Type: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + DefaultValue: &ast.ScalarString{Value: []byte("'default'")}, }) expected := "\\Foo ...$var = 'default'" @@ -145,13 +138,13 @@ func TestPrintNullable(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&node.Nullable{ - Expr: &node.Parameter{ + p.Print(&ast.Nullable{ + Expr: &ast.Parameter{ ByRef: false, Variadic: true, - VariableType: &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - DefaultValue: &scalar.String{Value: "'default'"}, + Type: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + DefaultValue: &ast.ScalarString{Value: []byte("'default'")}, }, }) @@ -167,10 +160,10 @@ func TestPrintArgument(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&node.Argument{ + p.Print(&ast.Argument{ IsReference: false, Variadic: true, - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := "...$var" @@ -184,10 +177,10 @@ func TestPrintArgumentByRef(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&node.Argument{ + p.Print(&ast.Argument{ IsReference: true, Variadic: false, - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := "&$var" @@ -204,8 +197,8 @@ func TestPrintNameNamePart(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&name.NamePart{ - Value: "foo", + p.Print(&ast.NameNamePart{ + Value: []byte("foo"), }) expected := "foo" @@ -220,13 +213,13 @@ func TestPrintNameName(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&name.Name{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + p.Print(&ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, - &name.NamePart{ - Value: "Bar", + &ast.NameNamePart{ + Value: []byte("Bar"), }, }, }) @@ -243,13 +236,13 @@ func TestPrintNameFullyQualified(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&name.FullyQualified{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + p.Print(&ast.NameFullyQualified{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, - &name.NamePart{ - Value: "Bar", + &ast.NameNamePart{ + Value: []byte("Bar"), }, }, }) @@ -266,13 +259,13 @@ func TestPrintNameRelative(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&name.Relative{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + p.Print(&ast.NameRelative{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, - &name.NamePart{ - Value: "Bar", + &ast.NameNamePart{ + Value: []byte("Bar"), }, }, }) @@ -291,7 +284,7 @@ func TestPrintScalarLNumber(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&scalar.Lnumber{Value: "1"}) + p.Print(&ast.ScalarLnumber{Value: []byte("1")}) if o.String() != `1` { t.Errorf("TestPrintScalarLNumber is failed\n") @@ -302,7 +295,7 @@ func TestPrintScalarDNumber(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&scalar.Dnumber{Value: ".1"}) + p.Print(&ast.ScalarDnumber{Value: []byte(".1")}) if o.String() != `.1` { t.Errorf("TestPrintScalarDNumber is failed\n") @@ -313,7 +306,7 @@ func TestPrintScalarString(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&scalar.String{Value: "'hello world'"}) + p.Print(&ast.ScalarString{Value: []byte("'hello world'")}) expected := `'hello world'` actual := o.String() @@ -327,7 +320,7 @@ func TestPrintScalarEncapsedStringPart(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&scalar.EncapsedStringPart{Value: "hello world"}) + p.Print(&ast.ScalarEncapsedStringPart{Value: []byte("hello world")}) if o.String() != `hello world` { t.Errorf("TestPrintScalarEncapsedStringPart is failed\n") @@ -338,11 +331,11 @@ func TestPrintScalarEncapsed(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&scalar.Encapsed{ - Parts: []node.Node{ - &scalar.EncapsedStringPart{Value: "hello "}, - &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - &scalar.EncapsedStringPart{Value: " world"}, + p.Print(&ast.ScalarEncapsed{ + Parts: []ast.Vertex{ + &ast.ScalarEncapsedStringPart{Value: []byte("hello ")}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + &ast.ScalarEncapsedStringPart{Value: []byte(" world")}, }, }) @@ -355,12 +348,12 @@ func TestPrintScalarHeredoc(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&scalar.Heredoc{ - Label: "<<>= $b` @@ -652,9 +645,9 @@ func TestPrintBinaryBitwiseAnd(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.BitwiseAnd{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryBitwiseAnd{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a & $b` @@ -669,9 +662,9 @@ func TestPrintBinaryBitwiseOr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.BitwiseOr{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryBitwiseOr{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a | $b` @@ -686,9 +679,9 @@ func TestPrintBinaryBitwiseXor(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.BitwiseXor{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryBitwiseXor{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a ^ $b` @@ -703,9 +696,9 @@ func TestPrintBinaryBooleanAnd(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.BooleanAnd{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryBooleanAnd{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a && $b` @@ -720,9 +713,9 @@ func TestPrintBinaryBooleanOr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.BooleanOr{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryBooleanOr{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a || $b` @@ -737,9 +730,9 @@ func TestPrintBinaryCoalesce(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Coalesce{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryCoalesce{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a ?? $b` @@ -754,9 +747,9 @@ func TestPrintBinaryConcat(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Concat{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryConcat{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a . $b` @@ -771,9 +764,9 @@ func TestPrintBinaryDiv(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Div{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryDiv{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a / $b` @@ -788,9 +781,9 @@ func TestPrintBinaryEqual(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Equal{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryEqual{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a == $b` @@ -805,9 +798,9 @@ func TestPrintBinaryGreaterOrEqual(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.GreaterOrEqual{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryGreaterOrEqual{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a >= $b` @@ -822,9 +815,9 @@ func TestPrintBinaryGreater(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Greater{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryGreater{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a > $b` @@ -839,9 +832,9 @@ func TestPrintBinaryIdentical(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Identical{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryIdentical{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a === $b` @@ -856,9 +849,9 @@ func TestPrintBinaryLogicalAnd(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.LogicalAnd{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryLogicalAnd{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a and $b` @@ -873,9 +866,9 @@ func TestPrintBinaryLogicalOr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.LogicalOr{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryLogicalOr{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a or $b` @@ -890,9 +883,9 @@ func TestPrintBinaryLogicalXor(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.LogicalXor{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryLogicalXor{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a xor $b` @@ -907,9 +900,9 @@ func TestPrintBinaryMinus(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Minus{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryMinus{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a - $b` @@ -924,9 +917,9 @@ func TestPrintBinaryMod(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Mod{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryMod{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a % $b` @@ -941,9 +934,9 @@ func TestPrintBinaryMul(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Mul{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryMul{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a * $b` @@ -958,9 +951,9 @@ func TestPrintBinaryNotEqual(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.NotEqual{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryNotEqual{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a != $b` @@ -975,9 +968,9 @@ func TestPrintBinaryNotIdentical(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.NotIdentical{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryNotIdentical{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a !== $b` @@ -992,9 +985,9 @@ func TestPrintBinaryPlus(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Plus{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryPlus{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a + $b` @@ -1009,9 +1002,9 @@ func TestPrintBinaryPow(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Pow{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryPow{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a ** $b` @@ -1026,9 +1019,9 @@ func TestPrintBinaryShiftLeft(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.ShiftLeft{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryShiftLeft{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a << $b` @@ -1043,9 +1036,9 @@ func TestPrintBinaryShiftRight(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.ShiftRight{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinaryShiftRight{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a >> $b` @@ -1060,9 +1053,9 @@ func TestPrintBinarySmallerOrEqual(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.SmallerOrEqual{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinarySmallerOrEqual{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a <= $b` @@ -1077,9 +1070,9 @@ func TestPrintBinarySmaller(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Smaller{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinarySmaller{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a < $b` @@ -1094,9 +1087,9 @@ func TestPrintBinarySpaceship(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&binary.Spaceship{ - Left: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Right: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprBinarySpaceship{ + Left: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Right: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a <=> $b` @@ -1113,8 +1106,8 @@ func TestPrintArray(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&cast.Array{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprCastArray{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `(array)$var` @@ -1129,8 +1122,8 @@ func TestPrintBool(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&cast.Bool{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprCastBool{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `(bool)$var` @@ -1145,8 +1138,8 @@ func TestPrintDouble(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&cast.Double{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprCastDouble{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `(float)$var` @@ -1161,8 +1154,8 @@ func TestPrintInt(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&cast.Int{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprCastInt{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `(int)$var` @@ -1177,8 +1170,8 @@ func TestPrintObject(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&cast.Object{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprCastObject{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `(object)$var` @@ -1193,8 +1186,8 @@ func TestPrintString(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&cast.String{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprCastString{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `(string)$var` @@ -1209,8 +1202,8 @@ func TestPrintUnset(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&cast.Unset{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprCastUnset{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `(unset)$var` @@ -1227,9 +1220,9 @@ func TestPrintExprArrayDimFetch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ArrayDimFetch{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - Dim: &scalar.Lnumber{Value: "1"}, + p.Print(&ast.ExprArrayDimFetch{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + Dim: &ast.ScalarLnumber{Value: []byte("1")}, }) expected := `$var[1]` @@ -1244,9 +1237,9 @@ func TestPrintExprArrayItemWithKey(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ArrayItem{ - Key: &scalar.String{Value: "'Hello'"}, - Val: &expr.Variable{VarName: &node.Identifier{Value: "world"}}, + p.Print(&ast.ExprArrayItem{ + Key: &ast.ScalarString{Value: []byte("'Hello'")}, + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("world")}}, }) expected := `'Hello' => $world` @@ -1261,8 +1254,8 @@ func TestPrintExprArrayItem(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ArrayItem{ - Val: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "world"}}}, + p.Print(&ast.ExprArrayItem{ + Val: &ast.ExprReference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("world")}}}, }) expected := `&$world` @@ -1277,18 +1270,18 @@ func TestPrintExprArray(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Array{ - Items: []node.Node{ - &expr.ArrayItem{ - Key: &scalar.String{Value: "'Hello'"}, - Val: &expr.Variable{VarName: &node.Identifier{Value: "world"}}, + p.Print(&ast.ExprArray{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Key: &ast.ScalarString{Value: []byte("'Hello'")}, + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("world")}}, }, - &expr.ArrayItem{ - Key: &scalar.Lnumber{Value: "2"}, - Val: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}, + &ast.ExprArrayItem{ + Key: &ast.ScalarLnumber{Value: []byte("2")}, + Val: &ast.ExprReference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}, }, - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }, }, }) @@ -1305,8 +1298,8 @@ func TestPrintExprBitwiseNot(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.BitwiseNot{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprBitwiseNot{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `~$var` @@ -1321,8 +1314,8 @@ func TestPrintExprBooleanNot(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.BooleanNot{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprBooleanNot{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `!$var` @@ -1337,9 +1330,9 @@ func TestPrintExprClassConstFetch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ClassConstFetch{ - Class: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - ConstantName: &node.Identifier{Value: "CONST"}, + p.Print(&ast.ExprClassConstFetch{ + Class: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + ConstantName: &ast.Identifier{Value: []byte("CONST")}, }) expected := `$var::CONST` @@ -1354,8 +1347,8 @@ func TestPrintExprClone(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Clone{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprClone{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `clone $var` @@ -1370,10 +1363,10 @@ func TestPrintExprClosureUse(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ClosureUse{ - Uses: []node.Node{ - &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}}}, - &expr.Variable{VarName: &node.Identifier{Value: "bar"}}, + p.Print(&ast.ExprClosureUse{ + Uses: []ast.Vertex{ + &ast.ExprReference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("bar")}}, }, }) @@ -1389,27 +1382,27 @@ func TestPrintExprClosure(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &expr.Closure{ + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.ExprClosure{ Static: true, ReturnsRef: true, - Params: []node.Node{ - &node.Parameter{ + Params: []ast.Vertex{ + &ast.Parameter{ ByRef: true, Variadic: false, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }, }, - ClosureUse: &expr.ClosureUse{ - Uses: []node.Node{ - &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + ClosureUse: &ast.ExprClosureUse{ + Uses: []ast.Vertex{ + &ast.ExprReference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, - ReturnType: &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, + ReturnType: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, }, }, }, @@ -1431,8 +1424,8 @@ func TestPrintExprConstFetch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ConstFetch{ - Constant: &name.Name{Parts: []node.Node{&name.NamePart{Value: "null"}}}, + p.Print(&ast.ExprConstFetch{ + Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}, }) expected := "null" @@ -1447,7 +1440,7 @@ func TestPrintEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Empty{Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}) + p.Print(&ast.ExprEmpty{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}) expected := `empty($var)` actual := o.String() @@ -1461,7 +1454,7 @@ func TestPrettyPrinterrorSuppress(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ErrorSuppress{Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}) + p.Print(&ast.ExprErrorSuppress{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}) expected := `@$var` actual := o.String() @@ -1475,7 +1468,7 @@ func TestPrintEval(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Eval{Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}) + p.Print(&ast.ExprEval{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}) expected := `eval($var)` actual := o.String() @@ -1489,7 +1482,7 @@ func TestPrintExit(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Exit{Die: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}) + p.Print(&ast.ExprExit{Die: false, Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}) expected := `exit($var)` actual := o.String() @@ -1503,7 +1496,7 @@ func TestPrintDie(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Exit{Die: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}) + p.Print(&ast.ExprExit{Die: true, Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}) expected := `die($var)` actual := o.String() @@ -1517,20 +1510,20 @@ func TestPrintFunctionCall(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.FunctionCall{ - Function: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - ArgumentList: &node.ArgumentList{ - Arguments: []node.Node{ - &node.Argument{ + p.Print(&ast.ExprFunctionCall{ + Function: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + ArgumentList: &ast.ArgumentList{ + Arguments: []ast.Vertex{ + &ast.Argument{ IsReference: true, - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - &node.Argument{ + &ast.Argument{ Variadic: true, - Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "c"}}, + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, }, }, }, @@ -1548,7 +1541,7 @@ func TestPrintInclude(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Include{Expr: &scalar.String{Value: "'path'"}}) + p.Print(&ast.ExprInclude{Expr: &ast.ScalarString{Value: []byte("'path'")}}) expected := `include 'path'` actual := o.String() @@ -1562,7 +1555,7 @@ func TestPrintIncludeOnce(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.IncludeOnce{Expr: &scalar.String{Value: "'path'"}}) + p.Print(&ast.ExprIncludeOnce{Expr: &ast.ScalarString{Value: []byte("'path'")}}) expected := `include_once 'path'` actual := o.String() @@ -1576,9 +1569,9 @@ func TestPrintInstanceOf(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.InstanceOf{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - Class: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, + p.Print(&ast.ExprInstanceOf{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + Class: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, }) expected := `$var instanceof Foo` @@ -1593,10 +1586,10 @@ func TestPrintIsset(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Isset{ - Variables: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprIsset{ + Vars: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }) @@ -1612,19 +1605,19 @@ func TestPrintList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.List{ - Items: []node.Node{ - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.ExprList{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - &expr.ArrayItem{ - Val: &expr.List{ - Items: []node.Node{ - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + &ast.ExprArrayItem{ + Val: &ast.ExprList{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "c"}}, + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, }, }, }, @@ -1644,16 +1637,16 @@ func TestPrintMethodCall(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.MethodCall{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}}, - Method: &node.Identifier{Value: "bar"}, - ArgumentList: &node.ArgumentList{ - Arguments: []node.Node{ - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.ExprMethodCall{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, + Method: &ast.Identifier{Value: []byte("bar")}, + ArgumentList: &ast.ArgumentList{ + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, }, @@ -1671,15 +1664,15 @@ func TestPrintNew(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.New{ - Class: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - ArgumentList: &node.ArgumentList{ - Arguments: []node.Node{ - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.ExprNew{ + Class: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + ArgumentList: &ast.ArgumentList{ + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, }, @@ -1697,8 +1690,8 @@ func TestPrintPostDec(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.PostDec{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprPostDec{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `$var--` @@ -1713,8 +1706,8 @@ func TestPrintPostInc(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.PostInc{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprPostInc{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `$var++` @@ -1729,8 +1722,8 @@ func TestPrintPreDec(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.PreDec{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprPreDec{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `--$var` @@ -1745,8 +1738,8 @@ func TestPrintPreInc(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.PreInc{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprPreInc{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `++$var` @@ -1761,7 +1754,7 @@ func TestPrintPrint(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Print{Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}) + p.Print(&ast.ExprPrint{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}) expected := `print($var)` actual := o.String() @@ -1775,9 +1768,9 @@ func TestPrintPropertyFetch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.PropertyFetch{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}}, - Property: &node.Identifier{Value: "bar"}, + p.Print(&ast.ExprPropertyFetch{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, + Property: &ast.Identifier{Value: []byte("bar")}, }) expected := `$foo->bar` @@ -1792,8 +1785,8 @@ func TestPrintExprReference(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Reference{ - Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}}, + p.Print(&ast.ExprReference{ + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, }) expected := `&$foo` @@ -1808,7 +1801,7 @@ func TestPrintRequire(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Require{Expr: &scalar.String{Value: "'path'"}}) + p.Print(&ast.ExprRequire{Expr: &ast.ScalarString{Value: []byte("'path'")}}) expected := `require 'path'` actual := o.String() @@ -1822,7 +1815,7 @@ func TestPrintRequireOnce(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.RequireOnce{Expr: &scalar.String{Value: "'path'"}}) + p.Print(&ast.ExprRequireOnce{Expr: &ast.ScalarString{Value: []byte("'path'")}}) expected := `require_once 'path'` actual := o.String() @@ -1836,11 +1829,11 @@ func TestPrintShellExec(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ShellExec{ - Parts: []node.Node{ - &scalar.EncapsedStringPart{Value: "hello "}, - &expr.Variable{VarName: &node.Identifier{Value: "world"}}, - &scalar.EncapsedStringPart{Value: "!"}, + p.Print(&ast.ExprShellExec{ + Parts: []ast.Vertex{ + &ast.ScalarEncapsedStringPart{Value: []byte("hello ")}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("world")}}, + &ast.ScalarEncapsedStringPart{Value: []byte("!")}, }, }) @@ -1856,18 +1849,18 @@ func TestPrintExprShortArray(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ShortArray{ - Items: []node.Node{ - &expr.ArrayItem{ - Key: &scalar.String{Value: "'Hello'"}, - Val: &expr.Variable{VarName: &node.Identifier{Value: "world"}}, + p.Print(&ast.ExprShortArray{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Key: &ast.ScalarString{Value: []byte("'Hello'")}, + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("world")}}, }, - &expr.ArrayItem{ - Key: &scalar.Lnumber{Value: "2"}, - Val: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}, + &ast.ExprArrayItem{ + Key: &ast.ScalarLnumber{Value: []byte("2")}, + Val: &ast.ExprReference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}, }, - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }, }, }) @@ -1884,19 +1877,19 @@ func TestPrintShortList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.ShortList{ - Items: []node.Node{ - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.ExprShortList{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - &expr.ArrayItem{ - Val: &expr.List{ - Items: []node.Node{ - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + &ast.ExprArrayItem{ + Val: &ast.ExprList{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - &expr.ArrayItem{ - Val: &expr.Variable{VarName: &node.Identifier{Value: "c"}}, + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, }, }, }, @@ -1916,16 +1909,16 @@ func TestPrintStaticCall(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.StaticCall{ - Class: &node.Identifier{Value: "Foo"}, - Call: &node.Identifier{Value: "bar"}, - ArgumentList: &node.ArgumentList{ - Arguments: []node.Node{ - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.ExprStaticCall{ + Class: &ast.Identifier{Value: []byte("Foo")}, + Call: &ast.Identifier{Value: []byte("bar")}, + ArgumentList: &ast.ArgumentList{ + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, }, @@ -1943,9 +1936,9 @@ func TestPrintStaticPropertyFetch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.StaticPropertyFetch{ - Class: &node.Identifier{Value: "Foo"}, - Property: &expr.Variable{VarName: &node.Identifier{Value: "bar"}}, + p.Print(&ast.ExprStaticPropertyFetch{ + Class: &ast.Identifier{Value: []byte("Foo")}, + Property: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("bar")}}, }) expected := `Foo::$bar` @@ -1960,9 +1953,9 @@ func TestPrintTernary(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Ternary{ - Condition: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - IfFalse: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.ExprTernary{ + Condition: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + IfFalse: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }) expected := `$a ?: $b` @@ -1977,10 +1970,10 @@ func TestPrintTernaryFull(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Ternary{ - Condition: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - IfTrue: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, - IfFalse: &expr.Variable{VarName: &node.Identifier{Value: "c"}}, + p.Print(&ast.ExprTernary{ + Condition: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + IfTrue: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, + IfFalse: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, }) expected := `$a ? $b : $c` @@ -1995,8 +1988,8 @@ func TestPrintUnaryMinus(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.UnaryMinus{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprUnaryMinus{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `-$var` @@ -2011,8 +2004,8 @@ func TestPrintUnaryPlus(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.UnaryPlus{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprUnaryPlus{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `+$var` @@ -2027,7 +2020,7 @@ func TestPrintVariable(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Variable{VarName: &expr.Variable{VarName: &node.Identifier{Value: "var"}}}) + p.Print(&ast.ExprVariable{VarName: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}}) expected := `$$var` actual := o.String() @@ -2041,8 +2034,8 @@ func TestPrintYieldFrom(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.YieldFrom{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprYieldFrom{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `yield from $var` @@ -2057,8 +2050,8 @@ func TestPrintYield(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Yield{ - Value: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprYield{ + Value: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `yield $var` @@ -2073,9 +2066,9 @@ func TestPrintYieldFull(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&expr.Yield{ - Key: &expr.Variable{VarName: &node.Identifier{Value: "k"}}, - Value: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + p.Print(&ast.ExprYield{ + Key: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("k")}}, + Value: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }) expected := `yield $k => $var` @@ -2092,11 +2085,11 @@ func TestPrintAltElseIf(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.AltElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}}, + p.Print(&ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}}, }, }, }) @@ -2114,9 +2107,9 @@ func TestPrintAltElseIfEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.AltElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.StmtList{}, + p.Print(&ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtStmtList{}, }) expected := `elseif ($a) :` @@ -2131,10 +2124,10 @@ func TestPrintAltElse(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.AltElse{ - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}}, + p.Print(&ast.StmtAltElse{ + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}}, }, }, }) @@ -2152,8 +2145,8 @@ func TestPrintAltElseEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.AltElse{ - Stmt: &stmt.StmtList{}, + p.Print(&ast.StmtAltElse{ + Stmt: &ast.StmtStmtList{}, }) expected := `else :` @@ -2168,21 +2161,21 @@ func TestPrintAltFor(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.AltFor{ - Init: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtAltFor{ + Init: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - Cond: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + Cond: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - Loop: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "c"}}, + Loop: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "d"}}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("d")}}}, }, }, }, @@ -2205,15 +2198,15 @@ func TestPrintAltForeach(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.AltForeach{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - Key: &expr.Variable{VarName: &node.Identifier{Value: "key"}}, - Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "val"}}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "d"}}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtAltForeach{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + Key: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("key")}}, + Var: &ast.ExprReference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("val")}}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("d")}}}, }, }, }, @@ -2236,33 +2229,33 @@ func TestPrintAltIf(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.AltIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "d"}}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtAltIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("d")}}}, }, }, - ElseIf: []node.Node{ - &stmt.AltElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}}, + ElseIf: []ast.Vertex{ + &ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}}, }, }, }, - &stmt.AltElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "c"}}, - Stmt: &stmt.StmtList{}, + &ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, + Stmt: &ast.StmtStmtList{}, }, }, - Else: &stmt.AltElse{ - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}}, + Else: &ast.StmtAltElse{ + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}}, }, }, }, @@ -2291,22 +2284,22 @@ func TestPrintStmtAltSwitch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.AltSwitch{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, - CaseList: &stmt.CaseList{ - Cases: []node.Node{ - &stmt.Case{ - Cond: &scalar.String{Value: "'a'"}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtAltSwitch{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, + CaseList: &ast.StmtCaseList{ + Cases: []ast.Vertex{ + &ast.StmtCase{ + Cond: &ast.ScalarString{Value: []byte("'a'")}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, }, }, - &stmt.Case{ - Cond: &scalar.String{Value: "'b'"}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}}, + &ast.StmtCase{ + Cond: &ast.ScalarString{Value: []byte("'b'")}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}}, }, }, }, @@ -2334,13 +2327,13 @@ func TestPrintAltWhile(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.AltWhile{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtAltWhile{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}}, }, }, }, @@ -2363,8 +2356,8 @@ func TestPrintStmtBreak(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Break{ - Expr: &scalar.Lnumber{Value: "1"}, + p.Print(&ast.StmtBreak{ + Expr: &ast.ScalarLnumber{Value: []byte("1")}, }) expected := "break 1;" @@ -2379,10 +2372,10 @@ func TestPrintStmtCase(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Case{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, + p.Print(&ast.StmtCase{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, }, }) @@ -2399,9 +2392,9 @@ func TestPrintStmtCaseEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Case{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmts: []node.Node{}, + p.Print(&ast.StmtCase{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmts: []ast.Vertex{}, }) expected := "case $a:" @@ -2416,16 +2409,16 @@ func TestPrintStmtCatch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Catch{ - Types: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Exception"}}}, - &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "RuntimeException"}}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtCatch{ + Types: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Exception")}}}, + &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("RuntimeException")}}}, }, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "e"}}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("e")}}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, }, }, }, @@ -2447,26 +2440,26 @@ func TestPrintStmtClassMethod(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.ClassMethod{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, + p.Print(&ast.StmtClassMethod{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, ReturnsRef: true, - MethodName: &node.Identifier{Value: "foo"}, - Params: []node.Node{ - &node.Parameter{ + MethodName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{ + &ast.Parameter{ ByRef: true, - VariableType: &node.Nullable{Expr: &name.Name{Parts: []node.Node{&name.NamePart{Value: "int"}}}}, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - DefaultValue: &expr.ConstFetch{Constant: &name.Name{Parts: []node.Node{&name.NamePart{Value: "null"}}}}, + Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}}, }, - &node.Parameter{ + &ast.Parameter{ Variadic: true, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, - ReturnType: &name.Name{Parts: []node.Node{&name.NamePart{Value: "void"}}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, + ReturnType: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("void")}}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, }, }, }) @@ -2485,24 +2478,24 @@ func TestPrintStmtAbstractClassMethod(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.ClassMethod{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, + p.Print(&ast.StmtClassMethod{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, ReturnsRef: true, - MethodName: &node.Identifier{Value: "foo"}, - Params: []node.Node{ - &node.Parameter{ + MethodName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{ + &ast.Parameter{ ByRef: true, - VariableType: &node.Nullable{Expr: &name.Name{Parts: []node.Node{&name.NamePart{Value: "int"}}}}, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - DefaultValue: &expr.ConstFetch{Constant: &name.Name{Parts: []node.Node{&name.NamePart{Value: "null"}}}}, + Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}}, }, - &node.Parameter{ + &ast.Parameter{ Variadic: true, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, - ReturnType: &name.Name{Parts: []node.Node{&name.NamePart{Value: "void"}}}, - Stmt: &stmt.Nop{}, + ReturnType: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("void")}}}, + Stmt: &ast.StmtNop{}, }) expected := `public function &foo(?int &$a = null, ...$b): void;` @@ -2517,27 +2510,27 @@ func TestPrintStmtClass(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Class{ - Modifiers: []node.Node{&node.Identifier{Value: "abstract"}}, - ClassName: &node.Identifier{Value: "Foo"}, - Extends: &stmt.ClassExtends{ - ClassName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtClass{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("abstract")}}, + ClassName: &ast.Identifier{Value: []byte("Foo")}, + Extends: &ast.StmtClassExtends{ + ClassName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - Implements: &stmt.ClassImplements{ - InterfaceNames: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, + Implements: &ast.StmtClassImplements{ + InterfaceNames: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, }, - Stmts: []node.Node{ - &stmt.ClassConstList{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + Stmts: []ast.Vertex{ + &ast.StmtClassConstList{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, }, @@ -2563,36 +2556,36 @@ func TestPrintStmtAnonymousClass(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Class{ - Modifiers: []node.Node{&node.Identifier{Value: "abstract"}}, - ArgumentList: &node.ArgumentList{ - Arguments: []node.Node{ - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtClass{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("abstract")}}, + ArgumentList: &ast.ArgumentList{ + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - &node.Argument{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + &ast.Argument{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, }, - Extends: &stmt.ClassExtends{ - ClassName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, + Extends: &ast.StmtClassExtends{ + ClassName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - Implements: &stmt.ClassImplements{ - InterfaceNames: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, + Implements: &ast.StmtClassImplements{ + InterfaceNames: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, }, - Stmts: []node.Node{ - &stmt.ClassConstList{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + Stmts: []ast.Vertex{ + &ast.StmtClassConstList{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, }, @@ -2618,16 +2611,16 @@ func TestPrintStmtClassConstList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.ClassConstList{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'a'"}, + p.Print(&ast.StmtClassConstList{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'a'")}, }, - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "BAR"}, - Expr: &scalar.String{Value: "'b'"}, + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("BAR")}, + Expr: &ast.ScalarString{Value: []byte("'b'")}, }, }, }) @@ -2644,9 +2637,9 @@ func TestPrintStmtConstant(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'BAR'"}, + p.Print(&ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'BAR'")}, }) expected := "FOO = 'BAR'" @@ -2661,8 +2654,8 @@ func TestPrintStmtContinue(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Continue{ - Expr: &scalar.Lnumber{Value: "1"}, + p.Print(&ast.StmtContinue{ + Expr: &ast.ScalarLnumber{Value: []byte("1")}, }) expected := `continue 1;` @@ -2677,18 +2670,18 @@ func TestPrintStmtDeclareStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Declare{ - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + p.Print(&ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtDeclare{ + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }, @@ -2711,16 +2704,16 @@ func TestPrintStmtDeclareExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Declare{ - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + p.Print(&ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtDeclare{ + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }, }, }) @@ -2740,14 +2733,14 @@ func TestPrintStmtDeclareNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Declare{ - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + p.Print(&ast.StmtDeclare{ + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, - Stmt: &stmt.Nop{}, + Stmt: &ast.StmtNop{}, }) expected := `declare(FOO = 'bar');` @@ -2762,9 +2755,9 @@ func TestPrintStmtDefalut(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Default{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, + p.Print(&ast.StmtDefault{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, }, }) @@ -2781,8 +2774,8 @@ func TestPrintStmtDefalutEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Default{ - Stmts: []node.Node{}, + p.Print(&ast.StmtDefault{ + Stmts: []ast.Vertex{}, }) expected := `default:` @@ -2797,12 +2790,12 @@ func TestPrintStmtDo_Expression(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Do{ - Cond: &scalar.Lnumber{Value: "1"}, - Stmt: &stmt.Expression{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtDo{ + Cond: &ast.ScalarLnumber{Value: []byte("1")}, + Stmt: &ast.StmtExpression{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, }, }, @@ -2824,13 +2817,13 @@ func TestPrintStmtDo_StmtList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Do{ - Cond: &scalar.Lnumber{Value: "1"}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtDo{ + Cond: &ast.ScalarLnumber{Value: []byte("1")}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}, }, }, }, @@ -2853,10 +2846,10 @@ func TestPrintStmtEcho(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Echo{ - Exprs: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.StmtEcho{ + Exprs: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }) @@ -2872,11 +2865,11 @@ func TestPrintStmtElseIfStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.ElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + p.Print(&ast.StmtElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -2895,9 +2888,9 @@ func TestPrintStmtElseIfExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.ElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + p.Print(&ast.StmtElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }) expected := `elseif ($a) @@ -2913,9 +2906,9 @@ func TestPrintStmtElseIfNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.ElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.Nop{}, + p.Print(&ast.StmtElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtNop{}, }) expected := `elseif ($a);` @@ -2930,10 +2923,10 @@ func TestPrintStmtElseStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Else{ - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + p.Print(&ast.StmtElse{ + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -2952,8 +2945,8 @@ func TestPrintStmtElseExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Else{ - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + p.Print(&ast.StmtElse{ + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }) expected := `else @@ -2969,8 +2962,8 @@ func TestPrintStmtElseNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Else{ - Stmt: &stmt.Nop{}, + p.Print(&ast.StmtElse{ + Stmt: &ast.StmtNop{}, }) expected := `else;` @@ -2985,7 +2978,7 @@ func TestPrintExpression(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Expression{Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}}) + p.Print(&ast.StmtExpression{Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}}) expected := `$a;` actual := o.String() @@ -2999,11 +2992,11 @@ func TestPrintStmtFinally(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Finally{ - Stmts: []node.Node{ - &stmt.Nop{}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtFinally{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }, @@ -3025,24 +3018,24 @@ func TestPrintStmtForStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.For{ - Init: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtFor{ + Init: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - Cond: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "c"}}, - &expr.Variable{VarName: &node.Identifier{Value: "d"}}, + Cond: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("d")}}, }, - Loop: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "e"}}, - &expr.Variable{VarName: &node.Identifier{Value: "f"}}, + Loop: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("e")}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("f")}}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }, @@ -3065,19 +3058,19 @@ func TestPrintStmtForExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.For{ - Init: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtFor{ + Init: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - Cond: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + Cond: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - Loop: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "c"}}, + Loop: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, }, - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }, }, }) @@ -3097,17 +3090,17 @@ func TestPrintStmtForNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.For{ - Init: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "a"}}, + p.Print(&ast.StmtFor{ + Init: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, }, - Cond: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + Cond: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - Loop: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "c"}}, + Loop: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, }, - Stmt: &stmt.Nop{}, + Stmt: &ast.StmtNop{}, }) expected := `for ($a; $b; $c);` @@ -3122,14 +3115,14 @@ func TestPrintStmtForeachStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Foreach{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtForeach{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }, @@ -3152,13 +3145,13 @@ func TestPrintStmtForeachExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Foreach{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Key: &expr.Variable{VarName: &node.Identifier{Value: "k"}}, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "v"}}, - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtForeach{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Key: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("k")}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("v")}}, + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }, }, }) @@ -3178,11 +3171,11 @@ func TestPrintStmtForeachNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Foreach{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Key: &expr.Variable{VarName: &node.Identifier{Value: "k"}}, - Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "v"}}}, - Stmt: &stmt.Nop{}, + p.Print(&ast.StmtForeach{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Key: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("k")}}, + Var: &ast.ExprReference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("v")}}}, + Stmt: &ast.StmtNop{}, }) expected := `foreach ($a as $k => &$v);` @@ -3197,21 +3190,21 @@ func TestPrintStmtFunction(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.Function{ + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtFunction{ ReturnsRef: true, - FunctionName: &node.Identifier{Value: "foo"}, - Params: []node.Node{ - &node.Parameter{ + FunctionName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{ + &ast.Parameter{ ByRef: true, Variadic: false, - Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}, + Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}, }, }, - ReturnType: &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Stmts: []node.Node{ - &stmt.Nop{}, + ReturnType: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }, @@ -3233,10 +3226,10 @@ func TestPrintStmtGlobal(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Global{ - Vars: []node.Node{ - &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.StmtGlobal{ + Vars: []ast.Vertex{ + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }) @@ -3252,8 +3245,8 @@ func TestPrintStmtGoto(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Goto{ - Label: &node.Identifier{Value: "FOO"}, + p.Print(&ast.StmtGoto{ + Label: &ast.Identifier{Value: []byte("FOO")}, }) expected := `goto FOO;` @@ -3268,16 +3261,16 @@ func TestPrintStmtGroupUse(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.GroupUse{ - UseType: &node.Identifier{Value: "function"}, - Prefix: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - UseList: []node.Node{ - &stmt.Use{ - Use: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, - Alias: &node.Identifier{Value: "Baz"}, + p.Print(&ast.StmtGroupUse{ + UseType: &ast.Identifier{Value: []byte("function")}, + Prefix: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + UseList: []ast.Vertex{ + &ast.StmtUse{ + Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, + Alias: &ast.Identifier{Value: []byte("Baz")}, }, - &stmt.Use{ - Use: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, + &ast.StmtUse{ + Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, }, }) @@ -3294,7 +3287,7 @@ func TestPrintHaltCompiler(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.HaltCompiler{}) + p.Print(&ast.StmtHaltCompiler{}) expected := `__halt_compiler();` actual := o.String() @@ -3308,32 +3301,32 @@ func TestPrintIfExpression(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.If{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.Expression{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtExpression{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, - ElseIf: []node.Node{ - &stmt.ElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "c"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "d"}}, + ElseIf: []ast.Vertex{ + &ast.StmtElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("c")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("d")}}, }, }, }, }, - &stmt.ElseIf{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "e"}}, - Stmt: &stmt.Nop{}, + &ast.StmtElseIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("e")}}, + Stmt: &ast.StmtNop{}, }, }, - Else: &stmt.Else{ - Stmt: &stmt.Expression{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "f"}}, + Else: &ast.StmtElse{ + Stmt: &ast.StmtExpression{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("f")}}, }, }, }, @@ -3361,14 +3354,14 @@ func TestPrintIfStmtList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.Namespace{ - Stmts: []node.Node{ - &stmt.If{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{ - Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}, + p.Print(&ast.StmtNamespace{ + Stmts: []ast.Vertex{ + &ast.StmtIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{ + Expr: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}, }, }, }, @@ -3392,9 +3385,9 @@ func TestPrintIfNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.If{ - Cond: &expr.Variable{VarName: &node.Identifier{Value: "a"}}, - Stmt: &stmt.Nop{}, + p.Print(&ast.StmtIf{ + Cond: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}, + Stmt: &ast.StmtNop{}, }) expected := `if ($a);` @@ -3409,8 +3402,8 @@ func TestPrintInlineHtml(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrettyPrinter(o, " ") - p.Print(&stmt.InlineHtml{ - Value: "test", + p.Print(&ast.StmtInlineHtml{ + Value: []byte("test"), }) expected := `?>test 0 { + io.WriteString(p.w, glue) + } + + p.Print(n) + } +} + +func (p *Printer) printNodes(nn []ast.Vertex) { + for _, n := range nn { + p.Print(n) + } +} + +func (p *Printer) printFreeFloating(n ast.Vertex, pos token.Position) { + if n == nil { + return + } + + for _, m := range n.GetNode().Tokens[pos] { + io.WriteString(p.w, string(m.Value)) + } +} + +func (p *Printer) printNode(n ast.Vertex) { + switch n.(type) { + + // node + + case *ast.Root: + p.printNodeRoot(n) + case *ast.Identifier: + p.printNodeIdentifier(n) + case *ast.Parameter: + p.printNodeParameter(n) + case *ast.Nullable: + p.printNodeNullable(n) + case *ast.Argument: + p.printNodeArgument(n) + + // name + + case *ast.NameNamePart: + p.printNameNamePart(n) + case *ast.NameName: + p.printNameName(n) + case *ast.NameFullyQualified: + p.printNameFullyQualified(n) + case *ast.NameRelative: + p.printNameRelative(n) + + // scalar + + case *ast.ScalarLnumber: + p.printScalarLNumber(n) + case *ast.ScalarDnumber: + p.printScalarDNumber(n) + case *ast.ScalarString: + p.printScalarString(n) + case *ast.ScalarEncapsedStringPart: + p.printScalarEncapsedStringPart(n) + case *ast.ScalarEncapsed: + p.printScalarEncapsed(n) + case *ast.ScalarHeredoc: + p.printScalarHeredoc(n) + case *ast.ScalarMagicConstant: + p.printScalarMagicConstant(n) + + // assign + + case *ast.ExprAssign: + p.printAssign(n) + case *ast.ExprAssignReference: + p.printAssignReference(n) + case *ast.ExprAssignBitwiseAnd: + p.printAssignBitwiseAnd(n) + case *ast.ExprAssignBitwiseOr: + p.printAssignBitwiseOr(n) + case *ast.ExprAssignBitwiseXor: + p.printAssignBitwiseXor(n) + case *ast.ExprAssignCoalesce: + p.printAssignCoalesce(n) + case *ast.ExprAssignConcat: + p.printAssignConcat(n) + case *ast.ExprAssignDiv: + p.printAssignDiv(n) + case *ast.ExprAssignMinus: + p.printAssignMinus(n) + case *ast.ExprAssignMod: + p.printAssignMod(n) + case *ast.ExprAssignMul: + p.printAssignMul(n) + case *ast.ExprAssignPlus: + p.printAssignPlus(n) + case *ast.ExprAssignPow: + p.printAssignPow(n) + case *ast.ExprAssignShiftLeft: + p.printAssignShiftLeft(n) + case *ast.ExprAssignShiftRight: + p.printAssignShiftRight(n) + + // binary + + case *ast.ExprBinaryBitwiseAnd: + p.printBinaryBitwiseAnd(n) + case *ast.ExprBinaryBitwiseOr: + p.printBinaryBitwiseOr(n) + case *ast.ExprBinaryBitwiseXor: + p.printBinaryBitwiseXor(n) + case *ast.ExprBinaryBooleanAnd: + p.printBinaryBooleanAnd(n) + case *ast.ExprBinaryBooleanOr: + p.printBinaryBooleanOr(n) + case *ast.ExprBinaryCoalesce: + p.printBinaryCoalesce(n) + case *ast.ExprBinaryConcat: + p.printBinaryConcat(n) + case *ast.ExprBinaryDiv: + p.printBinaryDiv(n) + case *ast.ExprBinaryEqual: + p.printBinaryEqual(n) + case *ast.ExprBinaryGreaterOrEqual: + p.printBinaryGreaterOrEqual(n) + case *ast.ExprBinaryGreater: + p.printBinaryGreater(n) + case *ast.ExprBinaryIdentical: + p.printBinaryIdentical(n) + case *ast.ExprBinaryLogicalAnd: + p.printBinaryLogicalAnd(n) + case *ast.ExprBinaryLogicalOr: + p.printBinaryLogicalOr(n) + case *ast.ExprBinaryLogicalXor: + p.printBinaryLogicalXor(n) + case *ast.ExprBinaryMinus: + p.printBinaryMinus(n) + case *ast.ExprBinaryMod: + p.printBinaryMod(n) + case *ast.ExprBinaryMul: + p.printBinaryMul(n) + case *ast.ExprBinaryNotEqual: + p.printBinaryNotEqual(n) + case *ast.ExprBinaryNotIdentical: + p.printBinaryNotIdentical(n) + case *ast.ExprBinaryPlus: + p.printBinaryPlus(n) + case *ast.ExprBinaryPow: + p.printBinaryPow(n) + case *ast.ExprBinaryShiftLeft: + p.printBinaryShiftLeft(n) + case *ast.ExprBinaryShiftRight: + p.printBinaryShiftRight(n) + case *ast.ExprBinarySmallerOrEqual: + p.printBinarySmallerOrEqual(n) + case *ast.ExprBinarySmaller: + p.printBinarySmaller(n) + case *ast.ExprBinarySpaceship: + p.printBinarySpaceship(n) + + // cast + + case *ast.ExprCastArray: + p.printArray(n) + case *ast.ExprCastBool: + p.printBool(n) + case *ast.ExprCastDouble: + p.printDouble(n) + case *ast.ExprCastInt: + p.printInt(n) + case *ast.ExprCastObject: + p.printObject(n) + case *ast.ExprCastString: + p.printString(n) + case *ast.ExprCastUnset: + p.printUnset(n) + + // expr + + case *ast.ExprArrayDimFetch: + p.printExprArrayDimFetch(n) + case *ast.ExprArrayItem: + p.printExprArrayItem(n) + case *ast.ExprArray: + p.printExprArray(n) + case *ast.ExprArrowFunction: + p.printExprArrowFunction(n) + case *ast.ExprBitwiseNot: + p.printExprBitwiseNot(n) + case *ast.ExprBooleanNot: + p.printExprBooleanNot(n) + case *ast.ExprClassConstFetch: + p.printExprClassConstFetch(n) + case *ast.ExprClone: + p.printExprClone(n) + case *ast.ExprClosureUse: + p.printExprClosureUse(n) + case *ast.ExprClosure: + p.printExprClosure(n) + case *ast.ExprConstFetch: + p.printExprConstFetch(n) + case *ast.ExprEmpty: + p.printExprEmpty(n) + case *ast.ExprErrorSuppress: + p.printExprErrorSuppress(n) + case *ast.ExprEval: + p.printExprEval(n) + case *ast.ExprExit: + p.printExprExit(n) + case *ast.ExprFunctionCall: + p.printExprFunctionCall(n) + case *ast.ExprInclude: + p.printExprInclude(n) + case *ast.ExprIncludeOnce: + p.printExprIncludeOnce(n) + case *ast.ExprInstanceOf: + p.printExprInstanceOf(n) + case *ast.ExprIsset: + p.printExprIsset(n) + case *ast.ExprList: + p.printExprList(n) + case *ast.ExprMethodCall: + p.printExprMethodCall(n) + case *ast.ExprNew: + p.printExprNew(n) + case *ast.ExprPostDec: + p.printExprPostDec(n) + case *ast.ExprPostInc: + p.printExprPostInc(n) + case *ast.ExprPreDec: + p.printExprPreDec(n) + case *ast.ExprPreInc: + p.printExprPreInc(n) + case *ast.ExprPrint: + p.printExprPrint(n) + case *ast.ExprPropertyFetch: + p.printExprPropertyFetch(n) + case *ast.ExprReference: + p.printExprReference(n) + case *ast.ExprRequire: + p.printExprRequire(n) + case *ast.ExprRequireOnce: + p.printExprRequireOnce(n) + case *ast.ExprShellExec: + p.printExprShellExec(n) + case *ast.ExprShortArray: + p.printExprShortArray(n) + case *ast.ExprShortList: + p.printExprShortList(n) + case *ast.ExprStaticCall: + p.printExprStaticCall(n) + case *ast.ExprStaticPropertyFetch: + p.printExprStaticPropertyFetch(n) + case *ast.ExprTernary: + p.printExprTernary(n) + case *ast.ExprUnaryMinus: + p.printExprUnaryMinus(n) + case *ast.ExprUnaryPlus: + p.printExprUnaryPlus(n) + case *ast.ExprVariable: + p.printExprVariable(n) + case *ast.ExprYieldFrom: + p.printExprYieldFrom(n) + case *ast.ExprYield: + p.printExprYield(n) + + // stmt + + case *ast.StmtAltElseIf: + p.printStmtAltElseIf(n) + case *ast.StmtAltElse: + p.printStmtAltElse(n) + case *ast.StmtAltFor: + p.printStmtAltFor(n) + case *ast.StmtAltForeach: + p.printStmtAltForeach(n) + case *ast.StmtAltIf: + p.printStmtAltIf(n) + case *ast.StmtAltSwitch: + p.printStmtAltSwitch(n) + case *ast.StmtAltWhile: + p.printStmtAltWhile(n) + case *ast.StmtBreak: + p.printStmtBreak(n) + case *ast.StmtCase: + p.printStmtCase(n) + case *ast.StmtCatch: + p.printStmtCatch(n) + case *ast.StmtClassMethod: + p.printStmtClassMethod(n) + case *ast.StmtClass: + p.printStmtClass(n) + case *ast.StmtClassConstList: + p.printStmtClassConstList(n) + case *ast.StmtConstList: + p.printStmtConstList(n) + case *ast.StmtConstant: + p.printStmtConstant(n) + case *ast.StmtContinue: + p.printStmtContinue(n) + case *ast.StmtDeclare: + p.printStmtDeclare(n) + case *ast.StmtDefault: + p.printStmtDefault(n) + case *ast.StmtDo: + p.printStmtDo(n) + case *ast.StmtEcho: + p.printStmtEcho(n) + case *ast.StmtElseIf: + p.printStmtElseif(n) + case *ast.StmtElse: + p.printStmtElse(n) + case *ast.StmtExpression: + p.printStmtExpression(n) + case *ast.StmtFinally: + p.printStmtFinally(n) + case *ast.StmtFor: + p.printStmtFor(n) + case *ast.StmtForeach: + p.printStmtForeach(n) + case *ast.StmtFunction: + p.printStmtFunction(n) + case *ast.StmtGlobal: + p.printStmtGlobal(n) + case *ast.StmtGoto: + p.printStmtGoto(n) + case *ast.StmtGroupUse: + p.printStmtGroupUse(n) + case *ast.StmtHaltCompiler: + p.printStmtHaltCompiler(n) + case *ast.StmtIf: + p.printStmtIf(n) + case *ast.StmtInlineHtml: + p.printStmtInlineHTML(n) + case *ast.StmtInterface: + p.printStmtInterface(n) + case *ast.StmtLabel: + p.printStmtLabel(n) + case *ast.StmtNamespace: + p.printStmtNamespace(n) + case *ast.StmtNop: + p.printStmtNop(n) + case *ast.StmtPropertyList: + p.printStmtPropertyList(n) + case *ast.StmtProperty: + p.printStmtProperty(n) + case *ast.StmtReturn: + p.printStmtReturn(n) + case *ast.StmtStaticVar: + p.printStmtStaticVar(n) + case *ast.StmtStatic: + p.printStmtStatic(n) + case *ast.StmtStmtList: + p.printStmtStmtList(n) + case *ast.StmtSwitch: + p.printStmtSwitch(n) + case *ast.StmtThrow: + p.printStmtThrow(n) + case *ast.StmtTraitAdaptationList: + p.printStmtTraitAdaptationList(n) + case *ast.StmtTraitMethodRef: + p.printStmtTraitMethodRef(n) + case *ast.StmtTraitUseAlias: + p.printStmtTraitUseAlias(n) + case *ast.StmtTraitUsePrecedence: + p.printStmtTraitUsePrecedence(n) + case *ast.StmtTraitUse: + p.printStmtTraitUse(n) + case *ast.StmtTrait: + p.printStmtTrait(n) + case *ast.StmtTry: + p.printStmtTry(n) + case *ast.StmtUnset: + p.printStmtUnset(n) + case *ast.StmtUseList: + p.printStmtUseList(n) + case *ast.StmtUse: + p.printStmtUse(n) + case *ast.StmtWhile: + p.printStmtWhile(n) + } +} + +// node + +func (p *Printer) printNodeRoot(n ast.Vertex) { + nn := n.(*ast.Root) + p.SetState(HtmlState) + p.printFreeFloating(nn, token.Start) + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printNodeIdentifier(n ast.Vertex) { + nn := n.(*ast.Identifier) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, string(nn.Value)) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printNodeParameter(n ast.Vertex) { + nn := n.(*ast.Parameter) + p.printFreeFloating(nn, token.Start) + + if nn.Type != nil { + p.Print(nn.Type) + } + p.printFreeFloating(nn, token.OptionalType) + + if nn.ByRef { + io.WriteString(p.w, "&") + } + p.printFreeFloating(nn, token.Ampersand) + + if nn.Variadic { + io.WriteString(p.w, "...") + } + p.printFreeFloating(nn, token.Variadic) + + p.Print(nn.Var) + + if nn.DefaultValue != nil { + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "=") + p.Print(nn.DefaultValue) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printNodeNullable(n ast.Vertex) { + nn := n.(*ast.Nullable) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "?") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printNodeArgument(n ast.Vertex) { + nn := n.(*ast.Argument) + p.printFreeFloating(nn, token.Start) + + if nn.IsReference { + io.WriteString(p.w, "&") + } + p.printFreeFloating(nn, token.Ampersand) + + if nn.Variadic { + io.WriteString(p.w, "...") + } + p.printFreeFloating(nn, token.Variadic) + + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +// name + +func (p *Printer) printNameNamePart(n ast.Vertex) { + nn := n.(*ast.NameNamePart) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, string(nn.Value)) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printNameName(n ast.Vertex) { + nn := n.(*ast.NameName) + p.printFreeFloating(nn, token.Start) + + p.joinPrint("\\", nn.Parts) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printNameFullyQualified(n ast.Vertex) { + nn := n.(*ast.NameFullyQualified) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "\\") + p.joinPrint("\\", nn.Parts) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printNameRelative(n ast.Vertex) { + nn := n.(*ast.NameRelative) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "namespace") + p.printFreeFloating(nn, token.Namespace) + + for _, part := range nn.Parts { + io.WriteString(p.w, "\\") + p.Print(part) + } + + p.printFreeFloating(nn, token.End) +} + +// scalar + +func (p *Printer) printScalarLNumber(n ast.Vertex) { + nn := n.(*ast.ScalarLnumber) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, string(nn.Value)) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printScalarDNumber(n ast.Vertex) { + nn := n.(*ast.ScalarDnumber) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, string(nn.Value)) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printScalarString(n ast.Vertex) { + nn := n.(*ast.ScalarString) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, string(nn.Value)) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printScalarEncapsedStringPart(n ast.Vertex) { + nn := n.(*ast.ScalarEncapsedStringPart) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, string(nn.Value)) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printScalarEncapsed(n ast.Vertex) { + nn := n.(*ast.ScalarEncapsed) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "\"") + for _, part := range nn.Parts { + switch part.(type) { + case *ast.ExprArrayDimFetch: + s := part.GetNode().Tokens[token.Start] + if len(s) > 0 && string(s[0].Value) == "${" { + p.printExprArrayDimFetchWithoutLeadingDollar(part) + } else { + p.Print(part) + } + case *ast.ExprVariable: + s := part.GetNode().Tokens[token.Start] + if len(s) > 0 && string(s[0].Value) == "${" { + p.printExprVariableWithoutLeadingDollar(part) + } else { + p.Print(part) + } + default: + p.Print(part) + } + } + io.WriteString(p.w, "\"") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printScalarHeredoc(n ast.Vertex) { + nn := n.(*ast.ScalarHeredoc) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, string(nn.Label)) + + for _, part := range nn.Parts { + switch part.(type) { + case *ast.ExprArrayDimFetch: + s := part.GetNode().Tokens[token.Start] + if len(s) > 0 && string(s[0].Value) == "${" { + p.printExprArrayDimFetchWithoutLeadingDollar(part) + } else { + p.Print(part) + } + case *ast.ExprVariable: + s := part.GetNode().Tokens[token.Start] + if len(s) > 0 && string(s[0].Value) == "${" { + p.printExprVariableWithoutLeadingDollar(part) + } else { + p.Print(part) + } + default: + p.Print(part) + } + } + + io.WriteString(p.w, strings.Trim(string(nn.Label), "<\"'\n")) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printScalarMagicConstant(n ast.Vertex) { + nn := n.(*ast.ScalarMagicConstant) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, string(nn.Value)) + p.printFreeFloating(nn, token.End) +} + +// Assign + +func (p *Printer) printAssign(n ast.Vertex) { + nn := n.(*ast.ExprAssign) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignReference(n ast.Vertex) { + nn := n.(*ast.ExprAssignReference) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "=") + p.printFreeFloating(nn, token.Equal) + io.WriteString(p.w, "&") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignBitwiseAnd(n ast.Vertex) { + nn := n.(*ast.ExprAssignBitwiseAnd) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "&") + io.WriteString(p.w, "=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignBitwiseOr(n ast.Vertex) { + nn := n.(*ast.ExprAssignBitwiseOr) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "|=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignBitwiseXor(n ast.Vertex) { + nn := n.(*ast.ExprAssignBitwiseXor) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "^=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignCoalesce(n ast.Vertex) { + nn := n.(*ast.ExprAssignCoalesce) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "??=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignConcat(n ast.Vertex) { + nn := n.(*ast.ExprAssignConcat) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, ".=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignDiv(n ast.Vertex) { + nn := n.(*ast.ExprAssignDiv) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "/=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignMinus(n ast.Vertex) { + nn := n.(*ast.ExprAssignMinus) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "-=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignMod(n ast.Vertex) { + nn := n.(*ast.ExprAssignMod) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "%=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignMul(n ast.Vertex) { + nn := n.(*ast.ExprAssignMul) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "*=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignPlus(n ast.Vertex) { + nn := n.(*ast.ExprAssignPlus) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "+=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignPow(n ast.Vertex) { + nn := n.(*ast.ExprAssignPow) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "**=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignShiftLeft(n ast.Vertex) { + nn := n.(*ast.ExprAssignShiftLeft) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "<<=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printAssignShiftRight(n ast.Vertex) { + nn := n.(*ast.ExprAssignShiftRight) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, ">>=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +// binary + +func (p *Printer) printBinaryBitwiseAnd(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBitwiseAnd) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "&") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryBitwiseOr(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBitwiseOr) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "|") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryBitwiseXor(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBitwiseXor) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "^") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryBooleanAnd(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBooleanAnd) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "&&") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryBooleanOr(n ast.Vertex) { + nn := n.(*ast.ExprBinaryBooleanOr) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "||") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryCoalesce(n ast.Vertex) { + nn := n.(*ast.ExprBinaryCoalesce) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "??") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryConcat(n ast.Vertex) { + nn := n.(*ast.ExprBinaryConcat) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ".") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryDiv(n ast.Vertex) { + nn := n.(*ast.ExprBinaryDiv) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "/") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinaryEqual) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "==") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryGreaterOrEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinaryGreaterOrEqual) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ">=") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryGreater(n ast.Vertex) { + nn := n.(*ast.ExprBinaryGreater) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ">") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryIdentical(n ast.Vertex) { + nn := n.(*ast.ExprBinaryIdentical) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "===") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryLogicalAnd(n ast.Vertex) { + nn := n.(*ast.ExprBinaryLogicalAnd) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "and") + if nn.Right.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryLogicalOr(n ast.Vertex) { + nn := n.(*ast.ExprBinaryLogicalOr) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "or") + if nn.Right.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryLogicalXor(n ast.Vertex) { + nn := n.(*ast.ExprBinaryLogicalXor) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "xor") + if nn.Right.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryMinus(n ast.Vertex) { + nn := n.(*ast.ExprBinaryMinus) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "-") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryMod(n ast.Vertex) { + nn := n.(*ast.ExprBinaryMod) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "%") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryMul(n ast.Vertex) { + nn := n.(*ast.ExprBinaryMul) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "*") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryNotEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinaryNotEqual) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + p.printFreeFloating(nn, token.Equal) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "!=") + } + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryNotIdentical(n ast.Vertex) { + nn := n.(*ast.ExprBinaryNotIdentical) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "!==") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryPlus(n ast.Vertex) { + nn := n.(*ast.ExprBinaryPlus) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "+") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryPow(n ast.Vertex) { + nn := n.(*ast.ExprBinaryPow) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "**") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryShiftLeft(n ast.Vertex) { + nn := n.(*ast.ExprBinaryShiftLeft) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "<<") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinaryShiftRight(n ast.Vertex) { + nn := n.(*ast.ExprBinaryShiftRight) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ">>") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinarySmallerOrEqual(n ast.Vertex) { + nn := n.(*ast.ExprBinarySmallerOrEqual) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "<=") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinarySmaller(n ast.Vertex) { + nn := n.(*ast.ExprBinarySmaller) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "<") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBinarySpaceship(n ast.Vertex) { + nn := n.(*ast.ExprBinarySpaceship) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Left) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "<=>") + p.Print(nn.Right) + + p.printFreeFloating(nn, token.End) +} + +// cast + +func (p *Printer) printArray(n ast.Vertex) { + nn := n.(*ast.ExprCastArray) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Cast) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "(array)") + } + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printBool(n ast.Vertex) { + nn := n.(*ast.ExprCastBool) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Cast) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "(boolean)") + } + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printDouble(n ast.Vertex) { + nn := n.(*ast.ExprCastDouble) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Cast) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "(float)") + } + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printInt(n ast.Vertex) { + nn := n.(*ast.ExprCastInt) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Cast) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "(integer)") + } + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printObject(n ast.Vertex) { + nn := n.(*ast.ExprCastObject) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Cast) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "(object)") + } + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printString(n ast.Vertex) { + nn := n.(*ast.ExprCastString) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Cast) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "(string)") + } + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printUnset(n ast.Vertex) { + nn := n.(*ast.ExprCastUnset) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Cast) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "(unset)") + } + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +// expr + +func (p *Printer) printExprArrayDimFetch(n ast.Vertex) { + nn := n.(*ast.ExprArrayDimFetch) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "[") + } + p.Print(nn.Dim) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "]") + } + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprArrayDimFetchWithoutLeadingDollar(n ast.Vertex) { + nn := n.(*ast.ExprArrayDimFetch) + p.printFreeFloating(nn, token.Start) + p.printExprVariableWithoutLeadingDollar(nn.Var) + p.printFreeFloating(nn, token.Var) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "[") + } + p.Print(nn.Dim) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "]") + } + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprArrayItem(n ast.Vertex) { + nn := n.(*ast.ExprArrayItem) + p.printFreeFloating(nn, token.Start) + + if nn.Unpack { + io.WriteString(p.w, "...") + } + + if nn.Key != nil { + p.Print(nn.Key) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "=>") + } + + p.Print(nn.Val) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprArray(n ast.Vertex) { + nn := n.(*ast.ExprArray) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "array") + p.printFreeFloating(nn, token.Array) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Items) + p.printFreeFloating(nn, token.ArrayPairList) + io.WriteString(p.w, ")") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprArrowFunction(n ast.Vertex) { + nn := n.(*ast.ExprArrowFunction) + p.printFreeFloating(nn, token.Start) + + if nn.Static { + io.WriteString(p.w, "static") + } + p.printFreeFloating(nn, token.Static) + if nn.Static && n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + io.WriteString(p.w, "fn") + p.printFreeFloating(nn, token.Function) + + if nn.ReturnsRef { + io.WriteString(p.w, "&") + } + p.printFreeFloating(nn, token.Ampersand) + + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Params) + p.printFreeFloating(nn, token.ParameterList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Params) + + if nn.ReturnType != nil { + io.WriteString(p.w, ":") + p.Print(nn.ReturnType) + } + p.printFreeFloating(nn, token.ReturnType) + + io.WriteString(p.w, "=>") + + p.printNode(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprBitwiseNot(n ast.Vertex) { + nn := n.(*ast.ExprBitwiseNot) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "~") + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprBooleanNot(n ast.Vertex) { + nn := n.(*ast.ExprBooleanNot) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "!") + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprClassConstFetch(n ast.Vertex) { + nn := n.(*ast.ExprClassConstFetch) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Class) + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "::") + p.Print(nn.ConstantName) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprClone(n ast.Vertex) { + nn := n.(*ast.ExprClone) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "clone") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprClosureUse(n ast.Vertex) { + nn := n.(*ast.ExprClosureUse) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "use") + p.printFreeFloating(nn, token.Use) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Uses) + p.printFreeFloating(nn, token.LexicalVarList) + io.WriteString(p.w, ")") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprClosure(n ast.Vertex) { + nn := n.(*ast.ExprClosure) + p.printFreeFloating(nn, token.Start) + + if nn.Static { + io.WriteString(p.w, "static") + } + p.printFreeFloating(nn, token.Static) + if nn.Static && n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + io.WriteString(p.w, "function") + p.printFreeFloating(nn, token.Function) + + if nn.ReturnsRef { + io.WriteString(p.w, "&") + } + p.printFreeFloating(nn, token.Ampersand) + + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Params) + p.printFreeFloating(nn, token.ParameterList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Params) + + if nn.ClosureUse != nil { + p.Print(nn.ClosureUse) + } + p.printFreeFloating(nn, token.LexicalVars) + + if nn.ReturnType != nil { + io.WriteString(p.w, ":") + p.Print(nn.ReturnType) + } + p.printFreeFloating(nn, token.ReturnType) + + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprConstFetch(n ast.Vertex) { + nn := n.(*ast.ExprConstFetch) + p.printFreeFloating(nn, token.Start) + p.Print(nn.Const) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprEmpty(n ast.Vertex) { + nn := n.(*ast.ExprEmpty) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "empty") + p.printFreeFloating(nn, token.Empty) + io.WriteString(p.w, "(") + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprErrorSuppress(n ast.Vertex) { + nn := n.(*ast.ExprErrorSuppress) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "@") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprEval(n ast.Vertex) { + nn := n.(*ast.ExprEval) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "eval") + p.printFreeFloating(nn, token.Eval) + io.WriteString(p.w, "(") + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprExit(n ast.Vertex) { + nn := n.(*ast.ExprExit) + p.printFreeFloating(nn, token.Start) + + if nn.Die { + io.WriteString(p.w, "die") + } else { + io.WriteString(p.w, "exit") + } + p.printFreeFloating(nn, token.Exit) + + if nn.Expr != nil && nn.Expr.GetNode().Tokens.IsEmpty() && nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprFunctionCall(n ast.Vertex) { + nn := n.(*ast.ExprFunctionCall) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Function) + + p.printFreeFloating(nn.ArgumentList, token.Start) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.ArgumentList.Arguments) + p.printFreeFloating(nn.ArgumentList, token.ArgumentList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn.ArgumentList, token.End) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprInclude(n ast.Vertex) { + nn := n.(*ast.ExprInclude) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "include") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprIncludeOnce(n ast.Vertex) { + nn := n.(*ast.ExprIncludeOnce) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "include_once") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprInstanceOf(n ast.Vertex) { + nn := n.(*ast.ExprInstanceOf) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + io.WriteString(p.w, "instanceof") + + if nn.Class.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Class) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprIsset(n ast.Vertex) { + nn := n.(*ast.ExprIsset) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "isset") + p.printFreeFloating(nn, token.Isset) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Vars) + p.printFreeFloating(nn, token.VarList) + io.WriteString(p.w, ")") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprList(n ast.Vertex) { + nn := n.(*ast.ExprList) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "list") + p.printFreeFloating(nn, token.List) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Items) + p.printFreeFloating(nn, token.ArrayPairList) + io.WriteString(p.w, ")") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprMethodCall(n ast.Vertex) { + nn := n.(*ast.ExprMethodCall) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "->") + p.Print(nn.Method) + + p.printFreeFloating(nn.ArgumentList, token.Start) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.ArgumentList.Arguments) + p.printFreeFloating(nn.ArgumentList, token.ArgumentList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn.ArgumentList, token.End) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprNew(n ast.Vertex) { + nn := n.(*ast.ExprNew) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "new") + if nn.Class.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Class) + + if nn.ArgumentList != nil { + p.printFreeFloating(nn.ArgumentList, token.Start) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.ArgumentList.Arguments) + p.printFreeFloating(nn.ArgumentList, token.ArgumentList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn.ArgumentList, token.End) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprPostDec(n ast.Vertex) { + nn := n.(*ast.ExprPostDec) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "--") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprPostInc(n ast.Vertex) { + nn := n.(*ast.ExprPostInc) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "++") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprPreDec(n ast.Vertex) { + nn := n.(*ast.ExprPreDec) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "--") + p.Print(nn.Var) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprPreInc(n ast.Vertex) { + nn := n.(*ast.ExprPreInc) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "++") + p.Print(nn.Var) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprPrint(n ast.Vertex) { + nn := n.(*ast.ExprPrint) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "print") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprPropertyFetch(n ast.Vertex) { + nn := n.(*ast.ExprPropertyFetch) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "->") + p.Print(nn.Property) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprReference(n ast.Vertex) { + nn := n.(*ast.ExprReference) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "&") + p.Print(nn.Var) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprRequire(n ast.Vertex) { + nn := n.(*ast.ExprRequire) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "require") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprRequireOnce(n ast.Vertex) { + nn := n.(*ast.ExprRequireOnce) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "require_once") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprShellExec(n ast.Vertex) { + nn := n.(*ast.ExprShellExec) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "`") + p.joinPrint("", nn.Parts) + io.WriteString(p.w, "`") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprShortArray(n ast.Vertex) { + nn := n.(*ast.ExprShortArray) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "[") + p.joinPrint(",", nn.Items) + p.printFreeFloating(nn, token.ArrayPairList) + io.WriteString(p.w, "]") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprShortList(n ast.Vertex) { + nn := n.(*ast.ExprShortList) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "[") + p.joinPrint(",", nn.Items) + p.printFreeFloating(nn, token.ArrayPairList) + io.WriteString(p.w, "]") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprStaticCall(n ast.Vertex) { + nn := n.(*ast.ExprStaticCall) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Class) + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "::") + p.Print(nn.Call) + + p.printFreeFloating(nn.ArgumentList, token.Start) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.ArgumentList.Arguments) + p.printFreeFloating(nn.ArgumentList, token.ArgumentList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn.ArgumentList, token.End) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprStaticPropertyFetch(n ast.Vertex) { + nn := n.(*ast.ExprStaticPropertyFetch) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Class) + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "::") + p.Print(nn.Property) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprTernary(n ast.Vertex) { + nn := n.(*ast.ExprTernary) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Condition) + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, "?") + + if nn.IfTrue != nil { + p.Print(nn.IfTrue) + } + p.printFreeFloating(nn, token.True) + + io.WriteString(p.w, ":") + p.Print(nn.IfFalse) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprUnaryMinus(n ast.Vertex) { + nn := n.(*ast.ExprUnaryMinus) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "-") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprUnaryPlus(n ast.Vertex) { + nn := n.(*ast.ExprUnaryPlus) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "+") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprVariable(n ast.Vertex) { + nn := n.(*ast.ExprVariable) + p.printFreeFloating(nn, token.Start) + + p.printFreeFloating(nn, token.Dollar) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "$") + } + + p.Print(nn.VarName) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprVariableWithoutLeadingDollar(n ast.Vertex) { + nn := n.(*ast.ExprVariable) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.VarName) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprYieldFrom(n ast.Vertex) { + nn := n.(*ast.ExprYieldFrom) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "yield from") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printExprYield(n ast.Vertex) { + nn := n.(*ast.ExprYield) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "yield") + + if nn.Key != nil { + if nn.Key.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Key) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, "=>") + } else { + if nn.Value.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + + p.Print(nn.Value) + + p.printFreeFloating(nn, token.End) +} + +// smtm + +func (p *Printer) printStmtAltElseIf(n ast.Vertex) { + nn := n.(*ast.StmtAltElseIf) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "elseif") + p.printFreeFloating(nn, token.ElseIf) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, ":") + + if s := nn.Stmt.(*ast.StmtStmtList).Stmts; len(s) > 0 { + p.printNodes(s) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtAltElse(n ast.Vertex) { + nn := n.(*ast.StmtAltElse) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "else") + p.printFreeFloating(nn, token.Else) + io.WriteString(p.w, ":") + + if s := nn.Stmt.(*ast.StmtStmtList).Stmts; len(s) > 0 { + p.printNodes(s) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtAltFor(n ast.Vertex) { + nn := n.(*ast.StmtAltFor) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "for") + p.printFreeFloating(nn, token.For) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Init) + p.printFreeFloating(nn, token.InitExpr) + io.WriteString(p.w, ";") + p.joinPrint(",", nn.Cond) + p.printFreeFloating(nn, token.CondExpr) + io.WriteString(p.w, ";") + p.joinPrint(",", nn.Loop) + p.printFreeFloating(nn, token.IncExpr) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, ":") + + s := nn.Stmt.(*ast.StmtStmtList) + p.printNodes(s.Stmts) + p.printFreeFloating(nn, token.Stmts) + + io.WriteString(p.w, "endfor") + p.printFreeFloating(nn, token.AltEnd) + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtAltForeach(n ast.Vertex) { + nn := n.(*ast.StmtAltForeach) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "foreach") + p.printFreeFloating(nn, token.Foreach) + io.WriteString(p.w, "(") + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "as") + + if nn.Key != nil { + if nn.Key.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Key) + p.printFreeFloating(nn, token.Key) + io.WriteString(p.w, "=>") + } else { + if nn.Var.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + + io.WriteString(p.w, ":") + s := nn.Stmt.(*ast.StmtStmtList) + p.printNodes(s.Stmts) + p.printFreeFloating(nn, token.Stmts) + + io.WriteString(p.w, "endforeach") + p.printFreeFloating(nn, token.AltEnd) + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtAltIf(n ast.Vertex) { + nn := n.(*ast.StmtAltIf) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "if") + p.printFreeFloating(nn, token.If) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, ":") + + s := nn.Stmt.(*ast.StmtStmtList) + p.printNodes(s.Stmts) + + for _, elseif := range nn.ElseIf { + p.Print(elseif) + } + + if nn.Else != nil { + p.Print(nn.Else) + } + + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "endif") + p.printFreeFloating(nn, token.AltEnd) + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtAltSwitch(n ast.Vertex) { + nn := n.(*ast.StmtAltSwitch) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "switch") + p.printFreeFloating(nn, token.Switch) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, ":") + + p.printFreeFloating(nn.CaseList, token.Start) + p.printFreeFloating(nn.CaseList, token.CaseListStart) + p.printNodes(nn.CaseList.Cases) + p.printFreeFloating(nn.CaseList, token.CaseListEnd) + p.printFreeFloating(nn.CaseList, token.End) + + io.WriteString(p.w, "endswitch") + p.printFreeFloating(nn, token.AltEnd) + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtAltWhile(n ast.Vertex) { + nn := n.(*ast.StmtAltWhile) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "while") + p.printFreeFloating(nn, token.While) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, ":") + + s := nn.Stmt.(*ast.StmtStmtList) + p.printNodes(s.Stmts) + p.printFreeFloating(nn, token.Stmts) + + io.WriteString(p.w, "endwhile") + p.printFreeFloating(nn, token.AltEnd) + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtBreak(n ast.Vertex) { + nn := n.(*ast.StmtBreak) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "break") + if nn.Expr != nil { + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + } + p.printFreeFloating(nn, token.Expr) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtCase(n ast.Vertex) { + nn := n.(*ast.StmtCase) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "case") + if nn.Cond.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + p.printFreeFloating(nn, token.CaseSeparator) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ":") + } + + if len(nn.Stmts) > 0 { + p.printNodes(nn.Stmts) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtCatch(n ast.Vertex) { + nn := n.(*ast.StmtCatch) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "catch") + p.printFreeFloating(nn, token.Catch) + io.WriteString(p.w, "(") + p.joinPrint("|", nn.Types) + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtClassMethod(n ast.Vertex) { + nn := n.(*ast.StmtClassMethod) + p.printFreeFloating(nn, token.Start) + + if nn.Modifiers != nil { + for k, m := range nn.Modifiers { + if k > 0 && m.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(m) + } + + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + p.printFreeFloating(nn, token.ModifierList) + io.WriteString(p.w, "function") + p.printFreeFloating(nn, token.Function) + + if nn.ReturnsRef { + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "&") + p.printFreeFloating(nn, token.Ampersand) + } else { + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + + p.Print(nn.MethodName) + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Params) + p.printFreeFloating(nn, token.ParameterList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Params) + + if nn.ReturnType != nil { + io.WriteString(p.w, ":") + p.Print(nn.ReturnType) + } + + p.Print(nn.Stmt) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtClass(n ast.Vertex) { + nn := n.(*ast.StmtClass) + p.printFreeFloating(nn, token.Start) + + if nn.Modifiers != nil { + for k, m := range nn.Modifiers { + if k > 0 && m.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(m) + } + + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + p.printFreeFloating(nn, token.ModifierList) + io.WriteString(p.w, "class") + p.printFreeFloating(nn, token.Class) + + if nn.ClassName != nil { + if nn.ClassName.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.ClassName) + } + + if nn.ArgumentList != nil { + p.printFreeFloating(nn.ArgumentList, token.Start) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.ArgumentList.Arguments) + p.printFreeFloating(nn.ArgumentList, token.ArgumentList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn.ArgumentList, token.End) + } + + if nn.Extends != nil { + p.printFreeFloating(nn.Extends, token.Start) + if nn.Extends.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "extends") + if nn.Extends.ClassName.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Extends.ClassName) + } + + if nn.Implements != nil { + p.printFreeFloating(nn.Implements, token.Start) + if nn.Implements.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "implements") + if nn.Implements.InterfaceNames[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.joinPrint(",", nn.Implements.InterfaceNames) + } + + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtClassConstList(n ast.Vertex) { + nn := n.(*ast.StmtClassConstList) + p.printFreeFloating(nn, token.Start) + + if nn.Modifiers != nil { + for k, m := range nn.Modifiers { + if k > 0 && m.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(m) + } + + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + p.printFreeFloating(nn, token.ModifierList) + io.WriteString(p.w, "const") + + if nn.Consts[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.joinPrint(",", nn.Consts) + p.printFreeFloating(nn, token.ConstList) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtConstList(n ast.Vertex) { + nn := n.(*ast.StmtConstList) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "const") + + if nn.Consts[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.joinPrint(",", nn.Consts) + p.printFreeFloating(nn, token.Stmts) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtConstant(n ast.Vertex) { + nn := n.(*ast.StmtConstant) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.ConstantName) + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "=") + p.Print(nn.Expr) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtContinue(n ast.Vertex) { + nn := n.(*ast.StmtContinue) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "continue") + + if nn.Expr != nil { + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + } + p.printFreeFloating(nn, token.Expr) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtDeclare(n ast.Vertex) { + nn := n.(*ast.StmtDeclare) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "declare") + p.printFreeFloating(nn, token.Declare) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Consts) + p.printFreeFloating(nn, token.ConstList) + io.WriteString(p.w, ")") + + if nn.Alt { + p.printFreeFloating(nn, token.Cond) + io.WriteString(p.w, ":") + + s := nn.Stmt.(*ast.StmtStmtList) + p.printNodes(s.Stmts) + p.printFreeFloating(nn, token.Stmts) + + io.WriteString(p.w, "enddeclare") + p.printFreeFloating(nn, token.AltEnd) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + } else { + p.Print(nn.Stmt) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtDefault(n ast.Vertex) { + nn := n.(*ast.StmtDefault) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "default") + p.printFreeFloating(nn, token.Default) + p.printFreeFloating(nn, token.CaseSeparator) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ":") + } + + if len(nn.Stmts) > 0 { + p.printNodes(nn.Stmts) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtDo(n ast.Vertex) { + nn := n.(*ast.StmtDo) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "do") + + if _, ok := nn.Stmt.(*ast.StmtStmtList); !ok { + if nn.Stmt.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + + p.Print(nn.Stmt) + p.printFreeFloating(nn, token.Stmts) + + io.WriteString(p.w, "while") + p.printFreeFloating(nn, token.While) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Cond) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtEcho(n ast.Vertex) { + nn := n.(*ast.StmtEcho) + + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "echo") + } + if nn.Exprs[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + p.printFreeFloating(nn, token.Start) + p.printFreeFloating(nn, token.Echo) + + p.joinPrint(",", nn.Exprs) + p.printFreeFloating(nn, token.Expr) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtElseif(n ast.Vertex) { + nn := n.(*ast.StmtElseIf) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "elseif") + p.printFreeFloating(nn, token.ElseIf) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + + p.Print(nn.Stmt) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtElse(n ast.Vertex) { + nn := n.(*ast.StmtElse) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "else") + + if _, ok := nn.Stmt.(*ast.StmtStmtList); !ok { + if nn.Stmt.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + + p.Print(nn.Stmt) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtExpression(n ast.Vertex) { + nn := n.(*ast.StmtExpression) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtFinally(n ast.Vertex) { + nn := n.(*ast.StmtFinally) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "finally") + p.printFreeFloating(nn, token.Finally) + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtFor(n ast.Vertex) { + nn := n.(*ast.StmtFor) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "for") + p.printFreeFloating(nn, token.For) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Init) + p.printFreeFloating(nn, token.InitExpr) + io.WriteString(p.w, ";") + p.joinPrint(",", nn.Cond) + p.printFreeFloating(nn, token.CondExpr) + io.WriteString(p.w, ";") + p.joinPrint(",", nn.Loop) + p.printFreeFloating(nn, token.IncExpr) + io.WriteString(p.w, ")") + + p.Print(nn.Stmt) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtForeach(n ast.Vertex) { + nn := n.(*ast.StmtForeach) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "foreach") + p.printFreeFloating(nn, token.Foreach) + io.WriteString(p.w, "(") + + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + io.WriteString(p.w, "as") + + if nn.Key != nil { + if nn.Key.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Key) + p.printFreeFloating(nn, token.Key) + io.WriteString(p.w, "=>") + } else { + if nn.Var.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + p.Print(nn.Var) + p.printFreeFloating(nn, token.Var) + + io.WriteString(p.w, ")") + + p.Print(nn.Stmt) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtFunction(n ast.Vertex) { + nn := n.(*ast.StmtFunction) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "function") + p.printFreeFloating(nn, token.Function) + + if nn.ReturnsRef { + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "&") + } else { + if nn.FunctionName.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + + p.Print(nn.FunctionName) + p.printFreeFloating(nn, token.Name) + + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Params) + p.printFreeFloating(nn, token.ParamList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.Params) + + if nn.ReturnType != nil { + io.WriteString(p.w, ":") + p.Print(nn.ReturnType) + } + p.printFreeFloating(nn, token.ReturnType) + + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtGlobal(n ast.Vertex) { + nn := n.(*ast.StmtGlobal) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "global") + p.joinPrint(",", nn.Vars) + p.printFreeFloating(nn, token.VarList) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtGoto(n ast.Vertex) { + nn := n.(*ast.StmtGoto) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "goto") + if nn.Label.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Label) + p.printFreeFloating(nn, token.Label) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtGroupUse(n ast.Vertex) { + nn := n.(*ast.StmtGroupUse) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "use") + p.printFreeFloating(nn, token.Use) + + if nn.UseType != nil { + if nn.UseType.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.UseType) + } + + if nn.Prefix.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Prefix) + io.WriteString(p.w, "\\") + p.printFreeFloating(nn, token.Slash) + + io.WriteString(p.w, "{") + p.joinPrint(",", nn.UseList) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + p.printFreeFloating(nn, token.UseDeclarationList) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtHaltCompiler(n ast.Vertex) { + nn := n.(*ast.StmtHaltCompiler) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "__halt_compiler") + p.printFreeFloating(nn, token.HaltCompiller) + io.WriteString(p.w, "(") + p.printFreeFloating(nn, token.OpenParenthesisToken) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.CloseParenthesisToken) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtIf(n ast.Vertex) { + nn := n.(*ast.StmtIf) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "if") + p.printFreeFloating(n, token.If) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(n, token.Expr) + io.WriteString(p.w, ")") + + p.Print(nn.Stmt) + + if nn.ElseIf != nil { + p.printNodes(nn.ElseIf) + } + + if nn.Else != nil { + p.Print(nn.Else) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtInlineHTML(n ast.Vertex) { + nn := n.(*ast.StmtInlineHtml) + p.printFreeFloating(nn, token.Start) + + if p.s == PhpState && nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, "?>") + } + p.SetState(HtmlState) + + io.WriteString(p.w, string(nn.Value)) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtInterface(n ast.Vertex) { + nn := n.(*ast.StmtInterface) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "interface") + + if nn.InterfaceName.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + p.Print(nn.InterfaceName) + + if nn.Extends != nil { + p.printFreeFloating(nn.Extends, token.Start) + if nn.Extends.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "extends") + if nn.Extends.InterfaceNames[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.joinPrint(",", nn.Extends.InterfaceNames) + } + + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtLabel(n ast.Vertex) { + nn := n.(*ast.StmtLabel) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.LabelName) + p.printFreeFloating(nn, token.Label) + + io.WriteString(p.w, ":") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtNamespace(n ast.Vertex) { + nn := n.(*ast.StmtNamespace) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "namespace") + + if nn.NamespaceName != nil { + if nn.NamespaceName.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.NamespaceName) + } + + if nn.Stmts != nil { + p.printFreeFloating(nn, token.Namespace) + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + } else { + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtNop(n ast.Vertex) { + p.printFreeFloating(n, token.Start) + p.printFreeFloating(n, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + p.printFreeFloating(n, token.End) +} + +func (p *Printer) printStmtPropertyList(n ast.Vertex) { + nn := n.(*ast.StmtPropertyList) + p.printFreeFloating(nn, token.Start) + + for k, m := range nn.Modifiers { + if k > 0 && m.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(m) + } + + if nn.Type != nil && nn.Type.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + p.Print(nn.Type) + + if nn.Properties[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + p.joinPrint(",", nn.Properties) + p.printFreeFloating(n, token.PropertyList) + + p.printFreeFloating(n, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtProperty(n ast.Vertex) { + nn := n.(*ast.StmtProperty) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Var) + + if nn.Expr != nil { + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "=") + p.Print(nn.Expr) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtReturn(n ast.Vertex) { + nn := n.(*ast.StmtReturn) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "return") + if nn.Expr != nil && nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + + p.printFreeFloating(nn, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtStaticVar(n ast.Vertex) { + nn := n.(*ast.StmtStaticVar) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Var) + + if nn.Expr != nil { + p.printFreeFloating(nn, token.Var) + io.WriteString(p.w, "=") + p.Print(nn.Expr) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtStatic(n ast.Vertex) { + nn := n.(*ast.StmtStatic) + p.printFreeFloating(nn, token.Start) + io.WriteString(p.w, "static") + + p.joinPrint(",", nn.Vars) + p.printFreeFloating(nn, token.VarList) + + p.printFreeFloating(nn, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtStmtList(n ast.Vertex) { + nn := n.(*ast.StmtStmtList) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtSwitch(n ast.Vertex) { + nn := n.(*ast.StmtSwitch) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "switch") + p.printFreeFloating(nn, token.Switch) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + + p.printFreeFloating(nn.CaseList, token.Start) + io.WriteString(p.w, "{") + p.printFreeFloating(nn.CaseList, token.CaseListStart) + p.printNodes(nn.CaseList.Cases) + p.printFreeFloating(nn.CaseList, token.CaseListEnd) + io.WriteString(p.w, "}") + p.printFreeFloating(nn.CaseList, token.End) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtThrow(n ast.Vertex) { + nn := n.(*ast.StmtThrow) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "throw") + if nn.Expr.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Expr) + p.printFreeFloating(nn, token.Expr) + + p.printFreeFloating(nn, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtTraitAdaptationList(n ast.Vertex) { + nn := n.(*ast.StmtTraitAdaptationList) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "{") + p.printNodes(nn.Adaptations) + p.printFreeFloating(nn, token.AdaptationList) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtTraitMethodRef(n ast.Vertex) { + nn := n.(*ast.StmtTraitMethodRef) + p.printFreeFloating(nn, token.Start) + + if nn.Trait != nil { + p.Print(nn.Trait) + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "::") + } + + p.Print(nn.Method) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtTraitUseAlias(n ast.Vertex) { + nn := n.(*ast.StmtTraitUseAlias) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Ref) + p.printFreeFloating(nn, token.Ref) + + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "as") + + if nn.Modifier != nil { + if nn.Modifier.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Modifier) + } + + if nn.Alias != nil { + if nn.Alias.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Alias) + } + p.printFreeFloating(nn, token.Alias) + + p.printFreeFloating(nn, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtTraitUsePrecedence(n ast.Vertex) { + nn := n.(*ast.StmtTraitUsePrecedence) + p.printFreeFloating(nn, token.Start) + + p.Print(nn.Ref) + p.printFreeFloating(nn, token.Ref) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + + io.WriteString(p.w, "insteadof") + if nn.Insteadof[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.joinPrint(",", nn.Insteadof) + p.printFreeFloating(nn, token.NameList) + + p.printFreeFloating(nn, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtTraitUse(n ast.Vertex) { + nn := n.(*ast.StmtTraitUse) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "use") + if nn.Traits[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.joinPrint(",", nn.Traits) + + p.Print(nn.TraitAdaptationList) + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtTrait(n ast.Vertex) { + nn := n.(*ast.StmtTrait) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "trait") + if nn.TraitName.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.TraitName) + + p.printFreeFloating(nn, token.Name) + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtTry(n ast.Vertex) { + nn := n.(*ast.StmtTry) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "try") + p.printFreeFloating(nn, token.Try) + io.WriteString(p.w, "{") + p.printNodes(nn.Stmts) + p.printFreeFloating(nn, token.Stmts) + io.WriteString(p.w, "}") + + if nn.Catches != nil { + p.printNodes(nn.Catches) + } + + if nn.Finally != nil { + p.Print(nn.Finally) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtUnset(n ast.Vertex) { + nn := n.(*ast.StmtUnset) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "unset") + p.printFreeFloating(nn, token.Unset) + io.WriteString(p.w, "(") + p.joinPrint(",", nn.Vars) + p.printFreeFloating(nn, token.VarList) + io.WriteString(p.w, ")") + p.printFreeFloating(nn, token.CloseParenthesisToken) + + p.printFreeFloating(nn, token.SemiColon) + if n.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtUseList(n ast.Vertex) { + nn := n.(*ast.StmtUseList) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "use") + + if nn.UseType != nil { + if nn.UseType.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.UseType) + } + + if nn.Uses[0].GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.joinPrint(",", nn.Uses) + p.printFreeFloating(nn, token.UseDeclarationList) + + p.printFreeFloating(nn, token.SemiColon) + if nn.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, ";") + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtUse(n ast.Vertex) { + nn := n.(*ast.StmtUse) + p.printFreeFloating(nn, token.Start) + + if nn.UseType != nil { + p.Print(nn.UseType) + if nn.UseType.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + } + + p.printFreeFloating(nn, token.Slash) + + p.Print(nn.Use) + + if nn.Alias != nil { + if nn.Alias.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + io.WriteString(p.w, "as") + if nn.Alias.GetNode().Tokens.IsEmpty() { + io.WriteString(p.w, " ") + } + p.Print(nn.Alias) + } + + p.printFreeFloating(nn, token.End) +} + +func (p *Printer) printStmtWhile(n ast.Vertex) { + nn := n.(*ast.StmtWhile) + p.printFreeFloating(nn, token.Start) + + io.WriteString(p.w, "while") + p.printFreeFloating(nn, token.While) + io.WriteString(p.w, "(") + p.Print(nn.Cond) + p.printFreeFloating(nn, token.Expr) + io.WriteString(p.w, ")") + + p.Print(nn.Stmt) + + p.printFreeFloating(nn, token.End) +} diff --git a/printer/printer_parsed_php5_test.go b/pkg/printer/printer_parsed_php5_test.go similarity index 99% rename from printer/printer_parsed_php5_test.go rename to pkg/printer/printer_parsed_php5_test.go index 660987a..14868ac 100644 --- a/printer/printer_parsed_php5_test.go +++ b/pkg/printer/printer_parsed_php5_test.go @@ -2,22 +2,22 @@ package printer_test import ( "bytes" + "github.com/z7zmey/php-parser/pkg/ast" "testing" - "github.com/z7zmey/php-parser/node" - "github.com/z7zmey/php-parser/php5" - "github.com/z7zmey/php-parser/printer" + "github.com/z7zmey/php-parser/internal/php5" + "github.com/z7zmey/php-parser/pkg/printer" ) -func parsePhp5(src string) node.Node { +func parsePhp5(src string) ast.Vertex { php5parser := php5.NewParser([]byte(src), "5.6") - php5parser.WithFreeFloating() + php5parser.WithTokens() php5parser.Parse() return php5parser.GetRootNode() } -func printPhp5(n node.Node) string { +func printPhp5(n ast.Vertex) string { o := bytes.NewBufferString("") p := printer.NewPrinter(o) diff --git a/printer/printer_parsed_php7_test.go b/pkg/printer/printer_parsed_php7_test.go similarity index 98% rename from printer/printer_parsed_php7_test.go rename to pkg/printer/printer_parsed_php7_test.go index d50dc59..971219f 100644 --- a/printer/printer_parsed_php7_test.go +++ b/pkg/printer/printer_parsed_php7_test.go @@ -2,14 +2,12 @@ package printer_test import ( "bytes" + "github.com/z7zmey/php-parser/pkg/ast" "os" "testing" - "github.com/z7zmey/php-parser/node" - "github.com/z7zmey/php-parser/node/name" - "github.com/z7zmey/php-parser/node/stmt" - "github.com/z7zmey/php-parser/php7" - "github.com/z7zmey/php-parser/printer" + "github.com/z7zmey/php-parser/internal/php7" + "github.com/z7zmey/php-parser/pkg/printer" ) func ExamplePrinter() { @@ -30,15 +28,15 @@ abstract class Bar extends Baz // parse php7parser := php7.NewParser([]byte(src), "7.4") - php7parser.WithFreeFloating() + php7parser.WithTokens() php7parser.Parse() rootNode := php7parser.GetRootNode() // change namespace - parts := &rootNode.(*node.Root).Stmts[0].(*stmt.Namespace).NamespaceName.(*name.Name).Parts - *parts = append(*parts, &name.NamePart{Value: "Quuz"}) + parts := &rootNode.(*ast.Root).Stmts[0].(*ast.StmtNamespace).NamespaceName.(*ast.NameName).Parts + *parts = append(*parts, &ast.NameNamePart{Value: []byte("Quuz")}) // print @@ -60,15 +58,15 @@ abstract class Bar extends Baz // } } -func parse(src string) node.Node { +func parse(src string) ast.Vertex { php7parser := php7.NewParser([]byte(src), "7.4") - php7parser.WithFreeFloating() + php7parser.WithTokens() php7parser.Parse() return php7parser.GetRootNode() } -func print(n node.Node) string { +func print(n ast.Vertex) string { o := bytes.NewBufferString("") p := printer.NewPrinter(o) diff --git a/printer/printer_test.go b/pkg/printer/printer_test.go similarity index 54% rename from printer/printer_test.go rename to pkg/printer/printer_test.go index 331de66..a2df1a1 100644 --- a/printer/printer_test.go +++ b/pkg/printer/printer_test.go @@ -2,56 +2,49 @@ package printer_test import ( "bytes" + "github.com/z7zmey/php-parser/pkg/ast" + "github.com/z7zmey/php-parser/pkg/token" "testing" - "github.com/z7zmey/php-parser/freefloating" - "github.com/z7zmey/php-parser/node" - "github.com/z7zmey/php-parser/node/expr" - "github.com/z7zmey/php-parser/node/expr/assign" - "github.com/z7zmey/php-parser/node/expr/binary" - "github.com/z7zmey/php-parser/node/expr/cast" - "github.com/z7zmey/php-parser/node/name" - "github.com/z7zmey/php-parser/node/scalar" - "github.com/z7zmey/php-parser/node/stmt" - "github.com/z7zmey/php-parser/printer" + "github.com/z7zmey/php-parser/pkg/printer" ) func TestPrinterPrintFile(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Root{ - Stmts: []node.Node{ - &stmt.Namespace{ - NamespaceName: &name.Name{ - Parts: []node.Node{ - &name.NamePart{Value: "Foo"}, + p.Print(&ast.Root{ + Stmts: []ast.Vertex{ + &ast.StmtNamespace{ + NamespaceName: &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{Value: []byte("Foo")}, }, }, }, - &stmt.Class{ - Modifiers: []node.Node{&node.Identifier{Value: "abstract"}}, - ClassName: &name.Name{ - Parts: []node.Node{ - &name.NamePart{Value: "Bar"}, + &ast.StmtClass{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("abstract")}}, + ClassName: &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{Value: []byte("Bar")}, }, }, - Extends: &stmt.ClassExtends{ - ClassName: &name.Name{ - Parts: []node.Node{ - &name.NamePart{Value: "Baz"}, + Extends: &ast.StmtClassExtends{ + ClassName: &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{Value: []byte("Baz")}, }, }, }, - Stmts: []node.Node{ - &stmt.ClassMethod{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - MethodName: &node.Identifier{Value: "greet"}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Echo{ - Exprs: []node.Node{ - &scalar.String{Value: "'Hello world'"}, + Stmts: []ast.Vertex{ + &ast.StmtClassMethod{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + MethodName: &ast.Identifier{Value: []byte("greet")}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtEcho{ + Exprs: []ast.Vertex{ + &ast.ScalarString{Value: []byte("'Hello world'")}, }, }, }, @@ -74,37 +67,41 @@ func TestPrinterPrintFileInlineHtml(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Root{ - Stmts: []node.Node{ - &stmt.InlineHtml{Value: "
HTML
"}, - &stmt.Expression{ - Expr: &expr.Variable{ - FreeFloating: freefloating.Collection{ - freefloating.Start: []freefloating.String{ - { - StringType: freefloating.TokenType, - Value: "$", + p.Print(&ast.Root{ + Stmts: []ast.Vertex{ + &ast.StmtInlineHtml{Value: []byte("
HTML
")}, + &ast.StmtExpression{ + Expr: &ast.ExprVariable{ + Node: ast.Node{ + Tokens: token.Collection{ + token.Start: []token.Token{ + { + ID: token.ID('$'), + Value: []byte("$"), + }, }, }, }, - VarName: &node.Identifier{ - Value: "a", + VarName: &ast.Identifier{ + Value: []byte("a"), }, }, }, - &stmt.InlineHtml{Value: "
HTML
"}, - &stmt.Expression{ - Expr: &expr.Variable{ - FreeFloating: freefloating.Collection{ - freefloating.Start: []freefloating.String{ - { - StringType: freefloating.TokenType, - Value: "$", + &ast.StmtInlineHtml{Value: []byte("
HTML
")}, + &ast.StmtExpression{ + Expr: &ast.ExprVariable{ + Node: ast.Node{ + Tokens: token.Collection{ + token.Start: []token.Token{ + { + ID: token.ID('$'), + Value: []byte("$"), + }, }, }, }, - VarName: &node.Identifier{ - Value: "a", + VarName: &ast.Identifier{ + Value: []byte("a"), }, }, }, @@ -125,8 +122,8 @@ func TestPrinterPrintIdentifier(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - n := &node.Identifier{ - Value: "test", + n := &ast.Identifier{ + Value: []byte("test"), } p.Print(n) @@ -142,21 +139,21 @@ func TestPrinterPrintParameter(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Parameter{ + p.Print(&ast.Parameter{ ByRef: false, Variadic: true, - VariableType: &name.FullyQualified{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + Type: &ast.NameFullyQualified{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, }, }, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, - DefaultValue: &scalar.String{ - Value: "'default'", + DefaultValue: &ast.ScalarString{ + Value: []byte("'default'"), }, }) @@ -172,24 +169,24 @@ func TestPrinterPrintNullable(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Nullable{ - Expr: &node.Parameter{ + p.Print(&ast.Nullable{ + Expr: &ast.Parameter{ ByRef: true, Variadic: false, - VariableType: &name.FullyQualified{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + Type: &ast.NameFullyQualified{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, }, }, - Variable: &expr.Variable{ - VarName: &node.Identifier{ - Value: "var", + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{ + Value: []byte("var"), }, }, - DefaultValue: &scalar.String{ - Value: "'default'", + DefaultValue: &ast.ScalarString{ + Value: []byte("'default'"), }, }, }) @@ -206,12 +203,12 @@ func TestPrinterPrintArgument(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Argument{ + p.Print(&ast.Argument{ IsReference: false, Variadic: true, - Expr: &expr.Variable{ - VarName: &node.Identifier{ - Value: "var", + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{ + Value: []byte("var"), }, }, }) @@ -227,12 +224,12 @@ func TestPrinterPrintArgumentByRef(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Argument{ + p.Print(&ast.Argument{ IsReference: true, Variadic: false, - Expr: &expr.Variable{ - VarName: &node.Identifier{ - Value: "var", + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{ + Value: []byte("var"), }, }, }) @@ -251,8 +248,8 @@ func TestPrinterPrintNameNamePart(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&name.NamePart{ - Value: "foo", + p.Print(&ast.NameNamePart{ + Value: []byte("foo"), }) expected := "foo" @@ -267,13 +264,13 @@ func TestPrinterPrintNameName(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&name.Name{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + p.Print(&ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, - &name.NamePart{ - Value: "Bar", + &ast.NameNamePart{ + Value: []byte("Bar"), }, }, }) @@ -290,13 +287,13 @@ func TestPrinterPrintNameFullyQualified(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&name.FullyQualified{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + p.Print(&ast.NameFullyQualified{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, - &name.NamePart{ - Value: "Bar", + &ast.NameNamePart{ + Value: []byte("Bar"), }, }, }) @@ -313,13 +310,13 @@ func TestPrinterPrintNameRelative(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&name.Relative{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + p.Print(&ast.NameRelative{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, - &name.NamePart{ - Value: "Bar", + &ast.NameNamePart{ + Value: []byte("Bar"), }, }, }) @@ -338,8 +335,8 @@ func TestPrinterPrintScalarLNumber(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&scalar.Lnumber{ - Value: "1", + p.Print(&ast.ScalarLnumber{ + Value: []byte("1"), }) expected := "1" @@ -354,8 +351,8 @@ func TestPrinterPrintScalarDNumber(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&scalar.Dnumber{ - Value: ".1", + p.Print(&ast.ScalarDnumber{ + Value: []byte(".1"), }) expected := ".1" @@ -370,8 +367,8 @@ func TestPrinterPrintScalarString(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&scalar.String{ - Value: "'hello world'", + p.Print(&ast.ScalarString{ + Value: []byte("'hello world'"), }) expected := `'hello world'` @@ -386,8 +383,8 @@ func TestPrinterPrintScalarEncapsedStringPart(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&scalar.EncapsedStringPart{ - Value: "hello world", + p.Print(&ast.ScalarEncapsedStringPart{ + Value: []byte("hello world"), }) expected := `hello world` @@ -402,13 +399,13 @@ func TestPrinterPrintScalarEncapsed(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&scalar.Encapsed{ - Parts: []node.Node{ - &scalar.EncapsedStringPart{Value: "hello "}, - &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.ScalarEncapsed{ + Parts: []ast.Vertex{ + &ast.ScalarEncapsedStringPart{Value: []byte("hello ")}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, - &scalar.EncapsedStringPart{Value: " world"}, + &ast.ScalarEncapsedStringPart{Value: []byte(" world")}, }, }) @@ -424,14 +421,14 @@ func TestPrinterPrintScalarHeredoc(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&scalar.Heredoc{ - Label: "<<bar` @@ -2221,9 +2218,9 @@ func TestPrinterPrintExprReference(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.Reference{ - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "foo"}, + p.Print(&ast.ExprReference{ + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("foo")}, }, }) @@ -2239,8 +2236,8 @@ func TestPrinterPrintRequire(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.Require{ - Expr: &scalar.String{Value: "'path'"}, + p.Print(&ast.ExprRequire{ + Expr: &ast.ScalarString{Value: []byte("'path'")}, }) expected := `require 'path'` @@ -2255,8 +2252,8 @@ func TestPrinterPrintRequireOnce(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.RequireOnce{ - Expr: &scalar.String{Value: "'path'"}, + p.Print(&ast.ExprRequireOnce{ + Expr: &ast.ScalarString{Value: []byte("'path'")}, }) expected := `require_once 'path'` @@ -2271,13 +2268,13 @@ func TestPrinterPrintShellExec(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.ShellExec{ - Parts: []node.Node{ - &scalar.EncapsedStringPart{Value: "hello "}, - &expr.Variable{ - VarName: &node.Identifier{Value: "world"}, + p.Print(&ast.ExprShellExec{ + Parts: []ast.Vertex{ + &ast.ScalarEncapsedStringPart{Value: []byte("hello ")}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("world")}, }, - &scalar.EncapsedStringPart{Value: "!"}, + &ast.ScalarEncapsedStringPart{Value: []byte("!")}, }, }) @@ -2293,23 +2290,23 @@ func TestPrinterPrintExprShortArray(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.ShortArray{ - Items: []node.Node{ - &expr.ArrayItem{ - Key: &scalar.String{Value: "'Hello'"}, - Val: &expr.Variable{ - VarName: &node.Identifier{Value: "world"}, + p.Print(&ast.ExprShortArray{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Key: &ast.ScalarString{Value: []byte("'Hello'")}, + Val: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("world")}, }, }, - &expr.ArrayItem{ - Key: &scalar.Lnumber{Value: "2"}, - Val: &expr.Reference{Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + &ast.ExprArrayItem{ + Key: &ast.ScalarLnumber{Value: []byte("2")}, + Val: &ast.ExprReference{Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }}, }, - &expr.ArrayItem{ - Val: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }, }, @@ -2327,24 +2324,24 @@ func TestPrinterPrintShortList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.ShortList{ - Items: []node.Node{ - &expr.ArrayItem{ - Val: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.ExprShortList{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, }, - &expr.ArrayItem{ - Val: &expr.List{ - Items: []node.Node{ - &expr.ArrayItem{ - Val: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.ExprArrayItem{ + Val: &ast.ExprList{ + Items: []ast.Vertex{ + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, - &expr.ArrayItem{ - Val: &expr.Variable{ - VarName: &node.Identifier{Value: "c"}, + &ast.ExprArrayItem{ + Val: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("c")}, }, }, }, @@ -2365,19 +2362,19 @@ func TestPrinterPrintStaticCall(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.StaticCall{ - Class: &node.Identifier{Value: "Foo"}, - Call: &node.Identifier{Value: "bar"}, - ArgumentList: &node.ArgumentList{ - Arguments: []node.Node{ - &node.Argument{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.ExprStaticCall{ + Class: &ast.Identifier{Value: []byte("Foo")}, + Call: &ast.Identifier{Value: []byte("bar")}, + ArgumentList: &ast.ArgumentList{ + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, }, - &node.Argument{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, @@ -2396,10 +2393,10 @@ func TestPrinterPrintStaticPropertyFetch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.StaticPropertyFetch{ - Class: &node.Identifier{Value: "Foo"}, - Property: &expr.Variable{ - VarName: &node.Identifier{Value: "bar"}, + p.Print(&ast.ExprStaticPropertyFetch{ + Class: &ast.Identifier{Value: []byte("Foo")}, + Property: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("bar")}, }, }) @@ -2415,12 +2412,12 @@ func TestPrinterPrintTernary(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.Ternary{ - Condition: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.ExprTernary{ + Condition: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - IfFalse: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + IfFalse: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }) @@ -2436,15 +2433,15 @@ func TestPrinterPrintTernaryFull(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.Ternary{ - Condition: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.ExprTernary{ + Condition: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - IfTrue: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + IfTrue: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, - IfFalse: &expr.Variable{ - VarName: &node.Identifier{Value: "c"}, + IfFalse: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("c")}, }, }) @@ -2460,9 +2457,9 @@ func TestPrinterPrintUnaryMinus(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.UnaryMinus{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.ExprUnaryMinus{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }) @@ -2478,9 +2475,9 @@ func TestPrinterPrintUnaryPlus(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.UnaryPlus{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.ExprUnaryPlus{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }) @@ -2496,9 +2493,9 @@ func TestPrinterPrintVariable(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.Variable{ - VarName: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.ExprVariable{ + VarName: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }) @@ -2514,9 +2511,9 @@ func TestPrinterPrintYieldFrom(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.YieldFrom{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.ExprYieldFrom{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }) @@ -2532,9 +2529,9 @@ func TestPrinterPrintYield(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.Yield{ - Value: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.ExprYield{ + Value: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }) @@ -2550,12 +2547,12 @@ func TestPrinterPrintYieldFull(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&expr.Yield{ - Key: &expr.Variable{ - VarName: &node.Identifier{Value: "k"}, + p.Print(&ast.ExprYield{ + Key: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("k")}, }, - Value: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + Value: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }) @@ -2573,14 +2570,14 @@ func TestPrinterPrintAltElseIf(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, @@ -2598,11 +2595,11 @@ func TestPrinterPrintAltElseIfEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.StmtList{}, + Stmt: &ast.StmtStmtList{}, }) expected := `elseif($a):` @@ -2617,11 +2614,11 @@ func TestPrinterPrintAltElse(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltElse{ - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + p.Print(&ast.StmtAltElse{ + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, @@ -2639,8 +2636,8 @@ func TestPrinterPrintAltElseEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltElse{ - Stmt: &stmt.StmtList{}, + p.Print(&ast.StmtAltElse{ + Stmt: &ast.StmtStmtList{}, }) expected := `else:` @@ -2655,26 +2652,26 @@ func TestPrinterPrintAltFor(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltFor{ - Init: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtAltFor{ + Init: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, }, - Cond: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Cond: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, - Loop: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "c"}, + Loop: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("c")}, }, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "d"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("d")}, }}, }, }, @@ -2692,20 +2689,20 @@ func TestPrinterPrintAltForeach(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltForeach{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.StmtAltForeach{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, - Key: &expr.Variable{ - VarName: &node.Identifier{Value: "key"}, + Key: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("key")}, }, - Variable: &expr.Reference{Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "val"}, + Var: &ast.ExprReference{Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("val")}, }}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "d"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("d")}, }}, }, }, @@ -2723,42 +2720,42 @@ func TestPrinterPrintAltIf(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtAltIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "d"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("d")}, }}, }, }, - ElseIf: []node.Node{ - &stmt.AltElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + ElseIf: []ast.Vertex{ + &ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, }, - &stmt.AltElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "c"}, + &ast.StmtAltElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("c")}, }, - Stmt: &stmt.StmtList{}, + Stmt: &ast.StmtStmtList{}, }, }, - Else: &stmt.AltElse{ - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Else: &ast.StmtAltElse{ + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, @@ -2777,25 +2774,25 @@ func TestPrinterPrintStmtAltSwitch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltSwitch{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.StmtAltSwitch{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, - CaseList: &stmt.CaseList{ - Cases: []node.Node{ - &stmt.Case{ - Cond: &scalar.String{Value: "'a'"}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + CaseList: &ast.StmtCaseList{ + Cases: []ast.Vertex{ + &ast.StmtCase{ + Cond: &ast.ScalarString{Value: []byte("'a'")}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }, - &stmt.Case{ - Cond: &scalar.String{Value: "'b'"}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.StmtCase{ + Cond: &ast.ScalarString{Value: []byte("'b'")}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, @@ -2815,14 +2812,14 @@ func TestPrinterPrintAltWhile(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.AltWhile{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtAltWhile{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, @@ -2840,9 +2837,9 @@ func TestPrinterPrintStmtBreak(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Break{ - Expr: &scalar.Lnumber{ - Value: "1", + p.Print(&ast.StmtBreak{ + Expr: &ast.ScalarLnumber{ + Value: []byte("1"), }, }) @@ -2858,13 +2855,13 @@ func TestPrinterPrintStmtCase(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Case{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtCase{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }) @@ -2881,11 +2878,11 @@ func TestPrinterPrintStmtCaseEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Case{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtCase{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmts: []node.Node{}, + Stmts: []ast.Vertex{}, }) expected := "case $a:" @@ -2900,17 +2897,17 @@ func TestPrinterPrintStmtCatch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Catch{ - Types: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Exception"}}}, - &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "RuntimeException"}}}, + p.Print(&ast.StmtCatch{ + Types: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Exception")}}}, + &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("RuntimeException")}}}, }, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "e"}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("e")}, }, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }) @@ -2927,33 +2924,33 @@ func TestPrinterPrintStmtClassMethod(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.ClassMethod{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, + p.Print(&ast.StmtClassMethod{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, ReturnsRef: true, - MethodName: &node.Identifier{Value: "foo"}, - Params: []node.Node{ - &node.Parameter{ - ByRef: true, - VariableType: &node.Nullable{Expr: &name.Name{Parts: []node.Node{&name.NamePart{Value: "int"}}}}, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + MethodName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{ + &ast.Parameter{ + ByRef: true, + Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - DefaultValue: &expr.ConstFetch{Constant: &name.Name{Parts: []node.Node{&name.NamePart{Value: "null"}}}}, + DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}}, }, - &node.Parameter{ + &ast.Parameter{ Variadic: true, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, - ReturnType: &name.Name{ - Parts: []node.Node{&name.NamePart{Value: "void"}}, + ReturnType: &ast.NameName{ + Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("void")}}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }, @@ -2971,33 +2968,33 @@ func TestPrinterPrintStmtAbstractClassMethod(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.ClassMethod{ - Modifiers: []node.Node{ - &node.Identifier{Value: "public"}, - &node.Identifier{Value: "static"}, + p.Print(&ast.StmtClassMethod{ + Modifiers: []ast.Vertex{ + &ast.Identifier{Value: []byte("public")}, + &ast.Identifier{Value: []byte("static")}, }, ReturnsRef: true, - MethodName: &node.Identifier{Value: "foo"}, - Params: []node.Node{ - &node.Parameter{ - ByRef: true, - VariableType: &node.Nullable{Expr: &name.Name{Parts: []node.Node{&name.NamePart{Value: "int"}}}}, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + MethodName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{ + &ast.Parameter{ + ByRef: true, + Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - DefaultValue: &expr.ConstFetch{Constant: &name.Name{Parts: []node.Node{&name.NamePart{Value: "null"}}}}, + DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}}, }, - &node.Parameter{ + &ast.Parameter{ Variadic: true, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, - ReturnType: &name.Name{ - Parts: []node.Node{&name.NamePart{Value: "void"}}, + ReturnType: &ast.NameName{ + Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("void")}}, }, - Stmt: &stmt.Nop{}, + Stmt: &ast.StmtNop{}, }) expected := `public static function &foo(?int&$a=null,...$b):void;` @@ -3012,28 +3009,28 @@ func TestPrinterPrintStmtClass(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Class{ - Modifiers: []node.Node{&node.Identifier{Value: "abstract"}}, - ClassName: &node.Identifier{Value: "Foo"}, - Extends: &stmt.ClassExtends{ - ClassName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, + p.Print(&ast.StmtClass{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("abstract")}}, + ClassName: &ast.Identifier{Value: []byte("Foo")}, + Extends: &ast.StmtClassExtends{ + ClassName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - Implements: &stmt.ClassImplements{ - InterfaceNames: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, + Implements: &ast.StmtClassImplements{ + InterfaceNames: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, }, - Stmts: []node.Node{ - &stmt.ClassConstList{ - Modifiers: []node.Node{ - &node.Identifier{Value: "public"}, - &node.Identifier{Value: "static"}, + Stmts: []ast.Vertex{ + &ast.StmtClassConstList{ + Modifiers: []ast.Vertex{ + &ast.Identifier{Value: []byte("public")}, + &ast.Identifier{Value: []byte("static")}, }, - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, }, @@ -3052,38 +3049,38 @@ func TestPrinterPrintStmtAnonymousClass(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Class{ - Modifiers: []node.Node{&node.Identifier{Value: "abstract"}}, - ArgumentList: &node.ArgumentList{ - Arguments: []node.Node{ - &node.Argument{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtClass{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("abstract")}}, + ArgumentList: &ast.ArgumentList{ + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, }, - &node.Argument{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, }, - Extends: &stmt.ClassExtends{ - ClassName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, + Extends: &ast.StmtClassExtends{ + ClassName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - Implements: &stmt.ClassImplements{ - InterfaceNames: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, + Implements: &ast.StmtClassImplements{ + InterfaceNames: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, }, - Stmts: []node.Node{ - &stmt.ClassConstList{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + Stmts: []ast.Vertex{ + &ast.StmtClassConstList{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, }, @@ -3102,16 +3099,16 @@ func TestPrinterPrintStmtClassConstList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.ClassConstList{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'a'"}, + p.Print(&ast.StmtClassConstList{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'a'")}, }, - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "BAR"}, - Expr: &scalar.String{Value: "'b'"}, + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("BAR")}, + Expr: &ast.ScalarString{Value: []byte("'b'")}, }, }, }) @@ -3128,15 +3125,15 @@ func TestPrinterPrintStmtConstList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.ConstList{ - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'a'"}, + p.Print(&ast.StmtConstList{ + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'a'")}, }, - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "BAR"}, - Expr: &scalar.String{Value: "'b'"}, + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("BAR")}, + Expr: &ast.ScalarString{Value: []byte("'b'")}, }, }, }) @@ -3153,9 +3150,9 @@ func TestPrinterPrintStmtConstant(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'BAR'"}, + p.Print(&ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'BAR'")}, }) expected := "FOO='BAR'" @@ -3170,9 +3167,9 @@ func TestPrinterPrintStmtContinue(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Continue{ - Expr: &scalar.Lnumber{ - Value: "1", + p.Print(&ast.StmtContinue{ + Expr: &ast.ScalarLnumber{ + Value: []byte("1"), }, }) @@ -3188,16 +3185,16 @@ func TestPrinterPrintStmtDeclareStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Declare{ - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + p.Print(&ast.StmtDeclare{ + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -3214,14 +3211,14 @@ func TestPrinterPrintStmtDeclareExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Declare{ - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + p.Print(&ast.StmtDeclare{ + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }) expected := `declare(FOO='bar')'bar';` @@ -3236,14 +3233,14 @@ func TestPrinterPrintStmtDeclareNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Declare{ - Consts: []node.Node{ - &stmt.Constant{ - ConstantName: &node.Identifier{Value: "FOO"}, - Expr: &scalar.String{Value: "'bar'"}, + p.Print(&ast.StmtDeclare{ + Consts: []ast.Vertex{ + &ast.StmtConstant{ + ConstantName: &ast.Identifier{Value: []byte("FOO")}, + Expr: &ast.ScalarString{Value: []byte("'bar'")}, }, }, - Stmt: &stmt.Nop{}, + Stmt: &ast.StmtNop{}, }) expected := `declare(FOO='bar');` @@ -3258,10 +3255,10 @@ func TestPrinterPrintStmtDefalut(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Default{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtDefault{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }) @@ -3278,8 +3275,8 @@ func TestPrinterPrintStmtDefalutEmpty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Default{ - Stmts: []node.Node{}, + p.Print(&ast.StmtDefault{ + Stmts: []ast.Vertex{}, }) expected := `default:` @@ -3294,11 +3291,11 @@ func TestPrinterPrintStmtDo_Expression(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Do{ - Cond: &scalar.Lnumber{Value: "1"}, - Stmt: &stmt.Expression{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtDo{ + Cond: &ast.ScalarLnumber{Value: []byte("1")}, + Stmt: &ast.StmtExpression{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, }, }) @@ -3315,12 +3312,12 @@ func TestPrinterPrintStmtDo_StmtList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Do{ - Cond: &scalar.Lnumber{Value: "1"}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtDo{ + Cond: &ast.ScalarLnumber{Value: []byte("1")}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }, @@ -3338,15 +3335,15 @@ func TestPrinterPrintStmtEchoHtmlState(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Root{ - Stmts: []node.Node{ - &stmt.Echo{ - Exprs: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.Root{ + Stmts: []ast.Vertex{ + &ast.StmtEcho{ + Exprs: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, @@ -3365,13 +3362,13 @@ func TestPrinterPrintStmtEchoPhpState(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Echo{ - Exprs: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtEcho{ + Exprs: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }) @@ -3388,13 +3385,13 @@ func TestPrinterPrintStmtElseIfStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.ElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -3411,11 +3408,11 @@ func TestPrinterPrintStmtElseIfExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.ElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }) expected := `elseif($a)'bar';` @@ -3430,11 +3427,11 @@ func TestPrinterPrintStmtElseIfNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.ElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.Nop{}, + Stmt: &ast.StmtNop{}, }) expected := `elseif($a);` @@ -3449,10 +3446,10 @@ func TestPrinterPrintStmtElseStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Else{ - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + p.Print(&ast.StmtElse{ + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -3469,8 +3466,8 @@ func TestPrinterPrintStmtElseExpr(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Else{ - Stmt: &stmt.Expression{Expr: &scalar.String{Value: "'bar'"}}, + p.Print(&ast.StmtElse{ + Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, }) expected := `else 'bar';` @@ -3485,8 +3482,8 @@ func TestPrinterPrintStmtElseNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Else{ - Stmt: &stmt.Nop{}, + p.Print(&ast.StmtElse{ + Stmt: &ast.StmtNop{}, }) expected := `else ;` @@ -3501,9 +3498,9 @@ func TestPrinterPrintExpression(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Expression{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtExpression{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, }) @@ -3519,9 +3516,9 @@ func TestPrinterPrintStmtFinally(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Finally{ - Stmts: []node.Node{ - &stmt.Nop{}, + p.Print(&ast.StmtFinally{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }) @@ -3537,34 +3534,34 @@ func TestPrinterPrintStmtFor(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.For{ - Init: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtFor{ + Init: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, - Cond: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "c"}, + Cond: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("c")}, }, - &expr.Variable{ - VarName: &node.Identifier{Value: "d"}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("d")}, }, }, - Loop: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "e"}, + Loop: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("e")}, }, - &expr.Variable{ - VarName: &node.Identifier{Value: "f"}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("f")}, }, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -3581,19 +3578,19 @@ func TestPrinterPrintStmtForeach(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Foreach{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtForeach{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Key: &expr.Variable{ - VarName: &node.Identifier{Value: "k"}, + Key: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("k")}, }, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "v"}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("v")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Nop{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -3610,23 +3607,23 @@ func TestPrinterPrintStmtFunction(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Function{ + p.Print(&ast.StmtFunction{ ReturnsRef: true, - FunctionName: &node.Identifier{Value: "foo"}, - Params: []node.Node{ - &node.Parameter{ + FunctionName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{ + &ast.Parameter{ ByRef: true, Variadic: false, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }, }, - ReturnType: &name.FullyQualified{ - Parts: []node.Node{&name.NamePart{Value: "Foo"}}, + ReturnType: &ast.NameFullyQualified{ + Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}, }, - Stmts: []node.Node{ - &stmt.Nop{}, + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }) @@ -3642,13 +3639,13 @@ func TestPrinterPrintStmtGlobal(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Global{ - Vars: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtGlobal{ + Vars: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }) @@ -3665,8 +3662,8 @@ func TestPrinterPrintStmtGoto(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Goto{ - Label: &node.Identifier{Value: "FOO"}, + p.Print(&ast.StmtGoto{ + Label: &ast.Identifier{Value: []byte("FOO")}, }) expected := `goto FOO;` @@ -3681,16 +3678,16 @@ func TestPrinterPrintStmtGroupUse(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.GroupUse{ - UseType: &node.Identifier{Value: "function"}, - Prefix: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - UseList: []node.Node{ - &stmt.Use{ - Use: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, - Alias: &node.Identifier{Value: "Baz"}, + p.Print(&ast.StmtGroupUse{ + UseType: &ast.Identifier{Value: []byte("function")}, + Prefix: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + UseList: []ast.Vertex{ + &ast.StmtUse{ + Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, + Alias: &ast.Identifier{Value: []byte("Baz")}, }, - &stmt.Use{ - Use: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Quuz"}}}, + &ast.StmtUse{ + Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Quuz")}}}, }, }, }) @@ -3707,7 +3704,7 @@ func TestPrinterPrintHaltCompiler(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.HaltCompiler{}) + p.Print(&ast.StmtHaltCompiler{}) expected := `__halt_compiler();` actual := o.String() @@ -3721,41 +3718,41 @@ func TestPrinterPrintIfExpression(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.If{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.Expression{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Stmt: &ast.StmtExpression{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, - ElseIf: []node.Node{ - &stmt.ElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "c"}, + ElseIf: []ast.Vertex{ + &ast.StmtElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("c")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "d"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("d")}, }, }, }, }, }, - &stmt.ElseIf{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "e"}, + &ast.StmtElseIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("e")}, }, - Stmt: &stmt.Nop{}, + Stmt: &ast.StmtNop{}, }, }, - Else: &stmt.Else{ - Stmt: &stmt.Expression{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "f"}, + Else: &ast.StmtElse{ + Stmt: &ast.StmtExpression{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("f")}, }, }, }, @@ -3773,15 +3770,15 @@ func TestPrinterPrintIfStmtList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.If{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, @@ -3800,11 +3797,11 @@ func TestPrinterPrintIfNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.If{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtIf{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.Nop{}, + Stmt: &ast.StmtNop{}, }) expected := `if($a);` @@ -3819,10 +3816,10 @@ func TestPrinterPrintInlineHtml(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&node.Root{ - Stmts: []node.Node{ - &stmt.InlineHtml{ - Value: "test", + p.Print(&ast.Root{ + Stmts: []ast.Vertex{ + &ast.StmtInlineHtml{ + Value: []byte("test"), }, }, }) @@ -3839,23 +3836,23 @@ func TestPrinterPrintInterface(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Interface{ - InterfaceName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Extends: &stmt.InterfaceExtends{ - InterfaceNames: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, + p.Print(&ast.StmtInterface{ + InterfaceName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Extends: &ast.StmtInterfaceExtends{ + InterfaceNames: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, }, }, - Stmts: []node.Node{ - &stmt.ClassMethod{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - MethodName: &node.Identifier{Value: "foo"}, - Params: []node.Node{}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + Stmts: []ast.Vertex{ + &ast.StmtClassMethod{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + MethodName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }, @@ -3875,8 +3872,8 @@ func TestPrinterPrintLabel(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Label{ - LabelName: &node.Identifier{Value: "FOO"}, + p.Print(&ast.StmtLabel{ + LabelName: &ast.Identifier{Value: []byte("FOO")}, }) expected := `FOO:` @@ -3891,8 +3888,8 @@ func TestPrinterPrintNamespace(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Namespace{ - NamespaceName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, + p.Print(&ast.StmtNamespace{ + NamespaceName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, }) expected := `namespace Foo;` @@ -3907,11 +3904,11 @@ func TestPrinterPrintNamespaceWithStmts(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Namespace{ - NamespaceName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtNamespace{ + NamespaceName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }) @@ -3928,7 +3925,7 @@ func TestPrinterPrintNop(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Nop{}) + p.Print(&ast.StmtNop{}) expected := `;` actual := o.String() @@ -3942,28 +3939,28 @@ func TestPrinterPrintPropertyList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.PropertyList{ - Modifiers: []node.Node{ - &node.Identifier{Value: "public"}, - &node.Identifier{Value: "static"}, + p.Print(&ast.StmtPropertyList{ + Modifiers: []ast.Vertex{ + &ast.Identifier{Value: []byte("public")}, + &ast.Identifier{Value: []byte("static")}, }, - Type: &name.Name{ - Parts: []node.Node{ - &name.NamePart{ - Value: "Foo", + Type: &ast.NameName{ + Parts: []ast.Vertex{ + &ast.NameNamePart{ + Value: []byte("Foo"), }, }, }, - Properties: []node.Node{ - &stmt.Property{ - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + Properties: []ast.Vertex{ + &ast.StmtProperty{ + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Expr: &scalar.String{Value: "'a'"}, + Expr: &ast.ScalarString{Value: []byte("'a'")}, }, - &stmt.Property{ - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.StmtProperty{ + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, @@ -3981,19 +3978,21 @@ func TestPrinterPrintProperty(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Property{ - Variable: &expr.Variable{ - FreeFloating: freefloating.Collection{ - freefloating.Start: []freefloating.String{ - { - StringType: freefloating.TokenType, - Value: "$", + p.Print(&ast.StmtProperty{ + Var: &ast.ExprVariable{ + Node: ast.Node{ + Tokens: token.Collection{ + token.Start: []token.Token{ + { + ID: token.ID('$'), + Value: []byte("$"), + }, }, }, }, - VarName: &node.Identifier{Value: "a"}, + VarName: &ast.Identifier{Value: []byte("a")}, }, - Expr: &scalar.Lnumber{Value: "1"}, + Expr: &ast.ScalarLnumber{Value: []byte("1")}, }) expected := `$a=1` @@ -4008,8 +4007,8 @@ func TestPrinterPrintReturn(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Return{ - Expr: &scalar.Lnumber{Value: "1"}, + p.Print(&ast.StmtReturn{ + Expr: &ast.ScalarLnumber{Value: []byte("1")}, }) expected := `return 1;` @@ -4024,11 +4023,11 @@ func TestPrinterPrintStaticVar(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.StaticVar{ - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtStaticVar{ + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Expr: &scalar.Lnumber{Value: "1"}, + Expr: &ast.ScalarLnumber{Value: []byte("1")}, }) expected := `$a=1` @@ -4043,16 +4042,16 @@ func TestPrinterPrintStatic(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Static{ - Vars: []node.Node{ - &stmt.StaticVar{ - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtStatic{ + Vars: []ast.Vertex{ + &ast.StmtStaticVar{ + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, }, - &stmt.StaticVar{ - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.StmtStaticVar{ + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }, @@ -4070,13 +4069,13 @@ func TestPrinterPrintStmtList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }) @@ -4093,20 +4092,20 @@ func TestPrinterPrintStmtListNested(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, - &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, - &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "c"}, + &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("c")}, }}, }, }, @@ -4127,25 +4126,25 @@ func TestPrinterPrintStmtSwitch(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Switch{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.StmtSwitch{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, - CaseList: &stmt.CaseList{ - Cases: []node.Node{ - &stmt.Case{ - Cond: &scalar.String{Value: "'a'"}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + CaseList: &ast.StmtCaseList{ + Cases: []ast.Vertex{ + &ast.StmtCase{ + Cond: &ast.ScalarString{Value: []byte("'a'")}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }, - &stmt.Case{ - Cond: &scalar.String{Value: "'b'"}, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.StmtCase{ + Cond: &ast.ScalarString{Value: []byte("'b'")}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, @@ -4165,9 +4164,9 @@ func TestPrinterPrintStmtThrow(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Throw{ - Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "var"}, + p.Print(&ast.StmtThrow{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("var")}, }, }) @@ -4183,14 +4182,14 @@ func TestPrinterPrintStmtTraitAdaptationList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.TraitAdaptationList{ - Adaptations: []node.Node{ - &stmt.TraitUseAlias{ - Ref: &stmt.TraitMethodRef{ - Trait: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Method: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtTraitAdaptationList{ + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Method: &ast.Identifier{Value: []byte("a")}, }, - Alias: &node.Identifier{Value: "b"}, + Alias: &ast.Identifier{Value: []byte("b")}, }, }, }) @@ -4207,8 +4206,8 @@ func TestPrinterPrintStmtTraitMethodRef(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.TraitMethodRef{ - Method: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtTraitMethodRef{ + Method: &ast.Identifier{Value: []byte("a")}, }) expected := `a` @@ -4223,9 +4222,9 @@ func TestPrinterPrintStmtTraitMethodRefFull(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.TraitMethodRef{ - Trait: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Method: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtTraitMethodRef{ + Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Method: &ast.Identifier{Value: []byte("a")}, }) expected := `Foo::a` @@ -4240,13 +4239,13 @@ func TestPrinterPrintStmtTraitUseAlias(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.TraitUseAlias{ - Ref: &stmt.TraitMethodRef{ - Trait: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Method: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtTraitUseAlias{ + Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Method: &ast.Identifier{Value: []byte("a")}, }, - Modifier: &node.Identifier{Value: "public"}, - Alias: &node.Identifier{Value: "b"}, + Modifier: &ast.Identifier{Value: []byte("public")}, + Alias: &ast.Identifier{Value: []byte("b")}, }) expected := `Foo::a as public b;` @@ -4261,14 +4260,14 @@ func TestPrinterPrintStmtTraitUsePrecedence(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.TraitUsePrecedence{ - Ref: &stmt.TraitMethodRef{ - Trait: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Method: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtTraitUsePrecedence{ + Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Method: &ast.Identifier{Value: []byte("a")}, }, - Insteadof: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, + Insteadof: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, }, }) @@ -4284,12 +4283,12 @@ func TestPrinterPrintStmtTraitUse(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.TraitUse{ - Traits: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, + p.Print(&ast.StmtTraitUse{ + Traits: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - TraitAdaptationList: &stmt.Nop{}, + TraitAdaptationList: &ast.StmtNop{}, }) expected := `use Foo,Bar;` @@ -4304,19 +4303,19 @@ func TestPrinterPrintStmtTraitAdaptations(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.TraitUse{ - Traits: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Bar"}}}, + p.Print(&ast.StmtTraitUse{ + Traits: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, }, - TraitAdaptationList: &stmt.TraitAdaptationList{ - Adaptations: []node.Node{ - &stmt.TraitUseAlias{ - Ref: &stmt.TraitMethodRef{ - Trait: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Method: &node.Identifier{Value: "a"}, + TraitAdaptationList: &ast.StmtTraitAdaptationList{ + Adaptations: []ast.Vertex{ + &ast.StmtTraitUseAlias{ + Ref: &ast.StmtTraitMethodRef{ + Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Method: &ast.Identifier{Value: []byte("a")}, }, - Alias: &node.Identifier{Value: "b"}, + Alias: &ast.Identifier{Value: []byte("b")}, }, }, }, @@ -4334,17 +4333,17 @@ func TestPrinterPrintTrait(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Trait{ - TraitName: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Stmts: []node.Node{ - &stmt.ClassMethod{ - Modifiers: []node.Node{&node.Identifier{Value: "public"}}, - MethodName: &node.Identifier{Value: "foo"}, - Params: []node.Node{}, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtTrait{ + TraitName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Stmts: []ast.Vertex{ + &ast.StmtClassMethod{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + MethodName: &ast.Identifier{Value: []byte("foo")}, + Params: []ast.Vertex{}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }, @@ -4364,31 +4363,31 @@ func TestPrinterPrintStmtTry(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Try{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtTry{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, - Catches: []node.Node{ - &stmt.Catch{ - Types: []node.Node{ - &name.Name{Parts: []node.Node{&name.NamePart{Value: "Exception"}}}, - &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "RuntimeException"}}}, + Catches: []ast.Vertex{ + &ast.StmtCatch{ + Types: []ast.Vertex{ + &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Exception")}}}, + &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("RuntimeException")}}}, }, - Variable: &expr.Variable{ - VarName: &node.Identifier{Value: "e"}, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("e")}, }, - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }}, }, }, }, - Finally: &stmt.Finally{ - Stmts: []node.Node{ - &stmt.Nop{}, + Finally: &ast.StmtFinally{ + Stmts: []ast.Vertex{ + &ast.StmtNop{}, }, }, }) @@ -4405,13 +4404,13 @@ func TestPrinterPrintStmtUnset(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Unset{ - Vars: []node.Node{ - &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtUnset{ + Vars: []ast.Vertex{ + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - &expr.Variable{ - VarName: &node.Identifier{Value: "b"}, + &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("b")}, }, }, }) @@ -4428,15 +4427,15 @@ func TestPrinterPrintStmtUseList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.UseList{ - UseType: &node.Identifier{Value: "function"}, - Uses: []node.Node{ - &stmt.Use{ - Use: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Alias: &node.Identifier{Value: "Bar"}, + p.Print(&ast.StmtUseList{ + UseType: &ast.Identifier{Value: []byte("function")}, + Uses: []ast.Vertex{ + &ast.StmtUse{ + Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Alias: &ast.Identifier{Value: []byte("Bar")}, }, - &stmt.Use{ - Use: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Baz"}}}, + &ast.StmtUse{ + Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, }, }, }) @@ -4453,10 +4452,10 @@ func TestPrinterPrintUse(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.Use{ - UseType: &node.Identifier{Value: "function"}, - Use: &name.Name{Parts: []node.Node{&name.NamePart{Value: "Foo"}}}, - Alias: &node.Identifier{Value: "Bar"}, + p.Print(&ast.StmtUse{ + UseType: &ast.Identifier{Value: []byte("function")}, + Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, + Alias: &ast.Identifier{Value: []byte("Bar")}, }) expected := `function Foo as Bar` @@ -4471,14 +4470,14 @@ func TestPrinterPrintWhileStmtList(t *testing.T) { o := bytes.NewBufferString("") p := printer.NewPrinter(o) - p.Print(&stmt.While{ - Cond: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + p.Print(&ast.StmtWhile{ + Cond: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }, - Stmt: &stmt.StmtList{ - Stmts: []node.Node{ - &stmt.Expression{Expr: &expr.Variable{ - VarName: &node.Identifier{Value: "a"}, + Stmt: &ast.StmtStmtList{ + Stmts: []ast.Vertex{ + &ast.StmtExpression{Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("a")}, }}, }, }, diff --git a/pkg/token/position.go b/pkg/token/position.go index 209ed9d..7032e5a 100644 --- a/pkg/token/position.go +++ b/pkg/token/position.go @@ -2,8 +2,6 @@ package token type Position int -type Collection map[Position][]Token - //go:generate stringer -type=Position -output ./position_string.go const ( Start Position = iota @@ -86,3 +84,14 @@ const ( OpenParenthesisToken CloseParenthesisToken ) + +type Collection map[Position][]Token + +func (c Collection) IsEmpty() bool { + for _, v := range c { + if len(v) > 0 { + return false + } + } + return true +} diff --git a/printer/printer.go b/printer/printer.go deleted file mode 100644 index 06ad2ae..0000000 --- a/printer/printer.go +++ /dev/null @@ -1,3267 +0,0 @@ -package printer - -import ( - "io" - "strings" - - "github.com/z7zmey/php-parser/freefloating" - - "github.com/z7zmey/php-parser/node/stmt" - - "github.com/z7zmey/php-parser/node" - "github.com/z7zmey/php-parser/node/expr" - "github.com/z7zmey/php-parser/node/expr/assign" - "github.com/z7zmey/php-parser/node/expr/binary" - "github.com/z7zmey/php-parser/node/expr/cast" - "github.com/z7zmey/php-parser/node/name" - "github.com/z7zmey/php-parser/node/scalar" -) - -type printerState int - -const ( - PhpState printerState = iota - HtmlState -) - -type Printer struct { - w io.Writer - s printerState -} - -// NewPrinter - Constructor for Printer -func NewPrinter(w io.Writer) *Printer { - return &Printer{ - w: w, - } -} - -func (p *Printer) SetState(s printerState) { - p.s = s -} - -func (p *Printer) Print(n node.Node) { - _, isRoot := n.(*node.Root) - _, isInlineHtml := n.(*stmt.InlineHtml) - if p.s == HtmlState && !isInlineHtml && !isRoot { - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " 0 { - io.WriteString(p.w, glue) - } - - p.Print(n) - } -} - -func (p *Printer) printNodes(nn []node.Node) { - for _, n := range nn { - p.Print(n) - } -} - -func (p *Printer) printFreeFloating(n node.Node, pos freefloating.Position) { - if n == nil { - return - } - - for _, m := range (*n.GetFreeFloating())[pos] { - io.WriteString(p.w, m.Value) - } -} - -func (p *Printer) printNode(n node.Node) { - switch n.(type) { - - // node - - case *node.Root: - p.printNodeRoot(n) - case *node.Identifier: - p.printNodeIdentifier(n) - case *node.Parameter: - p.printNodeParameter(n) - case *node.Nullable: - p.printNodeNullable(n) - case *node.Argument: - p.printNodeArgument(n) - - // name - - case *name.NamePart: - p.printNameNamePart(n) - case *name.Name: - p.printNameName(n) - case *name.FullyQualified: - p.printNameFullyQualified(n) - case *name.Relative: - p.printNameRelative(n) - - // scalar - - case *scalar.Lnumber: - p.printScalarLNumber(n) - case *scalar.Dnumber: - p.printScalarDNumber(n) - case *scalar.String: - p.printScalarString(n) - case *scalar.EncapsedStringPart: - p.printScalarEncapsedStringPart(n) - case *scalar.Encapsed: - p.printScalarEncapsed(n) - case *scalar.Heredoc: - p.printScalarHeredoc(n) - case *scalar.MagicConstant: - p.printScalarMagicConstant(n) - - // assign - - case *assign.Assign: - p.printAssign(n) - case *assign.Reference: - p.printAssignReference(n) - case *assign.BitwiseAnd: - p.printAssignBitwiseAnd(n) - case *assign.BitwiseOr: - p.printAssignBitwiseOr(n) - case *assign.BitwiseXor: - p.printAssignBitwiseXor(n) - case *assign.Coalesce: - p.printAssignCoalesce(n) - case *assign.Concat: - p.printAssignConcat(n) - case *assign.Div: - p.printAssignDiv(n) - case *assign.Minus: - p.printAssignMinus(n) - case *assign.Mod: - p.printAssignMod(n) - case *assign.Mul: - p.printAssignMul(n) - case *assign.Plus: - p.printAssignPlus(n) - case *assign.Pow: - p.printAssignPow(n) - case *assign.ShiftLeft: - p.printAssignShiftLeft(n) - case *assign.ShiftRight: - p.printAssignShiftRight(n) - - // binary - - case *binary.BitwiseAnd: - p.printBinaryBitwiseAnd(n) - case *binary.BitwiseOr: - p.printBinaryBitwiseOr(n) - case *binary.BitwiseXor: - p.printBinaryBitwiseXor(n) - case *binary.BooleanAnd: - p.printBinaryBooleanAnd(n) - case *binary.BooleanOr: - p.printBinaryBooleanOr(n) - case *binary.Coalesce: - p.printBinaryCoalesce(n) - case *binary.Concat: - p.printBinaryConcat(n) - case *binary.Div: - p.printBinaryDiv(n) - case *binary.Equal: - p.printBinaryEqual(n) - case *binary.GreaterOrEqual: - p.printBinaryGreaterOrEqual(n) - case *binary.Greater: - p.printBinaryGreater(n) - case *binary.Identical: - p.printBinaryIdentical(n) - case *binary.LogicalAnd: - p.printBinaryLogicalAnd(n) - case *binary.LogicalOr: - p.printBinaryLogicalOr(n) - case *binary.LogicalXor: - p.printBinaryLogicalXor(n) - case *binary.Minus: - p.printBinaryMinus(n) - case *binary.Mod: - p.printBinaryMod(n) - case *binary.Mul: - p.printBinaryMul(n) - case *binary.NotEqual: - p.printBinaryNotEqual(n) - case *binary.NotIdentical: - p.printBinaryNotIdentical(n) - case *binary.Plus: - p.printBinaryPlus(n) - case *binary.Pow: - p.printBinaryPow(n) - case *binary.ShiftLeft: - p.printBinaryShiftLeft(n) - case *binary.ShiftRight: - p.printBinaryShiftRight(n) - case *binary.SmallerOrEqual: - p.printBinarySmallerOrEqual(n) - case *binary.Smaller: - p.printBinarySmaller(n) - case *binary.Spaceship: - p.printBinarySpaceship(n) - - // cast - - case *cast.Array: - p.printArray(n) - case *cast.Bool: - p.printBool(n) - case *cast.Double: - p.printDouble(n) - case *cast.Int: - p.printInt(n) - case *cast.Object: - p.printObject(n) - case *cast.String: - p.printString(n) - case *cast.Unset: - p.printUnset(n) - - // expr - - case *expr.ArrayDimFetch: - p.printExprArrayDimFetch(n) - case *expr.ArrayItem: - p.printExprArrayItem(n) - case *expr.Array: - p.printExprArray(n) - case *expr.ArrowFunction: - p.printExprArrowFunction(n) - case *expr.BitwiseNot: - p.printExprBitwiseNot(n) - case *expr.BooleanNot: - p.printExprBooleanNot(n) - case *expr.ClassConstFetch: - p.printExprClassConstFetch(n) - case *expr.Clone: - p.printExprClone(n) - case *expr.ClosureUse: - p.printExprClosureUse(n) - case *expr.Closure: - p.printExprClosure(n) - case *expr.ConstFetch: - p.printExprConstFetch(n) - case *expr.Empty: - p.printExprEmpty(n) - case *expr.ErrorSuppress: - p.printExprErrorSuppress(n) - case *expr.Eval: - p.printExprEval(n) - case *expr.Exit: - p.printExprExit(n) - case *expr.FunctionCall: - p.printExprFunctionCall(n) - case *expr.Include: - p.printExprInclude(n) - case *expr.IncludeOnce: - p.printExprIncludeOnce(n) - case *expr.InstanceOf: - p.printExprInstanceOf(n) - case *expr.Isset: - p.printExprIsset(n) - case *expr.List: - p.printExprList(n) - case *expr.MethodCall: - p.printExprMethodCall(n) - case *expr.New: - p.printExprNew(n) - case *expr.PostDec: - p.printExprPostDec(n) - case *expr.PostInc: - p.printExprPostInc(n) - case *expr.PreDec: - p.printExprPreDec(n) - case *expr.PreInc: - p.printExprPreInc(n) - case *expr.Print: - p.printExprPrint(n) - case *expr.PropertyFetch: - p.printExprPropertyFetch(n) - case *expr.Reference: - p.printExprReference(n) - case *expr.Require: - p.printExprRequire(n) - case *expr.RequireOnce: - p.printExprRequireOnce(n) - case *expr.ShellExec: - p.printExprShellExec(n) - case *expr.ShortArray: - p.printExprShortArray(n) - case *expr.ShortList: - p.printExprShortList(n) - case *expr.StaticCall: - p.printExprStaticCall(n) - case *expr.StaticPropertyFetch: - p.printExprStaticPropertyFetch(n) - case *expr.Ternary: - p.printExprTernary(n) - case *expr.UnaryMinus: - p.printExprUnaryMinus(n) - case *expr.UnaryPlus: - p.printExprUnaryPlus(n) - case *expr.Variable: - p.printExprVariable(n) - case *expr.YieldFrom: - p.printExprYieldFrom(n) - case *expr.Yield: - p.printExprYield(n) - - // stmt - - case *stmt.AltElseIf: - p.printStmtAltElseIf(n) - case *stmt.AltElse: - p.printStmtAltElse(n) - case *stmt.AltFor: - p.printStmtAltFor(n) - case *stmt.AltForeach: - p.printStmtAltForeach(n) - case *stmt.AltIf: - p.printStmtAltIf(n) - case *stmt.AltSwitch: - p.printStmtAltSwitch(n) - case *stmt.AltWhile: - p.printStmtAltWhile(n) - case *stmt.Break: - p.printStmtBreak(n) - case *stmt.Case: - p.printStmtCase(n) - case *stmt.Catch: - p.printStmtCatch(n) - case *stmt.ClassMethod: - p.printStmtClassMethod(n) - case *stmt.Class: - p.printStmtClass(n) - case *stmt.ClassConstList: - p.printStmtClassConstList(n) - case *stmt.ConstList: - p.printStmtConstList(n) - case *stmt.Constant: - p.printStmtConstant(n) - case *stmt.Continue: - p.printStmtContinue(n) - case *stmt.Declare: - p.printStmtDeclare(n) - case *stmt.Default: - p.printStmtDefault(n) - case *stmt.Do: - p.printStmtDo(n) - case *stmt.Echo: - p.printStmtEcho(n) - case *stmt.ElseIf: - p.printStmtElseif(n) - case *stmt.Else: - p.printStmtElse(n) - case *stmt.Expression: - p.printStmtExpression(n) - case *stmt.Finally: - p.printStmtFinally(n) - case *stmt.For: - p.printStmtFor(n) - case *stmt.Foreach: - p.printStmtForeach(n) - case *stmt.Function: - p.printStmtFunction(n) - case *stmt.Global: - p.printStmtGlobal(n) - case *stmt.Goto: - p.printStmtGoto(n) - case *stmt.GroupUse: - p.printStmtGroupUse(n) - case *stmt.HaltCompiler: - p.printStmtHaltCompiler(n) - case *stmt.If: - p.printStmtIf(n) - case *stmt.InlineHtml: - p.printStmtInlineHTML(n) - case *stmt.Interface: - p.printStmtInterface(n) - case *stmt.Label: - p.printStmtLabel(n) - case *stmt.Namespace: - p.printStmtNamespace(n) - case *stmt.Nop: - p.printStmtNop(n) - case *stmt.PropertyList: - p.printStmtPropertyList(n) - case *stmt.Property: - p.printStmtProperty(n) - case *stmt.Return: - p.printStmtReturn(n) - case *stmt.StaticVar: - p.printStmtStaticVar(n) - case *stmt.Static: - p.printStmtStatic(n) - case *stmt.StmtList: - p.printStmtStmtList(n) - case *stmt.Switch: - p.printStmtSwitch(n) - case *stmt.Throw: - p.printStmtThrow(n) - case *stmt.TraitAdaptationList: - p.printStmtTraitAdaptationList(n) - case *stmt.TraitMethodRef: - p.printStmtTraitMethodRef(n) - case *stmt.TraitUseAlias: - p.printStmtTraitUseAlias(n) - case *stmt.TraitUsePrecedence: - p.printStmtTraitUsePrecedence(n) - case *stmt.TraitUse: - p.printStmtTraitUse(n) - case *stmt.Trait: - p.printStmtTrait(n) - case *stmt.Try: - p.printStmtTry(n) - case *stmt.Unset: - p.printStmtUnset(n) - case *stmt.UseList: - p.printStmtUseList(n) - case *stmt.Use: - p.printStmtUse(n) - case *stmt.While: - p.printStmtWhile(n) - } -} - -// node - -func (p *Printer) printNodeRoot(n node.Node) { - nn := n.(*node.Root) - p.SetState(HtmlState) - p.printFreeFloating(nn, freefloating.Start) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printNodeIdentifier(n node.Node) { - nn := n.(*node.Identifier) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, nn.Value) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printNodeParameter(n node.Node) { - nn := n.(*node.Parameter) - p.printFreeFloating(nn, freefloating.Start) - - if nn.VariableType != nil { - p.Print(nn.VariableType) - } - p.printFreeFloating(nn, freefloating.OptionalType) - - if nn.ByRef { - io.WriteString(p.w, "&") - } - p.printFreeFloating(nn, freefloating.Ampersand) - - if nn.Variadic { - io.WriteString(p.w, "...") - } - p.printFreeFloating(nn, freefloating.Variadic) - - p.Print(nn.Variable) - - if nn.DefaultValue != nil { - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "=") - p.Print(nn.DefaultValue) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printNodeNullable(n node.Node) { - nn := n.(*node.Nullable) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "?") - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printNodeArgument(n node.Node) { - nn := n.(*node.Argument) - p.printFreeFloating(nn, freefloating.Start) - - if nn.IsReference { - io.WriteString(p.w, "&") - } - p.printFreeFloating(nn, freefloating.Ampersand) - - if nn.Variadic { - io.WriteString(p.w, "...") - } - p.printFreeFloating(nn, freefloating.Variadic) - - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -// name - -func (p *Printer) printNameNamePart(n node.Node) { - nn := n.(*name.NamePart) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, nn.Value) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printNameName(n node.Node) { - nn := n.(*name.Name) - p.printFreeFloating(nn, freefloating.Start) - - p.joinPrint("\\", nn.Parts) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printNameFullyQualified(n node.Node) { - nn := n.(*name.FullyQualified) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "\\") - p.joinPrint("\\", nn.Parts) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printNameRelative(n node.Node) { - nn := n.(*name.Relative) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "namespace") - p.printFreeFloating(nn, freefloating.Namespace) - - for _, part := range nn.Parts { - io.WriteString(p.w, "\\") - p.Print(part) - } - - p.printFreeFloating(nn, freefloating.End) -} - -// scalar - -func (p *Printer) printScalarLNumber(n node.Node) { - nn := n.(*scalar.Lnumber) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, nn.Value) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printScalarDNumber(n node.Node) { - nn := n.(*scalar.Dnumber) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, nn.Value) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printScalarString(n node.Node) { - nn := n.(*scalar.String) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, nn.Value) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printScalarEncapsedStringPart(n node.Node) { - nn := n.(*scalar.EncapsedStringPart) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, nn.Value) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printScalarEncapsed(n node.Node) { - nn := n.(*scalar.Encapsed) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "\"") - for _, part := range nn.Parts { - switch part.(type) { - case *expr.ArrayDimFetch: - s := (*part.GetFreeFloating())[freefloating.Start] - if len(s) > 0 && s[0].Value == "${" { - p.printExprArrayDimFetchWithoutLeadingDollar(part) - } else { - p.Print(part) - } - case *expr.Variable: - s := (*part.GetFreeFloating())[freefloating.Start] - if len(s) > 0 && s[0].Value == "${" { - p.printExprVariableWithoutLeadingDollar(part) - } else { - p.Print(part) - } - default: - p.Print(part) - } - } - io.WriteString(p.w, "\"") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printScalarHeredoc(n node.Node) { - nn := n.(*scalar.Heredoc) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, nn.Label) - - for _, part := range nn.Parts { - switch part.(type) { - case *expr.ArrayDimFetch: - s := (*part.GetFreeFloating())[freefloating.Start] - if len(s) > 0 && s[0].Value == "${" { - p.printExprArrayDimFetchWithoutLeadingDollar(part) - } else { - p.Print(part) - } - case *expr.Variable: - s := (*part.GetFreeFloating())[freefloating.Start] - if len(s) > 0 && s[0].Value == "${" { - p.printExprVariableWithoutLeadingDollar(part) - } else { - p.Print(part) - } - default: - p.Print(part) - } - } - - io.WriteString(p.w, strings.Trim(nn.Label, "<\"'\n")) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printScalarMagicConstant(n node.Node) { - nn := n.(*scalar.MagicConstant) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, nn.Value) - p.printFreeFloating(nn, freefloating.End) -} - -// Assign - -func (p *Printer) printAssign(n node.Node) { - nn := n.(*assign.Assign) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignReference(n node.Node) { - nn := n.(*assign.Reference) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "=") - p.printFreeFloating(nn, freefloating.Equal) - io.WriteString(p.w, "&") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignBitwiseAnd(n node.Node) { - nn := n.(*assign.BitwiseAnd) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "&") - io.WriteString(p.w, "=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignBitwiseOr(n node.Node) { - nn := n.(*assign.BitwiseOr) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "|=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignBitwiseXor(n node.Node) { - nn := n.(*assign.BitwiseXor) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "^=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignCoalesce(n node.Node) { - nn := n.(*assign.Coalesce) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "??=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignConcat(n node.Node) { - nn := n.(*assign.Concat) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, ".=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignDiv(n node.Node) { - nn := n.(*assign.Div) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "/=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignMinus(n node.Node) { - nn := n.(*assign.Minus) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "-=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignMod(n node.Node) { - nn := n.(*assign.Mod) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "%=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignMul(n node.Node) { - nn := n.(*assign.Mul) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "*=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignPlus(n node.Node) { - nn := n.(*assign.Plus) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "+=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignPow(n node.Node) { - nn := n.(*assign.Pow) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "**=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignShiftLeft(n node.Node) { - nn := n.(*assign.ShiftLeft) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "<<=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printAssignShiftRight(n node.Node) { - nn := n.(*assign.ShiftRight) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, ">>=") - p.Print(nn.Expression) - - p.printFreeFloating(nn, freefloating.End) -} - -// binary - -func (p *Printer) printBinaryBitwiseAnd(n node.Node) { - nn := n.(*binary.BitwiseAnd) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "&") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryBitwiseOr(n node.Node) { - nn := n.(*binary.BitwiseOr) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "|") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryBitwiseXor(n node.Node) { - nn := n.(*binary.BitwiseXor) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "^") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryBooleanAnd(n node.Node) { - nn := n.(*binary.BooleanAnd) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "&&") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryBooleanOr(n node.Node) { - nn := n.(*binary.BooleanOr) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "||") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryCoalesce(n node.Node) { - nn := n.(*binary.Coalesce) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "??") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryConcat(n node.Node) { - nn := n.(*binary.Concat) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ".") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryDiv(n node.Node) { - nn := n.(*binary.Div) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "/") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryEqual(n node.Node) { - nn := n.(*binary.Equal) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "==") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryGreaterOrEqual(n node.Node) { - nn := n.(*binary.GreaterOrEqual) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ">=") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryGreater(n node.Node) { - nn := n.(*binary.Greater) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ">") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryIdentical(n node.Node) { - nn := n.(*binary.Identical) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "===") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryLogicalAnd(n node.Node) { - nn := n.(*binary.LogicalAnd) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "and") - if nn.Right.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryLogicalOr(n node.Node) { - nn := n.(*binary.LogicalOr) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "or") - if nn.Right.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryLogicalXor(n node.Node) { - nn := n.(*binary.LogicalXor) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "xor") - if nn.Right.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryMinus(n node.Node) { - nn := n.(*binary.Minus) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "-") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryMod(n node.Node) { - nn := n.(*binary.Mod) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "%") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryMul(n node.Node) { - nn := n.(*binary.Mul) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "*") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryNotEqual(n node.Node) { - nn := n.(*binary.NotEqual) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - p.printFreeFloating(nn, freefloating.Equal) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "!=") - } - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryNotIdentical(n node.Node) { - nn := n.(*binary.NotIdentical) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "!==") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryPlus(n node.Node) { - nn := n.(*binary.Plus) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "+") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryPow(n node.Node) { - nn := n.(*binary.Pow) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "**") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryShiftLeft(n node.Node) { - nn := n.(*binary.ShiftLeft) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "<<") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinaryShiftRight(n node.Node) { - nn := n.(*binary.ShiftRight) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ">>") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinarySmallerOrEqual(n node.Node) { - nn := n.(*binary.SmallerOrEqual) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "<=") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinarySmaller(n node.Node) { - nn := n.(*binary.Smaller) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "<") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBinarySpaceship(n node.Node) { - nn := n.(*binary.Spaceship) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Left) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "<=>") - p.Print(nn.Right) - - p.printFreeFloating(nn, freefloating.End) -} - -// cast - -func (p *Printer) printArray(n node.Node) { - nn := n.(*cast.Array) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Cast) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "(array)") - } - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printBool(n node.Node) { - nn := n.(*cast.Bool) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Cast) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "(boolean)") - } - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printDouble(n node.Node) { - nn := n.(*cast.Double) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Cast) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "(float)") - } - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printInt(n node.Node) { - nn := n.(*cast.Int) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Cast) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "(integer)") - } - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printObject(n node.Node) { - nn := n.(*cast.Object) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Cast) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "(object)") - } - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printString(n node.Node) { - nn := n.(*cast.String) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Cast) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "(string)") - } - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printUnset(n node.Node) { - nn := n.(*cast.Unset) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Cast) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "(unset)") - } - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -// expr - -func (p *Printer) printExprArrayDimFetch(n node.Node) { - nn := n.(*expr.ArrayDimFetch) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "[") - } - p.Print(nn.Dim) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "]") - } - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprArrayDimFetchWithoutLeadingDollar(n node.Node) { - nn := n.(*expr.ArrayDimFetch) - p.printFreeFloating(nn, freefloating.Start) - p.printExprVariableWithoutLeadingDollar(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "[") - } - p.Print(nn.Dim) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "]") - } - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprArrayItem(n node.Node) { - nn := n.(*expr.ArrayItem) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Unpack { - io.WriteString(p.w, "...") - } - - if nn.Key != nil { - p.Print(nn.Key) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "=>") - } - - p.Print(nn.Val) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprArray(n node.Node) { - nn := n.(*expr.Array) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "array") - p.printFreeFloating(nn, freefloating.Array) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, freefloating.ArrayPairList) - io.WriteString(p.w, ")") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprArrowFunction(n node.Node) { - nn := n.(*expr.ArrowFunction) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Static { - io.WriteString(p.w, "static") - } - p.printFreeFloating(nn, freefloating.Static) - if nn.Static && n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - io.WriteString(p.w, "fn") - p.printFreeFloating(nn, freefloating.Function) - - if nn.ReturnsRef { - io.WriteString(p.w, "&") - } - p.printFreeFloating(nn, freefloating.Ampersand) - - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, freefloating.ParameterList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Params) - - if nn.ReturnType != nil { - io.WriteString(p.w, ":") - p.Print(nn.ReturnType) - } - p.printFreeFloating(nn, freefloating.ReturnType) - - io.WriteString(p.w, "=>") - - p.printNode(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprBitwiseNot(n node.Node) { - nn := n.(*expr.BitwiseNot) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "~") - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprBooleanNot(n node.Node) { - nn := n.(*expr.BooleanNot) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "!") - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprClassConstFetch(n node.Node) { - nn := n.(*expr.ClassConstFetch) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Class) - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "::") - p.Print(nn.ConstantName) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprClone(n node.Node) { - nn := n.(*expr.Clone) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "clone") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprClosureUse(n node.Node) { - nn := n.(*expr.ClosureUse) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "use") - p.printFreeFloating(nn, freefloating.Use) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Uses) - p.printFreeFloating(nn, freefloating.LexicalVarList) - io.WriteString(p.w, ")") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprClosure(n node.Node) { - nn := n.(*expr.Closure) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Static { - io.WriteString(p.w, "static") - } - p.printFreeFloating(nn, freefloating.Static) - if nn.Static && n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - io.WriteString(p.w, "function") - p.printFreeFloating(nn, freefloating.Function) - - if nn.ReturnsRef { - io.WriteString(p.w, "&") - } - p.printFreeFloating(nn, freefloating.Ampersand) - - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, freefloating.ParameterList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Params) - - if nn.ClosureUse != nil { - p.Print(nn.ClosureUse) - } - p.printFreeFloating(nn, freefloating.LexicalVars) - - if nn.ReturnType != nil { - io.WriteString(p.w, ":") - p.Print(nn.ReturnType) - } - p.printFreeFloating(nn, freefloating.ReturnType) - - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprConstFetch(n node.Node) { - nn := n.(*expr.ConstFetch) - p.printFreeFloating(nn, freefloating.Start) - p.Print(nn.Constant) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprEmpty(n node.Node) { - nn := n.(*expr.Empty) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "empty") - p.printFreeFloating(nn, freefloating.Empty) - io.WriteString(p.w, "(") - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprErrorSuppress(n node.Node) { - nn := n.(*expr.ErrorSuppress) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "@") - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprEval(n node.Node) { - nn := n.(*expr.Eval) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "eval") - p.printFreeFloating(nn, freefloating.Eval) - io.WriteString(p.w, "(") - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprExit(n node.Node) { - nn := n.(*expr.Exit) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Die { - io.WriteString(p.w, "die") - } else { - io.WriteString(p.w, "exit") - } - p.printFreeFloating(nn, freefloating.Exit) - - if nn.Expr != nil && nn.Expr.GetFreeFloating().IsEmpty() && nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprFunctionCall(n node.Node) { - nn := n.(*expr.FunctionCall) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Function) - - p.printFreeFloating(nn.ArgumentList, freefloating.Start) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.ArgumentList.Arguments) - p.printFreeFloating(nn.ArgumentList, freefloating.ArgumentList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn.ArgumentList, freefloating.End) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprInclude(n node.Node) { - nn := n.(*expr.Include) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "include") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprIncludeOnce(n node.Node) { - nn := n.(*expr.IncludeOnce) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "include_once") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprInstanceOf(n node.Node) { - nn := n.(*expr.InstanceOf) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - io.WriteString(p.w, "instanceof") - - if nn.Class.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Class) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprIsset(n node.Node) { - nn := n.(*expr.Isset) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "isset") - p.printFreeFloating(nn, freefloating.Isset) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Variables) - p.printFreeFloating(nn, freefloating.VarList) - io.WriteString(p.w, ")") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprList(n node.Node) { - nn := n.(*expr.List) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "list") - p.printFreeFloating(nn, freefloating.List) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, freefloating.ArrayPairList) - io.WriteString(p.w, ")") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprMethodCall(n node.Node) { - nn := n.(*expr.MethodCall) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "->") - p.Print(nn.Method) - - p.printFreeFloating(nn.ArgumentList, freefloating.Start) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.ArgumentList.Arguments) - p.printFreeFloating(nn.ArgumentList, freefloating.ArgumentList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn.ArgumentList, freefloating.End) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprNew(n node.Node) { - nn := n.(*expr.New) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "new") - if nn.Class.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Class) - - if nn.ArgumentList != nil { - p.printFreeFloating(nn.ArgumentList, freefloating.Start) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.ArgumentList.Arguments) - p.printFreeFloating(nn.ArgumentList, freefloating.ArgumentList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn.ArgumentList, freefloating.End) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprPostDec(n node.Node) { - nn := n.(*expr.PostDec) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "--") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprPostInc(n node.Node) { - nn := n.(*expr.PostInc) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "++") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprPreDec(n node.Node) { - nn := n.(*expr.PreDec) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "--") - p.Print(nn.Variable) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprPreInc(n node.Node) { - nn := n.(*expr.PreInc) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "++") - p.Print(nn.Variable) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprPrint(n node.Node) { - nn := n.(*expr.Print) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "print") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprPropertyFetch(n node.Node) { - nn := n.(*expr.PropertyFetch) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "->") - p.Print(nn.Property) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprReference(n node.Node) { - nn := n.(*expr.Reference) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "&") - p.Print(nn.Variable) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprRequire(n node.Node) { - nn := n.(*expr.Require) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "require") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprRequireOnce(n node.Node) { - nn := n.(*expr.RequireOnce) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "require_once") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprShellExec(n node.Node) { - nn := n.(*expr.ShellExec) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "`") - p.joinPrint("", nn.Parts) - io.WriteString(p.w, "`") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprShortArray(n node.Node) { - nn := n.(*expr.ShortArray) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "[") - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, freefloating.ArrayPairList) - io.WriteString(p.w, "]") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprShortList(n node.Node) { - nn := n.(*expr.ShortList) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "[") - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, freefloating.ArrayPairList) - io.WriteString(p.w, "]") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprStaticCall(n node.Node) { - nn := n.(*expr.StaticCall) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Class) - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "::") - p.Print(nn.Call) - - p.printFreeFloating(nn.ArgumentList, freefloating.Start) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.ArgumentList.Arguments) - p.printFreeFloating(nn.ArgumentList, freefloating.ArgumentList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn.ArgumentList, freefloating.End) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprStaticPropertyFetch(n node.Node) { - nn := n.(*expr.StaticPropertyFetch) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Class) - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "::") - p.Print(nn.Property) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprTernary(n node.Node) { - nn := n.(*expr.Ternary) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Condition) - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, "?") - - if nn.IfTrue != nil { - p.Print(nn.IfTrue) - } - p.printFreeFloating(nn, freefloating.True) - - io.WriteString(p.w, ":") - p.Print(nn.IfFalse) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprUnaryMinus(n node.Node) { - nn := n.(*expr.UnaryMinus) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "-") - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprUnaryPlus(n node.Node) { - nn := n.(*expr.UnaryPlus) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "+") - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprVariable(n node.Node) { - nn := n.(*expr.Variable) - p.printFreeFloating(nn, freefloating.Start) - - p.printFreeFloating(nn, freefloating.Dollar) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "$") - } - - p.Print(nn.VarName) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprVariableWithoutLeadingDollar(n node.Node) { - nn := n.(*expr.Variable) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.VarName) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprYieldFrom(n node.Node) { - nn := n.(*expr.YieldFrom) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "yield from") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printExprYield(n node.Node) { - nn := n.(*expr.Yield) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "yield") - - if nn.Key != nil { - if nn.Key.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Key) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, "=>") - } else { - if nn.Value.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.Print(nn.Value) - - p.printFreeFloating(nn, freefloating.End) -} - -// smtm - -func (p *Printer) printStmtAltElseIf(n node.Node) { - nn := n.(*stmt.AltElseIf) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "elseif") - p.printFreeFloating(nn, freefloating.ElseIf) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, ":") - - if s := nn.Stmt.(*stmt.StmtList).Stmts; len(s) > 0 { - p.printNodes(s) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtAltElse(n node.Node) { - nn := n.(*stmt.AltElse) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "else") - p.printFreeFloating(nn, freefloating.Else) - io.WriteString(p.w, ":") - - if s := nn.Stmt.(*stmt.StmtList).Stmts; len(s) > 0 { - p.printNodes(s) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtAltFor(n node.Node) { - nn := n.(*stmt.AltFor) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "for") - p.printFreeFloating(nn, freefloating.For) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Init) - p.printFreeFloating(nn, freefloating.InitExpr) - io.WriteString(p.w, ";") - p.joinPrint(",", nn.Cond) - p.printFreeFloating(nn, freefloating.CondExpr) - io.WriteString(p.w, ";") - p.joinPrint(",", nn.Loop) - p.printFreeFloating(nn, freefloating.IncExpr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, ":") - - s := nn.Stmt.(*stmt.StmtList) - p.printNodes(s.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - - io.WriteString(p.w, "endfor") - p.printFreeFloating(nn, freefloating.AltEnd) - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtAltForeach(n node.Node) { - nn := n.(*stmt.AltForeach) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "foreach") - p.printFreeFloating(nn, freefloating.Foreach) - io.WriteString(p.w, "(") - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "as") - - if nn.Key != nil { - if nn.Key.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Key) - p.printFreeFloating(nn, freefloating.Key) - io.WriteString(p.w, "=>") - } else { - if nn.Variable.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - - io.WriteString(p.w, ":") - s := nn.Stmt.(*stmt.StmtList) - p.printNodes(s.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - - io.WriteString(p.w, "endforeach") - p.printFreeFloating(nn, freefloating.AltEnd) - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtAltIf(n node.Node) { - nn := n.(*stmt.AltIf) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "if") - p.printFreeFloating(nn, freefloating.If) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, ":") - - s := nn.Stmt.(*stmt.StmtList) - p.printNodes(s.Stmts) - - for _, elseif := range nn.ElseIf { - p.Print(elseif) - } - - if nn.Else != nil { - p.Print(nn.Else) - } - - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "endif") - p.printFreeFloating(nn, freefloating.AltEnd) - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtAltSwitch(n node.Node) { - nn := n.(*stmt.AltSwitch) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "switch") - p.printFreeFloating(nn, freefloating.Switch) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, ":") - - p.printFreeFloating(nn.CaseList, freefloating.Start) - p.printFreeFloating(nn.CaseList, freefloating.CaseListStart) - p.printNodes(nn.CaseList.Cases) - p.printFreeFloating(nn.CaseList, freefloating.CaseListEnd) - p.printFreeFloating(nn.CaseList, freefloating.End) - - io.WriteString(p.w, "endswitch") - p.printFreeFloating(nn, freefloating.AltEnd) - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtAltWhile(n node.Node) { - nn := n.(*stmt.AltWhile) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "while") - p.printFreeFloating(nn, freefloating.While) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, ":") - - s := nn.Stmt.(*stmt.StmtList) - p.printNodes(s.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - - io.WriteString(p.w, "endwhile") - p.printFreeFloating(nn, freefloating.AltEnd) - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtBreak(n node.Node) { - nn := n.(*stmt.Break) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "break") - if nn.Expr != nil { - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - } - p.printFreeFloating(nn, freefloating.Expr) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtCase(n node.Node) { - nn := n.(*stmt.Case) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "case") - if nn.Cond.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - p.printFreeFloating(nn, freefloating.CaseSeparator) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ":") - } - - if len(nn.Stmts) > 0 { - p.printNodes(nn.Stmts) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtCatch(n node.Node) { - nn := n.(*stmt.Catch) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "catch") - p.printFreeFloating(nn, freefloating.Catch) - io.WriteString(p.w, "(") - p.joinPrint("|", nn.Types) - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtClassMethod(n node.Node) { - nn := n.(*stmt.ClassMethod) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Modifiers != nil { - for k, m := range nn.Modifiers { - if k > 0 && m.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(m) - } - - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - p.printFreeFloating(nn, freefloating.ModifierList) - io.WriteString(p.w, "function") - p.printFreeFloating(nn, freefloating.Function) - - if nn.ReturnsRef { - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "&") - p.printFreeFloating(nn, freefloating.Ampersand) - } else { - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.Print(nn.MethodName) - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, freefloating.ParameterList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Params) - - if nn.ReturnType != nil { - io.WriteString(p.w, ":") - p.Print(nn.ReturnType) - } - - p.Print(nn.Stmt) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtClass(n node.Node) { - nn := n.(*stmt.Class) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Modifiers != nil { - for k, m := range nn.Modifiers { - if k > 0 && m.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(m) - } - - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - p.printFreeFloating(nn, freefloating.ModifierList) - io.WriteString(p.w, "class") - p.printFreeFloating(nn, freefloating.Class) - - if nn.ClassName != nil { - if nn.ClassName.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.ClassName) - } - - if nn.ArgumentList != nil { - p.printFreeFloating(nn.ArgumentList, freefloating.Start) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.ArgumentList.Arguments) - p.printFreeFloating(nn.ArgumentList, freefloating.ArgumentList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn.ArgumentList, freefloating.End) - } - - if nn.Extends != nil { - p.printFreeFloating(nn.Extends, freefloating.Start) - if nn.Extends.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "extends") - if nn.Extends.ClassName.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Extends.ClassName) - } - - if nn.Implements != nil { - p.printFreeFloating(nn.Implements, freefloating.Start) - if nn.Implements.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "implements") - if nn.Implements.InterfaceNames[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.joinPrint(",", nn.Implements.InterfaceNames) - } - - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtClassConstList(n node.Node) { - nn := n.(*stmt.ClassConstList) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Modifiers != nil { - for k, m := range nn.Modifiers { - if k > 0 && m.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(m) - } - - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - p.printFreeFloating(nn, freefloating.ModifierList) - io.WriteString(p.w, "const") - - if nn.Consts[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.joinPrint(",", nn.Consts) - p.printFreeFloating(nn, freefloating.ConstList) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtConstList(n node.Node) { - nn := n.(*stmt.ConstList) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "const") - - if nn.Consts[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.joinPrint(",", nn.Consts) - p.printFreeFloating(nn, freefloating.Stmts) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtConstant(n node.Node) { - nn := n.(*stmt.Constant) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.ConstantName) - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "=") - p.Print(nn.Expr) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtContinue(n node.Node) { - nn := n.(*stmt.Continue) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "continue") - - if nn.Expr != nil { - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - } - p.printFreeFloating(nn, freefloating.Expr) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtDeclare(n node.Node) { - nn := n.(*stmt.Declare) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "declare") - p.printFreeFloating(nn, freefloating.Declare) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Consts) - p.printFreeFloating(nn, freefloating.ConstList) - io.WriteString(p.w, ")") - - if nn.Alt { - p.printFreeFloating(nn, freefloating.Cond) - io.WriteString(p.w, ":") - - s := nn.Stmt.(*stmt.StmtList) - p.printNodes(s.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - - io.WriteString(p.w, "enddeclare") - p.printFreeFloating(nn, freefloating.AltEnd) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - } else { - p.Print(nn.Stmt) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtDefault(n node.Node) { - nn := n.(*stmt.Default) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "default") - p.printFreeFloating(nn, freefloating.Default) - p.printFreeFloating(nn, freefloating.CaseSeparator) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ":") - } - - if len(nn.Stmts) > 0 { - p.printNodes(nn.Stmts) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtDo(n node.Node) { - nn := n.(*stmt.Do) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "do") - - if _, ok := nn.Stmt.(*stmt.StmtList); !ok { - if nn.Stmt.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.Print(nn.Stmt) - p.printFreeFloating(nn, freefloating.Stmts) - - io.WriteString(p.w, "while") - p.printFreeFloating(nn, freefloating.While) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Cond) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtEcho(n node.Node) { - nn := n.(*stmt.Echo) - - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "echo") - } - if nn.Exprs[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - p.printFreeFloating(nn, freefloating.Start) - p.printFreeFloating(nn, freefloating.Echo) - - p.joinPrint(",", nn.Exprs) - p.printFreeFloating(nn, freefloating.Expr) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtElseif(n node.Node) { - nn := n.(*stmt.ElseIf) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "elseif") - p.printFreeFloating(nn, freefloating.ElseIf) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - - p.Print(nn.Stmt) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtElse(n node.Node) { - nn := n.(*stmt.Else) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "else") - - if _, ok := nn.Stmt.(*stmt.StmtList); !ok { - if nn.Stmt.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.Print(nn.Stmt) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtExpression(n node.Node) { - nn := n.(*stmt.Expression) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtFinally(n node.Node) { - nn := n.(*stmt.Finally) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "finally") - p.printFreeFloating(nn, freefloating.Finally) - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtFor(n node.Node) { - nn := n.(*stmt.For) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "for") - p.printFreeFloating(nn, freefloating.For) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Init) - p.printFreeFloating(nn, freefloating.InitExpr) - io.WriteString(p.w, ";") - p.joinPrint(",", nn.Cond) - p.printFreeFloating(nn, freefloating.CondExpr) - io.WriteString(p.w, ";") - p.joinPrint(",", nn.Loop) - p.printFreeFloating(nn, freefloating.IncExpr) - io.WriteString(p.w, ")") - - p.Print(nn.Stmt) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtForeach(n node.Node) { - nn := n.(*stmt.Foreach) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "foreach") - p.printFreeFloating(nn, freefloating.Foreach) - io.WriteString(p.w, "(") - - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - io.WriteString(p.w, "as") - - if nn.Key != nil { - if nn.Key.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Key) - p.printFreeFloating(nn, freefloating.Key) - io.WriteString(p.w, "=>") - } else { - if nn.Variable.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - p.Print(nn.Variable) - p.printFreeFloating(nn, freefloating.Var) - - io.WriteString(p.w, ")") - - p.Print(nn.Stmt) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtFunction(n node.Node) { - nn := n.(*stmt.Function) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "function") - p.printFreeFloating(nn, freefloating.Function) - - if nn.ReturnsRef { - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "&") - } else { - if nn.FunctionName.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.Print(nn.FunctionName) - p.printFreeFloating(nn, freefloating.Name) - - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, freefloating.ParamList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.Params) - - if nn.ReturnType != nil { - io.WriteString(p.w, ":") - p.Print(nn.ReturnType) - } - p.printFreeFloating(nn, freefloating.ReturnType) - - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtGlobal(n node.Node) { - nn := n.(*stmt.Global) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "global") - p.joinPrint(",", nn.Vars) - p.printFreeFloating(nn, freefloating.VarList) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtGoto(n node.Node) { - nn := n.(*stmt.Goto) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "goto") - if nn.Label.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Label) - p.printFreeFloating(nn, freefloating.Label) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtGroupUse(n node.Node) { - nn := n.(*stmt.GroupUse) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "use") - p.printFreeFloating(nn, freefloating.Use) - - if nn.UseType != nil { - if nn.UseType.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.UseType) - } - - if nn.Prefix.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Prefix) - io.WriteString(p.w, "\\") - p.printFreeFloating(nn, freefloating.Slash) - - io.WriteString(p.w, "{") - p.joinPrint(",", nn.UseList) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - p.printFreeFloating(nn, freefloating.UseDeclarationList) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtHaltCompiler(n node.Node) { - nn := n.(*stmt.HaltCompiler) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "__halt_compiler") - p.printFreeFloating(nn, freefloating.HaltCompiller) - io.WriteString(p.w, "(") - p.printFreeFloating(nn, freefloating.OpenParenthesisToken) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.CloseParenthesisToken) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtIf(n node.Node) { - nn := n.(*stmt.If) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "if") - p.printFreeFloating(n, freefloating.If) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(n, freefloating.Expr) - io.WriteString(p.w, ")") - - p.Print(nn.Stmt) - - if nn.ElseIf != nil { - p.printNodes(nn.ElseIf) - } - - if nn.Else != nil { - p.Print(nn.Else) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtInlineHTML(n node.Node) { - nn := n.(*stmt.InlineHtml) - p.printFreeFloating(nn, freefloating.Start) - - if p.s == PhpState && nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, "?>") - } - p.SetState(HtmlState) - - io.WriteString(p.w, nn.Value) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtInterface(n node.Node) { - nn := n.(*stmt.Interface) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "interface") - - if nn.InterfaceName.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - p.Print(nn.InterfaceName) - - if nn.Extends != nil { - p.printFreeFloating(nn.Extends, freefloating.Start) - if nn.Extends.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "extends") - if nn.Extends.InterfaceNames[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.joinPrint(",", nn.Extends.InterfaceNames) - } - - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtLabel(n node.Node) { - nn := n.(*stmt.Label) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.LabelName) - p.printFreeFloating(nn, freefloating.Label) - - io.WriteString(p.w, ":") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtNamespace(n node.Node) { - nn := n.(*stmt.Namespace) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "namespace") - - if nn.NamespaceName != nil { - if nn.NamespaceName.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.NamespaceName) - } - - if nn.Stmts != nil { - p.printFreeFloating(nn, freefloating.Namespace) - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - } else { - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtNop(n node.Node) { - p.printFreeFloating(n, freefloating.Start) - p.printFreeFloating(n, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - p.printFreeFloating(n, freefloating.End) -} - -func (p *Printer) printStmtPropertyList(n node.Node) { - nn := n.(*stmt.PropertyList) - p.printFreeFloating(nn, freefloating.Start) - - for k, m := range nn.Modifiers { - if k > 0 && m.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(m) - } - - if nn.Type != nil && nn.Type.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - p.Print(nn.Type) - - if nn.Properties[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - p.joinPrint(",", nn.Properties) - p.printFreeFloating(n, freefloating.PropertyList) - - p.printFreeFloating(n, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtProperty(n node.Node) { - nn := n.(*stmt.Property) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Variable) - - if nn.Expr != nil { - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "=") - p.Print(nn.Expr) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtReturn(n node.Node) { - nn := n.(*stmt.Return) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "return") - if nn.Expr != nil && nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - - p.printFreeFloating(nn, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtStaticVar(n node.Node) { - nn := n.(*stmt.StaticVar) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Variable) - - if nn.Expr != nil { - p.printFreeFloating(nn, freefloating.Var) - io.WriteString(p.w, "=") - p.Print(nn.Expr) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtStatic(n node.Node) { - nn := n.(*stmt.Static) - p.printFreeFloating(nn, freefloating.Start) - io.WriteString(p.w, "static") - - p.joinPrint(",", nn.Vars) - p.printFreeFloating(nn, freefloating.VarList) - - p.printFreeFloating(nn, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtStmtList(n node.Node) { - nn := n.(*stmt.StmtList) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtSwitch(n node.Node) { - nn := n.(*stmt.Switch) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "switch") - p.printFreeFloating(nn, freefloating.Switch) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - - p.printFreeFloating(nn.CaseList, freefloating.Start) - io.WriteString(p.w, "{") - p.printFreeFloating(nn.CaseList, freefloating.CaseListStart) - p.printNodes(nn.CaseList.Cases) - p.printFreeFloating(nn.CaseList, freefloating.CaseListEnd) - io.WriteString(p.w, "}") - p.printFreeFloating(nn.CaseList, freefloating.End) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtThrow(n node.Node) { - nn := n.(*stmt.Throw) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "throw") - if nn.Expr.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Expr) - p.printFreeFloating(nn, freefloating.Expr) - - p.printFreeFloating(nn, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtTraitAdaptationList(n node.Node) { - nn := n.(*stmt.TraitAdaptationList) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "{") - p.printNodes(nn.Adaptations) - p.printFreeFloating(nn, freefloating.AdaptationList) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtTraitMethodRef(n node.Node) { - nn := n.(*stmt.TraitMethodRef) - p.printFreeFloating(nn, freefloating.Start) - - if nn.Trait != nil { - p.Print(nn.Trait) - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "::") - } - - p.Print(nn.Method) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtTraitUseAlias(n node.Node) { - nn := n.(*stmt.TraitUseAlias) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Ref) - p.printFreeFloating(nn, freefloating.Ref) - - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "as") - - if nn.Modifier != nil { - if nn.Modifier.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Modifier) - } - - if nn.Alias != nil { - if nn.Alias.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Alias) - } - p.printFreeFloating(nn, freefloating.Alias) - - p.printFreeFloating(nn, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtTraitUsePrecedence(n node.Node) { - nn := n.(*stmt.TraitUsePrecedence) - p.printFreeFloating(nn, freefloating.Start) - - p.Print(nn.Ref) - p.printFreeFloating(nn, freefloating.Ref) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - - io.WriteString(p.w, "insteadof") - if nn.Insteadof[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.joinPrint(",", nn.Insteadof) - p.printFreeFloating(nn, freefloating.NameList) - - p.printFreeFloating(nn, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtTraitUse(n node.Node) { - nn := n.(*stmt.TraitUse) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "use") - if nn.Traits[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.joinPrint(",", nn.Traits) - - p.Print(nn.TraitAdaptationList) - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtTrait(n node.Node) { - nn := n.(*stmt.Trait) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "trait") - if nn.TraitName.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.TraitName) - - p.printFreeFloating(nn, freefloating.Name) - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtTry(n node.Node) { - nn := n.(*stmt.Try) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "try") - p.printFreeFloating(nn, freefloating.Try) - io.WriteString(p.w, "{") - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, freefloating.Stmts) - io.WriteString(p.w, "}") - - if nn.Catches != nil { - p.printNodes(nn.Catches) - } - - if nn.Finally != nil { - p.Print(nn.Finally) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtUnset(n node.Node) { - nn := n.(*stmt.Unset) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "unset") - p.printFreeFloating(nn, freefloating.Unset) - io.WriteString(p.w, "(") - p.joinPrint(",", nn.Vars) - p.printFreeFloating(nn, freefloating.VarList) - io.WriteString(p.w, ")") - p.printFreeFloating(nn, freefloating.CloseParenthesisToken) - - p.printFreeFloating(nn, freefloating.SemiColon) - if n.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtUseList(n node.Node) { - nn := n.(*stmt.UseList) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "use") - - if nn.UseType != nil { - if nn.UseType.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.UseType) - } - - if nn.Uses[0].GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.joinPrint(",", nn.Uses) - p.printFreeFloating(nn, freefloating.UseDeclarationList) - - p.printFreeFloating(nn, freefloating.SemiColon) - if nn.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, ";") - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtUse(n node.Node) { - nn := n.(*stmt.Use) - p.printFreeFloating(nn, freefloating.Start) - - if nn.UseType != nil { - p.Print(nn.UseType) - if nn.UseType.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - } - - p.printFreeFloating(nn, freefloating.Slash) - - p.Print(nn.Use) - - if nn.Alias != nil { - if nn.Alias.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - io.WriteString(p.w, "as") - if nn.Alias.GetFreeFloating().IsEmpty() { - io.WriteString(p.w, " ") - } - p.Print(nn.Alias) - } - - p.printFreeFloating(nn, freefloating.End) -} - -func (p *Printer) printStmtWhile(n node.Node) { - nn := n.(*stmt.While) - p.printFreeFloating(nn, freefloating.Start) - - io.WriteString(p.w, "while") - p.printFreeFloating(nn, freefloating.While) - io.WriteString(p.w, "(") - p.Print(nn.Cond) - p.printFreeFloating(nn, freefloating.Expr) - io.WriteString(p.w, ")") - - p.Print(nn.Stmt) - - p.printFreeFloating(nn, freefloating.End) -}