From 497e7f82eeb128f0ca5c2f64575a3dddc2fec06f Mon Sep 17 00:00:00 2001 From: Vadym Slizov Date: Fri, 11 Dec 2020 09:54:26 +0200 Subject: [PATCH] [refactoring] update printer --- internal/php5/php5.go | 164 +- internal/php5/php5.y | 38 +- internal/php7/php7.go | 1088 +++---- internal/php7/php7.y | 42 +- pkg/ast/node.go | 8 +- pkg/ast/visitor/printer.go | 1239 +++++++ .../visitor/printer_php5_test.go} | 8 +- .../visitor/printer_php7_test.go} | 15 +- pkg/{printer => ast/visitor}/printer_test.go | 1746 +++++----- pkg/printer/printer.go | 2838 ----------------- 10 files changed, 2916 insertions(+), 4270 deletions(-) create mode 100644 pkg/ast/visitor/printer.go rename pkg/{printer/printer_parsed_php5_test.go => ast/visitor/printer_php5_test.go} (99%) rename pkg/{printer/printer_parsed_php7_test.go => ast/visitor/printer_php7_test.go} (99%) rename pkg/{printer => ast/visitor}/printer_test.go (75%) delete mode 100644 pkg/printer/printer.go diff --git a/internal/php5/php5.go b/internal/php5/php5.go index 24fa23b..219f8fc 100644 --- a/internal/php5/php5.go +++ b/internal/php5/php5.go @@ -2315,6 +2315,8 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] // line internal/php5/php5.y:266 { + yylex.(*Parser).currentToken.Value = nil + yylex.(*Parser).rootNode = &ast.Root{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].list), Stmts: yyDollar[1].list, @@ -2323,7 +2325,7 @@ yydefault: } case 2: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:277 + // line internal/php5/php5.y:279 { if yyDollar[2].node != nil { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -2331,13 +2333,13 @@ yydefault: } case 3: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:283 + // line internal/php5/php5.y:285 { yyVAL.list = []ast.Vertex{} } case 4: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:290 + // line internal/php5/php5.y:292 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -2351,7 +2353,7 @@ yydefault: } case 5: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:302 + // line internal/php5/php5.y:304 { part := &ast.NameNamePart{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[3].token), @@ -2366,32 +2368,32 @@ yydefault: } case 6: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:318 + // line internal/php5/php5.y:320 { // error yyVAL.node = nil } case 7: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:323 + // line internal/php5/php5.y:325 { yyVAL.node = yyDollar[1].node } case 8: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:327 + // line internal/php5/php5.y:329 { yyVAL.node = yyDollar[1].node } case 9: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:331 + // line internal/php5/php5.y:333 { yyVAL.node = yyDollar[1].node } case 10: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:335 + // line internal/php5/php5.y:337 { yyVAL.node = &ast.StmtHaltCompiler{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2403,7 +2405,7 @@ yydefault: } case 11: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:345 + // line internal/php5/php5.y:347 { yyVAL.node = &ast.StmtNamespace{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -2418,7 +2420,7 @@ yydefault: } case 12: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:358 + // line internal/php5/php5.y:360 { yyVAL.node = &ast.StmtNamespace{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[5].token), @@ -2435,7 +2437,7 @@ yydefault: } case 13: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:373 + // line internal/php5/php5.y:375 { yyVAL.node = &ast.StmtNamespace{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2447,7 +2449,7 @@ yydefault: } case 14: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:383 + // line internal/php5/php5.y:385 { yyVAL.node = &ast.StmtUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -2459,7 +2461,7 @@ yydefault: } case 15: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:393 + // line internal/php5/php5.y:395 { yyVAL.node = &ast.StmtUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2476,7 +2478,7 @@ yydefault: } case 16: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:408 + // line internal/php5/php5.y:410 { yyVAL.node = &ast.StmtUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2493,7 +2495,7 @@ yydefault: } case 17: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:423 + // line internal/php5/php5.y:425 { yyDollar[1].node.(*ast.StmtConstList).SemiColonTkn = yyDollar[2].token yyDollar[1].node.(*ast.StmtConstList).Position = yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token) @@ -2501,7 +2503,7 @@ yydefault: } case 18: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:432 + // line internal/php5/php5.y:434 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -2510,7 +2512,7 @@ yydefault: } case 19: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:439 + // line internal/php5/php5.y:441 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -2518,7 +2520,7 @@ yydefault: } case 20: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:448 + // line internal/php5/php5.y:450 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -2531,7 +2533,7 @@ yydefault: } case 21: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:459 + // line internal/php5/php5.y:461 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].token), @@ -2550,7 +2552,7 @@ yydefault: } case 22: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:476 + // line internal/php5/php5.y:478 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -2564,7 +2566,7 @@ yydefault: } case 23: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:488 + // line internal/php5/php5.y:490 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2584,7 +2586,7 @@ yydefault: } case 24: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:509 + // line internal/php5/php5.y:511 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -2593,7 +2595,7 @@ yydefault: } case 25: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:516 + // line internal/php5/php5.y:518 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -2601,7 +2603,7 @@ yydefault: } case 26: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:525 + // line internal/php5/php5.y:527 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -2614,7 +2616,7 @@ yydefault: } case 27: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:536 + // line internal/php5/php5.y:538 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].token), @@ -2633,7 +2635,7 @@ yydefault: } case 28: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:553 + // line internal/php5/php5.y:555 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -2647,7 +2649,7 @@ yydefault: } case 29: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:565 + // line internal/php5/php5.y:567 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2667,7 +2669,7 @@ yydefault: } case 30: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:586 + // line internal/php5/php5.y:588 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -2676,7 +2678,7 @@ yydefault: } case 31: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:593 + // line internal/php5/php5.y:595 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -2684,7 +2686,7 @@ yydefault: } case 32: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:602 + // line internal/php5/php5.y:604 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -2697,7 +2699,7 @@ yydefault: } case 33: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:613 + // line internal/php5/php5.y:615 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].token), @@ -2716,7 +2718,7 @@ yydefault: } case 34: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:630 + // line internal/php5/php5.y:632 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -2730,7 +2732,7 @@ yydefault: } case 35: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:642 + // line internal/php5/php5.y:644 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2750,7 +2752,7 @@ yydefault: } case 36: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:663 + // line internal/php5/php5.y:665 { constList := yyDollar[1].node.(*ast.StmtConstList) constList.Position = yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[5].node) @@ -2770,7 +2772,7 @@ yydefault: } case 37: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:681 + // line internal/php5/php5.y:683 { yyVAL.node = &ast.StmtConstList{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node), @@ -2791,7 +2793,7 @@ yydefault: } case 38: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:703 + // line internal/php5/php5.y:705 { if yyDollar[2].node != nil { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -2799,38 +2801,38 @@ yydefault: } case 39: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php5/php5.y:709 + // line internal/php5/php5.y:711 { yyVAL.list = []ast.Vertex{} } case 40: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:717 + // line internal/php5/php5.y:719 { // error yyVAL.node = nil } case 41: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:722 + // line internal/php5/php5.y:724 { yyVAL.node = yyDollar[1].node } case 42: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:726 + // line internal/php5/php5.y:728 { yyVAL.node = yyDollar[1].node } case 43: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:730 + // line internal/php5/php5.y:732 { yyVAL.node = yyDollar[1].node } case 44: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php5/php5.y:734 + // line internal/php5/php5.y:736 { yyVAL.node = &ast.StmtHaltCompiler{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2842,13 +2844,13 @@ yydefault: } case 45: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php5/php5.y:748 + // line internal/php5/php5.y:750 { yyVAL.node = yyDollar[1].node } case 46: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:752 + // line internal/php5/php5.y:754 { yyVAL.node = &ast.StmtLabel{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -2862,7 +2864,7 @@ yydefault: } case 47: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:767 + // line internal/php5/php5.y:769 { yyVAL.node = &ast.StmtStmtList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -2873,7 +2875,7 @@ yydefault: } case 48: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:776 + // line internal/php5/php5.y:778 { pos := yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node) if yyDollar[5].node != nil { @@ -2895,7 +2897,7 @@ yydefault: } case 49: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php5/php5.y:796 + // line internal/php5/php5.y:798 { yyVAL.node = &ast.StmtIf{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[8].token), @@ -2917,7 +2919,7 @@ yydefault: } case 50: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:816 + // line internal/php5/php5.y:818 { yyDollar[3].node.(*ast.StmtWhile).WhileTkn = yyDollar[1].token yyDollar[3].node.(*ast.StmtWhile).OpenParenthesisTkn = yyDollar[2].node.(*ast.ParserBrackets).OpenBracketTkn @@ -2929,7 +2931,7 @@ yydefault: } case 51: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php5/php5.y:826 + // line internal/php5/php5.y:828 { yyVAL.node = &ast.StmtDo{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[5].token), @@ -2944,7 +2946,7 @@ yydefault: } case 52: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php5/php5.y:839 + // line internal/php5/php5.y:841 { yyDollar[9].node.(*ast.StmtFor).ForTkn = yyDollar[1].token yyDollar[9].node.(*ast.StmtFor).OpenParenthesisTkn = yyDollar[2].token @@ -2963,7 +2965,7 @@ yydefault: } case 53: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:856 + // line internal/php5/php5.y:858 { yyDollar[3].node.(*ast.StmtSwitch).SwitchTkn = yyDollar[1].token yyDollar[3].node.(*ast.StmtSwitch).OpenParenthesisTkn = yyDollar[2].node.(*ast.ParserBrackets).OpenBracketTkn @@ -2975,7 +2977,7 @@ yydefault: } case 54: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:866 + // line internal/php5/php5.y:868 { yyVAL.node = &ast.StmtBreak{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -2985,7 +2987,7 @@ yydefault: } case 55: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:874 + // line internal/php5/php5.y:876 { yyVAL.node = &ast.StmtBreak{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -2996,7 +2998,7 @@ yydefault: } case 56: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:883 + // line internal/php5/php5.y:885 { yyVAL.node = &ast.StmtContinue{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -3006,7 +3008,7 @@ yydefault: } case 57: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:891 + // line internal/php5/php5.y:893 { yyVAL.node = &ast.StmtContinue{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3017,7 +3019,7 @@ yydefault: } case 58: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:900 + // line internal/php5/php5.y:902 { yyVAL.node = &ast.StmtReturn{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -3027,7 +3029,7 @@ yydefault: } case 59: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:908 + // line internal/php5/php5.y:910 { yyVAL.node = &ast.StmtReturn{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3038,7 +3040,7 @@ yydefault: } case 60: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:917 + // line internal/php5/php5.y:919 { yyVAL.node = &ast.StmtReturn{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3049,7 +3051,7 @@ yydefault: } case 61: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php5/php5.y:926 + // line internal/php5/php5.y:928 { yyVAL.node = &ast.StmtExpression{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -3059,22 +3061,20 @@ yydefault: } case 62: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:934 + // line internal/php5/php5.y:936 { yyDollar[2].node.(*ast.StmtGlobal).GlobalTkn = yyDollar[1].token yyDollar[2].node.(*ast.StmtGlobal).SemiColonTkn = yyDollar[3].token - yyDollar[2].node.(*ast.StmtGlobal).SeparatorTkns = append(yyDollar[2].node.(*ast.StmtGlobal).SeparatorTkns, nil) yyDollar[2].node.(*ast.StmtGlobal).Position = yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) yyVAL.node = yyDollar[2].node } case 63: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php5/php5.y:943 + // line internal/php5/php5.y:944 { yyDollar[2].node.(*ast.StmtStatic).StaticTkn = yyDollar[1].token yyDollar[2].node.(*ast.StmtStatic).SemiColonTkn = yyDollar[3].token - yyDollar[2].node.(*ast.StmtStatic).SeparatorTkns = append(yyDollar[2].node.(*ast.StmtStatic).SeparatorTkns, nil) yyDollar[2].node.(*ast.StmtStatic).Position = yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token) yyVAL.node = yyDollar[2].node @@ -3222,8 +3222,8 @@ yydefault: GotoTkn: yyDollar[1].token, Label: &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), - IdentifierTkn: yyDollar[1].token, - Value: yyDollar[1].token.Value, + IdentifierTkn: yyDollar[2].token, + Value: yyDollar[2].token.Value, }, SemiColonTkn: yyDollar[3].token, } @@ -4395,10 +4395,10 @@ yydefault: // line internal/php5/php5.y:2197 { yyVAL.node = &ast.StmtTraitAdaptationList{ - Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), - OpenParenthesisTkn: yyDollar[1].token, - Adaptations: yyDollar[2].list, - CloseParenthesisTkn: yyDollar[3].token, + Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), + OpenCurlyBracketTkn: yyDollar[1].token, + Adaptations: yyDollar[2].list, + CloseCurlyBracketTkn: yyDollar[3].token, } } case 180: @@ -4921,7 +4921,7 @@ yydefault: OpenParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[3].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[3].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).CloseParenthesisTkn, } } else { yyVAL.node = &ast.ExprNew{ @@ -4984,7 +4984,7 @@ yydefault: OpenParenthesisTkn: yyDollar[6].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[6].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[6].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[6].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[6].node.(*ast.ArgumentList).CloseParenthesisTkn, } } else { _new = &ast.ExprNew{ @@ -6010,7 +6010,7 @@ yydefault: OpenParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[2].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[2].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 324: @@ -6029,7 +6029,7 @@ yydefault: OpenParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[4].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 325: @@ -6047,7 +6047,7 @@ yydefault: OpenParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[3].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[3].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 326: @@ -6062,7 +6062,7 @@ yydefault: OpenParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[4].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 327: @@ -6077,7 +6077,7 @@ yydefault: OpenParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[4].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 328: @@ -6092,7 +6092,7 @@ yydefault: OpenParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[4].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 329: @@ -6107,7 +6107,7 @@ yydefault: OpenParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[4].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 330: @@ -6120,7 +6120,7 @@ yydefault: OpenParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[2].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[2].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 331: @@ -7030,7 +7030,7 @@ yydefault: Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), OpenQoteTkn: yyDollar[1].token, Parts: yyDollar[2].list, - CloseQoteTkn: yyDollar[1].token, + CloseQoteTkn: yyDollar[3].token, } } case 419: @@ -7211,7 +7211,7 @@ yydefault: OpenParenthesisTkn: mc.OpenParenthesisTkn, Arguments: mc.Arguments, SeparatorTkns: mc.SeparatorTkns, - CloseParenthesisTkn: mc.OpenParenthesisTkn, + CloseParenthesisTkn: mc.CloseParenthesisTkn, }, ) yyDollar[3].list = append(yyDollar[3].list, yyDollar[4].list[1:len(yyDollar[4].list)]...) diff --git a/internal/php5/php5.y b/internal/php5/php5.y index f26e824..f244655 100644 --- a/internal/php5/php5.y +++ b/internal/php5/php5.y @@ -264,6 +264,8 @@ import ( start: top_statement_list { + yylex.(*Parser).currentToken.Value = nil + yylex.(*Parser).rootNode = &ast.Root{ Position: yylex.(*Parser).builder.NewNodeListPosition($1), Stmts: $1, @@ -934,7 +936,6 @@ unticked_statement: { $2.(*ast.StmtGlobal).GlobalTkn = $1 $2.(*ast.StmtGlobal).SemiColonTkn = $3 - $2.(*ast.StmtGlobal).SeparatorTkns = append($2.(*ast.StmtGlobal).SeparatorTkns, nil) $2.(*ast.StmtGlobal).Position = yylex.(*Parser).builder.NewTokensPosition($1, $3) $$ = $2 @@ -943,7 +944,6 @@ unticked_statement: { $2.(*ast.StmtStatic).StaticTkn = $1 $2.(*ast.StmtStatic).SemiColonTkn = $3 - $2.(*ast.StmtStatic).SeparatorTkns = append($2.(*ast.StmtStatic).SeparatorTkns, nil) $2.(*ast.StmtStatic).Position = yylex.(*Parser).builder.NewTokensPosition($1, $3) $$ = $2 @@ -1069,8 +1069,8 @@ unticked_statement: GotoTkn: $1, Label: &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition($1), - IdentifierTkn: $1, - Value: $1.Value, + IdentifierTkn: $2, + Value: $2.Value, }, SemiColonTkn: $3, } @@ -2197,9 +2197,9 @@ trait_adaptations: { $$ = &ast.StmtTraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), - OpenParenthesisTkn: $1, - Adaptations: $2, - CloseParenthesisTkn: $3, + OpenCurlyBracketTkn: $1, + Adaptations: $2, + CloseCurlyBracketTkn: $3, } } ; @@ -2691,7 +2691,7 @@ new_expr: OpenParenthesisTkn: $3.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $3.(*ast.ArgumentList).Arguments, SeparatorTkns: $3.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $3.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $3.(*ast.ArgumentList).CloseParenthesisTkn, } } else { $$ = &ast.ExprNew{ @@ -2749,7 +2749,7 @@ expr_without_variable: OpenParenthesisTkn: $6.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $6.(*ast.ArgumentList).Arguments, SeparatorTkns: $6.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $6.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $6.(*ast.ArgumentList).CloseParenthesisTkn, } } else { _new = &ast.ExprNew{ @@ -3620,7 +3620,7 @@ function_call: OpenParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $2.(*ast.ArgumentList).Arguments, SeparatorTkns: $2.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $2.(*ast.ArgumentList).CloseParenthesisTkn, } } | T_NAMESPACE T_NS_SEPARATOR namespace_name function_call_parameter_list @@ -3637,7 +3637,7 @@ function_call: OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $4.(*ast.ArgumentList).Arguments, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, } } | T_NS_SEPARATOR namespace_name function_call_parameter_list @@ -3653,7 +3653,7 @@ function_call: OpenParenthesisTkn: $3.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $3.(*ast.ArgumentList).Arguments, SeparatorTkns: $3.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $3.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $3.(*ast.ArgumentList).CloseParenthesisTkn, } } | class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list @@ -3666,7 +3666,7 @@ function_call: OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $4.(*ast.ArgumentList).Arguments, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, } } | class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list @@ -3679,7 +3679,7 @@ function_call: OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $4.(*ast.ArgumentList).Arguments, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, } } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_name function_call_parameter_list @@ -3692,7 +3692,7 @@ function_call: OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $4.(*ast.ArgumentList).Arguments, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, } } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects function_call_parameter_list @@ -3705,7 +3705,7 @@ function_call: OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $4.(*ast.ArgumentList).Arguments, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, } } | variable_without_objects function_call_parameter_list @@ -3716,7 +3716,7 @@ function_call: OpenParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $2.(*ast.ArgumentList).Arguments, SeparatorTkns: $2.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $2.(*ast.ArgumentList).CloseParenthesisTkn, } } ; @@ -4500,7 +4500,7 @@ scalar: Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), OpenQoteTkn: $1, Parts: $2, - CloseQoteTkn: $1, + CloseQoteTkn: $3, } } | T_START_HEREDOC encaps_list T_END_HEREDOC @@ -4674,7 +4674,7 @@ variable: OpenParenthesisTkn: mc.OpenParenthesisTkn, Arguments: mc.Arguments, SeparatorTkns: mc.SeparatorTkns, - CloseParenthesisTkn: mc.OpenParenthesisTkn, + CloseParenthesisTkn: mc.CloseParenthesisTkn, }, ) $3 = append($3, $4[1:len($4)]...) diff --git a/internal/php7/php7.go b/internal/php7/php7.go index 11c021e..7e9dd54 100644 --- a/internal/php7/php7.go +++ b/internal/php7/php7.go @@ -339,7 +339,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -// line internal/php7/php7.y:4327 +// line internal/php7/php7.y:4337 // line yacctab:1 var yyExca = [...]int{ @@ -2108,6 +2108,8 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] // line internal/php7/php7.y:283 { + yylex.(*Parser).currentToken.Value = nil + yylex.(*Parser).rootNode = &ast.Root{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].list), Stmts: yyDollar[1].list, @@ -2116,469 +2118,469 @@ yydefault: } case 2: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 3: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 4: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 5: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 6: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 7: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 8: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 9: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:293 + // line internal/php7/php7.y:295 { yyVAL.token = yyDollar[1].token } case 10: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 11: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 12: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 13: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 14: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 15: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 16: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 17: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 18: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 19: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 20: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 21: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:294 + // line internal/php7/php7.y:296 { yyVAL.token = yyDollar[1].token } case 22: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 23: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 24: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 25: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 26: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 27: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 28: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 29: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 30: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 31: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:295 + // line internal/php7/php7.y:297 { yyVAL.token = yyDollar[1].token } case 32: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 33: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 34: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 35: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 36: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 37: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 38: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 39: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 40: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 41: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:296 + // line internal/php7/php7.y:298 { yyVAL.token = yyDollar[1].token } case 42: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 43: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 44: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 45: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 46: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 47: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 48: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 49: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 50: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 51: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 52: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:297 + // line internal/php7/php7.y:299 { yyVAL.token = yyDollar[1].token } case 53: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 54: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 55: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 56: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 57: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 58: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 59: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 60: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:298 + // line internal/php7/php7.y:300 { yyVAL.token = yyDollar[1].token } case 61: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 62: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 63: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 64: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 65: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 66: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 67: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 68: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 69: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:299 + // line internal/php7/php7.y:301 { yyVAL.token = yyDollar[1].token } case 70: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:304 + // line internal/php7/php7.y:306 { yyVAL.token = yyDollar[1].token } case 71: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:307 + // line internal/php7/php7.y:309 { yyVAL.token = yyDollar[1].token } case 72: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:307 + // line internal/php7/php7.y:309 { yyVAL.token = yyDollar[1].token } case 73: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:307 + // line internal/php7/php7.y:309 { yyVAL.token = yyDollar[1].token } case 74: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:307 + // line internal/php7/php7.y:309 { yyVAL.token = yyDollar[1].token } case 75: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:307 + // line internal/php7/php7.y:309 { yyVAL.token = yyDollar[1].token } case 76: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:307 + // line internal/php7/php7.y:309 { yyVAL.token = yyDollar[1].token } case 77: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:312 + // line internal/php7/php7.y:314 { yyVAL.token = yyDollar[1].token } case 78: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:316 + // line internal/php7/php7.y:318 { yyVAL.token = yyDollar[1].token } case 79: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:323 + // line internal/php7/php7.y:325 { if yyDollar[2].node != nil { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -2586,13 +2588,13 @@ yydefault: } case 80: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:329 + // line internal/php7/php7.y:331 { yyVAL.list = []ast.Vertex{} } case 81: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:336 + // line internal/php7/php7.y:338 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{ @@ -2606,7 +2608,7 @@ yydefault: } case 82: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:348 + // line internal/php7/php7.y:350 { part := &ast.NameNamePart{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[3].token), @@ -2621,7 +2623,7 @@ yydefault: } case 83: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:364 + // line internal/php7/php7.y:366 { yyVAL.node = &ast.NameName{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -2631,7 +2633,7 @@ yydefault: } case 84: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:372 + // line internal/php7/php7.y:374 { yyVAL.node = &ast.NameRelative{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -2643,7 +2645,7 @@ yydefault: } case 85: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:382 + // line internal/php7/php7.y:384 { yyVAL.node = &ast.NameFullyQualified{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -2654,44 +2656,44 @@ yydefault: } case 86: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:394 + // line internal/php7/php7.y:396 { // error yyVAL.node = nil } case 87: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:399 + // line internal/php7/php7.y:401 { yyVAL.node = yyDollar[1].node } case 88: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:403 + // line internal/php7/php7.y:405 { yyVAL.node = yyDollar[1].node } case 89: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:407 + // line internal/php7/php7.y:409 { yyVAL.node = yyDollar[1].node } case 90: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:411 + // line internal/php7/php7.y:413 { yyVAL.node = yyDollar[1].node } case 91: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:415 + // line internal/php7/php7.y:417 { yyVAL.node = yyDollar[1].node } case 92: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:419 + // line internal/php7/php7.y:421 { yyVAL.node = &ast.StmtHaltCompiler{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2703,7 +2705,7 @@ yydefault: } case 93: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:429 + // line internal/php7/php7.y:431 { yyVAL.node = &ast.StmtNamespace{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -2718,7 +2720,7 @@ yydefault: } case 94: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:442 + // line internal/php7/php7.y:444 { yyVAL.node = &ast.StmtNamespace{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[5].token), @@ -2735,7 +2737,7 @@ yydefault: } case 95: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:457 + // line internal/php7/php7.y:459 { yyVAL.node = &ast.StmtNamespace{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2747,7 +2749,7 @@ yydefault: } case 96: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:467 + // line internal/php7/php7.y:469 { use := yyDollar[2].node.(*ast.StmtGroupUse) @@ -2759,7 +2761,7 @@ yydefault: } case 97: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:477 + // line internal/php7/php7.y:479 { use := yyDollar[3].node.(*ast.StmtGroupUse) @@ -2772,7 +2774,7 @@ yydefault: } case 98: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:488 + // line internal/php7/php7.y:490 { yyVAL.node = &ast.StmtUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -2784,7 +2786,7 @@ yydefault: } case 99: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:498 + // line internal/php7/php7.y:500 { yyVAL.node = &ast.StmtUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -2797,7 +2799,7 @@ yydefault: } case 100: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:509 + // line internal/php7/php7.y:511 { yyVAL.node = &ast.StmtConstList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -2809,7 +2811,7 @@ yydefault: } case 101: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:522 + // line internal/php7/php7.y:524 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -2819,7 +2821,7 @@ yydefault: } case 102: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:530 + // line internal/php7/php7.y:532 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -2829,7 +2831,7 @@ yydefault: } case 103: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:541 + // line internal/php7/php7.y:543 { yyDollar[4].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[4].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[5].token) @@ -2849,7 +2851,7 @@ yydefault: } case 104: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:559 + // line internal/php7/php7.y:561 { yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[6].token) @@ -2870,9 +2872,11 @@ yydefault: } case 105: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:581 + // line internal/php7/php7.y:583 { - yyDollar[4].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[4].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[5].token) + if yyDollar[5].token != nil { + yyDollar[4].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[4].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[5].token) + } yyVAL.node = &ast.StmtGroupUse{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[6].token), @@ -2890,9 +2894,11 @@ yydefault: } case 106: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:599 + // line internal/php7/php7.y:603 { - yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[6].token) + if yyDollar[6].token != nil { + yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[6].token) + } yyVAL.node = &ast.StmtGroupUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[7].token), @@ -2911,19 +2917,19 @@ yydefault: } case 107: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:621 + // line internal/php7/php7.y:627 { yyVAL.token = nil } case 108: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:625 + // line internal/php7/php7.y:631 { yyVAL.token = yyDollar[1].token } case 109: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:632 + // line internal/php7/php7.y:638 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -2932,7 +2938,7 @@ yydefault: } case 110: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:639 + // line internal/php7/php7.y:645 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -2940,7 +2946,7 @@ yydefault: } case 111: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:648 + // line internal/php7/php7.y:654 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -2949,7 +2955,7 @@ yydefault: } case 112: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:655 + // line internal/php7/php7.y:661 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -2957,7 +2963,7 @@ yydefault: } case 113: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:664 + // line internal/php7/php7.y:670 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -2966,7 +2972,7 @@ yydefault: } case 114: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:671 + // line internal/php7/php7.y:677 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -2974,13 +2980,13 @@ yydefault: } case 115: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:680 + // line internal/php7/php7.y:686 { yyVAL.node = yyDollar[1].node } case 116: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:684 + // line internal/php7/php7.y:690 { decl := yyDollar[2].node.(*ast.StmtUseDeclaration) decl.Type = yyDollar[1].node @@ -2990,7 +2996,7 @@ yydefault: } case 117: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:695 + // line internal/php7/php7.y:701 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items), @@ -3003,7 +3009,7 @@ yydefault: } case 118: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:706 + // line internal/php7/php7.y:712 { yyVAL.node = &ast.StmtUseDeclaration{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].token), @@ -3022,13 +3028,13 @@ yydefault: } case 119: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:726 + // line internal/php7/php7.y:732 { yyVAL.node = yyDollar[1].node } case 120: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:730 + // line internal/php7/php7.y:736 { decl := yyDollar[2].node.(*ast.StmtUseDeclaration) decl.NsSeparatorTkn = yyDollar[1].token @@ -3038,7 +3044,7 @@ yydefault: } case 121: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:741 + // line internal/php7/php7.y:747 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -3047,7 +3053,7 @@ yydefault: } case 122: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:748 + // line internal/php7/php7.y:754 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -3055,7 +3061,7 @@ yydefault: } case 123: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:757 + // line internal/php7/php7.y:763 { if yyDollar[2].node != nil { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -3063,50 +3069,50 @@ yydefault: } case 124: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:763 + // line internal/php7/php7.y:769 { yyVAL.list = []ast.Vertex{} } case 125: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:770 + // line internal/php7/php7.y:776 { // error yyVAL.node = nil } case 126: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:775 + // line internal/php7/php7.y:781 { yyVAL.node = yyDollar[1].node } case 127: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:779 + // line internal/php7/php7.y:785 { yyVAL.node = yyDollar[1].node } case 128: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:783 + // line internal/php7/php7.y:789 { yyVAL.node = yyDollar[1].node } case 129: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:787 + // line internal/php7/php7.y:793 { yyVAL.node = yyDollar[1].node } case 130: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:791 + // line internal/php7/php7.y:797 { yyVAL.node = yyDollar[1].node } case 131: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:795 + // line internal/php7/php7.y:801 { yyVAL.node = &ast.StmtHaltCompiler{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3118,7 +3124,7 @@ yydefault: } case 132: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:807 + // line internal/php7/php7.y:813 { yyVAL.node = &ast.StmtStmtList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3129,19 +3135,19 @@ yydefault: } case 133: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:816 + // line internal/php7/php7.y:822 { yyVAL.node = yyDollar[1].node } case 134: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:820 + // line internal/php7/php7.y:826 { yyVAL.node = yyDollar[1].node } case 135: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:824 + // line internal/php7/php7.y:830 { yyDollar[5].node.(*ast.StmtWhile).WhileTkn = yyDollar[1].token yyDollar[5].node.(*ast.StmtWhile).OpenParenthesisTkn = yyDollar[2].token @@ -3153,7 +3159,7 @@ yydefault: } case 136: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:834 + // line internal/php7/php7.y:840 { yyVAL.node = &ast.StmtDo{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[7].token), @@ -3168,7 +3174,7 @@ yydefault: } case 137: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:847 + // line internal/php7/php7.y:853 { yyDollar[9].node.(*ast.StmtFor).ForTkn = yyDollar[1].token yyDollar[9].node.(*ast.StmtFor).OpenParenthesisTkn = yyDollar[2].token @@ -3187,7 +3193,7 @@ yydefault: } case 138: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:864 + // line internal/php7/php7.y:870 { yyDollar[5].node.(*ast.StmtSwitch).SwitchTkn = yyDollar[1].token yyDollar[5].node.(*ast.StmtSwitch).OpenParenthesisTkn = yyDollar[2].token @@ -3199,7 +3205,7 @@ yydefault: } case 139: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:874 + // line internal/php7/php7.y:880 { yyVAL.node = &ast.StmtBreak{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3210,7 +3216,7 @@ yydefault: } case 140: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:883 + // line internal/php7/php7.y:889 { yyVAL.node = &ast.StmtContinue{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3221,7 +3227,7 @@ yydefault: } case 141: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:892 + // line internal/php7/php7.y:898 { yyVAL.node = &ast.StmtReturn{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3232,7 +3238,7 @@ yydefault: } case 142: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:901 + // line internal/php7/php7.y:907 { yyDollar[2].node.(*ast.StmtGlobal).GlobalTkn = yyDollar[1].token yyDollar[2].node.(*ast.StmtGlobal).SemiColonTkn = yyDollar[3].token @@ -3242,7 +3248,7 @@ yydefault: } case 143: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:909 + // line internal/php7/php7.y:915 { yyDollar[2].node.(*ast.StmtStatic).StaticTkn = yyDollar[1].token yyDollar[2].node.(*ast.StmtStatic).SemiColonTkn = yyDollar[3].token @@ -3252,7 +3258,7 @@ yydefault: } case 144: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:917 + // line internal/php7/php7.y:923 { yyDollar[2].node.(*ast.StmtEcho).EchoTkn = yyDollar[1].token yyDollar[2].node.(*ast.StmtEcho).SemiColonTkn = yyDollar[3].token @@ -3262,7 +3268,7 @@ yydefault: } case 145: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:925 + // line internal/php7/php7.y:931 { yyVAL.node = &ast.StmtInlineHtml{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -3272,7 +3278,7 @@ yydefault: } case 146: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:933 + // line internal/php7/php7.y:939 { yyVAL.node = &ast.StmtExpression{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -3282,11 +3288,13 @@ yydefault: } case 147: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:941 + // line internal/php7/php7.y:947 { yyDollar[3].node.(*ast.StmtUnset).UnsetTkn = yyDollar[1].token yyDollar[3].node.(*ast.StmtUnset).OpenParenthesisTkn = yyDollar[2].token - yyDollar[3].node.(*ast.StmtUnset).SeparatorTkns = append(yyDollar[3].node.(*ast.StmtUnset).SeparatorTkns, yyDollar[4].token) + if yyDollar[4].token != nil { + yyDollar[3].node.(*ast.StmtUnset).SeparatorTkns = append(yyDollar[3].node.(*ast.StmtUnset).SeparatorTkns, yyDollar[4].token) + } yyDollar[3].node.(*ast.StmtUnset).CloseParenthesisTkn = yyDollar[5].token yyDollar[3].node.(*ast.StmtUnset).SemiColonTkn = yyDollar[6].token yyDollar[3].node.(*ast.StmtUnset).Position = yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token) @@ -3295,7 +3303,7 @@ yydefault: } case 148: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:952 + // line internal/php7/php7.y:960 { yyDollar[7].node.(*ast.StmtForeach).ForeachTkn = yyDollar[1].token yyDollar[7].node.(*ast.StmtForeach).OpenParenthesisTkn = yyDollar[2].token @@ -3309,7 +3317,7 @@ yydefault: } case 149: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:964 + // line internal/php7/php7.y:972 { yyDollar[9].node.(*ast.StmtForeach).ForeachTkn = yyDollar[1].token yyDollar[9].node.(*ast.StmtForeach).OpenParenthesisTkn = yyDollar[2].token @@ -3325,7 +3333,7 @@ yydefault: } case 150: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:978 + // line internal/php7/php7.y:986 { yyDollar[5].node.(*ast.StmtDeclare).DeclareTkn = yyDollar[1].token yyDollar[5].node.(*ast.StmtDeclare).OpenParenthesisTkn = yyDollar[2].token @@ -3338,7 +3346,7 @@ yydefault: } case 151: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:989 + // line internal/php7/php7.y:997 { yyVAL.node = &ast.StmtNop{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -3347,7 +3355,7 @@ yydefault: } case 152: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:996 + // line internal/php7/php7.y:1004 { pos := yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[5].list) if yyDollar[6].node != nil { @@ -3366,7 +3374,7 @@ yydefault: } case 153: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1013 + // line internal/php7/php7.y:1021 { yyVAL.node = &ast.StmtThrow{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3377,7 +3385,7 @@ yydefault: } case 154: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1022 + // line internal/php7/php7.y:1030 { yyVAL.node = &ast.StmtGoto{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3392,7 +3400,7 @@ yydefault: } case 155: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1035 + // line internal/php7/php7.y:1043 { yyVAL.node = &ast.StmtLabel{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -3406,13 +3414,13 @@ yydefault: } case 156: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1049 + // line internal/php7/php7.y:1057 { yyVAL.list = []ast.Vertex{} } case 157: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:1053 + // line internal/php7/php7.y:1061 { catch := yyDollar[4].node.(*ast.StmtCatch) catch.CatchTkn = yyDollar[2].token @@ -3435,7 +3443,7 @@ yydefault: } case 158: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1076 + // line internal/php7/php7.y:1084 { yyVAL.node = &ast.StmtCatch{ Types: []ast.Vertex{yyDollar[1].node}, @@ -3443,7 +3451,7 @@ yydefault: } case 159: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1082 + // line internal/php7/php7.y:1090 { yyDollar[1].node.(*ast.StmtCatch).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtCatch).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.StmtCatch).Types = append(yyDollar[1].node.(*ast.StmtCatch).Types, yyDollar[3].node) @@ -3452,13 +3460,13 @@ yydefault: } case 160: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1092 + // line internal/php7/php7.y:1100 { yyVAL.node = nil } case 161: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1096 + // line internal/php7/php7.y:1104 { yyVAL.node = &ast.StmtFinally{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3470,7 +3478,7 @@ yydefault: } case 162: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1109 + // line internal/php7/php7.y:1117 { yyVAL.node = &ast.StmtUnset{ Vars: []ast.Vertex{yyDollar[1].node}, @@ -3478,7 +3486,7 @@ yydefault: } case 163: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1115 + // line internal/php7/php7.y:1123 { yyDollar[1].node.(*ast.StmtUnset).Vars = append(yyDollar[1].node.(*ast.StmtUnset).Vars, yyDollar[3].node) yyDollar[1].node.(*ast.StmtUnset).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtUnset).SeparatorTkns, yyDollar[2].token) @@ -3487,13 +3495,13 @@ yydefault: } case 164: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1125 + // line internal/php7/php7.y:1133 { yyVAL.node = yyDollar[1].node } case 165: yyDollar = yyS[yypt-11 : yypt+1] - // line internal/php7/php7.y:1132 + // line internal/php7/php7.y:1140 { yyVAL.node = &ast.StmtFunction{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[11].token), @@ -3517,31 +3525,31 @@ yydefault: } case 166: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1157 + // line internal/php7/php7.y:1165 { yyVAL.token = nil } case 167: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1161 + // line internal/php7/php7.y:1169 { yyVAL.token = yyDollar[1].token } case 168: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1168 + // line internal/php7/php7.y:1176 { yyVAL.token = nil } case 169: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1172 + // line internal/php7/php7.y:1180 { yyVAL.token = yyDollar[1].token } case 170: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:1179 + // line internal/php7/php7.y:1187 { yyVAL.node = &ast.StmtClass{ Position: yylex.(*Parser).builder.NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[9].token), @@ -3561,7 +3569,7 @@ yydefault: } case 171: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php7/php7.y:1197 + // line internal/php7/php7.y:1205 { yyVAL.node = &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[8].token), @@ -3580,27 +3588,17 @@ yydefault: } case 172: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1217 + // line internal/php7/php7.y:1225 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 173: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1221 + // line internal/php7/php7.y:1229 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 174: - yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1228 - { - yyVAL.node = &ast.Identifier{ - Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), - IdentifierTkn: yyDollar[1].token, - Value: yyDollar[1].token.Value, - } - } - case 175: yyDollar = yyS[yypt-1 : yypt+1] // line internal/php7/php7.y:1236 { @@ -3610,9 +3608,19 @@ yydefault: Value: yyDollar[1].token.Value, } } + case 175: + yyDollar = yyS[yypt-1 : yypt+1] + // line internal/php7/php7.y:1244 + { + yyVAL.node = &ast.Identifier{ + Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), + IdentifierTkn: yyDollar[1].token, + Value: yyDollar[1].token.Value, + } + } case 176: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1247 + // line internal/php7/php7.y:1255 { yyVAL.node = &ast.StmtTrait{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), @@ -3629,7 +3637,7 @@ yydefault: } case 177: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:1265 + // line internal/php7/php7.y:1273 { yyVAL.node = &ast.StmtInterface{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[7].token), @@ -3647,13 +3655,13 @@ yydefault: } case 178: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1284 + // line internal/php7/php7.y:1292 { yyVAL.node = nil } case 179: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1288 + // line internal/php7/php7.y:1296 { yyVAL.node = &ast.StmtClassExtends{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -3663,13 +3671,13 @@ yydefault: } case 180: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1299 + // line internal/php7/php7.y:1307 { yyVAL.node = nil } case 181: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1303 + // line internal/php7/php7.y:1311 { yyVAL.node = &ast.StmtInterfaceExtends{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -3680,13 +3688,13 @@ yydefault: } case 182: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1315 + // line internal/php7/php7.y:1323 { yyVAL.node = nil } case 183: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1319 + // line internal/php7/php7.y:1327 { yyVAL.node = &ast.StmtClassImplements{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].node.(*ast.ParserSeparatedList).Items), @@ -3697,13 +3705,13 @@ yydefault: } case 184: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1331 + // line internal/php7/php7.y:1339 { yyVAL.node = yyDollar[1].node } case 185: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1335 + // line internal/php7/php7.y:1343 { yyVAL.node = &ast.ExprReference{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -3713,7 +3721,7 @@ yydefault: } case 186: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1343 + // line internal/php7/php7.y:1351 { yyVAL.node = &ast.ExprList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3726,7 +3734,7 @@ yydefault: } case 187: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1354 + // line internal/php7/php7.y:1362 { yyVAL.node = &ast.ExprList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3738,7 +3746,7 @@ yydefault: } case 188: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1367 + // line internal/php7/php7.y:1375 { yyVAL.node = &ast.StmtFor{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3747,7 +3755,7 @@ yydefault: } case 189: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1374 + // line internal/php7/php7.y:1382 { yyVAL.node = &ast.StmtFor{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3763,7 +3771,7 @@ yydefault: } case 190: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1391 + // line internal/php7/php7.y:1399 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3772,7 +3780,7 @@ yydefault: } case 191: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1398 + // line internal/php7/php7.y:1406 { yyVAL.node = &ast.StmtForeach{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3788,7 +3796,7 @@ yydefault: } case 192: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1415 + // line internal/php7/php7.y:1423 { yyVAL.node = &ast.StmtDeclare{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3797,7 +3805,7 @@ yydefault: } case 193: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1422 + // line internal/php7/php7.y:1430 { yyVAL.node = &ast.StmtDeclare{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3813,7 +3821,7 @@ yydefault: } case 194: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1439 + // line internal/php7/php7.y:1447 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -3824,7 +3832,7 @@ yydefault: } case 195: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1448 + // line internal/php7/php7.y:1456 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3836,7 +3844,7 @@ yydefault: } case 196: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1458 + // line internal/php7/php7.y:1466 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3849,7 +3857,7 @@ yydefault: } case 197: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1469 + // line internal/php7/php7.y:1477 { yyVAL.node = &ast.StmtSwitch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[5].token), @@ -3863,13 +3871,13 @@ yydefault: } case 198: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1484 + // line internal/php7/php7.y:1492 { yyVAL.list = nil } case 199: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1488 + // line internal/php7/php7.y:1496 { yyVAL.list = append(yyDollar[1].list, &ast.StmtCase{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[5].list), @@ -3881,7 +3889,7 @@ yydefault: } case 200: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1498 + // line internal/php7/php7.y:1506 { yyVAL.list = append(yyDollar[1].list, &ast.StmtDefault{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list), @@ -3892,19 +3900,19 @@ yydefault: } case 201: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1510 + // line internal/php7/php7.y:1518 { yyVAL.token = yyDollar[1].token } case 202: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1514 + // line internal/php7/php7.y:1522 { yyVAL.token = yyDollar[1].token } case 203: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1521 + // line internal/php7/php7.y:1529 { yyVAL.node = &ast.StmtWhile{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -3913,7 +3921,7 @@ yydefault: } case 204: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1528 + // line internal/php7/php7.y:1536 { yyVAL.node = &ast.StmtWhile{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -3929,7 +3937,7 @@ yydefault: } case 205: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:1545 + // line internal/php7/php7.y:1553 { yyVAL.node = &ast.StmtIf{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node), @@ -3942,7 +3950,7 @@ yydefault: } case 206: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1556 + // line internal/php7/php7.y:1564 { yyDollar[1].node.(*ast.StmtIf).ElseIf = append(yyDollar[1].node.(*ast.StmtIf).ElseIf, &ast.StmtElseIf{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[6].node), @@ -3959,13 +3967,13 @@ yydefault: } case 207: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1574 + // line internal/php7/php7.y:1582 { yyVAL.node = yyDollar[1].node } case 208: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1578 + // line internal/php7/php7.y:1586 { yyDollar[1].node.(*ast.StmtIf).Else = &ast.StmtElse{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[3].node), @@ -3979,7 +3987,7 @@ yydefault: } case 209: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1593 + // line internal/php7/php7.y:1601 { yyVAL.node = &ast.StmtIf{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[1].token, yyDollar[6].list), @@ -3997,7 +4005,7 @@ yydefault: } case 210: yyDollar = yyS[yypt-7 : yypt+1] - // line internal/php7/php7.y:1609 + // line internal/php7/php7.y:1617 { yyDollar[1].node.(*ast.StmtIf).ElseIf = append(yyDollar[1].node.(*ast.StmtIf).ElseIf, &ast.StmtElseIf{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[7].list), @@ -4017,7 +4025,7 @@ yydefault: } case 211: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1630 + // line internal/php7/php7.y:1638 { yyDollar[1].node.(*ast.StmtIf).EndIfTkn = yyDollar[2].token yyDollar[1].node.(*ast.StmtIf).SemiColonTkn = yyDollar[3].token @@ -4027,7 +4035,7 @@ yydefault: } case 212: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1638 + // line internal/php7/php7.y:1646 { yyDollar[1].node.(*ast.StmtIf).Else = &ast.StmtElse{ Position: yylex.(*Parser).builder.NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list), @@ -4047,19 +4055,19 @@ yydefault: } case 213: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1659 + // line internal/php7/php7.y:1667 { yyVAL.node = yyDollar[1].node } case 214: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1663 + // line internal/php7/php7.y:1671 { yyVAL.node = &ast.ParserSeparatedList{} } case 215: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1670 + // line internal/php7/php7.y:1678 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4067,7 +4075,7 @@ yydefault: } case 216: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1676 + // line internal/php7/php7.y:1684 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4076,7 +4084,7 @@ yydefault: } case 217: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1686 + // line internal/php7/php7.y:1694 { pos := yylex.(*Parser).builder.NewTokenPosition(yyDollar[4].token) if yyDollar[1].node != nil { @@ -4104,7 +4112,7 @@ yydefault: } case 218: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:1712 + // line internal/php7/php7.y:1720 { pos := yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[4].token, yyDollar[6].node) if yyDollar[1].node != nil { @@ -4134,25 +4142,25 @@ yydefault: } case 219: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1743 + // line internal/php7/php7.y:1751 { yyVAL.node = nil } case 220: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1747 + // line internal/php7/php7.y:1755 { yyVAL.node = yyDollar[1].node } case 221: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1754 + // line internal/php7/php7.y:1762 { yyVAL.node = yyDollar[1].node } case 222: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1758 + // line internal/php7/php7.y:1766 { yyVAL.node = &ast.Nullable{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4162,7 +4170,7 @@ yydefault: } case 223: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1769 + // line internal/php7/php7.y:1777 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4172,7 +4180,7 @@ yydefault: } case 224: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1777 + // line internal/php7/php7.y:1785 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4182,19 +4190,19 @@ yydefault: } case 225: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1785 + // line internal/php7/php7.y:1793 { yyVAL.node = yyDollar[1].node } case 226: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1792 + // line internal/php7/php7.y:1800 { yyVAL.node = &ast.ReturnType{} } case 227: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1796 + // line internal/php7/php7.y:1804 { yyVAL.node = &ast.ReturnType{ ColonTkn: yyDollar[1].token, @@ -4203,7 +4211,7 @@ yydefault: } case 228: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1806 + // line internal/php7/php7.y:1814 { yyVAL.node = &ast.ArgumentList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -4213,19 +4221,21 @@ yydefault: } case 229: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1814 + // line internal/php7/php7.y:1822 { argumentList := yyDollar[2].node.(*ast.ArgumentList) argumentList.Position = yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token) argumentList.OpenParenthesisTkn = yyDollar[1].token - argumentList.SeparatorTkns = append(argumentList.SeparatorTkns, yyDollar[3].token) + if yyDollar[3].token != nil { + argumentList.SeparatorTkns = append(argumentList.SeparatorTkns, yyDollar[3].token) + } argumentList.CloseParenthesisTkn = yyDollar[4].token yyVAL.node = argumentList } case 230: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1827 + // line internal/php7/php7.y:1837 { yyVAL.node = &ast.ArgumentList{ Arguments: []ast.Vertex{yyDollar[1].node}, @@ -4233,7 +4243,7 @@ yydefault: } case 231: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1833 + // line internal/php7/php7.y:1843 { yyDollar[1].node.(*ast.ArgumentList).SeparatorTkns = append(yyDollar[1].node.(*ast.ArgumentList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ArgumentList).Arguments = append(yyDollar[1].node.(*ast.ArgumentList).Arguments, yyDollar[3].node) @@ -4242,7 +4252,7 @@ yydefault: } case 232: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1843 + // line internal/php7/php7.y:1853 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -4251,7 +4261,7 @@ yydefault: } case 233: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1850 + // line internal/php7/php7.y:1860 { yyVAL.node = &ast.Argument{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4261,7 +4271,7 @@ yydefault: } case 234: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1861 + // line internal/php7/php7.y:1871 { yyDollar[1].node.(*ast.StmtGlobal).Vars = append(yyDollar[1].node.(*ast.StmtGlobal).Vars, yyDollar[3].node) yyDollar[1].node.(*ast.StmtGlobal).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtGlobal).SeparatorTkns, yyDollar[2].token) @@ -4270,7 +4280,7 @@ yydefault: } case 235: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1868 + // line internal/php7/php7.y:1878 { yyVAL.node = &ast.StmtGlobal{ Vars: []ast.Vertex{yyDollar[1].node}, @@ -4278,13 +4288,13 @@ yydefault: } case 236: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1877 + // line internal/php7/php7.y:1887 { yyVAL.node = yyDollar[1].node } case 237: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1884 + // line internal/php7/php7.y:1894 { yyDollar[1].node.(*ast.StmtStatic).Vars = append(yyDollar[1].node.(*ast.StmtStatic).Vars, yyDollar[3].node) yyDollar[1].node.(*ast.StmtStatic).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtStatic).SeparatorTkns, yyDollar[2].token) @@ -4293,7 +4303,7 @@ yydefault: } case 238: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1891 + // line internal/php7/php7.y:1901 { yyVAL.node = &ast.StmtStatic{ Vars: []ast.Vertex{yyDollar[1].node}, @@ -4301,7 +4311,7 @@ yydefault: } case 239: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:1900 + // line internal/php7/php7.y:1910 { yyVAL.node = &ast.StmtStaticVar{ @@ -4318,7 +4328,7 @@ yydefault: } case 240: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1915 + // line internal/php7/php7.y:1925 { yyVAL.node = &ast.StmtStaticVar{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4336,19 +4346,19 @@ yydefault: } case 241: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:1934 + // line internal/php7/php7.y:1944 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 242: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:1938 + // line internal/php7/php7.y:1948 { yyVAL.list = []ast.Vertex{} } case 243: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1945 + // line internal/php7/php7.y:1955 { yyVAL.node = &ast.StmtPropertyList{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition(yyDollar[1].list, yyDollar[4].token), @@ -4361,7 +4371,7 @@ yydefault: } case 244: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:1956 + // line internal/php7/php7.y:1966 { yyVAL.node = &ast.StmtClassConstList{ Position: yylex.(*Parser).builder.NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[4].token), @@ -4374,7 +4384,7 @@ yydefault: } case 245: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:1967 + // line internal/php7/php7.y:1977 { yyVAL.node = &ast.StmtTraitUse{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4386,7 +4396,7 @@ yydefault: } case 246: yyDollar = yyS[yypt-10 : yypt+1] - // line internal/php7/php7.y:1977 + // line internal/php7/php7.y:1987 { pos := yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[2].token, yyDollar[10].node) if yyDollar[1].list != nil { @@ -4414,7 +4424,7 @@ yydefault: } case 247: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2006 + // line internal/php7/php7.y:2016 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4422,7 +4432,7 @@ yydefault: } case 248: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2012 + // line internal/php7/php7.y:2022 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4431,7 +4441,7 @@ yydefault: } case 249: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2022 + // line internal/php7/php7.y:2032 { yyVAL.node = &ast.StmtNop{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4440,40 +4450,40 @@ yydefault: } case 250: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2029 + // line internal/php7/php7.y:2039 { yyVAL.node = &ast.StmtTraitAdaptationList{ - Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), - OpenParenthesisTkn: yyDollar[1].token, - CloseParenthesisTkn: yyDollar[2].token, + Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), + OpenCurlyBracketTkn: yyDollar[1].token, + CloseCurlyBracketTkn: yyDollar[2].token, } } case 251: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2037 + // line internal/php7/php7.y:2047 { yyVAL.node = &ast.StmtTraitAdaptationList{ - Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), - OpenParenthesisTkn: yyDollar[1].token, - Adaptations: yyDollar[2].list, - CloseParenthesisTkn: yyDollar[3].token, + Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), + OpenCurlyBracketTkn: yyDollar[1].token, + Adaptations: yyDollar[2].list, + CloseCurlyBracketTkn: yyDollar[3].token, } } case 252: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2049 + // line internal/php7/php7.y:2059 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 253: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2053 + // line internal/php7/php7.y:2063 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 254: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2060 + // line internal/php7/php7.y:2070 { yyDollar[1].node.(*ast.StmtTraitUsePrecedence).SemiColonTkn = yyDollar[2].token @@ -4481,7 +4491,7 @@ yydefault: } case 255: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2066 + // line internal/php7/php7.y:2076 { yyDollar[1].node.(*ast.StmtTraitUseAlias).SemiColonTkn = yyDollar[2].token @@ -4489,7 +4499,7 @@ yydefault: } case 256: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2075 + // line internal/php7/php7.y:2085 { yyVAL.node = &ast.StmtTraitUsePrecedence{ Position: yylex.(*Parser).builder.NewNodeNodeListPosition(yyDollar[1].node, yyDollar[3].node.(*ast.ParserSeparatedList).Items), @@ -4501,7 +4511,7 @@ yydefault: } case 257: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2088 + // line internal/php7/php7.y:2098 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -4516,7 +4526,7 @@ yydefault: } case 258: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2101 + // line internal/php7/php7.y:2111 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -4531,7 +4541,7 @@ yydefault: } case 259: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2114 + // line internal/php7/php7.y:2124 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), @@ -4547,7 +4557,7 @@ yydefault: } case 260: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2128 + // line internal/php7/php7.y:2138 { yyVAL.node = &ast.StmtTraitUseAlias{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -4558,7 +4568,7 @@ yydefault: } case 261: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2140 + // line internal/php7/php7.y:2150 { yyVAL.node = &ast.StmtTraitMethodRef{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4571,13 +4581,13 @@ yydefault: } case 262: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2151 + // line internal/php7/php7.y:2161 { yyVAL.node = yyDollar[1].node } case 263: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2158 + // line internal/php7/php7.y:2168 { yyVAL.node = &ast.StmtTraitMethodRef{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -4592,7 +4602,7 @@ yydefault: } case 264: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2174 + // line internal/php7/php7.y:2184 { yyVAL.node = &ast.StmtNop{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4601,7 +4611,7 @@ yydefault: } case 265: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2181 + // line internal/php7/php7.y:2191 { yyVAL.node = &ast.StmtStmtList{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -4612,13 +4622,13 @@ yydefault: } case 266: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2193 + // line internal/php7/php7.y:2203 { yyVAL.list = yyDollar[1].list } case 267: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2197 + // line internal/php7/php7.y:2207 { yyVAL.list = []ast.Vertex{ &ast.Identifier{ @@ -4630,31 +4640,31 @@ yydefault: } case 268: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2210 + // line internal/php7/php7.y:2220 { yyVAL.list = nil } case 269: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2214 + // line internal/php7/php7.y:2224 { yyVAL.list = yyDollar[1].list } case 270: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2221 + // line internal/php7/php7.y:2231 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 271: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2225 + // line internal/php7/php7.y:2235 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 272: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2232 + // line internal/php7/php7.y:2242 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4664,7 +4674,7 @@ yydefault: } case 273: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2240 + // line internal/php7/php7.y:2250 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4674,7 +4684,7 @@ yydefault: } case 274: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2248 + // line internal/php7/php7.y:2258 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4684,7 +4694,7 @@ yydefault: } case 275: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2256 + // line internal/php7/php7.y:2266 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4694,7 +4704,7 @@ yydefault: } case 276: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2264 + // line internal/php7/php7.y:2274 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4704,7 +4714,7 @@ yydefault: } case 277: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2272 + // line internal/php7/php7.y:2282 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4714,7 +4724,7 @@ yydefault: } case 278: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2283 + // line internal/php7/php7.y:2293 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4723,7 +4733,7 @@ yydefault: } case 279: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2290 + // line internal/php7/php7.y:2300 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4731,7 +4741,7 @@ yydefault: } case 280: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2299 + // line internal/php7/php7.y:2309 { yyVAL.node = &ast.StmtProperty{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -4748,7 +4758,7 @@ yydefault: } case 281: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2314 + // line internal/php7/php7.y:2324 { yyVAL.node = &ast.StmtProperty{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4766,7 +4776,7 @@ yydefault: } case 282: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2333 + // line internal/php7/php7.y:2343 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4775,7 +4785,7 @@ yydefault: } case 283: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2340 + // line internal/php7/php7.y:2350 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4783,7 +4793,7 @@ yydefault: } case 284: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2349 + // line internal/php7/php7.y:2359 { yyVAL.node = &ast.StmtConstant{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4798,7 +4808,7 @@ yydefault: } case 285: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2365 + // line internal/php7/php7.y:2375 { yyVAL.node = &ast.StmtConstant{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node), @@ -4813,7 +4823,7 @@ yydefault: } case 286: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2381 + // line internal/php7/php7.y:2391 { yyDollar[1].node.(*ast.StmtEcho).Exprs = append(yyDollar[1].node.(*ast.StmtEcho).Exprs, yyDollar[3].node) yyDollar[1].node.(*ast.StmtEcho).SeparatorTkns = append(yyDollar[1].node.(*ast.StmtEcho).SeparatorTkns, yyDollar[2].token) @@ -4822,7 +4832,7 @@ yydefault: } case 287: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2388 + // line internal/php7/php7.y:2398 { yyVAL.node = &ast.StmtEcho{ Exprs: []ast.Vertex{yyDollar[1].node}, @@ -4830,25 +4840,25 @@ yydefault: } case 288: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2397 + // line internal/php7/php7.y:2407 { yyVAL.node = yyDollar[1].node } case 289: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:2404 + // line internal/php7/php7.y:2414 { yyVAL.node = &ast.ParserSeparatedList{} } case 290: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2408 + // line internal/php7/php7.y:2418 { yyVAL.node = yyDollar[1].node } case 291: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2415 + // line internal/php7/php7.y:2425 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -4857,7 +4867,7 @@ yydefault: } case 292: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2422 + // line internal/php7/php7.y:2432 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -4865,7 +4875,7 @@ yydefault: } case 293: yyDollar = yyS[yypt-8 : yypt+1] - // line internal/php7/php7.y:2431 + // line internal/php7/php7.y:2441 { yyVAL.node = &ast.StmtClass{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[8].token), @@ -4873,7 +4883,7 @@ yydefault: OpenParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[2].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[2].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).CloseParenthesisTkn, Extends: yyDollar[3].node, Implements: yyDollar[4].node, OpenCurlyBracket: yyDollar[6].token, @@ -4883,7 +4893,7 @@ yydefault: } case 294: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2450 + // line internal/php7/php7.y:2460 { if yyDollar[3].node != nil { yyVAL.node = &ast.ExprNew{ @@ -4893,7 +4903,7 @@ yydefault: OpenParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[3].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[3].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[3].node.(*ast.ArgumentList).CloseParenthesisTkn, } } else { yyVAL.node = &ast.ExprNew{ @@ -4905,7 +4915,7 @@ yydefault: } case 295: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2470 + // line internal/php7/php7.y:2480 { yyVAL.node = &ast.ExprNew{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4915,7 +4925,7 @@ yydefault: } case 296: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:2481 + // line internal/php7/php7.y:2491 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[6].node), @@ -4933,7 +4943,7 @@ yydefault: } case 297: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:2497 + // line internal/php7/php7.y:2507 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node), @@ -4950,7 +4960,7 @@ yydefault: } case 298: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2512 + // line internal/php7/php7.y:2522 { yyVAL.node = &ast.ExprAssign{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -4961,7 +4971,7 @@ yydefault: } case 299: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2521 + // line internal/php7/php7.y:2531 { yyVAL.node = &ast.ExprAssignReference{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -4973,7 +4983,7 @@ yydefault: } case 300: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2531 + // line internal/php7/php7.y:2541 { yyVAL.node = &ast.ExprClone{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -4983,7 +4993,7 @@ yydefault: } case 301: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2539 + // line internal/php7/php7.y:2549 { yyVAL.node = &ast.ExprAssignPlus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -4994,7 +5004,7 @@ yydefault: } case 302: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2548 + // line internal/php7/php7.y:2558 { yyVAL.node = &ast.ExprAssignMinus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5005,7 +5015,7 @@ yydefault: } case 303: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2557 + // line internal/php7/php7.y:2567 { yyVAL.node = &ast.ExprAssignMul{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5016,7 +5026,7 @@ yydefault: } case 304: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2566 + // line internal/php7/php7.y:2576 { yyVAL.node = &ast.ExprAssignPow{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5027,7 +5037,7 @@ yydefault: } case 305: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2575 + // line internal/php7/php7.y:2585 { yyVAL.node = &ast.ExprAssignDiv{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5038,7 +5048,7 @@ yydefault: } case 306: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2584 + // line internal/php7/php7.y:2594 { yyVAL.node = &ast.ExprAssignConcat{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5049,7 +5059,7 @@ yydefault: } case 307: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2593 + // line internal/php7/php7.y:2603 { yyVAL.node = &ast.ExprAssignMod{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5060,7 +5070,7 @@ yydefault: } case 308: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2602 + // line internal/php7/php7.y:2612 { yyVAL.node = &ast.ExprAssignBitwiseAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5071,7 +5081,7 @@ yydefault: } case 309: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2611 + // line internal/php7/php7.y:2621 { yyVAL.node = &ast.ExprAssignBitwiseOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5082,7 +5092,7 @@ yydefault: } case 310: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2620 + // line internal/php7/php7.y:2630 { yyVAL.node = &ast.ExprAssignBitwiseXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5093,7 +5103,7 @@ yydefault: } case 311: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2629 + // line internal/php7/php7.y:2639 { yyVAL.node = &ast.ExprAssignShiftLeft{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5104,7 +5114,7 @@ yydefault: } case 312: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2638 + // line internal/php7/php7.y:2648 { yyVAL.node = &ast.ExprAssignShiftRight{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5115,7 +5125,7 @@ yydefault: } case 313: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2647 + // line internal/php7/php7.y:2657 { yyVAL.node = &ast.ExprAssignCoalesce{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5126,7 +5136,7 @@ yydefault: } case 314: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2656 + // line internal/php7/php7.y:2666 { yyVAL.node = &ast.ExprPostInc{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -5136,7 +5146,7 @@ yydefault: } case 315: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2664 + // line internal/php7/php7.y:2674 { yyVAL.node = &ast.ExprPreInc{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5146,7 +5156,7 @@ yydefault: } case 316: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2672 + // line internal/php7/php7.y:2682 { yyVAL.node = &ast.ExprPostDec{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token), @@ -5156,7 +5166,7 @@ yydefault: } case 317: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2680 + // line internal/php7/php7.y:2690 { yyVAL.node = &ast.ExprPreDec{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5166,7 +5176,7 @@ yydefault: } case 318: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2688 + // line internal/php7/php7.y:2698 { yyVAL.node = &ast.ExprBinaryBooleanOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5177,7 +5187,7 @@ yydefault: } case 319: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2697 + // line internal/php7/php7.y:2707 { yyVAL.node = &ast.ExprBinaryBooleanAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5188,7 +5198,7 @@ yydefault: } case 320: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2706 + // line internal/php7/php7.y:2716 { yyVAL.node = &ast.ExprBinaryLogicalOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5199,7 +5209,7 @@ yydefault: } case 321: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2715 + // line internal/php7/php7.y:2725 { yyVAL.node = &ast.ExprBinaryLogicalAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5210,7 +5220,7 @@ yydefault: } case 322: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2724 + // line internal/php7/php7.y:2734 { yyVAL.node = &ast.ExprBinaryLogicalXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5221,7 +5231,7 @@ yydefault: } case 323: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2733 + // line internal/php7/php7.y:2743 { yyVAL.node = &ast.ExprBinaryBitwiseOr{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5232,7 +5242,7 @@ yydefault: } case 324: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2742 + // line internal/php7/php7.y:2752 { yyVAL.node = &ast.ExprBinaryBitwiseAnd{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5243,7 +5253,7 @@ yydefault: } case 325: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2751 + // line internal/php7/php7.y:2761 { yyVAL.node = &ast.ExprBinaryBitwiseXor{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5254,7 +5264,7 @@ yydefault: } case 326: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2760 + // line internal/php7/php7.y:2770 { yyVAL.node = &ast.ExprBinaryConcat{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5265,7 +5275,7 @@ yydefault: } case 327: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2769 + // line internal/php7/php7.y:2779 { yyVAL.node = &ast.ExprBinaryPlus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5276,7 +5286,7 @@ yydefault: } case 328: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2778 + // line internal/php7/php7.y:2788 { yyVAL.node = &ast.ExprBinaryMinus{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5287,7 +5297,7 @@ yydefault: } case 329: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2787 + // line internal/php7/php7.y:2797 { yyVAL.node = &ast.ExprBinaryMul{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5298,7 +5308,7 @@ yydefault: } case 330: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2796 + // line internal/php7/php7.y:2806 { yyVAL.node = &ast.ExprBinaryPow{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5309,7 +5319,7 @@ yydefault: } case 331: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2805 + // line internal/php7/php7.y:2815 { yyVAL.node = &ast.ExprBinaryDiv{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5320,7 +5330,7 @@ yydefault: } case 332: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2814 + // line internal/php7/php7.y:2824 { yyVAL.node = &ast.ExprBinaryMod{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5331,7 +5341,7 @@ yydefault: } case 333: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2823 + // line internal/php7/php7.y:2833 { yyVAL.node = &ast.ExprBinaryShiftLeft{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5342,7 +5352,7 @@ yydefault: } case 334: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2832 + // line internal/php7/php7.y:2842 { yyVAL.node = &ast.ExprBinaryShiftRight{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5353,7 +5363,7 @@ yydefault: } case 335: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2841 + // line internal/php7/php7.y:2851 { yyVAL.node = &ast.ExprUnaryPlus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5363,7 +5373,7 @@ yydefault: } case 336: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2849 + // line internal/php7/php7.y:2859 { yyVAL.node = &ast.ExprUnaryMinus{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5373,7 +5383,7 @@ yydefault: } case 337: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2857 + // line internal/php7/php7.y:2867 { yyVAL.node = &ast.ExprBooleanNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5383,7 +5393,7 @@ yydefault: } case 338: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:2865 + // line internal/php7/php7.y:2875 { yyVAL.node = &ast.ExprBitwiseNot{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5393,7 +5403,7 @@ yydefault: } case 339: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2873 + // line internal/php7/php7.y:2883 { yyVAL.node = &ast.ExprBinaryIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5404,7 +5414,7 @@ yydefault: } case 340: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2882 + // line internal/php7/php7.y:2892 { yyVAL.node = &ast.ExprBinaryNotIdentical{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5415,7 +5425,7 @@ yydefault: } case 341: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2891 + // line internal/php7/php7.y:2901 { yyVAL.node = &ast.ExprBinaryEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5426,7 +5436,7 @@ yydefault: } case 342: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2900 + // line internal/php7/php7.y:2910 { yyVAL.node = &ast.ExprBinaryNotEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5437,7 +5447,7 @@ yydefault: } case 343: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2909 + // line internal/php7/php7.y:2919 { yyVAL.node = &ast.ExprBinarySmaller{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5448,7 +5458,7 @@ yydefault: } case 344: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2918 + // line internal/php7/php7.y:2928 { yyVAL.node = &ast.ExprBinarySmallerOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5459,7 +5469,7 @@ yydefault: } case 345: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2927 + // line internal/php7/php7.y:2937 { yyVAL.node = &ast.ExprBinaryGreater{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5470,7 +5480,7 @@ yydefault: } case 346: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2936 + // line internal/php7/php7.y:2946 { yyVAL.node = &ast.ExprBinaryGreaterOrEqual{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5481,7 +5491,7 @@ yydefault: } case 347: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2945 + // line internal/php7/php7.y:2955 { yyVAL.node = &ast.ExprBinarySpaceship{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5492,7 +5502,7 @@ yydefault: } case 348: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2954 + // line internal/php7/php7.y:2964 { yyVAL.node = &ast.ExprInstanceOf{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5503,7 +5513,7 @@ yydefault: } case 349: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2963 + // line internal/php7/php7.y:2973 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5514,13 +5524,13 @@ yydefault: } case 350: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:2972 + // line internal/php7/php7.y:2982 { yyVAL.node = yyDollar[1].node } case 351: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:2976 + // line internal/php7/php7.y:2986 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[5].node), @@ -5533,7 +5543,7 @@ yydefault: } case 352: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:2987 + // line internal/php7/php7.y:2997 { yyVAL.node = &ast.ExprTernary{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5545,7 +5555,7 @@ yydefault: } case 353: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:2997 + // line internal/php7/php7.y:3007 { yyVAL.node = &ast.ExprBinaryCoalesce{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -5556,13 +5566,13 @@ yydefault: } case 354: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3006 + // line internal/php7/php7.y:3016 { yyVAL.node = yyDollar[1].node } case 355: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3010 + // line internal/php7/php7.y:3020 { yyVAL.node = &ast.ExprCastInt{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5572,7 +5582,7 @@ yydefault: } case 356: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3018 + // line internal/php7/php7.y:3028 { yyVAL.node = &ast.ExprCastDouble{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5582,7 +5592,7 @@ yydefault: } case 357: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3026 + // line internal/php7/php7.y:3036 { yyVAL.node = &ast.ExprCastString{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5592,7 +5602,7 @@ yydefault: } case 358: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3034 + // line internal/php7/php7.y:3044 { yyVAL.node = &ast.ExprCastArray{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5602,7 +5612,7 @@ yydefault: } case 359: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3042 + // line internal/php7/php7.y:3052 { yyVAL.node = &ast.ExprCastObject{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5612,7 +5622,7 @@ yydefault: } case 360: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3050 + // line internal/php7/php7.y:3060 { yyVAL.node = &ast.ExprCastBool{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5622,7 +5632,7 @@ yydefault: } case 361: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3058 + // line internal/php7/php7.y:3068 { yyVAL.node = &ast.ExprCastUnset{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5632,7 +5642,7 @@ yydefault: } case 362: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3066 + // line internal/php7/php7.y:3076 { exit := &ast.ExprExit{ DieTkn: yyDollar[1].token, @@ -5651,7 +5661,7 @@ yydefault: } case 363: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3083 + // line internal/php7/php7.y:3093 { yyVAL.node = &ast.ExprErrorSuppress{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5661,13 +5671,13 @@ yydefault: } case 364: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3091 + // line internal/php7/php7.y:3101 { yyVAL.node = yyDollar[1].node } case 365: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3095 + // line internal/php7/php7.y:3105 { yyVAL.node = &ast.ExprShellExec{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5678,7 +5688,7 @@ yydefault: } case 366: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3104 + // line internal/php7/php7.y:3114 { yyVAL.node = &ast.ExprPrint{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5688,7 +5698,7 @@ yydefault: } case 367: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3112 + // line internal/php7/php7.y:3122 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -5697,7 +5707,7 @@ yydefault: } case 368: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3119 + // line internal/php7/php7.y:3129 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5707,7 +5717,7 @@ yydefault: } case 369: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3127 + // line internal/php7/php7.y:3137 { yyVAL.node = &ast.ExprYield{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node), @@ -5719,7 +5729,7 @@ yydefault: } case 370: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3137 + // line internal/php7/php7.y:3147 { yyVAL.node = &ast.ExprYieldFrom{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -5729,13 +5739,13 @@ yydefault: } case 371: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3145 + // line internal/php7/php7.y:3155 { yyVAL.node = yyDollar[1].node } case 372: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3149 + // line internal/php7/php7.y:3159 { switch n := yyDollar[2].node.(type) { case *ast.ExprClosure: @@ -5750,7 +5760,7 @@ yydefault: } case 373: yyDollar = yyS[yypt-11 : yypt+1] - // line internal/php7/php7.y:3165 + // line internal/php7/php7.y:3175 { yyVAL.node = &ast.ExprClosure{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[11].token), @@ -5770,7 +5780,7 @@ yydefault: } case 374: yyDollar = yyS[yypt-9 : yypt+1] - // line internal/php7/php7.y:3183 + // line internal/php7/php7.y:3193 { yyVAL.node = &ast.ExprArrowFunction{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[9].node), @@ -5788,25 +5798,25 @@ yydefault: } case 376: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3206 + // line internal/php7/php7.y:3216 { yyVAL.token = nil } case 377: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3210 + // line internal/php7/php7.y:3220 { yyVAL.token = yyDollar[1].token } case 378: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3217 + // line internal/php7/php7.y:3227 { yyVAL.node = nil } case 379: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3221 + // line internal/php7/php7.y:3231 { yyVAL.node = &ast.ExprClosureUse{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -5819,7 +5829,7 @@ yydefault: } case 380: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3235 + // line internal/php7/php7.y:3245 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -5828,7 +5838,7 @@ yydefault: } case 381: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3242 + // line internal/php7/php7.y:3252 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -5836,7 +5846,7 @@ yydefault: } case 382: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3251 + // line internal/php7/php7.y:3261 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -5849,7 +5859,7 @@ yydefault: } case 383: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3262 + // line internal/php7/php7.y:3272 { yyVAL.node = &ast.ExprReference{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -5866,7 +5876,7 @@ yydefault: } case 384: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3280 + // line internal/php7/php7.y:3290 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node), @@ -5874,12 +5884,12 @@ yydefault: OpenParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[2].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[2].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 385: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3291 + // line internal/php7/php7.y:3301 { yyVAL.node = &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5889,12 +5899,12 @@ yydefault: OpenParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[4].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 386: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3304 + // line internal/php7/php7.y:3314 { yyVAL.node = &ast.ExprStaticCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -5904,12 +5914,12 @@ yydefault: OpenParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[4].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[4].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[4].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 387: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3317 + // line internal/php7/php7.y:3327 { yyVAL.node = &ast.ExprFunctionCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node), @@ -5917,12 +5927,12 @@ yydefault: OpenParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: yyDollar[2].node.(*ast.ArgumentList).Arguments, SeparatorTkns: yyDollar[2].node.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: yyDollar[2].node.(*ast.ArgumentList).CloseParenthesisTkn, } } case 388: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3331 + // line internal/php7/php7.y:3341 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -5932,31 +5942,31 @@ yydefault: } case 389: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3339 + // line internal/php7/php7.y:3349 { yyVAL.node = yyDollar[1].node } case 390: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3346 + // line internal/php7/php7.y:3356 { yyVAL.node = yyDollar[1].node } case 391: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3350 + // line internal/php7/php7.y:3360 { yyVAL.node = yyDollar[1].node } case 392: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3357 + // line internal/php7/php7.y:3367 { yyVAL.node = nil } case 393: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3361 + // line internal/php7/php7.y:3371 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -5967,13 +5977,13 @@ yydefault: } case 394: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3373 + // line internal/php7/php7.y:3383 { yyVAL.list = []ast.Vertex{} } case 395: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3377 + // line internal/php7/php7.y:3387 { yyVAL.list = []ast.Vertex{ &ast.ScalarEncapsedStringPart{ @@ -5985,25 +5995,25 @@ yydefault: } case 396: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3387 + // line internal/php7/php7.y:3397 { yyVAL.list = yyDollar[1].list } case 397: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3394 + // line internal/php7/php7.y:3404 { yyVAL.node = &ast.ArgumentList{} } case 398: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3398 + // line internal/php7/php7.y:3408 { yyVAL.node = yyDollar[1].node } case 399: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3405 + // line internal/php7/php7.y:3415 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6016,7 +6026,7 @@ yydefault: } case 400: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3416 + // line internal/php7/php7.y:3426 { yyVAL.node = &ast.ExprArray{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6028,7 +6038,7 @@ yydefault: } case 401: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3426 + // line internal/php7/php7.y:3436 { yyVAL.node = &ast.ScalarString{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6038,7 +6048,7 @@ yydefault: } case 402: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3437 + // line internal/php7/php7.y:3447 { yyVAL.node = &ast.ScalarLnumber{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6048,7 +6058,7 @@ yydefault: } case 403: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3445 + // line internal/php7/php7.y:3455 { yyVAL.node = &ast.ScalarDnumber{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6058,7 +6068,7 @@ yydefault: } case 404: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3453 + // line internal/php7/php7.y:3463 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6068,7 +6078,7 @@ yydefault: } case 405: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3461 + // line internal/php7/php7.y:3471 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6078,7 +6088,7 @@ yydefault: } case 406: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3469 + // line internal/php7/php7.y:3479 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6088,7 +6098,7 @@ yydefault: } case 407: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3477 + // line internal/php7/php7.y:3487 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6098,7 +6108,7 @@ yydefault: } case 408: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3485 + // line internal/php7/php7.y:3495 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6108,7 +6118,7 @@ yydefault: } case 409: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3493 + // line internal/php7/php7.y:3503 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6118,7 +6128,7 @@ yydefault: } case 410: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3501 + // line internal/php7/php7.y:3511 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6128,7 +6138,7 @@ yydefault: } case 411: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3509 + // line internal/php7/php7.y:3519 { yyVAL.node = &ast.ScalarMagicConstant{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6138,7 +6148,7 @@ yydefault: } case 412: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3517 + // line internal/php7/php7.y:3527 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6155,7 +6165,7 @@ yydefault: } case 413: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3532 + // line internal/php7/php7.y:3542 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), @@ -6165,18 +6175,18 @@ yydefault: } case 414: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3540 + // line internal/php7/php7.y:3550 { yyVAL.node = &ast.ScalarEncapsed{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), OpenQoteTkn: yyDollar[1].token, Parts: yyDollar[2].list, - CloseQoteTkn: yyDollar[1].token, + CloseQoteTkn: yyDollar[3].token, } } case 415: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3549 + // line internal/php7/php7.y:3559 { yyVAL.node = &ast.ScalarHeredoc{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6187,19 +6197,19 @@ yydefault: } case 416: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3558 + // line internal/php7/php7.y:3568 { yyVAL.node = yyDollar[1].node } case 417: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3562 + // line internal/php7/php7.y:3572 { yyVAL.node = yyDollar[1].node } case 418: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3569 + // line internal/php7/php7.y:3579 { yyVAL.node = &ast.ExprConstFetch{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -6208,7 +6218,7 @@ yydefault: } case 419: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3576 + // line internal/php7/php7.y:3586 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -6223,7 +6233,7 @@ yydefault: } case 420: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3589 + // line internal/php7/php7.y:3599 { yyVAL.node = &ast.ExprClassConstFetch{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), @@ -6238,43 +6248,43 @@ yydefault: } case 421: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3605 + // line internal/php7/php7.y:3615 { yyVAL.node = yyDollar[1].node } case 422: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3609 + // line internal/php7/php7.y:3619 { yyVAL.node = yyDollar[1].node } case 423: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3616 + // line internal/php7/php7.y:3626 { yyVAL.node = nil } case 424: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3620 + // line internal/php7/php7.y:3630 { yyVAL.node = yyDollar[1].node } case 425: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3627 + // line internal/php7/php7.y:3637 { yyVAL.node = yyDollar[1].node } case 426: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3634 + // line internal/php7/php7.y:3644 { yyVAL.node = yyDollar[1].node } case 427: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3638 + // line internal/php7/php7.y:3648 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6285,19 +6295,19 @@ yydefault: } case 428: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3647 + // line internal/php7/php7.y:3657 { yyVAL.node = yyDollar[1].node } case 429: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3654 + // line internal/php7/php7.y:3664 { yyVAL.node = yyDollar[1].node } case 430: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3658 + // line internal/php7/php7.y:3668 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6308,29 +6318,17 @@ yydefault: } case 431: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3667 + // line internal/php7/php7.y:3677 { yyVAL.node = yyDollar[1].node } case 432: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3674 + // line internal/php7/php7.y:3684 { yyVAL.node = yyDollar[1].node } case 433: - yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3678 - { - yyVAL.node = &ast.ExprArrayDimFetch{ - Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), - Var: yyDollar[1].node, - OpenBracketTkn: yyDollar[2].token, - Dim: yyDollar[3].node, - CloseBracketTkn: yyDollar[4].token, - } - } - case 434: yyDollar = yyS[yypt-4 : yypt+1] // line internal/php7/php7.y:3688 { @@ -6342,7 +6340,7 @@ yydefault: CloseBracketTkn: yyDollar[4].token, } } - case 435: + case 434: yyDollar = yyS[yypt-4 : yypt+1] // line internal/php7/php7.y:3698 { @@ -6354,9 +6352,21 @@ yydefault: CloseBracketTkn: yyDollar[4].token, } } - case 436: + case 435: yyDollar = yyS[yypt-4 : yypt+1] // line internal/php7/php7.y:3708 + { + yyVAL.node = &ast.ExprArrayDimFetch{ + Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), + Var: yyDollar[1].node, + OpenBracketTkn: yyDollar[2].token, + Dim: yyDollar[3].node, + CloseBracketTkn: yyDollar[4].token, + } + } + case 436: + yyDollar = yyS[yypt-4 : yypt+1] + // line internal/php7/php7.y:3718 { yyVAL.node = &ast.ExprMethodCall{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6371,25 +6381,25 @@ yydefault: } case 437: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3721 + // line internal/php7/php7.y:3731 { yyVAL.node = yyDollar[1].node } case 438: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3728 + // line internal/php7/php7.y:3738 { yyVAL.node = yyDollar[1].node } case 439: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3732 + // line internal/php7/php7.y:3742 { yyVAL.node = yyDollar[1].node } case 440: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3736 + // line internal/php7/php7.y:3746 { yyVAL.node = &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6400,7 +6410,7 @@ yydefault: } case 441: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3748 + // line internal/php7/php7.y:3758 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6413,7 +6423,7 @@ yydefault: } case 442: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3759 + // line internal/php7/php7.y:3769 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6428,7 +6438,7 @@ yydefault: } case 443: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3772 + // line internal/php7/php7.y:3782 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6438,7 +6448,7 @@ yydefault: } case 444: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3783 + // line internal/php7/php7.y:3793 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6449,7 +6459,7 @@ yydefault: } case 445: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3792 + // line internal/php7/php7.y:3802 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6460,23 +6470,11 @@ yydefault: } case 446: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3804 + // line internal/php7/php7.y:3814 { yyVAL.node = yyDollar[1].node } case 447: - yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3808 - { - yyVAL.node = &ast.ExprArrayDimFetch{ - Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), - Var: yyDollar[1].node, - OpenBracketTkn: yyDollar[2].token, - Dim: yyDollar[3].node, - CloseBracketTkn: yyDollar[4].token, - } - } - case 448: yyDollar = yyS[yypt-4 : yypt+1] // line internal/php7/php7.y:3818 { @@ -6488,9 +6486,21 @@ yydefault: CloseBracketTkn: yyDollar[4].token, } } + case 448: + yyDollar = yyS[yypt-4 : yypt+1] + // line internal/php7/php7.y:3828 + { + yyVAL.node = &ast.ExprArrayDimFetch{ + Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), + Var: yyDollar[1].node, + OpenBracketTkn: yyDollar[2].token, + Dim: yyDollar[3].node, + CloseBracketTkn: yyDollar[4].token, + } + } case 449: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3828 + // line internal/php7/php7.y:3838 { yyVAL.node = &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6501,7 +6511,7 @@ yydefault: } case 450: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3837 + // line internal/php7/php7.y:3847 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6512,7 +6522,7 @@ yydefault: } case 451: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3846 + // line internal/php7/php7.y:3856 { yyVAL.node = &ast.ExprStaticPropertyFetch{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6523,7 +6533,7 @@ yydefault: } case 452: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3858 + // line internal/php7/php7.y:3868 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6533,7 +6543,7 @@ yydefault: } case 453: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3866 + // line internal/php7/php7.y:3876 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6544,13 +6554,13 @@ yydefault: } case 454: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3875 + // line internal/php7/php7.y:3885 { yyVAL.node = yyDollar[1].node } case 455: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3882 + // line internal/php7/php7.y:3892 { yyVAL.node = &ast.Identifier{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6560,7 +6570,7 @@ yydefault: } case 456: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3890 + // line internal/php7/php7.y:3900 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6571,13 +6581,13 @@ yydefault: } case 457: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3899 + // line internal/php7/php7.y:3909 { yyVAL.node = yyDollar[1].node } case 458: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3906 + // line internal/php7/php7.y:3916 { pairList := yyDollar[1].node.(*ast.ParserSeparatedList) fistPair := pairList.Items[0].(*ast.ExprArrayItem) @@ -6590,19 +6600,19 @@ yydefault: } case 459: yyDollar = yyS[yypt-0 : yypt+1] - // line internal/php7/php7.y:3920 + // line internal/php7/php7.y:3930 { yyVAL.node = &ast.ExprArrayItem{} } case 460: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3924 + // line internal/php7/php7.y:3934 { yyVAL.node = yyDollar[1].node } case 461: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3931 + // line internal/php7/php7.y:3941 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -6611,7 +6621,7 @@ yydefault: } case 462: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3938 + // line internal/php7/php7.y:3948 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -6619,7 +6629,7 @@ yydefault: } case 463: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:3947 + // line internal/php7/php7.y:3957 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), @@ -6630,7 +6640,7 @@ yydefault: } case 464: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:3956 + // line internal/php7/php7.y:3966 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), @@ -6639,7 +6649,7 @@ yydefault: } case 465: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:3963 + // line internal/php7/php7.y:3973 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), @@ -6654,7 +6664,7 @@ yydefault: } case 466: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3976 + // line internal/php7/php7.y:3986 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6667,7 +6677,7 @@ yydefault: } case 467: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:3987 + // line internal/php7/php7.y:3997 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6677,7 +6687,7 @@ yydefault: } case 468: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:3995 + // line internal/php7/php7.y:4005 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token), @@ -6695,7 +6705,7 @@ yydefault: } case 469: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4011 + // line internal/php7/php7.y:4021 { yyVAL.node = &ast.ExprArrayItem{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6711,13 +6721,13 @@ yydefault: } case 470: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4028 + // line internal/php7/php7.y:4038 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 471: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4032 + // line internal/php7/php7.y:4042 { yyVAL.list = append( yyDollar[1].list, @@ -6730,13 +6740,13 @@ yydefault: } case 472: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4043 + // line internal/php7/php7.y:4053 { yyVAL.list = []ast.Vertex{yyDollar[1].node} } case 473: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4047 + // line internal/php7/php7.y:4057 { yyVAL.list = []ast.Vertex{ &ast.ScalarEncapsedStringPart{ @@ -6749,7 +6759,7 @@ yydefault: } case 474: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4061 + // line internal/php7/php7.y:4071 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6762,7 +6772,7 @@ yydefault: } case 475: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4072 + // line internal/php7/php7.y:4082 { yyVAL.node = &ast.ExprArrayDimFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6781,7 +6791,7 @@ yydefault: } case 476: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4089 + // line internal/php7/php7.y:4099 { yyVAL.node = &ast.ExprPropertyFetch{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6803,7 +6813,7 @@ yydefault: } case 477: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4109 + // line internal/php7/php7.y:4119 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6817,7 +6827,7 @@ yydefault: } case 478: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4121 + // line internal/php7/php7.y:4131 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6835,7 +6845,7 @@ yydefault: } case 479: yyDollar = yyS[yypt-6 : yypt+1] - // line internal/php7/php7.y:4137 + // line internal/php7/php7.y:4147 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), @@ -6859,7 +6869,7 @@ yydefault: } case 480: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4159 + // line internal/php7/php7.y:4169 { yyVAL.node = &ast.ParserBrackets{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), @@ -6870,7 +6880,7 @@ yydefault: } case 481: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4171 + // line internal/php7/php7.y:4181 { yyVAL.node = &ast.ScalarString{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6880,7 +6890,7 @@ yydefault: } case 482: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4179 + // line internal/php7/php7.y:4189 { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { @@ -6899,7 +6909,7 @@ yydefault: } case 483: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4196 + // line internal/php7/php7.y:4206 { _, err := strconv.Atoi(string(yyDollar[2].token.Value)) isInt := err == nil @@ -6925,7 +6935,7 @@ yydefault: } case 484: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4220 + // line internal/php7/php7.y:4230 { yyVAL.node = &ast.ExprVariable{ Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), @@ -6938,7 +6948,7 @@ yydefault: } case 485: yyDollar = yyS[yypt-5 : yypt+1] - // line internal/php7/php7.y:4234 + // line internal/php7/php7.y:4244 { if yyDollar[4].token != nil { yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token) @@ -6955,7 +6965,7 @@ yydefault: } case 486: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4249 + // line internal/php7/php7.y:4259 { yyVAL.node = &ast.ExprEmpty{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6967,7 +6977,7 @@ yydefault: } case 487: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4259 + // line internal/php7/php7.y:4269 { yyVAL.node = &ast.ExprInclude{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6977,7 +6987,7 @@ yydefault: } case 488: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4267 + // line internal/php7/php7.y:4277 { yyVAL.node = &ast.ExprIncludeOnce{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -6987,7 +6997,7 @@ yydefault: } case 489: yyDollar = yyS[yypt-4 : yypt+1] - // line internal/php7/php7.y:4275 + // line internal/php7/php7.y:4285 { yyVAL.node = &ast.ExprEval{ Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), @@ -6999,7 +7009,7 @@ yydefault: } case 490: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4285 + // line internal/php7/php7.y:4295 { yyVAL.node = &ast.ExprRequire{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -7009,7 +7019,7 @@ yydefault: } case 491: yyDollar = yyS[yypt-2 : yypt+1] - // line internal/php7/php7.y:4293 + // line internal/php7/php7.y:4303 { yyVAL.node = &ast.ExprRequireOnce{ Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), @@ -7019,7 +7029,7 @@ yydefault: } case 492: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4304 + // line internal/php7/php7.y:4314 { yyVAL.node = &ast.ParserSeparatedList{ Items: []ast.Vertex{yyDollar[1].node}, @@ -7027,7 +7037,7 @@ yydefault: } case 493: yyDollar = yyS[yypt-3 : yypt+1] - // line internal/php7/php7.y:4310 + // line internal/php7/php7.y:4320 { yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) @@ -7036,7 +7046,7 @@ yydefault: } case 494: yyDollar = yyS[yypt-1 : yypt+1] - // line internal/php7/php7.y:4320 + // line internal/php7/php7.y:4330 { yyVAL.node = yyDollar[1].node } diff --git a/internal/php7/php7.y b/internal/php7/php7.y index 4f52bad..1db8b0a 100644 --- a/internal/php7/php7.y +++ b/internal/php7/php7.y @@ -281,6 +281,8 @@ import ( start: top_statement_list { + yylex.(*Parser).currentToken.Value = nil + yylex.(*Parser).rootNode = &ast.Root{ Position: yylex.(*Parser).builder.NewNodeListPosition($1), Stmts: $1, @@ -579,7 +581,9 @@ group_use_declaration: mixed_group_use_declaration: namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' { - $4.(*ast.ParserSeparatedList).SeparatorTkns = append($4.(*ast.ParserSeparatedList).SeparatorTkns, $5) + if $5 != nil { + $4.(*ast.ParserSeparatedList).SeparatorTkns = append($4.(*ast.ParserSeparatedList).SeparatorTkns, $5) + } $$ = &ast.StmtGroupUse{ Position: yylex.(*Parser).builder.NewNodeListTokenPosition($1.(*ast.ParserSeparatedList).Items, $6), @@ -597,7 +601,9 @@ mixed_group_use_declaration: } | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' { - $5.(*ast.ParserSeparatedList).SeparatorTkns = append($5.(*ast.ParserSeparatedList).SeparatorTkns, $6) + if $6 != nil { + $5.(*ast.ParserSeparatedList).SeparatorTkns = append($5.(*ast.ParserSeparatedList).SeparatorTkns, $6) + } $$ = &ast.StmtGroupUse{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $7), @@ -941,7 +947,9 @@ statement: { $3.(*ast.StmtUnset).UnsetTkn = $1 $3.(*ast.StmtUnset).OpenParenthesisTkn = $2 - $3.(*ast.StmtUnset).SeparatorTkns = append($3.(*ast.StmtUnset).SeparatorTkns, $4) + if $4 != nil { + $3.(*ast.StmtUnset).SeparatorTkns = append($3.(*ast.StmtUnset).SeparatorTkns, $4) + } $3.(*ast.StmtUnset).CloseParenthesisTkn = $5 $3.(*ast.StmtUnset).SemiColonTkn = $6 $3.(*ast.StmtUnset).Position = yylex.(*Parser).builder.NewTokensPosition($1, $6) @@ -1815,7 +1823,9 @@ argument_list: argumentList := $2.(*ast.ArgumentList) argumentList.Position = yylex.(*Parser).builder.NewTokensPosition($1, $4) argumentList.OpenParenthesisTkn = $1 - argumentList.SeparatorTkns = append(argumentList.SeparatorTkns, $3) + if $3 != nil { + argumentList.SeparatorTkns = append(argumentList.SeparatorTkns, $3) + } argumentList.CloseParenthesisTkn = $4 $$ = argumentList @@ -2029,17 +2039,17 @@ trait_adaptations: { $$ = &ast.StmtTraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $2), - OpenParenthesisTkn: $1, - CloseParenthesisTkn: $2, + OpenCurlyBracketTkn: $1, + CloseCurlyBracketTkn: $2, } } | '{' trait_adaptation_list '}' { $$ = &ast.StmtTraitAdaptationList{ Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), - OpenParenthesisTkn: $1, - Adaptations: $2, - CloseParenthesisTkn: $3, + OpenCurlyBracketTkn: $1, + Adaptations: $2, + CloseCurlyBracketTkn: $3, } } ; @@ -2435,7 +2445,7 @@ anonymous_class: OpenParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $2.(*ast.ArgumentList).Arguments, SeparatorTkns: $2.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $2.(*ast.ArgumentList).CloseParenthesisTkn, Extends: $3, Implements: $4, OpenCurlyBracket: $6, @@ -2456,7 +2466,7 @@ new_expr: OpenParenthesisTkn: $3.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $3.(*ast.ArgumentList).Arguments, SeparatorTkns: $3.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $3.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $3.(*ast.ArgumentList).CloseParenthesisTkn, } } else { $$ = &ast.ExprNew{ @@ -3284,7 +3294,7 @@ function_call: OpenParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $2.(*ast.ArgumentList).Arguments, SeparatorTkns: $2.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $2.(*ast.ArgumentList).CloseParenthesisTkn, } } | class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list @@ -3297,7 +3307,7 @@ function_call: OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $4.(*ast.ArgumentList).Arguments, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, } } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list @@ -3310,7 +3320,7 @@ function_call: OpenParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $4.(*ast.ArgumentList).Arguments, SeparatorTkns: $4.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $4.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $4.(*ast.ArgumentList).CloseParenthesisTkn, } } | callable_expr argument_list @@ -3321,7 +3331,7 @@ function_call: OpenParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, Arguments: $2.(*ast.ArgumentList).Arguments, SeparatorTkns: $2.(*ast.ArgumentList).SeparatorTkns, - CloseParenthesisTkn: $2.(*ast.ArgumentList).OpenParenthesisTkn, + CloseParenthesisTkn: $2.(*ast.ArgumentList).CloseParenthesisTkn, } } ; @@ -3542,7 +3552,7 @@ scalar: Position: yylex.(*Parser).builder.NewTokensPosition($1, $3), OpenQoteTkn: $1, Parts: $2, - CloseQoteTkn: $1, + CloseQoteTkn: $3, } } | T_START_HEREDOC encaps_list T_END_HEREDOC diff --git a/pkg/ast/node.go b/pkg/ast/node.go index 70655b5..4089027 100644 --- a/pkg/ast/node.go +++ b/pkg/ast/node.go @@ -954,10 +954,10 @@ func (n *StmtTrait) GetPosition() *position.Position { // StmtTraitAdaptationList node type StmtTraitAdaptationList struct { - Position *position.Position - OpenParenthesisTkn *token.Token - Adaptations []Vertex - CloseParenthesisTkn *token.Token + Position *position.Position + OpenCurlyBracketTkn *token.Token + Adaptations []Vertex + CloseCurlyBracketTkn *token.Token } func (n *StmtTraitAdaptationList) Accept(v NodeVisitor) { diff --git a/pkg/ast/visitor/printer.go b/pkg/ast/visitor/printer.go new file mode 100644 index 0000000..5d49077 --- /dev/null +++ b/pkg/ast/visitor/printer.go @@ -0,0 +1,1239 @@ +package visitor + +import ( + "bytes" + "github.com/z7zmey/php-parser/pkg/ast" + "github.com/z7zmey/php-parser/pkg/token" + "io" +) + +type printerState int + +const ( + PrinterStateHTML printerState = iota + PrinterStatePHP +) + +type printer struct { + output io.Writer + state printerState + last []byte +} + +func NewPrinter(output io.Writer) *printer { + return &printer{ + output: output, + } +} + +func (p *printer) WithState(state printerState) *printer { + p.state = state + return p +} + +func isValidVarName(r byte) bool { + return (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r >= 0x80 +} + +func (p *printer) write(b []byte) { + if len(b) == 0 { + return + } + + if p.state == PrinterStateHTML { + if !bytes.HasPrefix(b, []byte(""))) + p.printNode(n.Var) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.ColonTkn, nil) + if stmt, ok := n.Stmt.(*ast.StmtStmtList); ok && n.ColonTkn != nil { + p.printToken(stmt.OpenCurlyBracket, nil) + p.printList(stmt.Stmts) + p.printToken(stmt.CloseCurlyBracket, nil) + } else { + p.printNode(n.Stmt) + } + p.printToken(n.EndForeachTkn, p.ifToken(n.ColonTkn, []byte("endforeach"), nil)) + p.printToken(n.SemiColonTkn, p.ifToken(n.ColonTkn, []byte(";"), nil)) +} + +func (p *printer) StmtFunction(n *ast.StmtFunction) { + p.printToken(n.FunctionTkn, []byte("function")) + p.printToken(n.AmpersandTkn, nil) + p.printNode(n.FunctionName) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Params, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.ColonTkn, p.ifNode(n.ReturnType, []byte(":"))) + p.printNode(n.ReturnType) + p.printToken(n.OpenCurlyBracketTkn, []byte("{")) + p.printList(n.Stmts) + p.printToken(n.CloseCurlyBracketTkn, []byte("}")) +} + +func (p *printer) StmtGlobal(n *ast.StmtGlobal) { + p.printToken(n.GlobalTkn, []byte("global")) + p.printSeparatedList(n.Vars, n.SeparatorTkns, []byte(",")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtGoto(n *ast.StmtGoto) { + p.printToken(n.GotoTkn, []byte("goto")) + p.printNode(n.Label) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtHaltCompiler(n *ast.StmtHaltCompiler) { + p.printToken(n.HaltCompilerTkn, []byte("__halt_compiler")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtIf(n *ast.StmtIf) { + p.printToken(n.IfTkn, []byte("if")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printNode(n.Cond) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.ColonTkn, nil) + if stmt, ok := n.Stmt.(*ast.StmtStmtList); ok && n.ColonTkn != nil { + p.printToken(stmt.OpenCurlyBracket, nil) + p.printList(stmt.Stmts) + p.printToken(stmt.CloseCurlyBracket, nil) + } else { + p.printNode(n.Stmt) + } + p.printList(n.ElseIf) + p.printNode(n.Else) + p.printToken(n.EndIfTkn, p.ifToken(n.ColonTkn, []byte("endif"), nil)) + p.printToken(n.SemiColonTkn, p.ifToken(n.ColonTkn, []byte(";"), nil)) +} + +func (p *printer) StmtInlineHtml(n *ast.StmtInlineHtml) { + p.state = PrinterStatePHP + if p.last != nil && !bytes.HasSuffix(p.last, []byte("?>")) && !bytes.HasSuffix(p.last, []byte("?>\n")) { + p.write([]byte("?>")) + } + + p.printToken(n.InlineHtmlTkn, n.Value) + p.state = PrinterStateHTML +} + +func (p *printer) StmtInterface(n *ast.StmtInterface) { + p.printToken(n.InterfaceTkn, []byte("interface")) + p.printNode(n.InterfaceName) + p.printNode(n.Extends) + p.printToken(n.OpenCurlyBracketTkn, []byte("{")) + p.printList(n.Stmts) + p.printToken(n.CloseCurlyBracketTkn, []byte("}")) +} + +func (p *printer) StmtInterfaceExtends(n *ast.StmtInterfaceExtends) { + p.printToken(n.ExtendsTkn, []byte("extends")) + p.printSeparatedList(n.InterfaceNames, n.SeparatorTkns, []byte(",")) +} + +func (p *printer) StmtLabel(n *ast.StmtLabel) { + p.printNode(n.LabelName) + p.printToken(n.ColonTkn, []byte(":")) +} + +func (p *printer) StmtNamespace(n *ast.StmtNamespace) { + p.printToken(n.NsTkn, []byte("namespace")) + p.printNode(n.Name) + p.printToken(n.OpenCurlyBracket, p.ifNodeList(n.Stmts, []byte("{"))) + p.printList(n.Stmts) + p.printToken(n.CloseCurlyBracket, p.ifNodeList(n.Stmts, []byte("}"))) + p.printToken(n.SemiColonTkn, p.ifNotNodeList(n.Stmts, []byte(";"))) +} + +func (p *printer) StmtNop(n *ast.StmtNop) { + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtProperty(n *ast.StmtProperty) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, p.ifNode(n.Expr, []byte("="))) + p.printNode(n.Expr) +} + +func (p *printer) StmtPropertyList(n *ast.StmtPropertyList) { + p.printList(n.Modifiers) + p.printNode(n.Type) + p.printSeparatedList(n.Properties, n.SeparatorTkns, []byte(",")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtReturn(n *ast.StmtReturn) { + p.printToken(n.ReturnTkn, []byte("return")) + p.printNode(n.Expr) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtStatic(n *ast.StmtStatic) { + p.printToken(n.StaticTkn, []byte("static")) + p.printSeparatedList(n.Vars, n.SeparatorTkns, []byte(",")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtStaticVar(n *ast.StmtStaticVar) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, p.ifNode(n.Expr, []byte("="))) + p.printNode(n.Expr) +} + +func (p *printer) StmtStmtList(n *ast.StmtStmtList) { + p.printToken(n.OpenCurlyBracket, []byte("{")) + p.printList(n.Stmts) + p.printToken(n.CloseCurlyBracket, []byte("}")) +} + +func (p *printer) StmtSwitch(n *ast.StmtSwitch) { + p.printToken(n.SwitchTkn, []byte("switch")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printNode(n.Cond) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.ColonTkn, nil) + p.printToken(n.OpenCurlyBracketTkn, p.ifNotToken(n.ColonTkn, []byte("{"))) + p.printToken(n.CaseSeparatorTkn, nil) + p.printList(n.CaseList) + p.printToken(n.CloseCurlyBracketTkn, p.ifNotToken(n.ColonTkn, []byte("}"))) + p.printToken(n.EndSwitchTkn, p.ifToken(n.ColonTkn, []byte("endswitch"), nil)) + p.printToken(n.SemiColonTkn, p.ifToken(n.ColonTkn, []byte(";"), nil)) +} + +func (p *printer) StmtThrow(n *ast.StmtThrow) { + p.printToken(n.ThrowTkn, []byte("throw")) + p.printNode(n.Expr) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtTrait(n *ast.StmtTrait) { + p.printToken(n.TraitTkn, []byte("trait")) + p.printNode(n.TraitName) + p.printNode(n.Extends) + p.printNode(n.Implements) + p.printToken(n.OpenCurlyBracket, []byte("{")) + p.printList(n.Stmts) + p.printToken(n.CloseCurlyBracket, []byte("}")) +} + +func (p *printer) StmtTraitAdaptationList(n *ast.StmtTraitAdaptationList) { + p.printToken(n.OpenCurlyBracketTkn, []byte("{")) + p.printList(n.Adaptations) + p.printToken(n.CloseCurlyBracketTkn, []byte("}")) +} + +func (p *printer) StmtTraitMethodRef(n *ast.StmtTraitMethodRef) { + p.printNode(n.Trait) + p.printToken(n.DoubleColonTkn, p.ifNode(n.Trait, []byte("::"))) + p.printNode(n.Method) +} + +func (p *printer) StmtTraitUse(n *ast.StmtTraitUse) { + p.printToken(n.UseTkn, []byte("use")) + p.printSeparatedList(n.Traits, n.SeparatorTkns, []byte(",")) + p.printNode(n.Adaptations) +} + +func (p *printer) StmtTraitUseAlias(n *ast.StmtTraitUseAlias) { + p.printNode(n.Ref) + p.printToken(n.AsTkn, []byte("as")) + p.printNode(n.Modifier) + p.printNode(n.Alias) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtTraitUsePrecedence(n *ast.StmtTraitUsePrecedence) { + p.printNode(n.Ref) + p.printToken(n.InsteadofTkn, []byte("insteadof")) + p.printSeparatedList(n.Insteadof, n.SeparatorTkns, []byte(",")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtTry(n *ast.StmtTry) { + p.printToken(n.TryTkn, []byte("try")) + p.printToken(n.OpenCurlyBracket, []byte("{")) + p.printList(n.Stmts) + p.printToken(n.CloseCurlyBracket, []byte("}")) + p.printList(n.Catches) + p.printNode(n.Finally) +} + +func (p *printer) StmtUnset(n *ast.StmtUnset) { + p.printToken(n.UnsetTkn, []byte("unset")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Vars, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtUse(n *ast.StmtUse) { + p.printToken(n.UseTkn, []byte("use")) + p.printNode(n.Type) + p.printSeparatedList(n.UseDeclarations, n.SeparatorTkns, []byte(",")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtGroupUse(n *ast.StmtGroupUse) { + p.printToken(n.UseTkn, []byte("use")) + p.printNode(n.Type) + p.printToken(n.LeadingNsSeparatorTkn, nil) + p.printNode(n.Prefix) + p.printToken(n.NsSeparatorTkn, []byte("\\")) + p.printToken(n.OpenCurlyBracketTkn, []byte("{")) + p.printSeparatedList(n.UseDeclarations, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseCurlyBracketTkn, []byte("}")) + p.printToken(n.SemiColonTkn, []byte(";")) +} + +func (p *printer) StmtUseDeclaration(n *ast.StmtUseDeclaration) { + p.printNode(n.Type) + p.printToken(n.NsSeparatorTkn, nil) + p.printNode(n.Use) + p.printToken(n.AsTkn, p.ifNode(n.Alias, []byte("as"))) + p.printNode(n.Alias) +} + +func (p *printer) StmtWhile(n *ast.StmtWhile) { + p.printToken(n.WhileTkn, []byte("while")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printNode(n.Cond) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.ColonTkn, nil) + if stmt, ok := n.Stmt.(*ast.StmtStmtList); ok && n.ColonTkn != nil { + p.printToken(stmt.OpenCurlyBracket, nil) + p.printList(stmt.Stmts) + p.printToken(stmt.CloseCurlyBracket, nil) + } else { + p.printNode(n.Stmt) + } + p.printToken(n.EndWhileTkn, p.ifToken(n.ColonTkn, []byte("endwhile"), nil)) + p.printToken(n.SemiColonTkn, p.ifToken(n.ColonTkn, []byte(";"), nil)) +} + +func (p *printer) ExprArray(n *ast.ExprArray) { + p.printToken(n.ArrayTkn, nil) + p.printToken(n.OpenBracketTkn, p.ifToken(n.ArrayTkn, []byte("("), []byte("["))) + p.printSeparatedList(n.Items, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseBracketTkn, p.ifToken(n.ArrayTkn, []byte(")"), []byte("]"))) +} + +func (p *printer) ExprArrayDimFetch(n *ast.ExprArrayDimFetch) { + p.printNode(n.Var) + p.printToken(n.OpenBracketTkn, []byte("[")) + p.printNode(n.Dim) + p.printToken(n.CloseBracketTkn, []byte("]")) +} + +func (p *printer) ExprArrayItem(n *ast.ExprArrayItem) { + p.printToken(n.EllipsisTkn, nil) + p.printNode(n.Key) + p.printToken(n.DoubleArrowTkn, p.ifNode(n.Key, []byte("=>"))) + p.printNode(n.Val) +} + +func (p *printer) ExprArrowFunction(n *ast.ExprArrowFunction) { + p.printToken(n.StaticTkn, nil) + p.printToken(n.FnTkn, []byte("fn")) + p.printToken(n.AmpersandTkn, nil) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Params, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printToken(n.ColonTkn, p.ifNode(n.ReturnType, []byte(":"))) + p.printNode(n.ReturnType) + p.printToken(n.DoubleArrowTkn, []byte("=>")) + p.printNode(n.Expr) +} + +func (p *printer) ExprBitwiseNot(n *ast.ExprBitwiseNot) { + p.printToken(n.TildaTkn, []byte("~")) + p.printNode(n.Expr) +} + +func (p *printer) ExprBooleanNot(n *ast.ExprBooleanNot) { + p.printToken(n.ExclamationTkn, []byte("!")) + p.printNode(n.Expr) +} + +func (p *printer) ExprClassConstFetch(n *ast.ExprClassConstFetch) { + p.printNode(n.Class) + p.printToken(n.DoubleColonTkn, []byte("::")) + p.printNode(n.ConstantName) +} + +func (p *printer) ExprClone(n *ast.ExprClone) { + p.printToken(n.CloneTkn, []byte("clone")) + p.printNode(n.Expr) +} + +func (p *printer) ExprClosure(n *ast.ExprClosure) { + p.printToken(n.StaticTkn, nil) + p.printToken(n.FunctionTkn, []byte("function")) + p.printToken(n.AmpersandTkn, nil) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Params, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) + p.printNode(n.ClosureUse) + p.printToken(n.ColonTkn, p.ifNode(n.ReturnType, []byte(":"))) + p.printNode(n.ReturnType) + p.printToken(n.OpenCurlyBracketTkn, []byte("{")) + p.printList(n.Stmts) + p.printToken(n.CloseCurlyBracketTkn, []byte("}")) +} + +func (p *printer) ExprClosureUse(n *ast.ExprClosureUse) { + p.printToken(n.UseTkn, []byte("use")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Uses, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) +} + +func (p *printer) ExprConstFetch(n *ast.ExprConstFetch) { + p.printNode(n.Const) +} + +func (p *printer) ExprEmpty(n *ast.ExprEmpty) { + p.printToken(n.EmptyTkn, []byte("empty")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printNode(n.Expr) + p.printToken(n.CloseParenthesisTkn, []byte(")")) +} + +func (p *printer) ExprErrorSuppress(n *ast.ExprErrorSuppress) { + p.printToken(n.AtTkn, []byte("@")) + p.printNode(n.Expr) +} + +func (p *printer) ExprEval(n *ast.ExprEval) { + p.printToken(n.EvalTkn, []byte("eval")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printNode(n.Expr) + p.printToken(n.CloseParenthesisTkn, []byte(")")) +} + +func (p *printer) ExprExit(n *ast.ExprExit) { + p.printToken(n.DieTkn, []byte("exit")) + p.printToken(n.OpenParenthesisTkn, nil) + p.printNode(n.Expr) + p.printToken(n.CloseParenthesisTkn, p.ifToken(n.OpenParenthesisTkn, []byte(")"), nil)) +} + +func (p *printer) ExprFunctionCall(n *ast.ExprFunctionCall) { + p.printNode(n.Function) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) +} + +func (p *printer) ExprInclude(n *ast.ExprInclude) { + p.printToken(n.IncludeTkn, []byte("include")) + p.printNode(n.Expr) +} + +func (p *printer) ExprIncludeOnce(n *ast.ExprIncludeOnce) { + p.printToken(n.IncludeTkn, []byte("include_once")) + p.printNode(n.Expr) +} + +func (p *printer) ExprInstanceOf(n *ast.ExprInstanceOf) { + p.printNode(n.Expr) + p.printToken(n.InstanceOfTkn, []byte("instanceof")) + p.printNode(n.Class) +} + +func (p *printer) ExprIsset(n *ast.ExprIsset) { + p.printToken(n.IssetTkn, []byte("isset")) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Vars, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) +} + +func (p *printer) ExprList(n *ast.ExprList) { + p.printToken(n.ListTkn, p.ifToken(n.OpenBracketTkn, nil, []byte("list"))) + p.printToken(n.OpenBracketTkn, []byte("(")) + p.printSeparatedList(n.Items, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseBracketTkn, []byte(")")) +} + +func (p *printer) ExprMethodCall(n *ast.ExprMethodCall) { + p.printNode(n.Var) + p.printToken(n.ObjectOperatorTkn, []byte("->")) + p.printNode(n.Method) + p.printToken(n.OpenParenthesisTkn, []byte("(")) + p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, []byte(")")) +} + +func (p *printer) ExprNew(n *ast.ExprNew) { + p.printToken(n.NewTkn, []byte("new")) + p.printNode(n.Class) + p.printToken(n.OpenParenthesisTkn, p.ifNodeList(n.Arguments, []byte("("))) + p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, p.ifNodeList(n.Arguments, []byte(")"))) +} + +func (p *printer) ExprPostDec(n *ast.ExprPostDec) { + p.printNode(n.Var) + p.printToken(n.DecTkn, []byte("--")) +} + +func (p *printer) ExprPostInc(n *ast.ExprPostInc) { + p.printNode(n.Var) + p.printToken(n.IncTkn, []byte("++")) +} + +func (p *printer) ExprPreDec(n *ast.ExprPreDec) { + p.printToken(n.DecTkn, []byte("--")) + p.printNode(n.Var) +} + +func (p *printer) ExprPreInc(n *ast.ExprPreInc) { + p.printToken(n.IncTkn, []byte("++")) + p.printNode(n.Var) +} + +func (p *printer) ExprPrint(n *ast.ExprPrint) { + p.printToken(n.PrintTkn, []byte("print")) + p.printNode(n.Expr) +} + +func (p *printer) ExprPropertyFetch(n *ast.ExprPropertyFetch) { + p.printNode(n.Var) + p.printToken(n.ObjectOperatorTkn, []byte("->")) + p.printNode(n.Property) +} + +func (p *printer) ExprReference(n *ast.ExprReference) { + p.printToken(n.AmpersandTkn, []byte("&")) + p.printNode(n.Var) +} + +func (p *printer) ExprRequire(n *ast.ExprRequire) { + p.printToken(n.RequireTkn, []byte("require")) + p.printNode(n.Expr) +} + +func (p *printer) ExprRequireOnce(n *ast.ExprRequireOnce) { + p.printToken(n.RequireOnceTkn, []byte("require_once")) + p.printNode(n.Expr) +} + +func (p *printer) ExprShellExec(n *ast.ExprShellExec) { + p.printToken(n.OpenBacktickTkn, []byte("`")) + p.printList(n.Parts) + p.printToken(n.CloseBacktickTkn, []byte("`")) +} + +func (p *printer) ExprStaticCall(n *ast.ExprStaticCall) { + p.printNode(n.Class) + p.printToken(n.DoubleColonTkn, []byte("::")) + p.printNode(n.Call) + p.printToken(n.OpenParenthesisTkn, p.ifNodeList(n.Arguments, []byte("("))) + p.printSeparatedList(n.Arguments, n.SeparatorTkns, []byte(",")) + p.printToken(n.CloseParenthesisTkn, p.ifNodeList(n.Arguments, []byte(")"))) +} + +func (p *printer) ExprStaticPropertyFetch(n *ast.ExprStaticPropertyFetch) { + p.printNode(n.Class) + p.printToken(n.DoubleColonTkn, []byte("::")) + p.printNode(n.Property) +} + +func (p *printer) ExprTernary(n *ast.ExprTernary) { + p.printNode(n.Condition) + p.printToken(n.QuestionTkn, []byte("?")) + p.printNode(n.IfTrue) + p.printToken(n.ColonTkn, []byte(":")) + p.printNode(n.IfFalse) +} + +func (p *printer) ExprUnaryMinus(n *ast.ExprUnaryMinus) { + p.printToken(n.MinusTkn, []byte("-")) + p.printNode(n.Expr) +} + +func (p *printer) ExprUnaryPlus(n *ast.ExprUnaryPlus) { + p.printToken(n.PlusTkn, []byte("+")) + p.printNode(n.Expr) +} + +func (p *printer) ExprVariable(n *ast.ExprVariable) { + p.printToken(n.DollarTkn, nil) + p.printNode(n.VarName) +} + +func (p *printer) ExprYield(n *ast.ExprYield) { + p.printToken(n.YieldTkn, []byte("yield")) + p.printNode(n.Key) + p.printToken(n.DoubleArrowTkn, p.ifNode(n.Key, []byte("=>"))) + p.printNode(n.Value) +} + +func (p *printer) ExprYieldFrom(n *ast.ExprYieldFrom) { + p.printToken(n.YieldFromTkn, []byte("yield from")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssign(n *ast.ExprAssign) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignReference(n *ast.ExprAssignReference) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("=")) + p.printToken(n.AmpersandTkn, []byte("&")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignBitwiseAnd(n *ast.ExprAssignBitwiseAnd) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("&=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignBitwiseOr(n *ast.ExprAssignBitwiseOr) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("|=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignBitwiseXor(n *ast.ExprAssignBitwiseXor) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("^=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignCoalesce(n *ast.ExprAssignCoalesce) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("??=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignConcat(n *ast.ExprAssignConcat) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte(".=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignDiv(n *ast.ExprAssignDiv) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("/=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignMinus(n *ast.ExprAssignMinus) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("-=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignMod(n *ast.ExprAssignMod) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("%=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignMul(n *ast.ExprAssignMul) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("*=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignPlus(n *ast.ExprAssignPlus) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("+=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignPow(n *ast.ExprAssignPow) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("**=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignShiftLeft(n *ast.ExprAssignShiftLeft) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte("<<=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprAssignShiftRight(n *ast.ExprAssignShiftRight) { + p.printNode(n.Var) + p.printToken(n.EqualTkn, []byte(">>=")) + p.printNode(n.Expr) +} + +func (p *printer) ExprBinaryBitwiseAnd(n *ast.ExprBinaryBitwiseAnd) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("&")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryBitwiseOr(n *ast.ExprBinaryBitwiseOr) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("|")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryBitwiseXor(n *ast.ExprBinaryBitwiseXor) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("^")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryBooleanAnd(n *ast.ExprBinaryBooleanAnd) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("&&")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryBooleanOr(n *ast.ExprBinaryBooleanOr) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("||")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryCoalesce(n *ast.ExprBinaryCoalesce) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("??")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryConcat(n *ast.ExprBinaryConcat) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte(".")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryDiv(n *ast.ExprBinaryDiv) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("/")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryEqual(n *ast.ExprBinaryEqual) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("==")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryGreater(n *ast.ExprBinaryGreater) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte(">")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryGreaterOrEqual(n *ast.ExprBinaryGreaterOrEqual) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte(">=")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryIdentical(n *ast.ExprBinaryIdentical) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("===")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryLogicalAnd(n *ast.ExprBinaryLogicalAnd) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("and")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryLogicalOr(n *ast.ExprBinaryLogicalOr) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("or")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryLogicalXor(n *ast.ExprBinaryLogicalXor) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("xor")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryMinus(n *ast.ExprBinaryMinus) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("-")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryMod(n *ast.ExprBinaryMod) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("%")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryMul(n *ast.ExprBinaryMul) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("*")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryNotEqual(n *ast.ExprBinaryNotEqual) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("!=")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryNotIdentical(n *ast.ExprBinaryNotIdentical) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("!==")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryPlus(n *ast.ExprBinaryPlus) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("+")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryPow(n *ast.ExprBinaryPow) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("**")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryShiftLeft(n *ast.ExprBinaryShiftLeft) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("<<")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinaryShiftRight(n *ast.ExprBinaryShiftRight) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte(">>")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinarySmaller(n *ast.ExprBinarySmaller) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("<")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinarySmallerOrEqual(n *ast.ExprBinarySmallerOrEqual) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("<=")) + p.printNode(n.Right) +} + +func (p *printer) ExprBinarySpaceship(n *ast.ExprBinarySpaceship) { + p.printNode(n.Left) + p.printToken(n.OpTkn, []byte("<=>")) + p.printNode(n.Right) +} + +func (p *printer) ExprCastArray(n *ast.ExprCastArray) { + p.printToken(n.CastTkn, []byte("(array)")) + p.printNode(n.Expr) +} + +func (p *printer) ExprCastBool(n *ast.ExprCastBool) { + p.printToken(n.CastTkn, []byte("(bool)")) + p.printNode(n.Expr) +} + +func (p *printer) ExprCastDouble(n *ast.ExprCastDouble) { + p.printToken(n.CastTkn, []byte("(float)")) + p.printNode(n.Expr) +} + +func (p *printer) ExprCastInt(n *ast.ExprCastInt) { + p.printToken(n.CastTkn, []byte("(integer)")) + p.printNode(n.Expr) +} + +func (p *printer) ExprCastObject(n *ast.ExprCastObject) { + p.printToken(n.CastTkn, []byte("(object)")) + p.printNode(n.Expr) +} + +func (p *printer) ExprCastString(n *ast.ExprCastString) { + p.printToken(n.CastTkn, []byte("(string)")) + p.printNode(n.Expr) +} + +func (p *printer) ExprCastUnset(n *ast.ExprCastUnset) { + p.printToken(n.CastTkn, []byte("(unset)")) + p.printNode(n.Expr) +} + +func (p *printer) ScalarDnumber(n *ast.ScalarDnumber) { + p.printToken(n.NumberTkn, n.Value) +} + +func (p *printer) ScalarEncapsed(n *ast.ScalarEncapsed) { + p.printToken(n.OpenQoteTkn, []byte("\"")) + p.printList(n.Parts) + p.printToken(n.CloseQoteTkn, []byte("\"")) +} + +func (p *printer) ScalarEncapsedStringPart(n *ast.ScalarEncapsedStringPart) { + p.printToken(n.EncapsedStrTkn, n.Value) +} + +func (p *printer) ScalarHeredoc(n *ast.ScalarHeredoc) { + p.printToken(n.OpenHeredocTkn, []byte("<<HTML")}, &ast.StmtEcho{ @@ -85,9 +87,10 @@ func TestPrinterPrintFileInlineHtml(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `
HTML
HTML
HTML
HTML
>=$b` actual := o.String() @@ -771,15 +786,16 @@ func TestPrinterPrintAssignShiftRight(t *testing.T) { func TestPrinterPrintBinaryBitwiseAnd(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryBitwiseAnd{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryBitwiseAnd{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a&$b` actual := o.String() @@ -792,15 +808,16 @@ func TestPrinterPrintBinaryBitwiseAnd(t *testing.T) { func TestPrinterPrintBinaryBitwiseOr(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryBitwiseOr{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryBitwiseOr{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a|$b` actual := o.String() @@ -813,15 +830,16 @@ func TestPrinterPrintBinaryBitwiseOr(t *testing.T) { func TestPrinterPrintBinaryBitwiseXor(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryBitwiseXor{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryBitwiseXor{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a^$b` actual := o.String() @@ -834,15 +852,16 @@ func TestPrinterPrintBinaryBitwiseXor(t *testing.T) { func TestPrinterPrintBinaryBooleanAnd(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryBooleanAnd{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryBooleanAnd{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a&&$b` actual := o.String() @@ -855,15 +874,16 @@ func TestPrinterPrintBinaryBooleanAnd(t *testing.T) { func TestPrinterPrintBinaryBooleanOr(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryBooleanOr{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryBooleanOr{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a||$b` actual := o.String() @@ -876,15 +896,16 @@ func TestPrinterPrintBinaryBooleanOr(t *testing.T) { func TestPrinterPrintBinaryCoalesce(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryCoalesce{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryCoalesce{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a??$b` actual := o.String() @@ -897,15 +918,16 @@ func TestPrinterPrintBinaryCoalesce(t *testing.T) { func TestPrinterPrintBinaryConcat(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryConcat{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryConcat{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a.$b` actual := o.String() @@ -918,15 +940,16 @@ func TestPrinterPrintBinaryConcat(t *testing.T) { func TestPrinterPrintBinaryDiv(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryDiv{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryDiv{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a/$b` actual := o.String() @@ -939,15 +962,16 @@ func TestPrinterPrintBinaryDiv(t *testing.T) { func TestPrinterPrintBinaryEqual(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryEqual{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryEqual{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a==$b` actual := o.String() @@ -960,15 +984,16 @@ func TestPrinterPrintBinaryEqual(t *testing.T) { func TestPrinterPrintBinaryGreaterOrEqual(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryGreaterOrEqual{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryGreaterOrEqual{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a>=$b` actual := o.String() @@ -981,15 +1006,16 @@ func TestPrinterPrintBinaryGreaterOrEqual(t *testing.T) { func TestPrinterPrintBinaryGreater(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryGreater{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryGreater{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a>$b` actual := o.String() @@ -1002,15 +1028,16 @@ func TestPrinterPrintBinaryGreater(t *testing.T) { func TestPrinterPrintBinaryIdentical(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryIdentical{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryIdentical{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a===$b` actual := o.String() @@ -1023,17 +1050,18 @@ func TestPrinterPrintBinaryIdentical(t *testing.T) { func TestPrinterPrintBinaryLogicalAnd(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryLogicalAnd{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryLogicalAnd{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) - expected := `$a and $b` + expected := `$a and$b` actual := o.String() if expected != actual { @@ -1044,17 +1072,18 @@ func TestPrinterPrintBinaryLogicalAnd(t *testing.T) { func TestPrinterPrintBinaryLogicalOr(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryLogicalOr{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryLogicalOr{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) - expected := `$a or $b` + expected := `$a or$b` actual := o.String() if expected != actual { @@ -1065,17 +1094,18 @@ func TestPrinterPrintBinaryLogicalOr(t *testing.T) { func TestPrinterPrintBinaryLogicalXor(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryLogicalXor{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryLogicalXor{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) - expected := `$a xor $b` + expected := `$a xor$b` actual := o.String() if expected != actual { @@ -1086,15 +1116,16 @@ func TestPrinterPrintBinaryLogicalXor(t *testing.T) { func TestPrinterPrintBinaryMinus(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryMinus{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryMinus{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a-$b` actual := o.String() @@ -1107,15 +1138,16 @@ func TestPrinterPrintBinaryMinus(t *testing.T) { func TestPrinterPrintBinaryMod(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryMod{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryMod{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a%$b` actual := o.String() @@ -1128,15 +1160,16 @@ func TestPrinterPrintBinaryMod(t *testing.T) { func TestPrinterPrintBinaryMul(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryMul{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryMul{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a*$b` actual := o.String() @@ -1149,15 +1182,16 @@ func TestPrinterPrintBinaryMul(t *testing.T) { func TestPrinterPrintBinaryNotEqual(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryNotEqual{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryNotEqual{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a!=$b` actual := o.String() @@ -1170,15 +1204,16 @@ func TestPrinterPrintBinaryNotEqual(t *testing.T) { func TestPrinterPrintBinaryNotIdentical(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryNotIdentical{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryNotIdentical{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a!==$b` actual := o.String() @@ -1191,15 +1226,16 @@ func TestPrinterPrintBinaryNotIdentical(t *testing.T) { func TestPrinterPrintBinaryPlus(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryPlus{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryPlus{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a+$b` actual := o.String() @@ -1212,15 +1248,16 @@ func TestPrinterPrintBinaryPlus(t *testing.T) { func TestPrinterPrintBinaryPow(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryPow{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryPow{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a**$b` actual := o.String() @@ -1233,15 +1270,16 @@ func TestPrinterPrintBinaryPow(t *testing.T) { func TestPrinterPrintBinaryShiftLeft(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryShiftLeft{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryShiftLeft{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a<<$b` actual := o.String() @@ -1254,15 +1292,16 @@ func TestPrinterPrintBinaryShiftLeft(t *testing.T) { func TestPrinterPrintBinaryShiftRight(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinaryShiftRight{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinaryShiftRight{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a>>$b` actual := o.String() @@ -1275,15 +1314,16 @@ func TestPrinterPrintBinaryShiftRight(t *testing.T) { func TestPrinterPrintBinarySmallerOrEqual(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinarySmallerOrEqual{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinarySmallerOrEqual{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a<=$b` actual := o.String() @@ -1296,15 +1336,16 @@ func TestPrinterPrintBinarySmallerOrEqual(t *testing.T) { func TestPrinterPrintBinarySmaller(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinarySmaller{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinarySmaller{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a<$b` actual := o.String() @@ -1317,15 +1358,16 @@ func TestPrinterPrintBinarySmaller(t *testing.T) { func TestPrinterPrintBinarySpaceship(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBinarySpaceship{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBinarySpaceship{ Left: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Right: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a<=>$b` actual := o.String() @@ -1340,12 +1382,13 @@ func TestPrinterPrintBinarySpaceship(t *testing.T) { func TestPrinterPrintArray(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprCastArray{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprCastArray{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `(array)$var` actual := o.String() @@ -1358,14 +1401,15 @@ func TestPrinterPrintArray(t *testing.T) { func TestPrinterPrintBool(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprCastBool{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprCastBool{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `(boolean)$var` + expected := `(bool)$var` actual := o.String() if expected != actual { @@ -1376,12 +1420,13 @@ func TestPrinterPrintBool(t *testing.T) { func TestPrinterPrintDouble(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprCastDouble{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprCastDouble{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `(float)$var` actual := o.String() @@ -1394,12 +1439,13 @@ func TestPrinterPrintDouble(t *testing.T) { func TestPrinterPrintInt(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprCastInt{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprCastInt{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `(integer)$var` actual := o.String() @@ -1412,12 +1458,13 @@ func TestPrinterPrintInt(t *testing.T) { func TestPrinterPrintObject(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprCastObject{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprCastObject{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `(object)$var` actual := o.String() @@ -1430,12 +1477,13 @@ func TestPrinterPrintObject(t *testing.T) { func TestPrinterPrintString(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprCastString{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprCastString{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `(string)$var` actual := o.String() @@ -1448,12 +1496,13 @@ func TestPrinterPrintString(t *testing.T) { func TestPrinterPrintUnset(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprCastUnset{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprCastUnset{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `(unset)$var` actual := o.String() @@ -1468,13 +1517,14 @@ func TestPrinterPrintUnset(t *testing.T) { func TestPrinterPrintExprArrayDimFetch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprArrayDimFetch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprArrayDimFetch{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, Dim: &ast.ScalarLnumber{Value: []byte("1")}, - }) + } + n.Accept(p) expected := `$var[1]` actual := o.String() @@ -1487,13 +1537,14 @@ func TestPrinterPrintExprArrayDimFetch(t *testing.T) { func TestPrinterPrintExprArrayItemWithKey(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprArrayItem{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprArrayItem{ Key: &ast.ScalarString{Value: []byte("'Hello'")}, Val: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$world")}, }, - }) + } + n.Accept(p) expected := `'Hello'=>$world` actual := o.String() @@ -1506,12 +1557,13 @@ func TestPrinterPrintExprArrayItemWithKey(t *testing.T) { func TestPrinterPrintExprArrayItem(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprArrayItem{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprArrayItem{ Val: &ast.ExprReference{Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$world")}, }}, - }) + } + n.Accept(p) expected := `&$world` actual := o.String() @@ -1524,13 +1576,16 @@ func TestPrinterPrintExprArrayItem(t *testing.T) { func TestPrinterPrintExprArrayItemUnpack(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprArrayItem{ - Unpack: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprArrayItem{ + EllipsisTkn: &token.Token{ + Value: []byte("..."), + }, Val: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$world")}, }, - }) + } + n.Accept(p) expected := `...$world` actual := o.String() @@ -1543,8 +1598,11 @@ func TestPrinterPrintExprArrayItemUnpack(t *testing.T) { func TestPrinterPrintExprArray(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprArray{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprArray{ + ArrayTkn: &token.Token{ + Value: []byte("array"), + }, Items: []ast.Vertex{ &ast.ExprArrayItem{ Key: &ast.ScalarString{Value: []byte("'Hello'")}, @@ -1564,7 +1622,8 @@ func TestPrinterPrintExprArray(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `array('Hello'=>$world,2=>&$var,$var)` actual := o.String() @@ -1577,12 +1636,13 @@ func TestPrinterPrintExprArray(t *testing.T) { func TestPrinterPrintExprBitwiseNot(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBitwiseNot{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBitwiseNot{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `~$var` actual := o.String() @@ -1595,12 +1655,13 @@ func TestPrinterPrintExprBitwiseNot(t *testing.T) { func TestPrinterPrintExprBooleanNot(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprBooleanNot{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprBooleanNot{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `!$var` actual := o.String() @@ -1613,15 +1674,16 @@ func TestPrinterPrintExprBooleanNot(t *testing.T) { func TestPrinterPrintExprClassConstFetch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprClassConstFetch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprClassConstFetch{ Class: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, ConstantName: &ast.Identifier{ Value: []byte("CONST"), }, - }) + } + n.Accept(p) expected := `$var::CONST` actual := o.String() @@ -1634,14 +1696,15 @@ func TestPrinterPrintExprClassConstFetch(t *testing.T) { func TestPrinterPrintExprClone(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprClone{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprClone{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `clone $var` + expected := `clone$var` actual := o.String() if expected != actual { @@ -1652,8 +1715,8 @@ func TestPrinterPrintExprClone(t *testing.T) { func TestPrinterPrintExprClosureUse(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprClosureUse{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprClosureUse{ Uses: []ast.Vertex{ &ast.ExprReference{Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$foo")}, @@ -1662,7 +1725,8 @@ func TestPrinterPrintExprClosureUse(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$bar")}, }, }, - }) + } + n.Accept(p) expected := `use(&$foo,$bar)` actual := o.String() @@ -1675,16 +1739,18 @@ func TestPrinterPrintExprClosureUse(t *testing.T) { func TestPrinterPrintExprClosure(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprClosure{ - Static: true, - ReturnsRef: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprClosure{ + StaticTkn: &token.Token{ + Value: []byte("static"), + }, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, Params: []ast.Vertex{ &ast.Parameter{ - Var: &ast.Reference{ - Var: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$var")}, - }, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$var")}, }, }, }, @@ -1706,9 +1772,10 @@ func TestPrinterPrintExprClosure(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$a")}, }}, }, - }) + } + n.Accept(p) - expected := `static function&(&$var)use(&$a,$b):\Foo{$a;}` + expected := `static function&($var)use(&$a,$b):\Foo{$a;}` actual := o.String() if expected != actual { @@ -1719,17 +1786,22 @@ func TestPrinterPrintExprClosure(t *testing.T) { func TestPrinterPrintExprArrowFunction(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtExpression{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtExpression{ Expr: &ast.ExprArrowFunction{ - Static: true, - ReturnsRef: true, + StaticTkn: &token.Token{ + Value: []byte("static"), + }, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, Params: []ast.Vertex{ &ast.Parameter{ - Var: &ast.Reference{ - Var: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$var")}, - }, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$var")}, }, }, }, @@ -1740,7 +1812,8 @@ func TestPrinterPrintExprArrowFunction(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$a")}, }, }, - }) + } + n.Accept(p) expected := `static fn&(&$var):\Foo=>$a;` actual := o.String() @@ -1753,10 +1826,11 @@ func TestPrinterPrintExprArrowFunction(t *testing.T) { func TestPrinterPrintExprConstFetch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprConstFetch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprConstFetch{ Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}, - }) + } + n.Accept(p) expected := "null" actual := o.String() @@ -1769,12 +1843,13 @@ func TestPrinterPrintExprConstFetch(t *testing.T) { func TestPrinterPrintEmpty(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprEmpty{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprEmpty{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `empty($var)` actual := o.String() @@ -1787,12 +1862,13 @@ func TestPrinterPrintEmpty(t *testing.T) { func TestPrinterPrettyPrinterrorSuppress(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprErrorSuppress{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprErrorSuppress{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `@$var` actual := o.String() @@ -1805,12 +1881,13 @@ func TestPrinterPrettyPrinterrorSuppress(t *testing.T) { func TestPrinterPrintEval(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprEval{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprEval{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `eval($var)` actual := o.String() @@ -1823,15 +1900,15 @@ func TestPrinterPrintEval(t *testing.T) { func TestPrinterPrintExit(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprExit{ - Die: false, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprExit{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `exit $var` + expected := `exit$var` actual := o.String() if expected != actual { @@ -1842,15 +1919,18 @@ func TestPrinterPrintExit(t *testing.T) { func TestPrinterPrintDie(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprExit{ - Die: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprExit{ + DieTkn: &token.Token{ + Value: []byte("die"), + }, Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `die $var` + expected := `die$var` actual := o.String() if expected != actual { @@ -1861,33 +1941,36 @@ func TestPrinterPrintDie(t *testing.T) { func TestPrinterPrintFunctionCall(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprFunctionCall{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprFunctionCall{ Function: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - ArgumentList: &ast.ArgumentList{ - Arguments: []ast.Vertex{ - &ast.Argument{ - IsReference: true, - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$a")}, - }, + Arguments: []ast.Vertex{ + &ast.Argument{ + AmpersandTkn: &token.Token{ + Value: []byte("&"), }, - &ast.Argument{ - Variadic: true, - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$b")}, - }, + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$a")}, }, - &ast.Argument{ - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$c")}, - }, + }, + &ast.Argument{ + VariadicTkn: &token.Token{ + Value: []byte("..."), + }, + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$b")}, + }, + }, + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$c")}, }, }, }, - }) + } + n.Accept(p) expected := `$var(&$a,...$b,$c)` actual := o.String() @@ -1900,12 +1983,13 @@ func TestPrinterPrintFunctionCall(t *testing.T) { func TestPrinterPrintInclude(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprInclude{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprInclude{ Expr: &ast.ScalarString{Value: []byte("'path'")}, - }) + } + n.Accept(p) - expected := `include 'path'` + expected := `include'path'` actual := o.String() if expected != actual { @@ -1916,12 +2000,13 @@ func TestPrinterPrintInclude(t *testing.T) { func TestPrinterPrintIncludeOnce(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprIncludeOnce{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprIncludeOnce{ Expr: &ast.ScalarString{Value: []byte("'path'")}, - }) + } + n.Accept(p) - expected := `include_once 'path'` + expected := `include_once'path'` actual := o.String() if expected != actual { @@ -1932,13 +2017,14 @@ func TestPrinterPrintIncludeOnce(t *testing.T) { func TestPrinterPrintInstanceOf(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprInstanceOf{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprInstanceOf{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, Class: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, - }) + } + n.Accept(p) expected := `$var instanceof Foo` actual := o.String() @@ -1951,8 +2037,8 @@ func TestPrinterPrintInstanceOf(t *testing.T) { func TestPrinterPrintIsset(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprIsset{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprIsset{ Vars: []ast.Vertex{ &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, @@ -1961,7 +2047,8 @@ func TestPrinterPrintIsset(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$b")}, }, }, - }) + } + n.Accept(p) expected := `isset($a,$b)` actual := o.String() @@ -1974,8 +2061,8 @@ func TestPrinterPrintIsset(t *testing.T) { func TestPrinterPrintList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprList{ Items: []ast.Vertex{ &ast.ExprArrayItem{ Val: &ast.ExprVariable{ @@ -1999,7 +2086,8 @@ func TestPrinterPrintList(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `list($a,list($b,$c))` actual := o.String() @@ -2012,27 +2100,26 @@ func TestPrinterPrintList(t *testing.T) { func TestPrinterPrintMethodCall(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprMethodCall{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &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")}, - }, + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$a")}, }, - &ast.Argument{ - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$b")}, - }, + }, + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$b")}, }, }, }, - }) + } + n.Accept(p) expected := `$foo->bar($a,$b)` actual := o.String() @@ -2045,8 +2132,8 @@ func TestPrinterPrintMethodCall(t *testing.T) { func TestPrinterPrintNew(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprNew{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprNew{ Class: &ast.NameName{ Parts: []ast.Vertex{ &ast.NameNamePart{ @@ -2054,21 +2141,20 @@ func TestPrinterPrintNew(t *testing.T) { }, }, }, - ArgumentList: &ast.ArgumentList{ - Arguments: []ast.Vertex{ - &ast.Argument{ - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$a")}, - }, + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$a")}, }, - &ast.Argument{ - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$b")}, - }, + }, + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$b")}, }, }, }, - }) + } + n.Accept(p) expected := `new Foo($a,$b)` actual := o.String() @@ -2081,12 +2167,13 @@ func TestPrinterPrintNew(t *testing.T) { func TestPrinterPrintPostDec(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprPostDec{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprPostDec{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `$var--` actual := o.String() @@ -2099,12 +2186,13 @@ func TestPrinterPrintPostDec(t *testing.T) { func TestPrinterPrintPostInc(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprPostInc{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprPostInc{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `$var++` actual := o.String() @@ -2117,12 +2205,13 @@ func TestPrinterPrintPostInc(t *testing.T) { func TestPrinterPrintPreDec(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprPreDec{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprPreDec{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `--$var` actual := o.String() @@ -2135,12 +2224,13 @@ func TestPrinterPrintPreDec(t *testing.T) { func TestPrinterPrintPreInc(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprPreInc{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprPreInc{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `++$var` actual := o.String() @@ -2153,14 +2243,15 @@ func TestPrinterPrintPreInc(t *testing.T) { func TestPrinterPrintPrint(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprPrint{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprPrint{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `print $var` + expected := `print$var` actual := o.String() if expected != actual { @@ -2171,13 +2262,14 @@ func TestPrinterPrintPrint(t *testing.T) { func TestPrinterPrintPropertyFetch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprPropertyFetch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprPropertyFetch{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$foo")}, }, Property: &ast.Identifier{Value: []byte("bar")}, - }) + } + n.Accept(p) expected := `$foo->bar` actual := o.String() @@ -2190,12 +2282,13 @@ func TestPrinterPrintPropertyFetch(t *testing.T) { func TestPrinterPrintExprReference(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprReference{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprReference{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$foo")}, }, - }) + } + n.Accept(p) expected := `&$foo` actual := o.String() @@ -2208,12 +2301,13 @@ func TestPrinterPrintExprReference(t *testing.T) { func TestPrinterPrintRequire(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprRequire{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprRequire{ Expr: &ast.ScalarString{Value: []byte("'path'")}, - }) + } + n.Accept(p) - expected := `require 'path'` + expected := `require'path'` actual := o.String() if expected != actual { @@ -2224,12 +2318,13 @@ func TestPrinterPrintRequire(t *testing.T) { func TestPrinterPrintRequireOnce(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprRequireOnce{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprRequireOnce{ Expr: &ast.ScalarString{Value: []byte("'path'")}, - }) + } + n.Accept(p) - expected := `require_once 'path'` + expected := `require_once'path'` actual := o.String() if expected != actual { @@ -2240,8 +2335,8 @@ func TestPrinterPrintRequireOnce(t *testing.T) { func TestPrinterPrintShellExec(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprShellExec{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprShellExec{ Parts: []ast.Vertex{ &ast.ScalarEncapsedStringPart{Value: []byte("hello ")}, &ast.ExprVariable{ @@ -2249,7 +2344,8 @@ func TestPrinterPrintShellExec(t *testing.T) { }, &ast.ScalarEncapsedStringPart{Value: []byte("!")}, }, - }) + } + n.Accept(p) expected := "`hello $world!`" actual := o.String() @@ -2262,8 +2358,8 @@ func TestPrinterPrintShellExec(t *testing.T) { func TestPrinterPrintExprShortArray(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprShortArray{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprArray{ Items: []ast.Vertex{ &ast.ExprArrayItem{ Key: &ast.ScalarString{Value: []byte("'Hello'")}, @@ -2283,7 +2379,8 @@ func TestPrinterPrintExprShortArray(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `['Hello'=>$world,2=>&$var,$var]` actual := o.String() @@ -2296,8 +2393,11 @@ func TestPrinterPrintExprShortArray(t *testing.T) { func TestPrinterPrintShortList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprShortList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprList{ + OpenBracketTkn: &token.Token{ + Value: []byte("["), + }, Items: []ast.Vertex{ &ast.ExprArrayItem{ Val: &ast.ExprVariable{ @@ -2321,7 +2421,11 @@ func TestPrinterPrintShortList(t *testing.T) { }, }, }, - }) + CloseBracketTkn: &token.Token{ + Value: []byte("]"), + }, + } + n.Accept(p) expected := `[$a,list($b,$c)]` actual := o.String() @@ -2334,25 +2438,24 @@ func TestPrinterPrintShortList(t *testing.T) { func TestPrinterPrintStaticCall(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprStaticCall{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &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")}, - }, + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$a")}, }, - &ast.Argument{ - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$b")}, - }, + }, + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$b")}, }, }, }, - }) + } + n.Accept(p) expected := `Foo::bar($a,$b)` actual := o.String() @@ -2365,13 +2468,14 @@ func TestPrinterPrintStaticCall(t *testing.T) { func TestPrinterPrintStaticPropertyFetch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprStaticPropertyFetch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprStaticPropertyFetch{ Class: &ast.Identifier{Value: []byte("Foo")}, Property: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$bar")}, }, - }) + } + n.Accept(p) expected := `Foo::$bar` actual := o.String() @@ -2384,15 +2488,16 @@ func TestPrinterPrintStaticPropertyFetch(t *testing.T) { func TestPrinterPrintTernary(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprTernary{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprTernary{ Condition: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, IfFalse: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, - }) + } + n.Accept(p) expected := `$a?:$b` actual := o.String() @@ -2405,8 +2510,8 @@ func TestPrinterPrintTernary(t *testing.T) { func TestPrinterPrintTernaryFull(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprTernary{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprTernary{ Condition: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, @@ -2416,7 +2521,8 @@ func TestPrinterPrintTernaryFull(t *testing.T) { IfFalse: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$c")}, }, - }) + } + n.Accept(p) expected := `$a?$b:$c` actual := o.String() @@ -2429,12 +2535,13 @@ func TestPrinterPrintTernaryFull(t *testing.T) { func TestPrinterPrintUnaryMinus(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprUnaryMinus{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprUnaryMinus{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `-$var` actual := o.String() @@ -2447,12 +2554,13 @@ func TestPrinterPrintUnaryMinus(t *testing.T) { func TestPrinterPrintUnaryPlus(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprUnaryPlus{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprUnaryPlus{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `+$var` actual := o.String() @@ -2465,12 +2573,16 @@ func TestPrinterPrintUnaryPlus(t *testing.T) { func TestPrinterPrintVariable(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprVariable{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprVariable{ + DollarTkn: &token.Token{ + Value: []byte("$"), + }, VarName: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) expected := `$$var` actual := o.String() @@ -2483,14 +2595,15 @@ func TestPrinterPrintVariable(t *testing.T) { func TestPrinterPrintYieldFrom(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprYieldFrom{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprYieldFrom{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `yield from $var` + expected := `yield from$var` actual := o.String() if expected != actual { @@ -2501,14 +2614,15 @@ func TestPrinterPrintYieldFrom(t *testing.T) { func TestPrinterPrintYield(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprYield{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprYield{ Value: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `yield $var` + expected := `yield$var` actual := o.String() if expected != actual { @@ -2519,17 +2633,18 @@ func TestPrinterPrintYield(t *testing.T) { func TestPrinterPrintYieldFull(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.ExprYield{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.ExprYield{ Key: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$k")}, }, Value: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `yield $k=>$var` + expected := `yield$k=>$var` actual := o.String() if expected != actual { @@ -2542,12 +2657,14 @@ func TestPrinterPrintYieldFull(t *testing.T) { func TestPrinterPrintAltElseIf(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtElseIf{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtElseIf{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2555,7 +2672,8 @@ func TestPrinterPrintAltElseIf(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) expected := `elseif($a):$b;` actual := o.String() @@ -2568,14 +2686,17 @@ func TestPrinterPrintAltElseIf(t *testing.T) { func TestPrinterPrintAltElseIfEmpty(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtElseIf{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtElseIf{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{}, - }) + } + n.Accept(p) expected := `elseif($a):` actual := o.String() @@ -2588,9 +2709,11 @@ func TestPrinterPrintAltElseIfEmpty(t *testing.T) { func TestPrinterPrintAltElse(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtElse{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtElse{ + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2598,7 +2721,8 @@ func TestPrinterPrintAltElse(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) expected := `else:$b;` actual := o.String() @@ -2611,11 +2735,14 @@ func TestPrinterPrintAltElse(t *testing.T) { func TestPrinterPrintAltElseEmpty(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtElse{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtElse{ + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{}, - }) + } + n.Accept(p) expected := `else:` actual := o.String() @@ -2628,9 +2755,8 @@ func TestPrinterPrintAltElseEmpty(t *testing.T) { func TestPrinterPrintAltFor(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtFor{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtFor{ Init: []ast.Vertex{ &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, @@ -2646,6 +2772,9 @@ func TestPrinterPrintAltFor(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$c")}, }, }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2653,7 +2782,8 @@ func TestPrinterPrintAltFor(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) expected := `for($a;$b;$c):$d;endfor;` actual := o.String() @@ -2666,18 +2796,22 @@ func TestPrinterPrintAltFor(t *testing.T) { func TestPrinterPrintAltForeach(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtForeach{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtForeach{ 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")}, - }}, + Var: &ast.ExprReference{ + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$val")}, + }, + }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2685,9 +2819,10 @@ func TestPrinterPrintAltForeach(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) - expected := `foreach($var as $key=>&$val):$d;endforeach;` + expected := `foreach($var as$key=>&$val):$d;endforeach;` actual := o.String() if expected != actual { @@ -2698,12 +2833,14 @@ func TestPrinterPrintAltForeach(t *testing.T) { func TestPrinterPrintAltIf(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtIf{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtIf{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2713,10 +2850,12 @@ func TestPrinterPrintAltIf(t *testing.T) { }, ElseIf: []ast.Vertex{ &ast.StmtElseIf{ - Alt: true, Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$b")}, }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2726,15 +2865,19 @@ func TestPrinterPrintAltIf(t *testing.T) { }, }, &ast.StmtElseIf{ - Alt: true, Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$c")}, }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{}, }, }, Else: &ast.StmtElse{ - Alt: true, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2743,7 +2886,8 @@ func TestPrinterPrintAltIf(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `if($a):$d;elseif($b):$b;elseif($c):else:$b;endif;` actual := o.String() @@ -2756,12 +2900,14 @@ func TestPrinterPrintAltIf(t *testing.T) { func TestPrinterPrintStmtAltSwitch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtSwitch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtSwitch{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - Alt: true, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, CaseList: []ast.Vertex{ &ast.StmtCase{ Cond: &ast.ScalarString{Value: []byte("'a'")}, @@ -2780,9 +2926,10 @@ func TestPrinterPrintStmtAltSwitch(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `switch($var):case 'a':$a;case 'b':$b;endswitch;` + expected := `switch($var):case'a':$a;case'b':$b;endswitch;` actual := o.String() if expected != actual { @@ -2793,12 +2940,14 @@ func TestPrinterPrintStmtAltSwitch(t *testing.T) { func TestPrinterPrintAltWhile(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtWhile{ - Alt: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtWhile{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, + ColonTkn: &token.Token{ + Value: []byte(":"), + }, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ @@ -2806,7 +2955,8 @@ func TestPrinterPrintAltWhile(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) expected := `while($a):$b;endwhile;` actual := o.String() @@ -2819,12 +2969,13 @@ func TestPrinterPrintAltWhile(t *testing.T) { func TestPrinterPrintStmtBreak(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtBreak{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtBreak{ Expr: &ast.ScalarLnumber{ Value: []byte("1"), }, - }) + } + n.Accept(p) expected := "break 1;" actual := o.String() @@ -2837,8 +2988,8 @@ func TestPrinterPrintStmtBreak(t *testing.T) { func TestPrinterPrintStmtCase(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtCase{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtCase{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, @@ -2847,9 +2998,10 @@ func TestPrinterPrintStmtCase(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$a")}, }}, }, - }) + } + n.Accept(p) - expected := `case $a:$a;` + expected := `case$a:$a;` actual := o.String() if expected != actual { @@ -2860,15 +3012,16 @@ func TestPrinterPrintStmtCase(t *testing.T) { func TestPrinterPrintStmtCaseEmpty(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtCase{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtCase{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Stmts: []ast.Vertex{}, - }) + } + n.Accept(p) - expected := "case $a:" + expected := "case$a:" actual := o.String() if expected != actual { @@ -2879,8 +3032,8 @@ func TestPrinterPrintStmtCaseEmpty(t *testing.T) { func TestPrinterPrintStmtCatch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtCatch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &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")}}}, @@ -2893,7 +3046,8 @@ func TestPrinterPrintStmtCatch(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$a")}, }}, }, - }) + } + n.Accept(p) expected := `catch(Exception|\RuntimeException$e){$a;}` actual := o.String() @@ -2906,26 +3060,30 @@ func TestPrinterPrintStmtCatch(t *testing.T) { func TestPrinterPrintStmtClassMethod(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtClassMethod{ - Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, - ReturnsRef: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtClassMethod{ + Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, MethodName: &ast.Identifier{Value: []byte("foo")}, Params: []ast.Vertex{ &ast.Parameter{ Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}}, - Var: &ast.Reference{ - Var: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$a")}, - }, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$a")}, }, DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}}, }, &ast.Parameter{ - Var: &ast.Variadic{ - Var: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$b")}, - }, + VariadicTkn: &token.Token{ + Value: []byte("..."), + }, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$b")}, }, }, }, @@ -2939,9 +3097,10 @@ func TestPrinterPrintStmtClassMethod(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) - expected := `public function &foo(?int&$a=null,...$b):void{$a;}` + expected := `public function&foo(?int&$a=null,...$b):void{$a;}` actual := o.String() if expected != actual { @@ -2952,29 +3111,33 @@ func TestPrinterPrintStmtClassMethod(t *testing.T) { func TestPrinterPrintStmtAbstractClassMethod(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtClassMethod{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtClassMethod{ Modifiers: []ast.Vertex{ &ast.Identifier{Value: []byte("public")}, &ast.Identifier{Value: []byte("static")}, }, - ReturnsRef: true, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, MethodName: &ast.Identifier{Value: []byte("foo")}, Params: []ast.Vertex{ &ast.Parameter{ Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}}, - Var: &ast.Reference{ - Var: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$a")}, - }, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$a")}, }, DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}}, }, &ast.Parameter{ - Var: &ast.Variadic{ - Var: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$b")}, - }, + VariadicTkn: &token.Token{ + Value: []byte("..."), + }, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$b")}, }, }, }, @@ -2982,9 +3145,10 @@ func TestPrinterPrintStmtAbstractClassMethod(t *testing.T) { Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("void")}}, }, Stmt: &ast.StmtNop{}, - }) + } + n.Accept(p) - expected := `public static function &foo(?int&$a=null,...$b):void;` + expected := `public static function&foo(?int&$a=null,...$b):void;` actual := o.String() if expected != actual { @@ -2995,8 +3159,8 @@ func TestPrinterPrintStmtAbstractClassMethod(t *testing.T) { func TestPrinterPrintStmtClass(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtClass{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtClass{ Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("abstract")}}, ClassName: &ast.Identifier{Value: []byte("Foo")}, Extends: &ast.StmtClassExtends{ @@ -3022,7 +3186,8 @@ func TestPrinterPrintStmtClass(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `abstract class Foo extends Bar implements Baz,Quuz{public static const FOO='bar';}` actual := o.String() @@ -3035,20 +3200,18 @@ func TestPrinterPrintStmtClass(t *testing.T) { func TestPrinterPrintStmtAnonymousClass(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtClass{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &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")}, - }, + Arguments: []ast.Vertex{ + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$a")}, }, - &ast.Argument{ - Expr: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$b")}, - }, + }, + &ast.Argument{ + Expr: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$b")}, }, }, }, @@ -3072,9 +3235,10 @@ func TestPrinterPrintStmtAnonymousClass(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `abstract class($a,$b) extends Bar implements Baz,Quuz{public const FOO='bar';}` + expected := `abstract class($a,$b)extends Bar implements Baz,Quuz{public const FOO='bar';}` actual := o.String() if expected != actual { @@ -3085,8 +3249,8 @@ func TestPrinterPrintStmtAnonymousClass(t *testing.T) { func TestPrinterPrintStmtClassConstList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtClassConstList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtClassConstList{ Modifiers: []ast.Vertex{&ast.Identifier{Value: []byte("public")}}, Consts: []ast.Vertex{ &ast.StmtConstant{ @@ -3098,7 +3262,8 @@ func TestPrinterPrintStmtClassConstList(t *testing.T) { Expr: &ast.ScalarString{Value: []byte("'b'")}, }, }, - }) + } + n.Accept(p) expected := `public const FOO='a',BAR='b';` actual := o.String() @@ -3111,8 +3276,8 @@ func TestPrinterPrintStmtClassConstList(t *testing.T) { func TestPrinterPrintStmtConstList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtConstList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtConstList{ Consts: []ast.Vertex{ &ast.StmtConstant{ Name: &ast.Identifier{Value: []byte("FOO")}, @@ -3123,7 +3288,8 @@ func TestPrinterPrintStmtConstList(t *testing.T) { Expr: &ast.ScalarString{Value: []byte("'b'")}, }, }, - }) + } + n.Accept(p) expected := `const FOO='a',BAR='b';` actual := o.String() @@ -3136,11 +3302,12 @@ func TestPrinterPrintStmtConstList(t *testing.T) { func TestPrinterPrintStmtConstant(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtConstant{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtConstant{ Name: &ast.Identifier{Value: []byte("FOO")}, Expr: &ast.ScalarString{Value: []byte("'BAR'")}, - }) + } + n.Accept(p) expected := "FOO='BAR'" actual := o.String() @@ -3153,12 +3320,13 @@ func TestPrinterPrintStmtConstant(t *testing.T) { func TestPrinterPrintStmtContinue(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtContinue{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtContinue{ Expr: &ast.ScalarLnumber{ Value: []byte("1"), }, - }) + } + n.Accept(p) expected := `continue 1;` actual := o.String() @@ -3171,8 +3339,8 @@ func TestPrinterPrintStmtContinue(t *testing.T) { func TestPrinterPrintStmtDeclareStmts(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtDeclare{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtDeclare{ Consts: []ast.Vertex{ &ast.StmtConstant{ Name: &ast.Identifier{Value: []byte("FOO")}, @@ -3184,7 +3352,8 @@ func TestPrinterPrintStmtDeclareStmts(t *testing.T) { &ast.StmtNop{}, }, }, - }) + } + n.Accept(p) expected := `declare(FOO='bar'){;}` actual := o.String() @@ -3197,8 +3366,8 @@ func TestPrinterPrintStmtDeclareStmts(t *testing.T) { func TestPrinterPrintStmtDeclareExpr(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtDeclare{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtDeclare{ Consts: []ast.Vertex{ &ast.StmtConstant{ Name: &ast.Identifier{Value: []byte("FOO")}, @@ -3206,7 +3375,8 @@ func TestPrinterPrintStmtDeclareExpr(t *testing.T) { }, }, Stmt: &ast.StmtExpression{Expr: &ast.ScalarString{Value: []byte("'bar'")}}, - }) + } + n.Accept(p) expected := `declare(FOO='bar')'bar';` actual := o.String() @@ -3219,8 +3389,8 @@ func TestPrinterPrintStmtDeclareExpr(t *testing.T) { func TestPrinterPrintStmtDeclareNop(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtDeclare{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtDeclare{ Consts: []ast.Vertex{ &ast.StmtConstant{ Name: &ast.Identifier{Value: []byte("FOO")}, @@ -3228,7 +3398,8 @@ func TestPrinterPrintStmtDeclareNop(t *testing.T) { }, }, Stmt: &ast.StmtNop{}, - }) + } + n.Accept(p) expected := `declare(FOO='bar');` actual := o.String() @@ -3241,14 +3412,15 @@ func TestPrinterPrintStmtDeclareNop(t *testing.T) { func TestPrinterPrintStmtDefalut(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtDefault{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtDefault{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }}, }, - }) + } + n.Accept(p) expected := `default:$a;` actual := o.String() @@ -3261,10 +3433,11 @@ func TestPrinterPrintStmtDefalut(t *testing.T) { func TestPrinterPrintStmtDefalutEmpty(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtDefault{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtDefault{ Stmts: []ast.Vertex{}, - }) + } + n.Accept(p) expected := `default:` actual := o.String() @@ -3277,17 +3450,18 @@ func TestPrinterPrintStmtDefalutEmpty(t *testing.T) { func TestPrinterPrintStmtDo_Expression(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtDo{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtDo{ Cond: &ast.ScalarLnumber{Value: []byte("1")}, Stmt: &ast.StmtExpression{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, }, - }) + } + n.Accept(p) - expected := `do $a;while(1);` + expected := `do$a;while(1);` actual := o.String() if expected != actual { @@ -3298,8 +3472,8 @@ func TestPrinterPrintStmtDo_Expression(t *testing.T) { func TestPrinterPrintStmtDo_StmtList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtDo{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtDo{ Cond: &ast.ScalarLnumber{Value: []byte("1")}, Stmt: &ast.StmtStmtList{ Stmts: []ast.Vertex{ @@ -3308,9 +3482,10 @@ func TestPrinterPrintStmtDo_StmtList(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) - expected := `do {$a;}while(1);` + expected := `do{$a;}while(1);` actual := o.String() if expected != actual { @@ -3321,8 +3496,8 @@ func TestPrinterPrintStmtDo_StmtList(t *testing.T) { func TestPrinterPrintStmtEchoHtmlState(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.Root{ + p := visitor.NewPrinter(o) + n := &ast.Root{ Stmts: []ast.Vertex{ &ast.StmtEcho{ Exprs: []ast.Vertex{ @@ -3335,9 +3510,10 @@ func TestPrinterPrintStmtEchoHtmlState(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `$v){;}` + expected := `foreach($a as$k=>$v){;}` actual := o.String() if expected != actual { @@ -3593,16 +3780,19 @@ func TestPrinterPrintStmtForeach(t *testing.T) { func TestPrinterPrintStmtFunction(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtFunction{ - ReturnsRef: true, + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtFunction{ + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, FunctionName: &ast.Identifier{Value: []byte("foo")}, Params: []ast.Vertex{ &ast.Parameter{ - Var: &ast.Reference{ - Var: &ast.ExprVariable{ - VarName: &ast.Identifier{Value: []byte("$var")}, - }, + AmpersandTkn: &token.Token{ + Value: []byte("&"), + }, + Var: &ast.ExprVariable{ + VarName: &ast.Identifier{Value: []byte("$var")}, }, }, }, @@ -3612,9 +3802,10 @@ func TestPrinterPrintStmtFunction(t *testing.T) { Stmts: []ast.Vertex{ &ast.StmtNop{}, }, - }) + } + n.Accept(p) - expected := `function &foo(&$var):\Foo{;}` + expected := `function&foo(&$var):\Foo{;}` actual := o.String() if expected != actual { @@ -3625,8 +3816,8 @@ func TestPrinterPrintStmtFunction(t *testing.T) { func TestPrinterPrintStmtGlobal(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtGlobal{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtGlobal{ Vars: []ast.Vertex{ &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, @@ -3635,9 +3826,10 @@ func TestPrinterPrintStmtGlobal(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$b")}, }, }, - }) + } + n.Accept(p) - expected := `global $a,$b;` + expected := `global$a,$b;` actual := o.String() if expected != actual { @@ -3648,10 +3840,11 @@ func TestPrinterPrintStmtGlobal(t *testing.T) { func TestPrinterPrintStmtGoto(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtGoto{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtGoto{ Label: &ast.Identifier{Value: []byte("FOO")}, - }) + } + n.Accept(p) expected := `goto FOO;` actual := o.String() @@ -3664,8 +3857,9 @@ func TestPrinterPrintStmtGoto(t *testing.T) { func TestPrinterPrintHaltCompiler(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtHaltCompiler{}) + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtHaltCompiler{} + n.Accept(p) expected := `__halt_compiler();` actual := o.String() @@ -3678,8 +3872,8 @@ func TestPrinterPrintHaltCompiler(t *testing.T) { func TestPrinterPrintIfExpression(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtIf{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtIf{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, @@ -3717,9 +3911,10 @@ func TestPrinterPrintIfExpression(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `if($a)$b;elseif($c){$d;}elseif($e);else $f;` + expected := `if($a)$b;elseif($c){$d;}elseif($e);else$f;` actual := o.String() if expected != actual { @@ -3730,8 +3925,8 @@ func TestPrinterPrintIfExpression(t *testing.T) { func TestPrinterPrintIfStmtList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtIf{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtIf{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, @@ -3744,7 +3939,8 @@ func TestPrinterPrintIfStmtList(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `if($a){$b;}` actual := o.String() @@ -3757,13 +3953,14 @@ func TestPrinterPrintIfStmtList(t *testing.T) { func TestPrinterPrintIfNop(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtIf{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtIf{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Stmt: &ast.StmtNop{}, - }) + } + n.Accept(p) expected := `if($a);` actual := o.String() @@ -3776,14 +3973,15 @@ func TestPrinterPrintIfNop(t *testing.T) { func TestPrinterPrintInlineHtml(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.Root{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.Root{ Stmts: []ast.Vertex{ &ast.StmtInlineHtml{ Value: []byte("test"), }, }, - }) + } + n.Accept(p) expected := `test` actual := o.String() @@ -3796,8 +3994,8 @@ func TestPrinterPrintInlineHtml(t *testing.T) { func TestPrinterPrintInterface(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtInterface{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtInterface{ InterfaceName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, Extends: &ast.StmtInterfaceExtends{ InterfaceNames: []ast.Vertex{ @@ -3819,7 +4017,8 @@ func TestPrinterPrintInterface(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `interface Foo extends Bar,Baz{public function foo(){$a;}}` actual := o.String() @@ -3832,10 +4031,11 @@ func TestPrinterPrintInterface(t *testing.T) { func TestPrinterPrintLabel(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtLabel{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtLabel{ LabelName: &ast.Identifier{Value: []byte("FOO")}, - }) + } + n.Accept(p) expected := `FOO:` actual := o.String() @@ -3848,10 +4048,11 @@ func TestPrinterPrintLabel(t *testing.T) { func TestPrinterPrintNamespace(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtNamespace{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtNamespace{ Name: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, - }) + } + n.Accept(p) expected := `namespace Foo;` actual := o.String() @@ -3864,15 +4065,16 @@ func TestPrinterPrintNamespace(t *testing.T) { func TestPrinterPrintNamespaceWithStmts(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtNamespace{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtNamespace{ Name: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }}, }, - }) + } + n.Accept(p) expected := `namespace Foo{$a;}` actual := o.String() @@ -3885,8 +4087,9 @@ func TestPrinterPrintNamespaceWithStmts(t *testing.T) { func TestPrinterPrintNop(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtNop{}) + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtNop{} + n.Accept(p) expected := `;` actual := o.String() @@ -3899,8 +4102,8 @@ func TestPrinterPrintNop(t *testing.T) { func TestPrinterPrintPropertyList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtPropertyList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtPropertyList{ Modifiers: []ast.Vertex{ &ast.Identifier{Value: []byte("public")}, &ast.Identifier{Value: []byte("static")}, @@ -3925,9 +4128,10 @@ func TestPrinterPrintPropertyList(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `public static Foo $a='a',$b;` + expected := `public static Foo$a='a',$b;` actual := o.String() if expected != actual { @@ -3938,13 +4142,14 @@ func TestPrinterPrintPropertyList(t *testing.T) { func TestPrinterPrintProperty(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtProperty{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtProperty{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Expr: &ast.ScalarLnumber{Value: []byte("1")}, - }) + } + n.Accept(p) expected := `$a=1` actual := o.String() @@ -3957,10 +4162,11 @@ func TestPrinterPrintProperty(t *testing.T) { func TestPrinterPrintReturn(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtReturn{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtReturn{ Expr: &ast.ScalarLnumber{Value: []byte("1")}, - }) + } + n.Accept(p) expected := `return 1;` actual := o.String() @@ -3973,13 +4179,14 @@ func TestPrinterPrintReturn(t *testing.T) { func TestPrinterPrintStaticVar(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtStaticVar{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtStaticVar{ Var: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, Expr: &ast.ScalarLnumber{Value: []byte("1")}, - }) + } + n.Accept(p) expected := `$a=1` actual := o.String() @@ -3992,8 +4199,8 @@ func TestPrinterPrintStaticVar(t *testing.T) { func TestPrinterPrintStatic(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtStatic{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtStatic{ Vars: []ast.Vertex{ &ast.StmtStaticVar{ Var: &ast.ExprVariable{ @@ -4006,9 +4213,10 @@ func TestPrinterPrintStatic(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `static $a,$b;` + expected := `static$a,$b;` actual := o.String() if expected != actual { @@ -4019,8 +4227,8 @@ func TestPrinterPrintStatic(t *testing.T) { func TestPrinterPrintStmtList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtStmtList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, @@ -4029,7 +4237,8 @@ func TestPrinterPrintStmtList(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$b")}, }}, }, - }) + } + n.Accept(p) expected := `{$a;$b;}` actual := o.String() @@ -4042,8 +4251,8 @@ func TestPrinterPrintStmtList(t *testing.T) { func TestPrinterPrintStmtListNested(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtStmtList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtStmtList{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, @@ -4063,7 +4272,8 @@ func TestPrinterPrintStmtListNested(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `{$a;{$b;{$c;}}}` actual := o.String() @@ -4076,8 +4286,8 @@ func TestPrinterPrintStmtListNested(t *testing.T) { func TestPrinterPrintStmtSwitch(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtSwitch{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtSwitch{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, @@ -4099,9 +4309,10 @@ func TestPrinterPrintStmtSwitch(t *testing.T) { }, }, }, - }) + } + n.Accept(p) - expected := `switch($var){case 'a':$a;case 'b':$b;}` + expected := `switch($var){case'a':$a;case'b':$b;}` actual := o.String() if expected != actual { @@ -4112,14 +4323,15 @@ func TestPrinterPrintStmtSwitch(t *testing.T) { func TestPrinterPrintStmtThrow(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtThrow{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtThrow{ Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$var")}, }, - }) + } + n.Accept(p) - expected := `throw $var;` + expected := `throw$var;` actual := o.String() if expected != actual { @@ -4130,8 +4342,8 @@ func TestPrinterPrintStmtThrow(t *testing.T) { func TestPrinterPrintStmtTraitAdaptationList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTraitAdaptationList{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtTraitAdaptationList{ Adaptations: []ast.Vertex{ &ast.StmtTraitUseAlias{ Ref: &ast.StmtTraitMethodRef{ @@ -4141,7 +4353,8 @@ func TestPrinterPrintStmtTraitAdaptationList(t *testing.T) { Alias: &ast.Identifier{Value: []byte("b")}, }, }, - }) + } + n.Accept(p) expected := `{Foo::a as b;}` actual := o.String() @@ -4154,10 +4367,11 @@ func TestPrinterPrintStmtTraitAdaptationList(t *testing.T) { func TestPrinterPrintStmtTraitMethodRef(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTraitMethodRef{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtTraitMethodRef{ Method: &ast.Identifier{Value: []byte("a")}, - }) + } + n.Accept(p) expected := `a` actual := o.String() @@ -4170,11 +4384,12 @@ func TestPrinterPrintStmtTraitMethodRef(t *testing.T) { func TestPrinterPrintStmtTraitMethodRefFull(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTraitMethodRef{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtTraitMethodRef{ Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, Method: &ast.Identifier{Value: []byte("a")}, - }) + } + n.Accept(p) expected := `Foo::a` actual := o.String() @@ -4187,15 +4402,16 @@ func TestPrinterPrintStmtTraitMethodRefFull(t *testing.T) { func TestPrinterPrintStmtTraitUseAlias(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTraitUseAlias{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtTraitUseAlias{ Ref: &ast.StmtTraitMethodRef{ Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, Method: &ast.Identifier{Value: []byte("a")}, }, Modifier: &ast.Identifier{Value: []byte("public")}, Alias: &ast.Identifier{Value: []byte("b")}, - }) + } + n.Accept(p) expected := `Foo::a as public b;` actual := o.String() @@ -4208,8 +4424,8 @@ func TestPrinterPrintStmtTraitUseAlias(t *testing.T) { func TestPrinterPrintStmtTraitUsePrecedence(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTraitUsePrecedence{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtTraitUsePrecedence{ Ref: &ast.StmtTraitMethodRef{ Trait: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, Method: &ast.Identifier{Value: []byte("a")}, @@ -4218,7 +4434,8 @@ func TestPrinterPrintStmtTraitUsePrecedence(t *testing.T) { &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Bar")}}}, &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, }, - }) + } + n.Accept(p) expected := `Foo::a insteadof Bar,Baz;` actual := o.String() @@ -4231,14 +4448,15 @@ func TestPrinterPrintStmtTraitUsePrecedence(t *testing.T) { func TestPrinterPrintStmtTraitUse(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTraitUse{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &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: &ast.StmtNop{}, - }) + Adaptations: &ast.StmtNop{}, + } + n.Accept(p) expected := `use Foo,Bar;` actual := o.String() @@ -4251,13 +4469,13 @@ func TestPrinterPrintStmtTraitUse(t *testing.T) { func TestPrinterPrintStmtTraitAdaptations(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTraitUse{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &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: &ast.StmtTraitAdaptationList{ + Adaptations: &ast.StmtTraitAdaptationList{ Adaptations: []ast.Vertex{ &ast.StmtTraitUseAlias{ Ref: &ast.StmtTraitMethodRef{ @@ -4268,7 +4486,8 @@ func TestPrinterPrintStmtTraitAdaptations(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `use Foo,Bar{Foo::a as b;}` actual := o.String() @@ -4281,8 +4500,8 @@ func TestPrinterPrintStmtTraitAdaptations(t *testing.T) { func TestPrinterPrintTrait(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTrait{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtTrait{ TraitName: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, Stmts: []ast.Vertex{ &ast.StmtClassMethod{ @@ -4298,7 +4517,8 @@ func TestPrinterPrintTrait(t *testing.T) { }, }, }, - }) + } + n.Accept(p) expected := `trait Foo{public function foo(){$a;}}` actual := o.String() @@ -4311,8 +4531,8 @@ func TestPrinterPrintTrait(t *testing.T) { func TestPrinterPrintStmtTry(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtTry{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtTry{ Stmts: []ast.Vertex{ &ast.StmtExpression{Expr: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, @@ -4339,7 +4559,8 @@ func TestPrinterPrintStmtTry(t *testing.T) { &ast.StmtNop{}, }, }, - }) + } + n.Accept(p) expected := `try{$a;}catch(Exception|\RuntimeException$e){$b;}finally{;}` actual := o.String() @@ -4352,8 +4573,8 @@ func TestPrinterPrintStmtTry(t *testing.T) { func TestPrinterPrintStmtUnset(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtUnset{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtUnset{ Vars: []ast.Vertex{ &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, @@ -4362,7 +4583,8 @@ func TestPrinterPrintStmtUnset(t *testing.T) { VarName: &ast.Identifier{Value: []byte("$b")}, }, }, - }) + } + n.Accept(p) expected := `unset($a,$b);` actual := o.String() @@ -4375,8 +4597,8 @@ func TestPrinterPrintStmtUnset(t *testing.T) { func TestPrinterPrintUse(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtUse{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtUse{ Type: &ast.Identifier{Value: []byte("function")}, UseDeclarations: []ast.Vertex{ &ast.StmtUseDeclaration{ @@ -4387,7 +4609,8 @@ func TestPrinterPrintUse(t *testing.T) { Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, }, }, - }) + } + n.Accept(p) expected := `use function Foo as Bar,Baz;` actual := o.String() @@ -4400,8 +4623,8 @@ func TestPrinterPrintUse(t *testing.T) { func TestPrinterPrintStmtGroupUse(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtGroupUse{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtGroupUse{ Type: &ast.Identifier{Value: []byte("function")}, Prefix: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, UseDeclarations: []ast.Vertex{ @@ -4413,7 +4636,8 @@ func TestPrinterPrintStmtGroupUse(t *testing.T) { Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Baz")}}}, }, }, - }) + } + n.Accept(p) expected := `use function Foo\{Foo as Bar,Baz};` actual := o.String() @@ -4426,12 +4650,13 @@ func TestPrinterPrintStmtGroupUse(t *testing.T) { func TestPrinterPrintUseDeclaration(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtUseDeclaration{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtUseDeclaration{ Type: &ast.Identifier{Value: []byte("function")}, Use: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}}, Alias: &ast.Identifier{Value: []byte("Bar")}, - }) + } + n.Accept(p) expected := `function Foo as Bar` actual := o.String() @@ -4444,8 +4669,8 @@ func TestPrinterPrintUseDeclaration(t *testing.T) { func TestPrinterPrintWhileStmtList(t *testing.T) { o := bytes.NewBufferString("") - p := printer.NewPrinter(o) - p.Print(&ast.StmtWhile{ + p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) + n := &ast.StmtWhile{ Cond: &ast.ExprVariable{ VarName: &ast.Identifier{Value: []byte("$a")}, }, @@ -4456,7 +4681,8 @@ func TestPrinterPrintWhileStmtList(t *testing.T) { }}, }, }, - }) + } + n.Accept(p) expected := `while($a){$a;}` actual := o.String() diff --git a/pkg/printer/printer.go b/pkg/printer/printer.go deleted file mode 100644 index 026708e..0000000 --- a/pkg/printer/printer.go +++ /dev/null @@ -1,2838 +0,0 @@ -package printer - -import ( - "bytes" - "io" - "strings" - - "github.com/z7zmey/php-parser/pkg/ast" - "github.com/z7zmey/php-parser/pkg/token" -) - -type printerState int - -const ( - PhpState printerState = iota - HtmlState -) - -type Printer struct { - w io.Writer - s printerState - bufStart string - lastWrite []byte -} - -// 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) write(b []byte) { - p.lastWrite = b - p.w.Write(b) -} - -func (p *Printer) Print(n ast.Vertex) { - _, isRoot := n.(*ast.Root) - _, isInlineHtml := n.(*ast.StmtInlineHtml) - if p.s == HtmlState && !isInlineHtml && !isRoot { - if n.GetNode().Tokens.IsEmpty() { - p.bufStart = " 0 { - p.write([]byte(glue)) - } - - p.Print(n) - } -} - -func (p *Printer) joinPrintRefactored(glue string, nn []ast.Vertex) { - for k, n := range nn { - if k > 0 { - p.bufStart = glue - } - - p.Print(n) - } -} - -func (p *Printer) printSeparatedList(nodeList []ast.Vertex, separatorList []*token.Token, def string) { - var separators []*token.Token - - if cap(separatorList) >= len(nodeList) { - separators = separatorList[:len(nodeList)] - } else { - separators = make([]*token.Token, len(nodeList)) - copy(separators, separatorList) - } - - for k, n := range nodeList { - p.Print(n) - if k < len(nodeList)-1 { - p.printToken(separators[k], def) - } else { - p.printToken(separators[k], "") - } - } -} - -func (p *Printer) printNodes(nn []ast.Vertex) { - for _, n := range nn { - p.Print(n) - } -} - -func (p *Printer) printFreeFloatingOrDefault(n ast.Vertex, pos token.Position, def string) { - if n == nil { - return - } - - if len(n.GetNode().Tokens[pos]) == 0 { - p.write([]byte(def)) - return - } - - for _, m := range n.GetNode().Tokens[pos] { - p.write(m.Value) - } -} - -func (p *Printer) printToken(t *token.Token, def string) { - if t != nil { - p.write(t.Skipped) - p.write(t.Value) - p.bufStart = "" - return - } - - if def != "" { - p.write([]byte(p.bufStart)) - p.bufStart = "" - - p.write([]byte(def)) - return - } -} - -func (p *Printer) printFreeFloating(n ast.Vertex, pos token.Position) { - if n == nil { - return - } - - for _, m := range n.GetNode().Tokens[pos] { - p.write(m.Value) - } -} - -func (p *Printer) printNode(n ast.Vertex) { - switch n := 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.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.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.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.StmtUse: - p.printStmtUse(n) - case *ast.StmtGroupUse: - p.printStmtGroupUse(n) - case *ast.StmtUseDeclaration: - p.printStmtUseDeclaration(n) - case *ast.StmtWhile: - p.printStmtWhile(n) - case *ast.ParserBrackets: - p.printParserBrackets(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.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write(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.Print(nn.Var) - - if nn.DefaultValue != nil { - p.write([]byte("=")) - 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) - - p.write([]byte("?")) - 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.AmpersandTkn != nil { - p.write([]byte("&")) - } - p.printFreeFloating(nn, token.Ampersand) - - if nn.VariadicTkn != nil { - p.write([]byte("...")) - } - - p.Print(nn.Expr) - - p.printFreeFloating(nn, token.End) -} - -// name - -func (p *Printer) printNameNamePart(n *ast.NameNamePart) { - p.printToken(n.StringTkn, string(n.Value)) -} - -func (p *Printer) printNameName(n *ast.NameName) { - p.printFreeFloating(n, token.Start) - - p.joinPrintRefactored("\\", n.Parts) -} - -func (p *Printer) printNameFullyQualified(n *ast.NameFullyQualified) { - p.printFreeFloating(n, token.Start) - p.printToken(n.NsSeparatorTkn, "\\") - - p.joinPrintRefactored("\\", n.Parts) -} - -func (p *Printer) printNameRelative(n *ast.NameRelative) { - p.printFreeFloating(n, token.Start) - p.printToken(n.NsTkn, "namespace") - p.printToken(n.NsSeparatorTkn, "\\") - - p.joinPrintRefactored("\\", n.Parts) -} - -// scalar - -func (p *Printer) printScalarLNumber(n ast.Vertex) { - nn := n.(*ast.ScalarLnumber) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write(nn.Value) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printScalarDNumber(n ast.Vertex) { - nn := n.(*ast.ScalarDnumber) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write(nn.Value) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printScalarString(n ast.Vertex) { - nn := n.(*ast.ScalarString) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write(nn.Value) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printScalarEncapsedStringPart(n ast.Vertex) { - nn := n.(*ast.ScalarEncapsedStringPart) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write(nn.Value) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printScalarEncapsed(n ast.Vertex) { - nn := n.(*ast.ScalarEncapsed) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write([]byte("\"")) - 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) - } - } - p.write([]byte("\"")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printScalarHeredoc(n ast.Vertex) { - nn := n.(*ast.ScalarHeredoc) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write(nn.OpenHeredocTkn.Value) - - 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) - } - } - - p.write([]byte(strings.Trim(string(nn.OpenHeredocTkn.Value), "<\"'\n"))) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printScalarMagicConstant(n ast.Vertex) { - nn := n.(*ast.ScalarMagicConstant) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - p.write(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) - p.write([]byte("=")) - 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) - p.write([]byte("=")) - p.printFreeFloating(nn, token.Equal) - p.write([]byte("&")) - 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) - p.write([]byte("&")) - p.write([]byte("=")) - 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) - p.write([]byte("|=")) - 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) - p.write([]byte("^=")) - 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) - p.write([]byte("??=")) - 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) - p.write([]byte(".=")) - 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) - p.write([]byte("/=")) - 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) - p.write([]byte("-=")) - 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) - p.write([]byte("%=")) - 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) - p.write([]byte("*=")) - 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) - p.write([]byte("+=")) - 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) - p.write([]byte("**=")) - 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) - p.write([]byte("<<=")) - 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) - p.write([]byte(">>=")) - 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) - p.write([]byte("&")) - 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) - p.write([]byte("|")) - 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) - p.write([]byte("^")) - 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) - p.write([]byte("&&")) - 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) - p.write([]byte("||")) - 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) - p.write([]byte("??")) - 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) - p.write([]byte(".")) - 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) - p.write([]byte("/")) - 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) - p.write([]byte("==")) - 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) - p.write([]byte(">=")) - 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) - p.write([]byte(">")) - 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) - p.write([]byte("===")) - 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() { - p.write([]byte(" ")) - } - p.write([]byte("and")) - if nn.Right.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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() { - p.write([]byte(" ")) - } - p.write([]byte("or")) - if nn.Right.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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() { - p.write([]byte(" ")) - } - p.write([]byte("xor")) - if nn.Right.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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) - p.write([]byte("-")) - 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) - p.write([]byte("%")) - 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) - p.write([]byte("*")) - 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() { - p.write([]byte("!=")) - } - 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) - p.write([]byte("!==")) - 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) - p.write([]byte("+")) - 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) - p.write([]byte("**")) - 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) - p.write([]byte("<<")) - 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) - p.write([]byte(">>")) - 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) - p.write([]byte("<=")) - 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) - p.write([]byte("<")) - 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) - p.write([]byte("<=>")) - 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() { - p.write([]byte("(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() { - p.write([]byte("(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() { - p.write([]byte("(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() { - p.write([]byte("(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() { - p.write([]byte("(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() { - p.write([]byte("(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() { - p.write([]byte("(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() { - p.write([]byte("[")) - } - p.Print(nn.Dim) - p.printFreeFloating(nn, token.Expr) - if nn.GetNode().Tokens.IsEmpty() { - p.write([]byte("]")) - } - 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() { - p.write([]byte("[")) - } - p.Print(nn.Dim) - p.printFreeFloating(nn, token.Expr) - if nn.GetNode().Tokens.IsEmpty() { - p.write([]byte("]")) - } - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprArrayItem(n ast.Vertex) { - nn := n.(*ast.ExprArrayItem) - p.printFreeFloating(nn, token.Start) - - if nn.EllipsisTkn != nil { - p.write([]byte("...")) - } - - if nn.Key != nil { - p.Print(nn.Key) - p.printFreeFloating(nn, token.Expr) - p.write([]byte("=>")) - } - - 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) - p.write([]byte("array")) - p.printFreeFloating(nn, token.Array) - p.write([]byte("(")) - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, token.ArrayPairList) - p.write([]byte(")")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprArrowFunction(n ast.Vertex) { - nn := n.(*ast.ExprArrowFunction) - p.printFreeFloating(nn, token.Start) - - if nn.StaticTkn != nil { - p.write([]byte("static")) - } - p.printFreeFloating(nn, token.Static) - if nn.StaticTkn != nil && n.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - - p.write([]byte("fn")) - p.printFreeFloating(nn, token.Function) - - if nn.AmpersandTkn != nil { - p.write([]byte("&")) - } - p.printFreeFloating(nn, token.Ampersand) - - p.write([]byte("(")) - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, token.ParameterList) - p.write([]byte(")")) - p.printFreeFloating(nn, token.Params) - - if nn.ReturnType != nil { - p.bufStart = ":" - p.Print(nn.ReturnType) - } - p.printFreeFloating(nn, token.ReturnType) - - p.write([]byte("=>")) - - p.Print(nn.Expr) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprBitwiseNot(n ast.Vertex) { - nn := n.(*ast.ExprBitwiseNot) - p.printFreeFloating(nn, token.Start) - p.write([]byte("~")) - 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) - p.write([]byte("!")) - 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) - p.write([]byte("::")) - 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) - p.write([]byte("clone")) - if nn.Expr.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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) - p.write([]byte("use")) - p.printFreeFloating(nn, token.Use) - p.write([]byte("(")) - p.joinPrint(",", nn.Uses) - p.printFreeFloating(nn, token.LexicalVarList) - p.write([]byte(")")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprClosure(n ast.Vertex) { - nn := n.(*ast.ExprClosure) - p.printFreeFloating(nn, token.Start) - - if nn.StaticTkn != nil { - p.write([]byte("static")) - } - p.printFreeFloating(nn, token.Static) - if nn.StaticTkn != nil && n.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - - p.write([]byte("function")) - p.printFreeFloating(nn, token.Function) - - if nn.AmpersandTkn != nil { - p.write([]byte("&")) - } - p.printFreeFloating(nn, token.Ampersand) - - p.write([]byte("(")) - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, token.ParameterList) - p.write([]byte(")")) - p.printFreeFloating(nn, token.Params) - - if nn.ClosureUse != nil { - p.Print(nn.ClosureUse) - } - p.printFreeFloating(nn, token.LexicalVars) - - if nn.ReturnType != nil { - p.bufStart = ":" - p.Print(nn.ReturnType) - } - p.printFreeFloating(nn, token.ReturnType) - - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - 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) - p.write([]byte("empty")) - - if _, ok := nn.Expr.(*ast.ParserBrackets); !ok { - p.write([]byte("(")) - } - - p.Print(nn.Expr) - - if _, ok := nn.Expr.(*ast.ParserBrackets); !ok { - p.write([]byte(")")) - } - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprErrorSuppress(n ast.Vertex) { - nn := n.(*ast.ExprErrorSuppress) - p.printFreeFloating(nn, token.Start) - p.write([]byte("@")) - 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) - - p.write([]byte("eval")) - - if _, ok := nn.Expr.(*ast.ParserBrackets); !ok { - p.write([]byte("(")) - } - - p.Print(nn.Expr) - - if _, ok := nn.Expr.(*ast.ParserBrackets); !ok { - p.write([]byte(")")) - } - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprExit(n ast.Vertex) { - nn := n.(*ast.ExprExit) - p.printFreeFloating(nn, token.Start) - - if nn.DieTkn != nil { - p.write(nn.DieTkn.Value) - } else { - p.write([]byte("exit")) - } - - if nn.Expr != nil && nn.Expr.GetNode().Tokens.IsEmpty() && nn.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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.printToken(nn.OpenParenthesisTkn, "(") - p.joinPrint(",", nn.Arguments) - p.printToken(nn.CloseParenthesisTkn, ")") - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprInclude(n ast.Vertex) { - nn := n.(*ast.ExprInclude) - p.printFreeFloating(nn, token.Start) - p.write([]byte("include")) - if nn.Expr.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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) - p.write([]byte("include_once")) - if nn.Expr.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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() { - p.write([]byte(" ")) - } - - p.write([]byte("instanceof")) - - p.bufStart = " " - 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) - - p.write([]byte("isset")) - p.printFreeFloating(nn, token.Isset) - p.write([]byte("(")) - p.joinPrint(",", nn.Vars) - p.printFreeFloating(nn, token.VarList) - p.write([]byte(")")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprList(n ast.Vertex) { - nn := n.(*ast.ExprList) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("list")) - p.printFreeFloating(nn, token.List) - p.write([]byte("(")) - p.joinPrint(",", nn.Items) - p.printFreeFloating(nn, token.ArrayPairList) - p.write([]byte(")")) - - 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) - p.write([]byte("->")) - p.Print(nn.Method) - - p.printToken(nn.OpenParenthesisTkn, "(") - p.joinPrint(",", nn.Arguments) - p.printToken(nn.CloseParenthesisTkn, ")") - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprNew(n ast.Vertex) { - nn := n.(*ast.ExprNew) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("new")) - p.bufStart = " " - p.Print(nn.Class) - - if nn.Arguments != nil { - p.printToken(nn.OpenParenthesisTkn, "(") - p.joinPrint(",", nn.Arguments) - p.printToken(nn.CloseParenthesisTkn, ")") - } - - 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) - p.write([]byte("--")) - - 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) - p.write([]byte("++")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprPreDec(n ast.Vertex) { - nn := n.(*ast.ExprPreDec) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("--")) - 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) - - p.write([]byte("++")) - 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) - - p.write([]byte("print")) - if nn.Expr.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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) - p.write([]byte("->")) - 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) - - p.write([]byte("&")) - 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) - - p.write([]byte("require")) - if nn.Expr.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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) - - p.write([]byte("require_once")) - if nn.Expr.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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) - - p.write([]byte("`")) - p.joinPrint("", nn.Parts) - p.write([]byte("`")) - - 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) - p.write([]byte("::")) - p.Print(nn.Call) - - p.printToken(nn.OpenParenthesisTkn, "(") - p.joinPrint(",", nn.Arguments) - p.printToken(nn.CloseParenthesisTkn, ")") - - 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) - p.write([]byte("::")) - 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) - p.write([]byte("?")) - - if nn.IfTrue != nil { - p.Print(nn.IfTrue) - } - p.printFreeFloating(nn, token.True) - - p.write([]byte(":")) - 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) - - p.write([]byte("-")) - 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) - - p.write([]byte("+")) - p.Print(nn.Expr) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printExprVariable(n ast.Vertex) { - nn := n.(*ast.ExprVariable) - p.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - if _, ok := nn.VarName.(*ast.Identifier); !ok { - p.write([]byte("$")) - } - - 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) - - p.write([]byte("yield from")) - if nn.Expr.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - 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) - - p.write([]byte("yield")) - - if nn.Key != nil { - if nn.Key.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.Print(nn.Key) - p.printFreeFloating(nn, token.Expr) - p.write([]byte("=>")) - } else { - if nn.Value.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - } - - p.Print(nn.Value) - - p.printFreeFloating(nn, token.End) -} - -// smtm - -func (p *Printer) printStmtBreak(n *ast.StmtBreak) { - p.printToken(n.BreakTkn, "break") - - if n.Expr != nil { - p.bufStart = " " - } - - p.Print(n.Expr) - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtCase(n *ast.StmtCase) { - p.printToken(n.CaseTkn, "case") - p.bufStart = " " - p.Print(n.Cond) - p.printToken(n.CaseSeparatorTkn, ":") - p.printNodes(n.Stmts) -} - -func (p *Printer) printStmtCatch(n *ast.StmtCatch) { - p.printToken(n.CatchTkn, "catch") - p.printToken(n.OpenParenthesisTkn, "(") - p.printSeparatedList(n.Types, n.SeparatorTkns, "|") - p.Print(n.Var) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.OpenCurlyBracketTkn, "{") - p.printNodes(n.Stmts) - p.printToken(n.CloseCurlyBracketTkn, "}") -} - -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() { - p.write([]byte(" ")) - } - p.Print(m) - } - - if nn.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - } - p.printFreeFloating(nn, token.ModifierList) - p.write([]byte("function")) - p.printFreeFloating(nn, token.Function) - - if nn.AmpersandTkn != nil { - if nn.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.write([]byte("&")) - p.printFreeFloating(nn, token.Ampersand) - } else { - if nn.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - } - - p.Print(nn.MethodName) - p.printFreeFloating(nn, token.Name) - p.write([]byte("(")) - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, token.ParameterList) - p.write([]byte(")")) - p.printFreeFloating(nn, token.Params) - - if nn.ReturnType != nil { - p.bufStart = ":" - 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.printFreeFloatingOrDefault(nn, token.Start, p.bufStart) - p.bufStart = "" - - if nn.Modifiers != nil { - for k, m := range nn.Modifiers { - if k > 0 && m.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.Print(m) - } - - if nn.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - } - p.printFreeFloating(nn, token.ModifierList) - p.write([]byte("class")) - - if nn.ClassName != nil { - p.bufStart = " " - p.Print(nn.ClassName) - } - - if nn.Arguments != nil { - p.printToken(nn.OpenParenthesisTkn, "(") - p.joinPrint(",", nn.Arguments) - p.printToken(nn.CloseParenthesisTkn, ")") - } - - if nn.Extends != nil { - p.printFreeFloating(nn.Extends, token.Start) - if nn.Extends.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.write([]byte("extends")) - p.bufStart = " " - p.Print(nn.Extends.(*ast.StmtClassExtends).ClassName) - } - - if nn.Implements != nil { - p.printFreeFloating(nn.Implements, token.Start) - if nn.Implements.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.write([]byte("implements")) - p.bufStart = " " - p.joinPrintRefactored(",", nn.Implements.(*ast.StmtClassImplements).InterfaceNames) - - } - - p.printFreeFloating(nn, token.Name) - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtClassConstList(n *ast.StmtClassConstList) { - p.joinPrintRefactored(" ", n.Modifiers) - p.bufStart = " " - p.printToken(n.ConstTkn, "const") - p.bufStart = " " - p.joinPrintRefactored(",", n.Consts) - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtConstList(n *ast.StmtConstList) { - p.printToken(n.ConstTkn, "const") - p.bufStart = " " - p.printSeparatedList(n.Consts, n.SeparatorTkns, ",") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtConstant(n *ast.StmtConstant) { - p.Print(n.Name) - p.printToken(n.EqualTkn, "=") - p.Print(n.Expr) -} - -func (p *Printer) printStmtContinue(n *ast.StmtContinue) { - p.printToken(n.ContinueTkn, "continue") - - if n.Expr != nil { - p.bufStart = " " - } - - p.Print(n.Expr) - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtDeclare(n *ast.StmtDeclare) { - if n.Alt { - p.printStmtAltDeclare(n) - return - } - p.printToken(n.DeclareTkn, "declare") - p.printToken(n.OpenParenthesisTkn, "(") - p.printSeparatedList(n.Consts, n.SeparatorTkns, ",") - p.printToken(n.CloseParenthesisTkn, ")") - p.Print(n.Stmt) -} - -func (p *Printer) printStmtAltDeclare(n *ast.StmtDeclare) { - p.printToken(n.DeclareTkn, "declare") - p.printToken(n.OpenParenthesisTkn, "(") - p.printSeparatedList(n.Consts, n.SeparatorTkns, ",") - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.ColonTkn, ":") - - if stmtList, ok := n.Stmt.(*ast.StmtStmtList); ok { - p.printNodes(stmtList.Stmts) - } else { - p.Print(n.Stmt) - } - - p.printToken(n.EndDeclareTkn, "enddeclare") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtDefault(n *ast.StmtDefault) { - p.printToken(n.DefaultTkn, "default") - p.printToken(n.CaseSeparatorTkn, ":") - p.printNodes(n.Stmts) -} - -func (p *Printer) printStmtDo(n *ast.StmtDo) { - p.printToken(n.DoTkn, "do") - p.bufStart = " " - - p.Print(n.Stmt) - - p.printToken(n.WhileTkn, "while") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtEcho(n *ast.StmtEcho) { - p.printToken(n.EchoTkn, "echo") - p.bufStart = " " - p.printSeparatedList(n.Exprs, n.SeparatorTkns, ",") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtElseif(n *ast.StmtElseIf) { - if n.Alt { - p.printStmtAltElseIf(n) - return - } - - p.printToken(n.ElseIfTkn, "elseif") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - - p.Print(n.Stmt) -} - -func (p *Printer) printStmtAltElseIf(n *ast.StmtElseIf) { - p.printToken(n.ElseIfTkn, "elseif") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.ColonTkn, ":") - - if stmtList, ok := n.Stmt.(*ast.StmtStmtList); ok { - p.printNodes(stmtList.Stmts) - } else { - p.Print(n.Stmt) - } -} - -func (p *Printer) printStmtElse(n *ast.StmtElse) { - if n.Alt { - p.printStmtAltElse(n) - return - } - - p.printToken(n.ElseTkn, "else") - p.bufStart = " " - p.Print(n.Stmt) -} - -func (p *Printer) printStmtAltElse(n *ast.StmtElse) { - p.printToken(n.ElseTkn, "else") - p.printToken(n.ColonTkn, ":") - - if stmtList, ok := n.Stmt.(*ast.StmtStmtList); ok { - p.printNodes(stmtList.Stmts) - } else { - p.Print(n.Stmt) - } -} - -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() { - p.write([]byte(";")) - } - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtFinally(n *ast.StmtFinally) { - p.printToken(n.FinallyTkn, "finally") - p.printToken(n.OpenCurlyBracketTkn, "{") - p.printNodes(n.Stmts) - p.printToken(n.CloseCurlyBracketTkn, "}") -} - -func (p *Printer) printStmtFor(n *ast.StmtFor) { - if n.Alt { - p.printStmtAltFor(n) - return - } - - p.printToken(n.ForTkn, "for") - p.printToken(n.OpenParenthesisTkn, "(") - p.joinPrint(",", n.Init) - p.printToken(n.InitSemiColonTkn, ";") - p.joinPrint(",", n.Cond) - p.printToken(n.CondSemiColonTkn, ";") - p.joinPrint(",", n.Loop) - p.printToken(n.CloseParenthesisTkn, ")") - - p.Print(n.Stmt) -} - -func (p *Printer) printStmtAltFor(n *ast.StmtFor) { - p.printToken(n.ForTkn, "for") - p.printToken(n.OpenParenthesisTkn, "(") - p.joinPrint(",", n.Init) - p.printToken(n.InitSemiColonTkn, ";") - p.joinPrint(",", n.Cond) - p.printToken(n.CondSemiColonTkn, ";") - p.joinPrint(",", n.Loop) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.ColonTkn, ":") - - if stmtList, ok := n.Stmt.(*ast.StmtStmtList); ok { - p.printNodes(stmtList.Stmts) - } else { - p.Print(n.Stmt) - } - - p.printToken(n.EndForTkn, "endfor") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtForeach(n *ast.StmtForeach) { - if n.Alt { - p.printStmtAltForeach(n) - return - } - - p.printToken(n.ForeachTkn, "foreach") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Expr) - p.bufStart = " " - p.printToken(n.AsTkn, "as") - p.bufStart = " " - if n.Key != nil { - p.Print(n.Key) - p.printToken(n.DoubleArrowTkn, "=>") - } - p.Print(n.Var) - p.printToken(n.CloseParenthesisTkn, ")") - p.Print(n.Stmt) -} - -func (p *Printer) printStmtAltForeach(n *ast.StmtForeach) { - p.printToken(n.ForeachTkn, "foreach") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Expr) - p.bufStart = " " - p.printToken(n.AsTkn, "as") - p.bufStart = " " - if n.Key != nil { - p.Print(n.Key) - p.printToken(n.DoubleArrowTkn, "=>") - } - p.Print(n.Var) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.ColonTkn, ":") - - if stmtList, ok := n.Stmt.(*ast.StmtStmtList); ok { - p.printNodes(stmtList.Stmts) - } else { - p.Print(n.Stmt) - } - - p.printToken(n.EndForeachTkn, "endforeach") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtFunction(n ast.Vertex) { - nn := n.(*ast.StmtFunction) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("function")) - p.printFreeFloating(nn, token.Function) - - if nn.AmpersandTkn != nil { - if nn.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.write([]byte("&")) - } else { - if nn.FunctionName.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - } - - p.Print(nn.FunctionName) - p.printFreeFloating(nn, token.Name) - - p.write([]byte("(")) - p.joinPrint(",", nn.Params) - p.printFreeFloating(nn, token.ParamList) - p.write([]byte(")")) - p.printFreeFloating(nn, token.Params) - - if nn.ReturnType != nil { - p.bufStart = ":" - p.Print(nn.ReturnType) - } - p.printFreeFloating(nn, token.ReturnType) - - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtGlobal(n *ast.StmtGlobal) { - p.printToken(n.GlobalTkn, "global") - p.bufStart = " " - p.printSeparatedList(n.Vars, n.SeparatorTkns, ",") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtGoto(n *ast.StmtGoto) { - p.printToken(n.GotoTkn, "goto") - p.bufStart = " " - p.Print(n.Label) - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtHaltCompiler(n *ast.StmtHaltCompiler) { - p.printToken(n.HaltCompilerTkn, "__halt_compiler") - p.printToken(n.OpenParenthesisTkn, "(") - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtIf(n *ast.StmtIf) { - if n.Alt { - p.printStmtAltIf(n) - return - } - - p.printToken(n.IfTkn, "if") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - - p.Print(n.Stmt) - p.printNodes(n.ElseIf) - p.Print(n.Else) -} - -func (p *Printer) printStmtAltIf(n *ast.StmtIf) { - p.printToken(n.IfTkn, "if") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.ColonTkn, ":") - - if stmtList, ok := n.Stmt.(*ast.StmtStmtList); ok { - p.printNodes(stmtList.Stmts) - } else { - p.Print(n.Stmt) - } - - p.printNodes(n.ElseIf) - p.Print(n.Else) - - p.printToken(n.EndIfTkn, "endif") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtInlineHTML(n *ast.StmtInlineHtml) { - if p.s == PhpState && !bytes.Contains(p.lastWrite, []byte("?>")) { - p.write([]byte("?>")) - } - p.SetState(HtmlState) - - p.printToken(n.InlineHtmlTkn, string(n.Value)) -} - -func (p *Printer) printStmtInterface(n ast.Vertex) { - nn := n.(*ast.StmtInterface) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("interface")) - - if nn.InterfaceName.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - - p.Print(nn.InterfaceName) - - if nn.Extends != nil { - p.printFreeFloating(nn.Extends, token.Start) - if nn.Extends.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.write([]byte("extends")) - p.bufStart = " " - p.joinPrintRefactored(",", nn.Extends.(*ast.StmtInterfaceExtends).InterfaceNames) - } - - p.printFreeFloating(nn, token.Name) - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtLabel(n *ast.StmtLabel) { - p.Print(n.LabelName) - p.printToken(n.ColonTkn, ":") -} - -func (p *Printer) printStmtNamespace(n *ast.StmtNamespace) { - p.printToken(n.NsTkn, "namespace") - - if n.Name != nil { - p.bufStart = " " - p.Print(n.Name) - } - - if n.Stmts != nil { - p.printToken(n.OpenCurlyBracket, "{") - p.printNodes(n.Stmts) - p.printToken(n.CloseCurlyBracket, "}") - return - } - - if n.OpenCurlyBracket != nil { - p.printToken(n.OpenCurlyBracket, "{") - p.printToken(n.CloseCurlyBracket, "}") - return - } - - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtNop(n *ast.StmtNop) { - p.printToken(n.SemiColonTkn, ";") -} - -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() { - p.write([]byte(" ")) - } - p.Print(m) - } - - if nn.Type != nil { - p.bufStart = " " - p.Print(nn.Type) - } - - if nn.Properties[0].GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - - p.joinPrint(",", nn.Properties) - p.printFreeFloating(n, token.PropertyList) - - p.printFreeFloating(n, token.SemiColon) - if n.GetNode().Tokens.IsEmpty() { - p.write([]byte(";")) - } - - 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) - p.write([]byte("=")) - p.Print(nn.Expr) - } - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtReturn(n *ast.StmtReturn) { - p.printToken(n.ReturnTkn, "return") - - if n.Expr != nil { - p.bufStart = " " - } - p.Print(n.Expr) - - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtStaticVar(n *ast.StmtStaticVar) { - p.Print(n.Var) - - if n.Expr != nil { - p.printToken(n.EqualTkn, "=") - p.Print(n.Expr) - } -} - -func (p *Printer) printStmtStatic(n *ast.StmtStatic) { - p.printToken(n.StaticTkn, "static") - p.bufStart = " " - p.printSeparatedList(n.Vars, n.SeparatorTkns, ",") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtStmtList(n *ast.StmtStmtList) { - p.printToken(n.OpenCurlyBracket, "{") - p.printNodes(n.Stmts) - p.printToken(n.CloseCurlyBracket, "}") -} - -func (p *Printer) printStmtSwitch(n *ast.StmtSwitch) { - if n.Alt { - p.printStmtAltSwitch(n) - return - } - - p.printToken(n.SwitchTkn, "switch") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.OpenCurlyBracketTkn, "{") - p.printToken(n.CaseSeparatorTkn, "") - p.printNodes(n.CaseList) - p.printToken(n.CloseCurlyBracketTkn, "}") -} - -func (p *Printer) printStmtAltSwitch(n *ast.StmtSwitch) { - p.printToken(n.SwitchTkn, "switch") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.ColonTkn, ":") - p.printToken(n.CaseSeparatorTkn, "") - p.printNodes(n.CaseList) - p.printToken(n.EndSwitchTkn, "endswitch") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtThrow(n *ast.StmtThrow) { - p.printToken(n.ThrowTkn, "throw") - p.bufStart = " " - p.Print(n.Expr) - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtTraitAdaptationList(n ast.Vertex) { - nn := n.(*ast.StmtTraitAdaptationList) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("{")) - p.printNodes(nn.Adaptations) - p.printFreeFloating(nn, token.AdaptationList) - p.write([]byte("}")) - - 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) - p.write([]byte("::")) - } - - 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() { - p.write([]byte(" ")) - } - p.write([]byte("as")) - - if nn.Modifier != nil { - if nn.Modifier.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.Print(nn.Modifier) - } - - if nn.Alias != nil { - if nn.Alias.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.Print(nn.Alias) - } - p.printFreeFloating(nn, token.Alias) - - p.printFreeFloating(nn, token.SemiColon) - if n.GetNode().Tokens.IsEmpty() { - p.write([]byte(";")) - } - - 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() { - p.write([]byte(" ")) - } - - p.write([]byte("insteadof")) - p.bufStart = " " - p.joinPrint(",", nn.Insteadof) - p.printFreeFloating(nn, token.NameList) - - p.printFreeFloating(nn, token.SemiColon) - if n.GetNode().Tokens.IsEmpty() { - p.write([]byte(";")) - } - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtTraitUse(n ast.Vertex) { - nn := n.(*ast.StmtTraitUse) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("use")) - p.bufStart = " " - p.joinPrintRefactored(",", nn.Traits) - - p.Print(nn.Adaptations) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtTrait(n ast.Vertex) { - nn := n.(*ast.StmtTrait) - p.printFreeFloating(nn, token.Start) - - p.write([]byte("trait")) - if nn.TraitName.GetNode().Tokens.IsEmpty() { - p.write([]byte(" ")) - } - p.Print(nn.TraitName) - - p.printFreeFloating(nn, token.Name) - p.write([]byte("{")) - p.printNodes(nn.Stmts) - p.printFreeFloating(nn, token.Stmts) - p.write([]byte("}")) - - p.printFreeFloating(nn, token.End) -} - -func (p *Printer) printStmtTry(n *ast.StmtTry) { - p.printToken(n.TryTkn, "try") - p.printToken(n.OpenCurlyBracket, "{") - p.printNodes(n.Stmts) - p.printToken(n.CloseCurlyBracket, "}") - - if n.Catches != nil { - p.printNodes(n.Catches) - } - - if n.Finally != nil { - p.Print(n.Finally) - } -} - -func (p *Printer) printStmtUnset(n *ast.StmtUnset) { - p.printToken(n.UnsetTkn, "unset") - p.printToken(n.OpenParenthesisTkn, "(") - p.printSeparatedList(n.Vars, n.SeparatorTkns, ",") - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtUse(n *ast.StmtUse) { - p.printToken(n.UseTkn, "use") - - if n.Type != nil { - p.bufStart = " " - p.Print(n.Type) - } - - p.bufStart = " " - p.joinPrintRefactored(",", n.UseDeclarations) - - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtGroupUse(n *ast.StmtGroupUse) { - p.printToken(n.UseTkn, "use") - - p.bufStart = " " - p.Print(n.Type) - - p.bufStart = " " - p.printToken(n.LeadingNsSeparatorTkn, "") - - p.Print(n.Prefix) - p.printToken(n.NsSeparatorTkn, "\\") - p.printToken(n.OpenCurlyBracketTkn, "{") - - p.joinPrintRefactored(",", n.UseDeclarations) - - p.printToken(n.CloseCurlyBracketTkn, "}") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printStmtUseDeclaration(n *ast.StmtUseDeclaration) { - p.Print(n.Type) - - if n.Type != nil { - p.bufStart = " " - } - - p.printToken(n.NsSeparatorTkn, "") - - p.Print(n.Use) - - if n.Alias == nil { - return - } - - p.bufStart = " " - p.printToken(n.AsTkn, "as") - - p.bufStart = " " - p.Print(n.Alias) -} - -func (p *Printer) printStmtWhile(n *ast.StmtWhile) { - if n.Alt { - p.printStmtAltWhile(n) - return - } - - p.printToken(n.WhileTkn, "while") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - - p.Print(n.Stmt) -} - -func (p *Printer) printStmtAltWhile(n *ast.StmtWhile) { - p.printToken(n.WhileTkn, "while") - p.printToken(n.OpenParenthesisTkn, "(") - p.Print(n.Cond) - p.printToken(n.CloseParenthesisTkn, ")") - p.printToken(n.ColonTkn, ":") - - if stmtList, ok := n.Stmt.(*ast.StmtStmtList); ok { - p.printNodes(stmtList.Stmts) - } else { - p.Print(n.Stmt) - } - - p.printToken(n.EndWhileTkn, "endwhile") - p.printToken(n.SemiColonTkn, ";") -} - -func (p *Printer) printParserBrackets(n ast.Vertex) { - nn := n.(*ast.ParserBrackets) - p.printFreeFloating(nn, token.Start) - - p.Print(nn.Child) - - p.printFreeFloating(nn, token.End) -}