diff --git a/CHANGELOG.md b/CHANGELOG.md
index 18b70004..b2a06de8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,9 @@
 Version 4.12.1-dev
 ------------------
 
-Nothing yet.
+### Added
+
+* [PHP 8.1] Added support for intersection types using a new `IntersectionType` node.
 
 Version 4.12.0 (2021-07-21)
 ---------------------------
diff --git a/grammar/php7.y b/grammar/php7.y
index e7030d63..f3ea2dec 100644
--- a/grammar/php7.y
+++ b/grammar/php7.y
@@ -561,6 +561,7 @@ type_expr:
       type                                                  { $$ = $1; }
     | '?' type                                              { $$ = Node\NullableType[$2]; }
     | union_type                                            { $$ = Node\UnionType[$1]; }
+    | intersection_type                                     { $$ = Node\IntersectionType[$1]; }
 ;
 
 type:
@@ -584,10 +585,24 @@ union_type_without_static:
     | union_type_without_static '|' type_without_static     { push($1, $3); }
 ;
 
+intersection_type:
+      type T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG type   { init($1, $3); }
+    | intersection_type T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG type
+          { push($1, $3); }
+;
+
+intersection_type_without_static:
+      type_without_static T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG type_without_static
+          { init($1, $3); }
+    | intersection_type_without_static T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG type_without_static
+          { push($1, $3); }
+;
+
 type_expr_without_static:
       type_without_static                                   { $$ = $1; }
     | '?' type_without_static                               { $$ = Node\NullableType[$2]; }
     | union_type_without_static                             { $$ = Node\UnionType[$1]; }
+    | intersection_type_without_static                      { $$ = Node\IntersectionType[$1]; }
 ;
 
 optional_type_without_static:
diff --git a/lib/PhpParser/BuilderHelpers.php b/lib/PhpParser/BuilderHelpers.php
index 2f0e9127..c0e3fbd7 100644
--- a/lib/PhpParser/BuilderHelpers.php
+++ b/lib/PhpParser/BuilderHelpers.php
@@ -5,6 +5,7 @@ namespace PhpParser;
 use PhpParser\Node\ComplexType;
 use PhpParser\Node\Expr;
 use PhpParser\Node\Identifier;
+use PhpParser\Node\IntersectionType;
 use PhpParser\Node\Name;
 use PhpParser\Node\NullableType;
 use PhpParser\Node\Scalar;
diff --git a/lib/PhpParser/Node/IntersectionType.php b/lib/PhpParser/Node/IntersectionType.php
new file mode 100644
index 00000000..9208e139
--- /dev/null
+++ b/lib/PhpParser/Node/IntersectionType.php
@@ -0,0 +1,30 @@
+<?php declare(strict_types=1);
+
+namespace PhpParser\Node;
+
+use PhpParser\NodeAbstract;
+
+class IntersectionType extends ComplexType
+{
+    /** @var (Identifier|Name)[] Types */
+    public $types;
+
+    /**
+     * Constructs an intersection type.
+     *
+     * @param (Identifier|Name)[] $types      Types
+     * @param array               $attributes Additional attributes
+     */
+    public function __construct(array $types, array $attributes = []) {
+        $this->attributes = $attributes;
+        $this->types = $types;
+    }
+
+    public function getSubNodeNames() : array {
+        return ['types'];
+    }
+
+    public function getType() : string {
+        return 'IntersectionType';
+    }
+}
diff --git a/lib/PhpParser/NodeVisitor/NameResolver.php b/lib/PhpParser/NodeVisitor/NameResolver.php
index 79bbc457..8e259c57 100644
--- a/lib/PhpParser/NodeVisitor/NameResolver.php
+++ b/lib/PhpParser/NodeVisitor/NameResolver.php
@@ -189,7 +189,7 @@ class NameResolver extends NodeVisitorAbstract
             $node->type = $this->resolveType($node->type);
             return $node;
         }
-        if ($node instanceof Node\UnionType) {
+        if ($node instanceof Node\UnionType || $node instanceof Node\IntersectionType) {
             foreach ($node->types as &$type) {
                 $type = $this->resolveType($type);
             }
diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php
index 6f5fa20a..bc8c34c7 100644
--- a/lib/PhpParser/Parser/Php7.php
+++ b/lib/PhpParser/Parser/Php7.php
@@ -18,16 +18,16 @@ use PhpParser\Node\Stmt;
 class Php7 extends \PhpParser\ParserAbstract
 {
     protected $tokenToSymbolMapSize = 396;
-    protected $actionTableSize = 1189;
-    protected $gotoTableSize = 697;
+    protected $actionTableSize = 1195;
+    protected $gotoTableSize = 583;
 
     protected $invalidSymbol = 168;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 414;
-    protected $numNonLeafStates = 702;
+    protected $YY2TBLSTATE = 418;
+    protected $numNonLeafStates = 708;
 
     protected $symbolToName = array(
         "EOF",
@@ -244,125 +244,126 @@ class Php7 extends \PhpParser\ParserAbstract
     );
 
     protected $action = array(
-          131,  132,  133,  562,  134,  135,    0,  714,  715,  716,
-          136,   36,  826,  903,  827,  461,-32766,-32766,-32766,-32767,
-        -32767,-32767,-32767,  100,  101,  102,  103,  104, 1052, 1053,
-         1054, 1051, 1050, 1049, 1055,  708,  707,-32766,-32766,-32766,
+          131,  132,  133,  568,  134,  135,    0,  720,  721,  722,
+          136,   36,  832,  909,  833,  467,-32766,-32766,-32766,-32767,
+        -32767,-32767,-32767,  100,  101,  102,  103,  104, 1064, 1065,
+         1066, 1063, 1062, 1061, 1067,  714,  713,-32766,-32766,-32766,
         -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
-        -32767,  538,  539,-32766,-32766,  717,-32766,-32766,-32766,  989,
-          990,  798,  914,  439,  440,  441,  364,  365,    2,  265,
-          137,  390,  721,  722,  723,  724,  408,-32766,  414,-32766,
-        -32766,-32766,-32766,-32766,  982,  725,  726,  727,  728,  729,
-          730,  731,  732,  733,  734,  735,  755,  563,  756,  757,
-          758,  759,  747,  748,  330,  331,  750,  751,  736,  737,
-          738,  740,  741,  742,  340,  782,  783,  784,  785,  786,
-          787,  743,  744,  564,  565,  776,  767,  765,  766,  779,
-          762,  763,  279,  414,  566,  567,  761,  568,  569,  570,
-          571,  572,  573,  590, -567,  462,  484,  790,  764,  574,
-          575, -567,  138,-32766,-32766,-32766,  131,  132,  133,  562,
-          134,  135, 1003,  714,  715,  716,  136,   36, 1044,-32766,
-        -32766,-32766, 1287,  688,-32766, 1288,-32766,-32766,-32766,-32766,
-        -32766,-32766,-32766, 1052, 1053, 1054, 1051, 1050, 1049, 1055,
-        -32766,  708,  707,  366,  365, 1242,-32766,-32766,-32766, -564,
-          105,  106,  107,  408,  268,  883, -564,  238, 1177, 1176,
-         1178,  717,-32766,-32766,-32766, 1030,  108,-32766,-32766,-32766,
-        -32766,  978,  977,  976,  979,  265,  137,  390,  721,  722,
-          723,  724,   12,-32766,  414,-32766,-32766,-32766,-32766,  989,
-          990,  725,  726,  727,  728,  729,  730,  731,  732,  733,
-          734,  735,  755,  563,  756,  757,  758,  759,  747,  748,
-          330,  331,  750,  751,  736,  737,  738,  740,  741,  742,
-          340,  782,  783,  784,  785,  786,  787,  743,  744,  564,
-          565,  776,  767,  765,  766,  779,  762,  763,  873,  315,
-          566,  567,  761,  568,  569,  570,  571,  572,  573,-32766,
-           81,   82,   83, -567,  764,  574,  575, -567,  138,  739,
-          709,  710,  711,  712,  713, 1262,  714,  715,  716,  752,
-          753,   35, 1261,   84,   85,   86,   87,   88,   89,   90,
+        -32767,  544,  545,-32766,-32766,  723,-32766,-32766,-32766,  996,
+          997,  804,  920,  445,  446,  447,  368,  369,    2,  265,
+          137,  394,  727,  728,  729,  730,  412,-32766,  418,-32766,
+        -32766,-32766,-32766,-32766,  988,  731,  732,  733,  734,  735,
+          736,  737,  738,  739,  740,  741,  761,  569,  762,  763,
+          764,  765,  753,  754,  334,  335,  756,  757,  742,  743,
+          744,  746,  747,  748,  344,  788,  789,  790,  791,  792,
+          793,  749,  750,  570,  571,  782,  773,  771,  772,  785,
+          768,  769,  281,  418,  572,  573,  767,  574,  575,  576,
+          577,  578,  579,  596, -573,  468,  490,  796,  770,  580,
+          581, -573,  138,-32766,-32766,-32766,  131,  132,  133,  568,
+          134,  135, 1015,  720,  721,  722,  136,   36, 1056,-32766,
+        -32766,-32766, 1299,  694,-32766, 1300,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32766, 1064, 1065, 1066, 1063, 1062, 1061, 1067,
+        -32766,  714,  713,  370,  369, 1254,-32766,-32766,-32766, -570,
+          105,  106,  107,  412,  268,  889, -570,  238, 1189, 1188,
+         1190,  723,-32766,-32766,-32766, 1042,  108,-32766,-32766,-32766,
+        -32766,  984,  983,  982,  985,  265,  137,  394,  727,  728,
+          729,  730,   12,-32766,  418,-32766,-32766,-32766,-32766,  996,
+          997,  731,  732,  733,  734,  735,  736,  737,  738,  739,
+          740,  741,  761,  569,  762,  763,  764,  765,  753,  754,
+          334,  335,  756,  757,  742,  743,  744,  746,  747,  748,
+          344,  788,  789,  790,  791,  792,  793,  749,  750,  570,
+          571,  782,  773,  771,  772,  785,  768,  769,  879,  319,
+          572,  573,  767,  574,  575,  576,  577,  578,  579,-32766,
+           81,   82,   83, -573,  770,  580,  581, -573,  138,  745,
+          715,  716,  717,  718,  719, 1274,  720,  721,  722,  758,
+          759,   35, 1273,   84,   85,   86,   87,   88,   89,   90,
            91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
-          101,  102,  103,  104,  105,  106,  107,  987,  268,  148,
-        -32766,-32766,-32766,  447,  448,   80,   33, -264, -564, 1002,
-          108,  314, -564,  885,  717,  674,  795,  127,  989,  990,
-          584,-32766, 1028,-32766,-32766,-32766,  801,  149,  718,  719,
-          720,  721,  722,  723,  724,  -88, 1182,  788,  276, -518,
-          279,-32766,-32766,-32766,  725,  726,  727,  728,  729,  730,
-          731,  732,  733,  734,  735,  755,  778,  756,  757,  758,
-          759,  747,  748,  749,  777,  750,  751,  736,  737,  738,
-          740,  741,  742,  781,  782,  783,  784,  785,  786,  787,
-          743,  744,  745,  746,  776,  767,  765,  766,  779,  762,
-          763,  143,  796,  754,  760,  761,  768,  769,  771,  770,
-          772,  773, -306, -518, -518, -193, -192,  764,  775,  774,
-           48,   49,   50,  493,   51,   52,  237,  799, -518,  -86,
-           53,   54, -111,   55,  987,  251,-32766, -111,  792, -111,
-         -518,  534, -524, -344,  294, -344,  298, -111, -111, -111,
-         -111, -111, -111, -111, -111,  989,  990,  989,  990,  151,
-        -32766,-32766,-32766, 1175,  799,  125,  300, 1277,   56,   57,
-          102,  103,  104, -111,   58, 1202,   59,  244,  245,   60,
-           61,   62,   63,   64,   65,   66,   67, -517,   26,  266,
-           68,  428,  494, -320,  800,  -86, 1208, 1209,  495, 1173,
-          799, 1182, 1214,  287, 1206,   40,   23,  496,   73,  497,
-          945,  498,  314,  499,  794,  312,  500,  501,  375,  676,
-           11,   42,   43,  429,  361,  360,  883,   44,  502,   34,
-          247,  -16, -558,  352,  326,  327, -558, 1182, 1177, 1176,
-         1178, -519,  503,  504,  505,  328, -516, 1258,   47,  708,
-          707, -517, -517,  354,  506,  507,  799, 1196, 1197, 1198,
-         1199, 1193, 1194,  286,  358,  826, -517,  827, -306, 1200,
-         1195, -193, -192, 1177, 1176, 1178,  287,  883, -517,  373,
-         -523,   69,  799,  310,  311,  314,   30,  109,  110,  111,
+          101,  102,  103,  104,  105,  106,  107,  994,  268,  148,
+        -32766,-32766,-32766,  453,  454,   80,   33, -264, -570, 1014,
+          108,  318, -570,  891,  723,  680,  801,  127,  996,  997,
+          590,-32766, 1040,-32766,-32766,-32766,  807,  149,  724,  725,
+          726,  727,  728,  729,  730,  -88, 1194,  794,  276, -524,
+          281,-32766,-32766,-32766,  731,  732,  733,  734,  735,  736,
+          737,  738,  739,  740,  741,  761,  784,  762,  763,  764,
+          765,  753,  754,  755,  783,  756,  757,  742,  743,  744,
+          746,  747,  748,  787,  788,  789,  790,  791,  792,  793,
+          749,  750,  751,  752,  782,  773,  771,  772,  785,  768,
+          769,  143,  802,  760,  766,  767,  774,  775,  777,  776,
+          778,  779, -312, -524, -524, -193, -192,  770,  781,  780,
+           48,   49,   50,  499,   51,   52,  237,  805, -524,  -86,
+           53,   54, -111,   55,  994,  251,-32766, -111,  798, -111,
+         -524,  540, -530, -350,  298, -350,  302, -111, -111, -111,
+         -111, -111, -111, -111, -111,  996,  997,  996,  997,  151,
+        -32766,-32766,-32766, 1187,  805,  125,  304, 1289,   56,   57,
+          102,  103,  104, -111,   58, 1214,   59,  244,  245,   60,
+           61,   62,   63,   64,   65,   66,   67, -523,   26,  266,
+           68,  434,  500, -326,  806,  -86, 1220, 1221,  501, 1185,
+          805, 1194, 1226,  291, 1218,   40,   23,  502,   73,  503,
+          951,  504,  318,  505,  800,  152,  506,  507,  277,  682,
+          278,   42,   43,  435,  365,  364,  889,   44,  508,   34,
+          247,  -16, -564,  356,  330,  316, -564, 1194, 1189, 1188,
+         1190, -525,  509,  510,  511,  331, -522, 1270,   47,  714,
+          713, -523, -523,  332,  512,  513,  805, 1208, 1209, 1210,
+         1211, 1205, 1206,  290,  358,  282, -523,  283, -312, 1212,
+         1207, -193, -192, 1189, 1188, 1190,  291,  889, -523,  362,
+         -529,   69,  805,  314,  315,  318,   30,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-         -153, -153, -153,  630,   24, -519, -519,  679,  424,  873,
-         -516, -516,  290,  291,  883, -153,  425, -153,  799, -153,
-         -519, -153,  708,  707,  426, -516,  790,  357, -111, 1089,
-         1091,  359, -519,  427,  883,  139,  805, -516,  946,  126,
-         -516,  314, -111, -111,  680,  152, 1029, -521,  700,  646,
-          647,  153,  859, -111, -111, -111, -111,   46,  287,-32766,
-          873,  147,  393,   73,  681, 1175,  155,  314,  362,  363,
-          367,  368,-32766,-32766,-32766,   31,-32766,  -79,-32766,  122,
-        -32766,  708,  707,-32766,  885,  883,  674, -153,-32766,-32766,
-        -32766,  708,  707,  883,-32766,-32766,  123,  873,  128,   73,
-        -32766,  405,  129,  314, -516, -516,  142,  140,  -75,-32766,
-          156, -521, -521,  314,   26,  683,  157,  873,  158, -516,
-          159,  288,  289,  690,  -73,  899,  799,  -72,-32766,  -71,
-         1206, -516,  622,  623, 1175,  885,  -70,  674, -521,   72,
-          -69,-32766,-32766,-32766,  -68,-32766,  -67,-32766,  124,-32766,
-          -66,  -47,-32766,  -18,  146,  269,  -51,-32766,-32766,-32766,
-          275,  689,  692,-32766,-32766,  882,  145,  277,  873,-32766,
-          405,  278,  885,  280,  674,  281,  873,  320,-32766,  108,
-          506,  507,  144, 1196, 1197, 1198, 1199, 1193, 1194,  799,
-          130,  654,  931, 1059,  674, 1200, 1195,  790,  268,-32766,
-          667, 1289,  636,  637,  620, 1175,-32766,   71,  292,  295,
-          311,  314,-32766,-32766,-32766,  542,-32766,  631,-32766, 1213,
-        -32766,  299,  536,-32766, 1215,   13,  901,  649,-32766,-32766,
-        -32766, 1203,-32766,-32766,-32766,-32766,   -4,  883,  548, 1175,
-        -32766,  405,  444,  885,  472,  674,-32766,-32766,-32766,-32766,
-        -32766,  885,-32766,  674,-32766,  650,  798,-32766,   38,  694,
-            0,    0,-32766,-32766,-32766,-32766,    0,  423,-32766,-32766,
-            0, 1175,  915,    0,-32766,  405,  916,    0,-32766,-32766,
-        -32766,    0,-32766,-32766,-32766,  293,-32766,    0,    0,-32766,
-            0,    0, -482,  467,-32766,-32766,-32766,-32766, -472,    7,
-        -32766,-32766,   15, 1175,  554,  356,-32766,  405,  860,  883,
-        -32766,-32766,-32766,  588,-32766,-32766,-32766,   39,-32766,  287,
-          873,-32766,  697,  698,  864,  955,-32766,-32766,-32766,  932,
-          939,  929,-32766,-32766,  940,  862,  927, 1033,-32766,  405,
-         1036, 1037,  359, 1034,  419,  883, 1035,-32766, 1041,  285,
-          810, -552, 1228, -111, -111, 1246, 1280,  625, -267,   32,
-          309,  355,  675,  818, -111, -111, -111, -111,  678,  682,
-        -32766,  684,  685,  686,  687,  691, 1175,  677, -550, 1284,
-         1286,  821,  820,-32766,-32766,-32766,    9,-32766,  829,-32766,
-          908,-32766,  873,  947,-32766,  885,  828,  674,   -4,-32766,
-        -32766,-32766, 1285,  907,  909,-32766,-32766,  906, -242, -242,
-         -242,-32766,  405, 1161,  359,   26,  892,  902,  890,  937,
-        -32766,  938, 1283, 1240, 1229, -111, -111,  799,  873, 1247,
-         1253, 1206, 1256, -265, -524,  859, -111, -111, -111, -111,
-         -523, -522,    1,   27, -241, -241, -241,   28,   37,   41,
-          359,   45,   70,   74,   75,   76,   77,   78,   79,    0,
-          141, -111, -111,  150,  154,  243,  316,  885,  341,  674,
-         -242,  859, -111, -111, -111, -111,  342,  343,  344,  345,
-          346,  347,  507,  348, 1196, 1197, 1198, 1199, 1193, 1194,
-          349,  350,  351,  353,  420,    0, 1200, 1195, -264,   17,
-           18,   19,   20,  885,   22,  674, -241,  392,   71,  314,
-          463,  311,  314,  464,  471,  474,  475,  476,  477,  481,
-          482,  483,  491,  661, 1186, 1129, 1204, 1004, 1165, -269,
-         -103,   16,   21,   25,  284,  391,  581,  585,  612,  666,
-         1133, 1181, 1130, 1259,    0, -486, 1146,    0, 1207
+         -153, -153, -153,  636,   24, -525, -525,  685,  377,  879,
+         -522, -522,  294,  295,  889, -153,  430, -153,  805, -153,
+         -525, -153,  714,  713,  431, -522,  796,  361, -111, 1101,
+         1103,  363, -525,  432,  889,  139,  433, -522,  952,  126,
+         -522,  318, -111, -111,  686,  811,  379, -527,   11,  832,
+          153,  833,  865, -111, -111, -111, -111,   46,  291,-32766,
+          879,  652,  653,   73,  687, 1187, 1041,  318,  706,  147,
+          397,  155,-32766,-32766,-32766,   31,-32766,  -79,-32766,  122,
+        -32766,  714,  713,-32766,  891,  889,  680, -153,-32766,-32766,
+        -32766,  714,  713,  889,-32766,-32766,  123,  879,  128,   73,
+        -32766,  409,  129,  318, -522, -522,  142,  140,  -75,-32766,
+          156, -527, -527,  318,   26,  689,  157,  879,  158, -522,
+          159,  292,  293,  696,  366,  367,  805,  -73,-32766,  -72,
+         1218, -522,  371,  372, 1187,  891,  -71,  680, -527,   72,
+          -70,-32766,-32766,-32766,  -69,-32766,  -68,-32766,  124,-32766,
+          628,  629,-32766,  -67,  -66,  -47,  -51,-32766,-32766,-32766,
+          -18,  146,  269,-32766,-32766,  275,  695,  698,  879,-32766,
+          409,  888,  891,  145,  680,  280,  879,  905,-32766,  279,
+          512,  513,  284, 1208, 1209, 1210, 1211, 1205, 1206,  324,
+          130,  144,  937,  285,  680, 1212, 1207,  108,  268,-32766,
+          796,  805,-32766,  660,  637, 1187,  655,   71,  673, 1071,
+          315,  318,-32766,-32766,-32766, 1301,-32766,  299,-32766,  626,
+        -32766,  429,  542,-32766,-32766,  921,  554,  922,-32766,-32766,
+        -32766, 1225,  548,-32766,-32766,-32766,   -4,  889, -488, 1187,
+        -32766,  409,  642,  891,  297,  680,-32766,-32766,-32766,-32766,
+        -32766,  891,-32766,  680,-32766,   13, 1227,-32766,  450,  478,
+          643,  907,-32766,-32766,-32766,-32766,  656, -478,-32766,-32766,
+            0, 1187,    0,    0,-32766,  409,    0,  296,-32766,-32766,
+        -32766,  303,-32766,-32766,-32766,    0,-32766,    0,  804,-32766,
+            0,    0,    0,  473,-32766,-32766,-32766,-32766,    0,    7,
+        -32766,-32766,   15, 1187,  560,  594,-32766,  409, 1215,  889,
+        -32766,-32766,-32766,  360,-32766,-32766,-32766,  816,-32766, -267,
+          879,-32766,   38,  291,    0,    0,-32766,-32766,-32766,   39,
+          703,  704,-32766,-32766,  870,  961,  938,  945,-32766,  409,
+          935,  946,  363,  868,  425,  889,  933,-32766, 1045,  289,
+         1240, 1048, 1049, -111, -111, 1046, 1047, 1053, -558, 1258,
+         1292,  631,    0,  824, -111, -111, -111, -111,   32,  313,
+        -32766,  359,  681,  684,  688,  690, 1187,  691,  692,  693,
+          697,  683,  318,-32766,-32766,-32766,    9,-32766,  700,-32766,
+          866,-32766,  879, 1296,-32766,  891, 1298,  680,   -4,-32766,
+        -32766,-32766,  827,  826,  835,-32766,-32766,  914, -242, -242,
+         -242,-32766,  409,  953,  363,   26,  834, 1297,  913,  915,
+        -32766,  912, 1173,  898,  908, -111, -111,  805,  879,  896,
+          943, 1218,  944, 1295, 1252,  865, -111, -111, -111, -111,
+         1241, 1259, 1265, 1268, -241, -241, -241, -556, -530, -529,
+          363, -528,    1,   27,   28,   37,   41,   45,   70,    0,
+           74, -111, -111,   75,   76,   77,   78,  891,   79,  680,
+         -242,  865, -111, -111, -111, -111,  141,  150,  154,  243,
+          320,  345,  513,  346, 1208, 1209, 1210, 1211, 1205, 1206,
+          347,  348,  349,  350,  351,  352, 1212, 1207,  353,  354,
+          355,  357,  426,  891, -265,  680, -241, -264,   71,    0,
+           17,  315,  318,   18,   19,   20,   22,  396,  469,  470,
+          477,  480,  481,  482,  483,  487,  488,  489,  497,  667,
+         1198, 1141, 1216, 1016, 1177, -269, -103,   16,   21,   25,
+          288,  395,  587,  591,  618,  672, 1145, 1193, 1142, 1271,
+            0, -492, 1158,    0, 1219
     );
 
     protected $actionCheck = array(
@@ -421,12 +422,12 @@ class Php7 extends \PhpParser\ParserAbstract
            62,   63,   64,   65,   66,   67,   68,   70,   70,   71,
            72,   73,   74,  162,  159,   97,   78,   79,   80,  116,
            82,    1,  146,  158,   86,   87,   88,   89,  163,   91,
-           31,   93,  167,   95,  156,    8,   98,   99,  106,  161,
-          108,  103,  104,  105,  106,  107,    1,  109,  110,  147,
+           31,   93,  167,   95,  156,   14,   98,   99,   35,  161,
+           37,  103,  104,  105,  106,  107,    1,  109,  110,  147,
           148,   31,  160,  115,  116,    8,  164,    1,  155,  156,
           157,   70,  124,  125,  126,    8,   70,    1,   70,   37,
            38,  134,  135,    8,  136,  137,   82,  139,  140,  141,
-          142,  143,  144,  145,    8,  106,  149,  108,  164,  151,
+          142,  143,  144,  145,    8,   35,  149,   37,  164,  151,
           152,  164,  164,  155,  156,  157,  158,    1,  161,    8,
           163,  163,   82,  165,  166,  167,   16,   17,   18,   19,
            20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
@@ -434,62 +435,63 @@ class Php7 extends \PhpParser\ParserAbstract
           134,  135,  134,  135,    1,   90,    8,   92,   82,   94,
           149,   96,   37,   38,    8,  149,   80,  149,  128,   59,
            60,  106,  161,    8,    1,  161,    8,  161,  159,  161,
-           70,  167,  117,  118,   31,   14,  159,   70,  161,   75,
-           76,   14,  127,  128,  129,  130,  131,   70,  158,   74,
-           84,  101,  102,  163,   31,   80,   14,  167,  106,  107,
-          106,  107,   87,   88,   89,   14,   91,   31,   93,   16,
+           70,  167,  117,  118,   31,    8,  106,   70,  108,  106,
+           14,  108,  127,  128,  129,  130,  131,   70,  158,   74,
+           84,   75,   76,  163,   31,   80,  159,  167,  161,  101,
+          102,   14,   87,   88,   89,   14,   91,   31,   93,   16,
            95,   37,   38,   98,  159,    1,  161,  162,  103,  104,
           105,   37,   38,    1,  109,  110,   16,   84,   16,  163,
           115,  116,   16,  167,  134,  135,   16,  161,   31,  124,
            16,  134,  135,  167,   70,   31,   16,   84,   16,  149,
-           16,  134,  135,   31,   31,   38,   82,   31,   74,   31,
-           86,  161,  111,  112,   80,  159,   31,  161,  161,  154,
+           16,  134,  135,   31,  106,  107,   82,   31,   74,   31,
+           86,  161,  106,  107,   80,  159,   31,  161,  161,  154,
            31,   87,   88,   89,   31,   91,   31,   93,  161,   95,
-           31,   31,   98,   31,   31,   31,   31,  103,  104,  105,
-           31,   31,   31,  109,  110,   31,   31,   35,   84,  115,
-          116,   35,  159,   35,  161,   35,   84,   35,  124,   69,
-          136,  137,   70,  139,  140,  141,  142,  143,  144,   82,
-           31,   77,  159,   82,  161,  151,  152,   80,   57,   74,
-           92,   83,   96,  100,  113,   80,   85,  163,  132,  114,
-          166,  167,   87,   88,   89,   89,   91,   90,   93,  146,
-           95,  132,   85,   98,  146,   97,  154,   94,  103,  104,
-          105,  160,  116,   74,  109,  110,    0,    1,  153,   80,
-          115,  116,   97,  159,   97,  161,   87,   88,   89,  124,
-           91,  159,   93,  161,   95,  100,  155,   98,  159,  162,
-           -1,   -1,  103,  104,  105,   74,   -1,  128,  109,  110,
-           -1,   80,  128,   -1,  115,  116,  128,   -1,   87,   88,
-           89,   -1,   91,  124,   93,  133,   95,   -1,   -1,   98,
-           -1,   -1,  149,  102,  103,  104,  105,   74,  149,  149,
-          109,  110,  149,   80,   81,  149,  115,  116,  162,    1,
-           87,   88,   89,  153,   91,  124,   93,  159,   95,  158,
-           84,   98,  159,  159,  159,  159,  103,  104,  105,  159,
+          111,  112,   98,   31,   31,   31,   31,  103,  104,  105,
+           31,   31,   31,  109,  110,   31,   31,   31,   84,  115,
+          116,   31,  159,   31,  161,   37,   84,   38,  124,   35,
+          136,  137,   35,  139,  140,  141,  142,  143,  144,   35,
+           31,   70,  159,   37,  161,  151,  152,   69,   57,   74,
+           80,   82,   85,   77,   90,   80,   94,  163,   92,   82,
+          166,  167,   87,   88,   89,   83,   91,  114,   93,  113,
+           95,  128,   85,   98,  116,  128,  153,  128,  103,  104,
+          105,  146,   89,   74,  109,  110,    0,    1,  149,   80,
+          115,  116,   96,  159,  133,  161,   87,   88,   89,  124,
+           91,  159,   93,  161,   95,   97,  146,   98,   97,   97,
+          100,  154,  103,  104,  105,   74,  100,  149,  109,  110,
+           -1,   80,   -1,   -1,  115,  116,   -1,  132,   87,   88,
+           89,  132,   91,  124,   93,   -1,   95,   -1,  155,   98,
+           -1,   -1,   -1,  102,  103,  104,  105,   74,   -1,  149,
+          109,  110,  149,   80,   81,  153,  115,  116,  160,    1,
+           87,   88,   89,  149,   91,  124,   93,  160,   95,  164,
+           84,   98,  159,  158,   -1,   -1,  103,  104,  105,  159,
           159,  159,  109,  110,  159,  159,  159,  159,  115,  116,
           159,  159,  106,  159,  108,    1,  159,  124,  159,  113,
-          160,  163,  160,  117,  118,  160,  160,  160,  164,  161,
-          161,  161,  161,  127,  128,  129,  130,  131,  161,  161,
-           74,  161,  161,  161,  161,  161,   80,  161,  163,  162,
-          162,  162,  162,   87,   88,   89,  150,   91,  162,   93,
+          160,  159,  159,  117,  118,  159,  159,  159,  163,  160,
+          160,  160,   -1,  127,  128,  129,  130,  131,  161,  161,
+           74,  161,  161,  161,  161,  161,   80,  161,  161,  161,
+          161,  161,  167,   87,   88,   89,  150,   91,  162,   93,
           162,   95,   84,  162,   98,  159,  162,  161,  162,  103,
           104,  105,  162,  162,  162,  109,  110,  162,  100,  101,
           102,  115,  116,  162,  106,   70,  162,  162,  162,  162,
           124,  162,  162,  162,  162,  117,  118,   82,   84,  162,
-          162,   86,  162,  164,  163,  127,  128,  129,  130,  131,
-          163,  163,  163,  163,  100,  101,  102,  163,  163,  163,
+          162,   86,  162,  162,  162,  127,  128,  129,  130,  131,
+          162,  162,  162,  162,  100,  101,  102,  163,  163,  163,
           106,  163,  163,  163,  163,  163,  163,  163,  163,   -1,
           163,  117,  118,  163,  163,  163,  163,  159,  163,  161,
           162,  127,  128,  129,  130,  131,  163,  163,  163,  163,
           163,  163,  137,  163,  139,  140,  141,  142,  143,  144,
-          163,  163,  163,  163,  163,   -1,  151,  152,  164,  164,
-          164,  164,  164,  159,  164,  161,  162,  164,  163,  167,
+          163,  163,  163,  163,  163,  163,  151,  152,  163,  163,
+          163,  163,  163,  159,  164,  161,  162,  164,  163,   -1,
           164,  166,  167,  164,  164,  164,  164,  164,  164,  164,
           164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
           164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
-          164,  164,  164,  164,   -1,  165,  165,   -1,  166
+          164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
+           -1,  165,  165,   -1,  166
     );
 
     protected $actionBase = array(
             0,   -2,  154,  565,  876,  948,  984,  514,   53,  398,
-          827,  307,  307,   67,  307,  307,  653,  724,  724,  732,
+          837,  307,  307,   67,  307,  307,  653,  724,  724,  732,
           724,  616,  673,  204,  204,  204,  625,  625,  625,  625,
           694,  694,  831,  831,  863,  799,  765,  936,  936,  936,
           936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
@@ -504,9 +506,9 @@ class Php7 extends \PhpParser\ParserAbstract
           936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
           936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
           936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
-          375,  519,  369,  701, 1010, 1016, 1012, 1017, 1008, 1007,
-         1011, 1013, 1018,  900,  901,  775,  902,  907,  908,  910,
-         1014,  837, 1009, 1015,  291,  291,  291,  291,  291,  291,
+          375,  519,  369,  701, 1016, 1022, 1018, 1023, 1014, 1013,
+         1017, 1019, 1024,  911,  912,  782,  918,  919,  920,  921,
+         1020,  841, 1015, 1021,  291,  291,  291,  291,  291,  291,
           291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
           291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
           290,  491,   44,  382,  382,  382,  382,  382,  382,  382,
@@ -515,51 +517,52 @@ class Php7 extends \PhpParser\ParserAbstract
           203,  610,   47,  985,  985,  985,  985,  985,  985,  985,
           985,  985,  985,  144,  144,    7,    7,    7,    7,    7,
           371,  -25,  -25,  -25,  -25,  540,  385,  102,  576,  358,
-           45,  377,  460,  460,  360,  231,  231,  231,  231,  -78,
-          -78,  -78,  -66,  319,  457,  -94,  396,  423,  586,  586,
-          586,  586,  423,  423,  423,  423,  718, 1022,  423,  423,
-          423,  511,  516,  516,  518,  147,  147,  147,  516,  499,
-          777,  422,  499,  422,  194,   92,  756,  -40,   87,  412,
-          756,  617,  627,  198,  143,  741,  602,  741, 1006,  761,
-          760,  717,  829,  856, 1019,  743,  897,  795,  899,  219,
-          686, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
-         1005, 1005,  982,  552, 1006,  286,  982,  982,  982,  552,
-          552,  552,  552,  552,  552,  552,  552,  552,  552,  661,
-          286,  568,  614,  286,  782,  552,  375,  789,  375,  375,
-          375,  375,  945,  375,  375,  375,  375,  375,  375,  957,
-          762,  -16,  375,  519,   12,   12,  527,   83,   12,   12,
-           12,   12,  375,  375,  375,  602,  781,  725,  604,  800,
-          448,  781,  781,  781,  438,  444,  193,  447,  452,  757,
-          757,  751,  919,  919,  757,  747,  757,  751,  928,  757,
-          919,  801,  359,  640,  567,  596,  648,  919,  478,  757,
-          757,  757,  757,  656,  757,  467,  433,  757,  757,  716,
-          769,  729,   60,  919,  919,  919,  729,  585,  792,  792,
-          792,  803,  804,  731,  764,  547,  498,  668,  348,  727,
-          764,  764,  757,  611,  731,  764,  731,  764,  712,  764,
-          764,  764,  731,  764,  757,  747,  577,  764,  734,  665,
-          224,  764,    6,  929,  930,  354,  931,  925,  932,  971,
-          933,  934,  841,  942,  926,  935,  924,  920,  774,  703,
-          720,  790,  783,  918,  750,  750,  750,  911,  750,  750,
-          750,  750,  750,  750,  750,  750,  703,  711,  796,  779,
-          766,  953,  722,  726,  713,  786, 1020, 1021,  784,  788,
-          945, 1000,  937,  739,  730,  980,  954,  737,  839,  955,
-          956,  983, 1001, 1002,  857,  752,  858,  859,  830,  958,
-          847,  750,  929,  934,  926,  935,  924,  920,  759,  755,
-          749,  753,  745,  738,  733,  736,  763,  855,  828,  832,
-          957,  917,  703,  835,  975,  838,  986,  989,  840,  785,
-          758,  836,  860,  960,  967,  968,  848, 1003,  798,  976,
-          834,  990,  787,  866,  991,  992,  993,  994,  868,  850,
-          851,  852,  805,  767,  909,  746,  871,  335,  778,  780,
-          970,  363,  943,  853,  874,  880,  995,  996,  997,  881,
-          940,  806,  977,  773,  978,  974,  810,  811,  485,  772,
-          776,  671,  677,  882,  885,  891,  941,  770,  754,  812,
-          815, 1004,  894,  692,  816,  740,  895,  999,  742,  744,
-          748,  854,  793,  735,  768,  969,  771,  817,  896,  818,
-          821,  822,  998,  824,    0,    0,    0,    0,    0,    0,
+           45,  377,  460,  460,  360,  231,  231,  231,  231,  231,
+          231,  -78,  -78,  -78,  -78,  -78,  -66,  319,  457,  -94,
+          396,  423,  586,  586,  586,  586,  423,  423,  423,  423,
+          750, 1028,  423,  423,  423,  511,  516,  516,  518,  147,
+          147,  147,  516,  583,  777,  422,  583,  422,  194,   92,
+          748,  -40,   87,  412,  748,  617,  627,  198,  143,  773,
+          658,  773, 1012,  757,  764,  717,  838,  860, 1025,  800,
+          908,  806,  910,  219,  686, 1011, 1011, 1011, 1011, 1011,
+         1011, 1011, 1011, 1011, 1011, 1011,  855,  552, 1012,  286,
+          855,  855,  855,  552,  552,  552,  552,  552,  552,  552,
+          552,  552,  552,  679,  286,  568,  626,  286,  794,  552,
+          375,  758,  375,  375,  375,  375,  958,  375,  375,  375,
+          375,  375,  375,  970,  769,  -16,  375,  519,   12,   12,
+          547,   83,   12,   12,   12,   12,  375,  375,  375,  658,
+          781,  713,  666,  792,  448,  781,  781,  781,  438,  444,
+          193,  447,  570,  523,  580,  760,  760,  767,  929,  929,
+          760,  759,  760,  767,  934,  760,  929,  805,  359,  648,
+          577,  611,  656,  929,  478,  760,  760,  760,  760,  665,
+          760,  467,  433,  760,  760,  785,  774,  789,   60,  929,
+          929,  929,  789,  596,  751,  751,  751,  811,  812,  746,
+          771,  567,  498,  677,  348,  779,  771,  771,  760,  640,
+          746,  771,  746,  771,  747,  771,  771,  771,  746,  771,
+          760,  759,  585,  771,  734,  668,  224,  771,    6,  935,
+          937,  354,  940,  932,  941,  979,  942,  943,  851,  956,
+          933,  945,  931,  930,  780,  703,  720,  790,  729,  928,
+          768,  768,  768,  925,  768,  768,  768,  768,  768,  768,
+          768,  768,  703,  788,  804,  733,  783,  960,  722,  726,
+          725,  868, 1026, 1027,  737,  739,  958, 1006,  953,  803,
+          730,  992,  967,  866,  848,  968,  969,  993, 1007, 1008,
+          871,  761,  874,  880,  797,  971,  852,  768,  935,  943,
+          933,  945,  931,  930,  763,  762,  753,  755,  749,  745,
+          736,  738,  770,  924,  835,  830,  970,  926,  703,  839,
+          986,  847,  994,  995,  850,  801,  772,  840,  881,  972,
+          975,  976,  853, 1009,  810,  989,  795,  996,  802,  882,
+          997,  998,  999, 1000,  885,  854,  856,  857,  815,  754,
+          980,  786,  891,  335,  787,  796,  978,  363,  957,  858,
+          894,  895, 1001, 1002, 1003,  896,  954,  816,  990,  752,
+          991,  983,  817,  818,  485,  784,  778,  541,  676,  897,
+          899,  900,  955,  775,  766,  821,  822, 1010,  901,  697,
+          824,  740,  902, 1005,  742,  744,  756,  859,  793,  743,
+          798,  977,  776,  827,  907,  829,  832,  833, 1004,  836,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  458,  458,  458,  458,  458,  458,  307,
-          307,  307,  307,    0,    0,  307,    0,    0,  458,  458,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  458,
+          458,  458,  458,  458,  458,  307,  307,  307,  307,    0,
+            0,  307,    0,    0,  458,  458,  458,  458,  458,  458,
           458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
           458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
           458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
@@ -573,42 +576,42 @@ class Php7 extends \PhpParser\ParserAbstract
           458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
           458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
           458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-          458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
-          458,  458,  291,  291,  291,  291,  291,  291,  291,  291,
+          458,  458,  458,  458,  458,  458,  458,  458,  291,  291,
           291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
-          291,  291,  291,  291,  291,  291,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,  291,  291,  291,  291,  291,  291,  291,  291,
           291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
-          291,  291,  291,  291,  291,  291,  291,  291,  291,  423,
-          423,  291,  291,    0,  291,  423,  423,  423,  423,  423,
-          423,  423,  423,  423,  423,  291,  291,  291,  291,  291,
-          291,  291,  801,  147,  147,  147,  147,  423,  423,  423,
-          423,  423,  -88,  -88,  147,  147,  423,  423,  423,  423,
+          291,  291,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  291,  291,
+          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
+          291,  291,  291,  291,  291,  291,  291,  291,  291,  291,
+          291,  291,  291,  291,  291,  423,  423,  291,  291,    0,
+          291,  423,  423,  423,  423,  423,  423,  423,  423,  423,
+          423,  291,  291,  291,  291,  291,  291,  291,  805,  147,
+          147,  147,  147,  423,  423,  423,  423,  423,  -88,  -88,
+          147,  147,  423,  423,  423,  423,  423,  423,  423,  423,
           423,  423,  423,  423,    0,    0,    0,  286,  422,    0,
-          747,  747,  747,  747,    0,    0,    0,    0,  422,  422,
+          759,  759,  759,  759,    0,    0,    0,    0,  422,  422,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,  286,  422,    0,  286,    0,  747,  747,  423,  801,
-          801,  314,  423,    0,    0,    0,    0,  286,  747,  286,
-          552,  422,  552,  552,   12,  375,  314,  600,  600,  600,
-          600,    0,  602,  801,  801,  801,  801,  801,  801,  801,
-          801,  801,  801,  801,  747,    0,  801,    0,  747,  747,
-          747,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,  747,    0,    0,  919,
-            0,    0,    0,    0,  757,    0,    0,    0,    0,    0,
-            0,  757,  928,    0,    0,    0,    0,    0,    0,  747,
-            0,    0,    0,    0,    0,    0,    0,    0,  750,  785,
-            0,  785,    0,  750,  750,  750
+            0,  286,  422,    0,  286,    0,  759,  759,  423,  805,
+          805,  314,  423,    0,    0,    0,    0,  286,  759,  286,
+          552,  422,  552,  552,   12,  375,  314,  608,  608,  608,
+          608,    0,  658,  805,  805,  805,  805,  805,  805,  805,
+          805,  805,  805,  805,  759,    0,  805,    0,  759,  759,
+          759,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,  759,    0,    0,  929,
+            0,    0,    0,    0,  760,    0,    0,    0,    0,    0,
+            0,  760,  934,    0,    0,    0,    0,    0,    0,  759,
+            0,    0,    0,    0,    0,    0,    0,    0,  768,  801,
+            0,  801,    0,  768,  768,  768
     );
 
     protected $actionDefault = array(
             3,32767,  103,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,  101,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  570,  570,  570,  570,
-        32767,32767,  246,  103,32767,32767,  446,  364,  364,  364,
-        32767,32767,  514,  514,  514,  514,  514,  514,32767,32767,
-        32767,32767,32767,32767,  446,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  576,  576,  576,  576,
+        32767,32767,  246,  103,32767,32767,  452,  370,  370,  370,
+        32767,32767,  520,  520,  520,  520,  520,  520,32767,32767,
+        32767,32767,32767,32767,  452,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
@@ -619,140 +622,129 @@ class Php7 extends \PhpParser\ParserAbstract
         32767,   37,    7,    8,   10,   11,   50,   17,32767,32767,
         32767,32767,32767,  103,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,  563,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  569,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  450,  429,  430,  432,  433,  363,
-          515,  569,  305,  566,  362,  146,  317,  307,  234,  308,
-          250,  451,  251,  452,  455,  456,  211,  279,  359,  150,
-          393,  447,  395,  445,  449,  394,  369,  374,  375,  376,
-          377,  378,  379,  380,  381,  382,  383,  384,  385,  386,
-          367,  368,  448,  426,  425,  424,  391,32767,32767,  392,
-          396,  366,  399,32767,32767,32767,32767,32767,32767,32767,
-        32767,  103,32767,  397,  398,  415,  416,  413,  414,  417,
-        32767,  418,  419,  420,  421,32767,32767,  296,32767,32767,
-          343,  341,  406,  407,  296,32767,32767,32767,32767,32767,
-        32767,32767,32767,  508,  423,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  103,32767,
-          101,  510,  388,  390,  478,  401,  402,  400,  370,32767,
-          485,32767,  103,  487,32767,32767,32767,  112,32767,32767,
-        32767,  509,32767,  516,  516,32767,  471,  101,  194,32767,
-          194,  194,32767,32767,32767,32767,32767,32767,32767,  577,
-          471,  111,  111,  111,  111,  111,  111,  111,  111,  111,
-          111,  111,32767,  194,  111,32767,32767,32767,  101,  194,
-          194,  194,  194,  194,  194,  194,  194,  194,  194,  189,
-        32767,  260,  262,  103,  531,  194,32767,  490,32767,32767,
+        32767,32767,32767,32767,  456,  435,  436,  438,  439,  369,
+          521,  575,  311,  572,  368,  146,  323,  313,  234,  314,
+          250,  457,  251,  458,  461,  462,  211,  279,  365,  150,
+          399,  453,  401,  451,  455,  400,  375,  380,  381,  382,
+          383,  384,  385,  386,  387,  388,  389,  390,  391,  392,
+          373,  374,  454,  432,  431,  430,  397,32767,32767,  398,
+          402,  372,  405,32767,32767,32767,32767,32767,32767,32767,
+        32767,  103,32767,  403,  404,  421,  422,  419,  420,  423,
+        32767,  424,  425,  426,  427,32767,32767,  302,32767,32767,
+          349,  347,  412,  413,  302,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  514,  429,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          483,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  471,  411,  139,32767,  139,
-          516,  403,  404,  405,  473,  516,  516,  516,32767,32767,
-        32767,32767,  488,  488,  101,  101,  101,  101,  483,32767,
-        32767,  112,  100,  100,  100,  100,  100,  104,  102,32767,
-        32767,32767,32767,  100,32767,  102,  102,32767,32767,  217,
-          208,  215,  102,32767,  535,  536,  215,  102,  219,  219,
-          219,  239,  239,  462,  298,  102,  100,  102,  102,  196,
-          298,  298,32767,  102,  462,  298,  462,  298,  198,  298,
-          298,  298,  462,  298,32767,32767,  102,  298,  210,  100,
-          100,  298,32767,32767,32767,  473,32767,32767,32767,32767,
+        32767,32767,  103,32767,  101,  516,  394,  396,  484,  407,
+          408,  406,  376,32767,  491,32767,  103,  493,32767,32767,
+        32767,  112,32767,32767,32767,  515,32767,  522,  522,32767,
+          477,  101,  194,32767,  194,  194,32767,32767,32767,32767,
+        32767,32767,32767,  583,  477,  111,  111,  111,  111,  111,
+          111,  111,  111,  111,  111,  111,32767,  194,  111,32767,
+        32767,32767,  101,  194,  194,  194,  194,  194,  194,  194,
+          194,  194,  194,  189,32767,  260,  262,  103,  537,  194,
+        32767,  496,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,  489,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  477,
+          417,  139,32767,  139,  522,  409,  410,  411,  479,  522,
+          522,  522,  298,  281,32767,32767,32767,32767,  494,  494,
+          101,  101,  101,  101,  489,32767,32767,  112,  100,  100,
+          100,  100,  100,  104,  102,32767,32767,32767,32767,  100,
+        32767,  102,  102,32767,32767,  217,  208,  215,  102,32767,
+          541,  542,  215,  102,  219,  219,  219,  239,  239,  468,
+          304,  102,  100,  102,  102,  196,  304,  304,32767,  102,
+          468,  304,  468,  304,  198,  304,  304,  304,  468,  304,
+        32767,32767,  102,  304,  210,  100,  100,  304,32767,32767,
+        32767,  479,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  509,32767,  526,  539,
+          415,  416,  418,  524,  440,  441,  442,  443,  444,  445,
+          446,  448,  571,32767,  483,32767,32767,32767,32767,  322,
+          581,32767,  581,32767,32767,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          503,32767,  520,  533,  409,  410,  412,  518,  434,  435,
-          436,  437,  438,  439,  440,  442,  565,32767,  477,32767,
-        32767,32767,32767,  316,  575,32767,  575,32767,32767,32767,
+          582,32767,  522,32767,32767,32767,32767,  414,    9,   76,
+           43,   44,   52,   58,  500,  501,  502,  503,  497,  498,
+          504,  499,32767,  505,  547,32767,32767,  523,  574,32767,
+        32767,32767,32767,32767,32767,  139,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  509,32767,  137,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  576,32767,  516,32767,32767,32767,
-        32767,  408,    9,   76,   43,   44,   52,   58,  494,  495,
-          496,  497,  491,  492,  498,  493,32767,  499,  541,32767,
-        32767,  517,  568,32767,32767,32767,32767,32767,32767,  139,
+          522,32767,32767,32767,  300,  301,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          503,32767,  137,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  516,32767,32767,32767,  293,  295,
+        32767,  522,32767,32767,32767,  283,  284,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  516,32767,32767,32767,  281,
-          283,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  278,32767,32767,  358,32767,
-        32767,32767,32767,  337,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  152,  152,    3,    3,  319,  152,
-          152,  152,  319,  152,  319,  319,  319,  152,  152,  152,
-          152,  152,  152,  272,  184,  254,  257,  239,  239,  152,
-          329,  152
+        32767,  278,32767,32767,  364,32767,32767,32767,32767,  343,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+          152,  152,    3,    3,  325,  152,  152,  152,  325,  152,
+          325,  325,  325,  152,  152,  152,  152,  152,  152,  272,
+          184,  254,  257,  239,  239,  152,  335,  152
     );
 
     protected $goto = array(
-          192,  192,  662,  416,  635,  911,  984,  991,  992,  410,
-          302,  303,  323,  556,  308,  415,  324,  417,  614, 1006,
-          670,  317,  317,  317,  317,  163,  163,  163,  163,  216,
+          192,  192,  668,  420,  641,  882,  838,  883, 1018,  414,
+          306,  307,  327,  562,  312,  419,  328,  421,  620,  799,
+          676,  850,  584,  822,  837,  163,  163,  163,  163,  216,
           193,  189,  189,  173,  175,  211,  189,  189,  189,  189,
           189,  190,  190,  190,  190,  190,  190,  184,  185,  186,
-          187,  188,  213,  211,  214,  514,  515,  406,  516,  518,
-          519,  520,  521,  522,  523,  524,  525, 1075,  164,  165,
+          187,  188,  213,  211,  214,  520,  521,  410,  522,  524,
+          525,  526,  527,  528,  529,  530,  531, 1087,  164,  165,
           166,  191,  167,  168,  169,  162,  170,  171,  172,  174,
           210,  212,  215,  233,  236,  239,  240,  242,  253,  254,
           255,  256,  257,  258,  259,  261,  262,  263,  264,  272,
-          273,  305,  306,  307,  411,  412,  413,  561,  217,  218,
+          273,  309,  310,  311,  415,  416,  417,  567,  217,  218,
           219,  220,  221,  222,  223,  224,  225,  226,  227,  228,
           229,  230,  231,  176,  232,  177,  194,  195,  196,  234,
-          184,  185,  186,  187,  188,  213, 1075,  197,  178,  179,
+          184,  185,  186,  187,  188,  213, 1087,  197,  178,  179,
           180,  198,  194,  181,  235,  199,  161,  200,  201,  182,
-          202,  203,  204,  183,  205,  206,  207,  208,  209,  819,
-          578,  600,  600,  540,  531,  815,  816, 1205, 1205, 1205,
-         1205, 1205, 1205, 1205, 1205, 1205, 1205,  954,  928,  928,
-          926,  928,  695,  817,  530,  963,  958,  380,  384,  541,
-          579,  583,  382,  531,  540,  549,  550,  389,  559,  580,
-          594,  595,  824,  336,  872,  867,  868,  881,   14,  825,
-          869,  822,  870,  871,  823,  339, 1274, 1274,  875,  528,
-          528,  876,  528,  877,  793,  339,  339,  791, 1027, 1023,
-         1024, 1155,  904, 1274,  850, 1156, 1159,  905, 1160,  339,
-          339,  437,  339,  479, 1290,  480,  924,  924,  924,  924,
-          930,  487,  437,  918,  925,  533,  598,  632,  339, 1174,
-         1174,  988, 1174,  988,  282,  282,  282,  282,  988,  988,
-          988,  988,  988,  988,  988,  988,  446,  446,  431,  249,
-          249, 1174,  553,  431,  431,  446, 1174, 1174, 1174, 1174,
-         1047, 1048, 1174, 1174, 1174, 1255, 1255, 1255, 1255,  313,
-          297,  812,  812, 1234,  246,  246,  246,  246,  248,  250,
-          888,  618,  577, 1040,  889,  673,  659,  659,  618,  665,
-         1038, 1223, 1223,  996,  993,  994,  655, 1223, 1223, 1223,
-         1223, 1223, 1223, 1223, 1223, 1223, 1223, 1221, 1221, 1250,
-         1251, 1273, 1273, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
-         1221, 1221, 1221,  629,  533,  643,  644,  645, 1273,  431,
-          431,  431,  431,  431,  431,  431,  431,  431,  431,  431,
-          517,  517,  431,  409, 1276,  589,  517,  517,  517,  517,
-          517,  517,  517,  517,  517,  517,  547,  334,  797,  546,
-          696,  613,  615,    5,  633,    6,  593, 1263,  652,  656,
-          965,  660,  668,  961,  587,  601,  604,  605,  606,  607,
-          626,  627,  628,  672, 1169,  812,  610,  611, 1245, 1245,
-          951, 1245,  832,  455, 1248, 1249,  532,  544,  797,  378,
-          797,  532,  552,  544,  557,  592,  381,  844,  337,  338,
-          831, 1257, 1257, 1257, 1257,  634,  560,  449,  450,  451,
-         1124,  842,  394,  395, 1281, 1282,  325,  641,  421,  642,
-         1170,  398,  399,  400,  809,  653,  837, 1241,  388,  401,
-          922,  396,  669,  332,  834, 1167,  893, 1063,  973,  840,
-          699, 1012,  846,  597,  526,  526,  526,  526,  970,  582,
-         1016,  488,  845,  833, 1011, 1015,  836,  456,  638,  949,
-         1058,  935,  933,  460,  830, 1014,    0,    0,    0, 1243,
-         1243, 1014,    0, 1171,    0,  252,  252, 1166,    0,    0,
-          807,  270,    0,    0,    0,  923,  529,  529,    0,    0,
-            0,    0,    0,    0,    0,    0, 1172, 1231, 1232,    0,
-            0,    0,    0,    0,    0,    0,    0,    0, 1056,  849,
+          202,  203,  204,  183,  205,  206,  207,  208,  209,  321,
+          321,  321,  321,  825,  606,  606,  823,  546,  537, 1182,
+         1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217,
+         1235, 1235,  461, 1260, 1261,  856, 1235, 1235, 1235, 1235,
+         1235, 1235, 1235, 1235, 1235, 1235,  386,  537,  546,  555,
+          556,  393,  565,  586,  600,  601,  830,  797,  878,  873,
+          874,  887,   14,  831,  875,  828,  876,  877,  829,  452,
+          452,  936,  881,  340, 1183,  803,  249,  249,  452, 1233,
+         1233,  813, 1039, 1035, 1036, 1233, 1233, 1233, 1233, 1233,
+         1233, 1233, 1233, 1233, 1233,  818,  818, 1184, 1243, 1244,
+          559,  246,  246,  246,  246,  248,  250,  604,  638, 1186,
+         1186,  995, 1186,  995,  413,  803,  595,  803,  995,  995,
+          995,  995,  995,  995,  995,  995,  995,  995,  995,  995,
+         1257, 1257,    5, 1257,    6, 1186,  286,  286,  286,  286,
+         1186, 1186, 1186, 1186,  338,  343, 1186, 1186, 1186, 1267,
+         1267, 1267, 1267, 1059, 1060,  343,  343, 1269, 1269, 1269,
+         1269, 1286, 1286,  635,  894,  649,  650,  651,  895,  343,
+          343, 1275,  343,  485, 1302,  486,  534,  534, 1286,  534,
+          957,  493,  558, 1253,  382,  539,  523,  523,  343,  928,
+          400,  675,  523,  523,  523,  523,  523,  523,  523,  523,
+          523,  523,  443,  317,  301, 1262, 1263,  930,  930,  930,
+          930,  818,  640,  443,  924,  931, 1136,  532,  532,  532,
+          532, 1026,  588,  329,  553, 1255, 1255, 1026,  702,  619,
+          621,  427,  639, 1246,  616,  617,  658,  662,  971,  666,
+          674,  967,  815,  552,  563,  598,  843,  392,  821,  979,
+          599,  384,  388,  547,  585,  589,  661,  840, 1285, 1285,
+          960,  934,  934,  932,  934,  701,  437,  536,  969,  964,
+         1179,  437,  437,  899, 1075, 1285, 1024,  705,  852,  941,
+          603,  462,  538,  550, 1028,  976,  539,  538,  466,  550,
+            0, 1288,  385,  842,    0,  644,  955, 1070,    0,    0,
+            0,  836,  566,  455,  456,  457,    0,  848,  341,  342,
+         1293, 1294,  252,  252, 1178,  398,  399,    0,    0,    0,
+          647,    0,  648,  422,  402,  403,  404,    0,  659,    0,
+          422,    0,  405,    0,    0,  846,  336, 1007, 1000, 1004,
+         1001, 1005,    0,    0,    0,    0, 1181,  494,    0,    0,
+            0,  437,  437,  437,  437,  437,  437,  437,  437,  437,
+          437,  437,    0,    0,  437,  593,  607,  610,  611,  612,
+          613,  632,  633,  634,  678,  851,  839, 1023, 1027,  583,
+         1052,    0,  679,  665,  665,  939,  671, 1050,    0,    0,
+         1167,  910,    0,  270, 1168, 1171,  911, 1172,  535,  535,
+          917,  990,  998, 1002,  999, 1003,    0,    0,  929,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  968,  968
+            0,    0,    0,    0,    0,    0,    0,    0,  974,  974,
+            0, 1068,  855
     );
 
     protected $gotoCheck = array(
-           42,   42,   72,   65,   65,   87,   87,   87,   87,   65,
-           65,   65,   65,   65,   65,   65,   65,   65,   65,  116,
-            9,   23,   23,   23,   23,   42,   42,   42,   42,   42,
+           42,   42,   72,   65,   65,   64,   35,   64,  118,   65,
+           65,   65,   65,   65,   65,   65,   65,   65,   65,    7,
+            9,   35,  121,   26,   35,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
@@ -765,103 +757,92 @@ class Php7 extends \PhpParser\ParserAbstract
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,   15,
-          119,  104,  104,   75,   75,   25,   26,  104,  104,  104,
-          104,  104,  104,  104,  104,  104,  104,   25,   25,   25,
-           25,   25,   25,   27,   25,   25,   25,   58,   58,   58,
-           58,   58,   75,   75,   75,   75,   75,   75,   75,   75,
-           75,   75,   15,   93,   15,   15,   15,   15,   75,   15,
-           15,   15,   15,   15,   15,   14,  170,  170,   15,   19,
-           19,   64,   19,   64,    7,   14,   14,    6,   15,   15,
-           15,   78,   78,  170,   45,   78,   78,   78,   78,   14,
-           14,   19,   14,  144,   14,  144,   19,   19,   19,   19,
-           49,  144,   19,   19,   19,   14,   55,   55,   14,   72,
-           72,   72,   72,   72,   24,   24,   24,   24,   72,   72,
-           72,   72,   72,   72,   72,   72,  138,  138,   23,    5,
-            5,   72,  159,   23,   23,  138,   72,   72,   72,   72,
-          133,  133,   72,   72,   72,    9,    9,    9,    9,  156,
-          156,   22,   22,   14,    5,    5,    5,    5,    5,    5,
-           72,  112,    8,    8,   72,    8,    8,    8,  112,    8,
-            8,  157,  157,  112,  112,  112,   14,  157,  157,  157,
-          157,  157,  157,  157,  157,  157,  157,  158,  158,  165,
-          165,  169,  169,  158,  158,  158,  158,  158,  158,  158,
-          158,  158,  158,   84,   14,   84,   84,   84,  169,   23,
-           23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
-          160,  160,   23,   13,  169,   13,  160,  160,  160,  160,
-          160,  160,  160,  160,  160,  160,   48,  166,   12,    9,
-           48,   48,   48,   46,   48,   46,    9,  168,   48,   48,
-           48,   48,   48,   48,   79,   79,   79,   79,   79,   79,
-           79,   79,   79,   79,   14,   22,   83,   83,  119,  119,
-           99,  119,   35,  163,  163,  163,    9,    9,   12,   61,
-           12,    9,  100,    9,    2,    2,    9,   35,   93,   93,
-           35,  119,  119,  119,  119,   63,    9,    9,    9,    9,
-          140,    9,   80,   80,    9,    9,   29,   80,  109,   80,
-           20,   80,   80,   80,   18,   80,   39,  119,   28,   80,
-           89,   89,   89,   80,   37,  149,   17,   17,  106,    9,
-           95,  118,   41,   17,  103,  103,  103,  103,   17,  103,
-          121,    9,   16,   16,   16,   16,   17,  146,   17,   17,
-          136,   92,   16,   82,   17,  119,   -1,   -1,   -1,  119,
-          119,  119,   -1,   20,   -1,    5,    5,   17,   -1,   -1,
-           20,   24,   -1,   -1,   -1,   16,   24,   24,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   20,   20,   20,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   16,   16,
+           42,   42,   42,   42,   42,   42,   42,   42,   42,   23,
+           23,   23,   23,   15,  104,  104,   27,   75,   75,   20,
+          104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
+          159,  159,  165,  165,  165,   45,  159,  159,  159,  159,
+          159,  159,  159,  159,  159,  159,   75,   75,   75,   75,
+           75,   75,   75,   75,   75,   75,   15,    6,   15,   15,
+           15,   15,   75,   15,   15,   15,   15,   15,   15,  140,
+          140,   49,   15,   93,   20,   12,    5,    5,  140,  160,
+          160,   20,   15,   15,   15,  160,  160,  160,  160,  160,
+          160,  160,  160,  160,  160,   22,   22,   20,   20,   20,
+          161,    5,    5,    5,    5,    5,    5,   55,   55,   72,
+           72,   72,   72,   72,   13,   12,   13,   12,   72,   72,
+           72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+          121,  121,   46,  121,   46,   72,   24,   24,   24,   24,
+           72,   72,   72,   72,  168,   14,   72,   72,   72,    9,
+            9,    9,    9,  135,  135,   14,   14,  121,  121,  121,
+          121,  172,  172,   84,   72,   84,   84,   84,   72,   14,
+           14,  170,   14,  146,   14,  146,   19,   19,  172,   19,
+           99,  146,  100,  121,   61,   14,  162,  162,   14,   89,
+           89,   89,  162,  162,  162,  162,  162,  162,  162,  162,
+          162,  162,   19,  158,  158,  167,  167,   19,   19,   19,
+           19,   22,   63,   19,   19,   19,  142,  103,  103,  103,
+          103,  121,  103,   29,   48,  121,  121,  121,   48,   48,
+           48,  109,   48,   14,   83,   83,   48,   48,   48,   48,
+           48,   48,   18,    9,    2,    2,   39,   28,   25,  106,
+            9,   58,   58,   58,   58,   58,   14,   37,  171,  171,
+           25,   25,   25,   25,   25,   25,   23,   25,   25,   25,
+          151,   23,   23,   17,   17,  171,  120,   95,   41,   92,
+           17,  148,    9,    9,  123,   17,   14,    9,   82,    9,
+           -1,  171,    9,   17,   -1,   17,   17,  138,   -1,   -1,
+           -1,   17,    9,    9,    9,    9,   -1,    9,   93,   93,
+            9,    9,    5,    5,   17,   80,   80,   -1,   -1,   -1,
+           80,   -1,   80,  113,   80,   80,   80,   -1,   80,   -1,
+          113,   -1,   80,   -1,   -1,    9,   80,  113,  113,  113,
+          113,  113,   -1,   -1,   -1,   -1,   14,    9,   -1,   -1,
+           -1,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+           23,   23,   -1,   -1,   23,   79,   79,   79,   79,   79,
+           79,   79,   79,   79,   79,   16,   16,   16,   16,    8,
+            8,   -1,    8,    8,    8,   16,    8,    8,   -1,   -1,
+           78,   78,   -1,   24,   78,   78,   78,   78,   24,   24,
+           87,   87,   87,   87,   87,   87,   -1,   -1,   16,   -1,
            -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,  103,  103
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  103,  103,
+           -1,   16,   16
     );
 
     protected $gotoBase = array(
-            0,    0, -242,    0,    0,  278,  214,  215,  305,    7,
-            0,    0,  103,   48,  -71, -174,   59,   31,  166,  -46,
-           83,    0,  -16,   18,  261,  161,  162,  179,  143,  171,
-            0,    0,    0,    0,    0,   67,    0,  147,    0,  154,
-            0,   58,   -1,    0,    0,  222, -306,    0, -289,  228,
-            0,    0,    0,    0,    0,  218,    0,    0,  144,    0,
-            0,  389,    0,  207,  203, -234,    0,    0,    0,    0,
-            0,    0,   -6,    0,    0, -167,    0,    0, -163,   62,
-          -18,    0,   47,  -43, -329,    0,    0, -270,    0,  177,
-            0,    0,   75, -259,    0,   87,    0,    0,    0,  387,
-          391,    0,    0,  458,  -76,    0,  124,    0,    0,  184,
-            0,    0,   44,    0,    0,    0,   17,    0,  123,  153,
-            0,   65,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,   20,    0,    0,   73,    0,  244,    0,
-          182,    0,    0,    0, -231,    0,   74,    0,    0,  122,
-            0,    0,    0,    0,    0,    0,  -11,   84,  100,  255,
-          133,    0,    0,  134,    0,  -17,  359,    0,  368,   45,
-          -80,    0,    0
+            0,    0, -288,    0,    0,  225,  194,   10,  522,    7,
+            0,    0,  -64,  -65,    5, -174,   86,  -28,   90,   61,
+         -212,    0,  -76,  156,  283,  394,   19,  162,   68,   84,
+            0,    0,    0,    0,    0, -353,    0,   76,    0,   80,
+            0,   -2,   -1,    0,    0,  173, -423,    0, -307,  199,
+            0,    0,    0,    0,    0,  219,    0,    0,  358,    0,
+            0,  294,    0,  124,  -13, -234,    0,    0,    0,    0,
+            0,    0,   -6,    0,    0, -167,    0,    0,  142,  169,
+          -11,    0,  -24,  -81, -375,    0,    0,  275,    0,   42,
+            0,    0,   -3, -245,    0,   30,    0,    0,    0,  297,
+          291,    0,    0,  341,  -73,    0,   41,    0,    0,  107,
+            0,    0,    0,  206,    0,    0,    0,    0,    6,    0,
+           64,   15,    0,    3,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,   33,    0,    0,   14,    0,
+          187,    0,   98,    0,    0,    0, -157,    0,    2,    0,
+            0,   63,    0,    0,    0,    0,    0,    0,   39,  -57,
+           -8,  223,   99,    0,    0, -111,    0,   -5,  266,    0,
+          292,  108,   11,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  492,  703,    4,  704,  897,  780,  789,  576,  508,
-          671,  333,  602,  407, 1239,  874, 1062,  558,  808, 1183,
-         1191,  438,  811,  318,  693,  856,  857,  858,  385,  370,
-          376,  383,  624,  603,  473,  843,  434,  835,  465,  838,
-          433,  847,  160,  404,  490,  851,    3,  853,  535,  884,
-          371,  861,  372,  648,  863,  543,  865,  866,  379,  386,
-          387, 1067,  551,  599,  878,  241,  545,  879,  369,  880,
-          887,  374,  377,  657,  445,  485,  478,  397, 1042,  586,
-          621,  442,  459,  609,  608,  596,  458,  639,  402,  920,
-          466,  443,  934,  335,  942,  701, 1074,  616,  468,  950,
-          617,  957,  960,  509,  510,  457,  972,  267,  975,  469,
-         1001,  640,  986,  619,  999,  452, 1005,  435, 1013, 1227,
-          436, 1017,  260, 1020,  274,  403,  418, 1025, 1026,    8,
-         1032,  663,  664,   10,  271,  489, 1057,  658,  432, 1073,
-          422, 1143, 1145,  537,  470, 1163, 1162,  651,  486, 1168,
-         1230,  430,  511,  453,  304,  512,  296,  321,  301,  527,
-          283,  322,  513,  454, 1236, 1244,  319,   29, 1264, 1275,
-          329,  555,  591
+        -32768,  498,  709,    4,  710,  903,  786,  795,  582,  514,
+          677,  337,  608,  411, 1251,  880, 1074,  564,  814, 1195,
+         1203,  444,  817,  322,  699,  862,  863,  864,  389,  374,
+          380,  387,  630,  609,  479,  849,  440,  841,  471,  844,
+          439,  853,  160,  408,  496,  857,    3,  859,  541,  890,
+          375,  867,  376,  654,  869,  549,  871,  872,  383,  390,
+          391, 1079,  557,  605,  884,  241,  551,  885,  373,  886,
+          893,  378,  381,  663,  451,  491,  484,  401, 1054,  592,
+          627,  448,  465,  615,  614,  602,  464,  423,  406,  926,
+          472,  449,  940,  339,  948,  707, 1086,  622,  474,  956,
+          623,  963,  966,  515,  516,  463,  978,  267,  981,  475,
+         1013,  645,  646,  993,  624,  625, 1011,  458, 1017,  441,
+         1025, 1239,  442, 1029,  260, 1032,  274,  407,  424, 1037,
+         1038,    8, 1044,  669,  670,   10,  271,  495, 1069,  664,
+          438, 1085,  428, 1155, 1157,  543,  476, 1175, 1174,  657,
+          492, 1180, 1242,  436,  517,  459,  308,  518,  300,  325,
+          305,  533,  287,  326,  519,  460, 1248, 1256,  323,   29,
+         1276, 1287,  333,  561,  597
     );
 
     protected $ruleToNonTerminal = array(
@@ -893,15 +874,16 @@ class Php7 extends \PhpParser\ParserAbstract
            99,   99,   54,   54,   50,   50,  101,   52,   52,  102,
            51,   51,   53,   53,   63,   63,   63,   63,   79,   79,
           105,  105,  107,  107,  108,  108,  108,  108,  106,  106,
-          106,  110,  110,  110,   87,   87,  112,  112,  112,  111,
-          111,  113,  113,  114,  114,  114,  109,  109,   80,   80,
-           80,   20,   20,  115,  115,  116,  116,  116,  116,   59,
-          117,  117,  118,   60,  120,  120,  121,  121,  122,  122,
-           84,  123,  123,  123,  123,  123,  123,  128,  128,  129,
-          129,  130,  130,  130,  130,  130,  131,  132,  132,  127,
-          127,  124,  124,  126,  126,  134,  134,  133,  133,  133,
-          133,  133,  133,  133,  125,  135,  135,  137,  136,  136,
-           61,  100,  138,  138,   55,   55,   42,   42,   42,   42,
+          106,  110,  110,  110,  110,   87,   87,  113,  113,  113,
+          111,  111,  114,  114,  112,  112,  115,  115,  116,  116,
+          116,  116,  109,  109,   80,   80,   80,   20,   20,  117,
+          117,  118,  118,  118,  118,   59,  119,  119,  120,   60,
+          122,  122,  123,  123,  124,  124,   84,  125,  125,  125,
+          125,  125,  125,  130,  130,  131,  131,  132,  132,  132,
+          132,  132,  133,  134,  134,  129,  129,  126,  126,  128,
+          128,  136,  136,  135,  135,  135,  135,  135,  135,  135,
+          127,  137,  137,  139,  138,  138,   61,  100,  140,  140,
+           55,   55,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
@@ -910,20 +892,20 @@ class Php7 extends \PhpParser\ParserAbstract
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
            42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
-           42,   42,   42,   42,   42,   42,   42,   42,   42,  145,
-          139,  139,  144,  144,  147,  148,  148,  149,  150,  150,
-          150,   19,   19,   72,   72,   72,   72,  140,  140,  140,
-          140,  152,  152,  141,  141,  143,  143,  143,  146,  146,
-          157,  157,  157,  157,  157,  157,  157,  157,  157,  158,
-          158,  104,  160,  160,  160,  160,  142,  142,  142,  142,
-          142,  142,  142,  142,   58,   58,  155,  155,  155,  155,
-          161,  161,  151,  151,  151,  162,  162,  162,  162,  162,
-          162,   73,   73,   65,   65,   65,   65,  119,  119,  119,
-          119,  165,  164,  154,  154,  154,  154,  154,  154,  154,
-          153,  153,  153,  163,  163,  163,  163,  103,  159,  167,
-          167,  166,  166,  168,  168,  168,  168,  168,  168,  168,
-          168,  156,  156,  156,  156,  170,  171,  169,  169,  169,
-          169,  169,  169,  169,  169,  172,  172,  172,  172
+           42,   42,   42,   42,   42,  147,  141,  141,  146,  146,
+          149,  150,  150,  151,  152,  152,  152,   19,   19,   72,
+           72,   72,   72,  142,  142,  142,  142,  154,  154,  143,
+          143,  145,  145,  145,  148,  148,  159,  159,  159,  159,
+          159,  159,  159,  159,  159,  160,  160,  104,  162,  162,
+          162,  162,  144,  144,  144,  144,  144,  144,  144,  144,
+           58,   58,  157,  157,  157,  157,  163,  163,  153,  153,
+          153,  164,  164,  164,  164,  164,  164,   73,   73,   65,
+           65,   65,   65,  121,  121,  121,  121,  167,  166,  156,
+          156,  156,  156,  156,  156,  156,  155,  155,  155,  165,
+          165,  165,  165,  103,  161,  169,  169,  168,  168,  170,
+          170,  170,  170,  170,  170,  170,  170,  158,  158,  158,
+          158,  172,  173,  171,  171,  171,  171,  171,  171,  171,
+          171,  174,  174,  174,  174
     );
 
     protected $ruleToLength = array(
@@ -955,37 +937,38 @@ class Php7 extends \PhpParser\ParserAbstract
             3,    4,    1,    4,    0,    2,    5,    0,    2,    6,
             0,    2,    0,    3,    1,    2,    1,    1,    2,    0,
             1,    3,    0,    2,    1,    1,    1,    1,    6,    8,
-            6,    1,    2,    1,    1,    1,    1,    1,    1,    3,
-            3,    3,    3,    1,    2,    1,    0,    1,    0,    2,
-            2,    2,    4,    1,    3,    1,    2,    2,    3,    2,
-            3,    1,    1,    2,    3,    1,    1,    3,    2,    0,
-            1,    5,    5,   10,    3,    5,    1,    1,    3,    0,
-            2,    4,    5,    4,    4,    4,    3,    1,    1,    1,
-            1,    1,    1,    0,    1,    1,    2,    1,    1,    1,
-            1,    1,    1,    1,    2,    1,    3,    1,    1,    3,
-            2,    2,    3,    1,    0,    1,    1,    3,    3,    3,
-            4,    1,    1,    2,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    3,    2,    2,    2,
-            2,    3,    3,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    3,    3,    3,    3,    3,    2,
-            2,    2,    2,    3,    3,    3,    3,    3,    3,    3,
-            3,    3,    3,    3,    5,    4,    3,    4,    4,    2,
-            2,    4,    2,    2,    2,    2,    2,    2,    2,    2,
-            2,    2,    2,    1,    3,    2,    1,    2,    4,    2,
-            2,    8,    9,    8,    9,    9,   10,    9,   10,    8,
-            3,    2,    0,    4,    2,    1,    3,    2,    2,    2,
-            4,    1,    1,    1,    1,    1,    1,    1,    1,    3,
-            1,    1,    1,    0,    3,    0,    1,    1,    0,    1,
-            1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
-            3,    3,    4,    1,    1,    3,    1,    1,    1,    1,
-            1,    3,    2,    3,    0,    1,    1,    3,    1,    1,
-            1,    1,    1,    3,    1,    1,    4,    4,    1,    4,
-            4,    0,    1,    1,    1,    3,    3,    1,    4,    2,
-            2,    1,    3,    1,    4,    4,    3,    3,    3,    3,
-            1,    3,    1,    1,    3,    1,    1,    4,    1,    1,
-            1,    3,    1,    1,    2,    1,    3,    4,    3,    2,
-            0,    2,    2,    1,    2,    1,    1,    1,    4,    3,
-            3,    3,    3,    6,    3,    1,    1,    2,    1
+            6,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+            3,    3,    3,    3,    3,    3,    3,    3,    1,    2,
+            1,    1,    0,    1,    0,    2,    2,    2,    4,    1,
+            3,    1,    2,    2,    3,    2,    3,    1,    1,    2,
+            3,    1,    1,    3,    2,    0,    1,    5,    5,   10,
+            3,    5,    1,    1,    3,    0,    2,    4,    5,    4,
+            4,    4,    3,    1,    1,    1,    1,    1,    1,    0,
+            1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+            2,    1,    3,    1,    1,    3,    2,    2,    3,    1,
+            0,    1,    1,    3,    3,    3,    4,    1,    1,    2,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            3,    3,    3,    2,    2,    2,    2,    3,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            3,    3,    3,    3,    3,    2,    2,    2,    2,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            5,    4,    3,    4,    4,    2,    2,    4,    2,    2,
+            2,    2,    2,    2,    2,    2,    2,    2,    2,    1,
+            3,    2,    1,    2,    4,    2,    2,    8,    9,    8,
+            9,    9,   10,    9,   10,    8,    3,    2,    0,    4,
+            2,    1,    3,    2,    2,    2,    4,    1,    1,    1,
+            1,    1,    1,    1,    1,    3,    1,    1,    1,    0,
+            3,    0,    1,    1,    0,    1,    1,    1,    1,    1,
+            1,    1,    1,    1,    1,    3,    3,    3,    4,    1,
+            1,    3,    1,    1,    1,    1,    1,    3,    2,    3,
+            0,    1,    1,    3,    1,    1,    1,    1,    1,    3,
+            1,    1,    4,    4,    1,    4,    4,    0,    1,    1,
+            1,    3,    3,    1,    4,    2,    2,    1,    3,    1,
+            4,    4,    3,    3,    3,    3,    1,    3,    1,    1,
+            3,    1,    1,    4,    1,    1,    1,    3,    1,    1,
+            2,    1,    3,    4,    3,    2,    0,    2,    2,    1,
+            2,    1,    1,    1,    4,    3,    3,    3,    3,    6,
+            3,    1,    1,    2,    1
     );
 
     protected function initReduceCallbacks() {
@@ -1873,269 +1856,269 @@ class Php7 extends \PhpParser\ParserAbstract
                  $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             284 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             285 => function ($stackPos) {
-                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             286 => function ($stackPos) {
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             287 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
             },
             288 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             289 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             290 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
-            },
-            291 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
-            292 => function ($stackPos) {
+            291 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
+            292 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+            },
             293 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            294 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
-            },
-            295 => function ($stackPos) {
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            296 => function ($stackPos) {
-                 $this->semValue = null;
-            },
-            297 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            298 => function ($stackPos) {
-                 $this->semValue = null;
-            },
-            299 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
-            },
-            300 => function ($stackPos) {
-                 $this->semValue = null;
-            },
-            301 => function ($stackPos) {
-                 $this->semValue = array();
-            },
-            302 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
-            },
-            303 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
-            },
-            304 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
+            294 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+            },
+            295 => function ($stackPos) {
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+            },
+            296 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+            },
+            297 => function ($stackPos) {
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+            },
+            298 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            299 => function ($stackPos) {
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            300 => function ($stackPos) {
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            301 => function ($stackPos) {
+                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            302 => function ($stackPos) {
+                 $this->semValue = null;
+            },
+            303 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            304 => function ($stackPos) {
+                 $this->semValue = null;
+            },
             305 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             306 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             307 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             308 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             309 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             310 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             311 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             312 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             313 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             314 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(3-3)], false, false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->semStack[$stackPos-(3-1)]);
             },
             315 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             316 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             317 => function ($stackPos) {
-                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             318 => function ($stackPos) {
-                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             319 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             320 => function ($stackPos) {
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+            },
+            321 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+            },
+            322 => function ($stackPos) {
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            323 => function ($stackPos) {
+                 $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            324 => function ($stackPos) {
+                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
+            },
+            325 => function ($stackPos) {
+                 $this->semValue = array();
+            },
+            326 => function ($stackPos) {
                  $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; };
             if ($nop !== null) { $this->semStack[$stackPos-(1-1)][] = $nop; } $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            321 => function ($stackPos) {
+            327 => function ($stackPos) {
                  $this->semValue = new Stmt\Property($this->semStack[$stackPos-(5-2)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-1)]);
             $this->checkProperty($this->semValue, $stackPos-(5-2));
             },
-            322 => function ($stackPos) {
+            328 => function ($stackPos) {
                  $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-2)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes, $this->semStack[$stackPos-(5-1)]);
             $this->checkClassConst($this->semValue, $stackPos-(5-2));
             },
-            323 => function ($stackPos) {
+            329 => function ($stackPos) {
                  $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos-(10-5)], ['type' => $this->semStack[$stackPos-(10-2)], 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-7)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             $this->checkClassMethod($this->semValue, $stackPos-(10-2));
             },
-            324 => function ($stackPos) {
+            330 => function ($stackPos) {
                  $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            325 => function ($stackPos) {
+            331 => function ($stackPos) {
                  $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->semStack[$stackPos-(5-1)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            326 => function ($stackPos) {
+            332 => function ($stackPos) {
                  $this->semValue = null; /* will be skipped */
             },
-            327 => function ($stackPos) {
-                 $this->semValue = array();
-            },
-            328 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
-            },
-            329 => function ($stackPos) {
-                 $this->semValue = array();
-            },
-            330 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
-            },
-            331 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            },
-            332 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
-            },
             333 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             334 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             335 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             336 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             337 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             338 => function ($stackPos) {
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(5-1)][0], $this->semStack[$stackPos-(5-1)][1], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             339 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], $this->semStack[$stackPos-(4-3)], null, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             340 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             341 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos-(4-1)][0], $this->semStack[$stackPos-(4-1)][1], null, $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             342 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             343 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             344 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
             },
             345 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             346 => function ($stackPos) {
-                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             347 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             348 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
+                 $this->semValue = 0;
             },
             349 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
+                 $this->semValue = 0;
             },
             350 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             351 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             352 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
+                 $this->checkModifier($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $this->semValue = $this->semStack[$stackPos-(2-1)] | $this->semStack[$stackPos-(2-2)];
             },
             353 => function ($stackPos) {
-                 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
+                 $this->semValue = Stmt\Class_::MODIFIER_PUBLIC;
             },
             354 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_PROTECTED;
             },
             355 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Stmt\Class_::MODIFIER_PRIVATE;
             },
             356 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = Stmt\Class_::MODIFIER_STATIC;
             },
             357 => function ($stackPos) {
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT;
             },
             358 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_FINAL;
             },
             359 => function ($stackPos) {
-                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = Stmt\Class_::MODIFIER_READONLY;
             },
             360 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             361 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             362 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             363 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             364 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             365 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             366 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             367 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             368 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             369 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             370 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             371 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2144,439 +2127,439 @@ class Php7 extends \PhpParser\ParserAbstract
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             373 => function ($stackPos) {
-                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             374 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             375 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             376 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             377 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             378 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             379 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             380 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             381 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             382 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             383 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             384 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             385 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             386 => function ($stackPos) {
-                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             387 => function ($stackPos) {
-                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             388 => function ($stackPos) {
-                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             389 => function ($stackPos) {
-                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             390 => function ($stackPos) {
-                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             391 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             392 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             393 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             394 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             395 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             396 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             397 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             398 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             399 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             400 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             401 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             402 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             403 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             404 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             405 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             406 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             407 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             408 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             409 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             410 => function ($stackPos) {
-                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             411 => function ($stackPos) {
-                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             412 => function ($stackPos) {
-                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             413 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             414 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             415 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             416 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             417 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             418 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             419 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             420 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             421 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             422 => function ($stackPos) {
-                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             423 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             424 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             425 => function ($stackPos) {
-                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             426 => function ($stackPos) {
-                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             427 => function ($stackPos) {
-                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             428 => function ($stackPos) {
-                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             429 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             430 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             431 => function ($stackPos) {
-                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             432 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             433 => function ($stackPos) {
-                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             434 => function ($stackPos) {
-                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             435 => function ($stackPos) {
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            436 => function ($stackPos) {
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            437 => function ($stackPos) {
+                 $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            438 => function ($stackPos) {
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            439 => function ($stackPos) {
+                 $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            440 => function ($stackPos) {
+                 $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            441 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
             $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos-(2-1)]);
             $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos-(2-2)], $attrs);
             },
-            436 => function ($stackPos) {
+            442 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            437 => function ($stackPos) {
+            443 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            438 => function ($stackPos) {
+            444 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            439 => function ($stackPos) {
+            445 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            440 => function ($stackPos) {
+            446 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            441 => function ($stackPos) {
+            447 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes;
             $attrs['kind'] = strtolower($this->semStack[$stackPos-(2-1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
             $this->semValue = new Expr\Exit_($this->semStack[$stackPos-(2-2)], $attrs);
             },
-            442 => function ($stackPos) {
+            448 => function ($stackPos) {
                  $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            443 => function ($stackPos) {
+            449 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            444 => function ($stackPos) {
+            450 => function ($stackPos) {
                  $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            445 => function ($stackPos) {
+            451 => function ($stackPos) {
                  $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            446 => function ($stackPos) {
+            452 => function ($stackPos) {
                  $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            447 => function ($stackPos) {
+            453 => function ($stackPos) {
                  $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            448 => function ($stackPos) {
+            454 => function ($stackPos) {
                  $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            449 => function ($stackPos) {
+            455 => function ($stackPos) {
                  $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            450 => function ($stackPos) {
+            456 => function ($stackPos) {
                  $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            451 => function ($stackPos) {
+            457 => function ($stackPos) {
                  $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'returnType' => $this->semStack[$stackPos-(8-6)], 'expr' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
-            452 => function ($stackPos) {
+            458 => function ($stackPos) {
                  $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            453 => function ($stackPos) {
+            459 => function ($stackPos) {
                  $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-4)], 'uses' => $this->semStack[$stackPos-(8-6)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
-            454 => function ($stackPos) {
+            460 => function ($stackPos) {
                  $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            455 => function ($stackPos) {
+            461 => function ($stackPos) {
                  $this->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'returnType' => $this->semStack[$stackPos-(9-7)], 'expr' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            456 => function ($stackPos) {
+            462 => function ($stackPos) {
                  $this->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'returnType' => $this->semStack[$stackPos-(10-8)], 'expr' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
-            457 => function ($stackPos) {
+            463 => function ($stackPos) {
                  $this->semValue = new Expr\Closure(['static' => false, 'byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-5)], 'uses' => $this->semStack[$stackPos-(9-7)], 'returnType' => $this->semStack[$stackPos-(9-8)], 'stmts' => $this->semStack[$stackPos-(9-9)], 'attrGroups' => $this->semStack[$stackPos-(9-1)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            458 => function ($stackPos) {
+            464 => function ($stackPos) {
                  $this->semValue = new Expr\Closure(['static' => true, 'byRef' => $this->semStack[$stackPos-(10-4)], 'params' => $this->semStack[$stackPos-(10-6)], 'uses' => $this->semStack[$stackPos-(10-8)], 'returnType' => $this->semStack[$stackPos-(10-9)], 'stmts' => $this->semStack[$stackPos-(10-10)], 'attrGroups' => $this->semStack[$stackPos-(10-1)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
-            459 => function ($stackPos) {
+            465 => function ($stackPos) {
                  $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos-(8-4)], 'implements' => $this->semStack[$stackPos-(8-5)], 'stmts' => $this->semStack[$stackPos-(8-7)], 'attrGroups' => $this->semStack[$stackPos-(8-1)]], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes), $this->semStack[$stackPos-(8-3)]);
             $this->checkClass($this->semValue[0], -1);
             },
-            460 => function ($stackPos) {
+            466 => function ($stackPos) {
                  $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            461 => function ($stackPos) {
+            467 => function ($stackPos) {
                  list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            462 => function ($stackPos) {
+            468 => function ($stackPos) {
                  $this->semValue = array();
             },
-            463 => function ($stackPos) {
+            469 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
-            464 => function ($stackPos) {
+            470 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            465 => function ($stackPos) {
+            471 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            466 => function ($stackPos) {
+            472 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            467 => function ($stackPos) {
+            473 => function ($stackPos) {
                  $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            468 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
-            },
-            469 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
-            },
-            470 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            },
-            471 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            472 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            473 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
             474 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             475 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             476 => function ($stackPos) {
-                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\StaticCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             477 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             478 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             479 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             480 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             481 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             482 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             483 => function ($stackPos) {
-                 $this->semValue = null;
-            },
-            484 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
-            },
-            485 => function ($stackPos) {
-                 $this->semValue = array();
-            },
-            486 => function ($stackPos) {
-                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
-            },
-            487 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            488 => function ($stackPos) {
-                 $this->semValue = array();
-            },
-            489 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
+            484 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            485 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            486 => function ($stackPos) {
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+            },
+            487 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            488 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            489 => function ($stackPos) {
+                 $this->semValue = null;
+            },
             490 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             491 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             492 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             493 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             494 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             495 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             496 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             497 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             499 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             500 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             501 => function ($stackPos) {
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            502 => function ($stackPos) {
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            503 => function ($stackPos) {
+                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            504 => function ($stackPos) {
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            505 => function ($stackPos) {
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            506 => function ($stackPos) {
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], new Expr\Error($this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)]), $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->errorState = 2;
+            },
+            507 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT;
             $this->semValue = new Expr\Array_($this->semStack[$stackPos-(3-2)], $attrs);
             },
-            502 => function ($stackPos) {
+            508 => function ($stackPos) {
                  $attrs = $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG;
             $this->semValue = new Expr\Array_($this->semStack[$stackPos-(4-3)], $attrs);
             },
-            503 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            504 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
-            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
-            },
-            505 => function ($stackPos) {
-                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
-            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
-            },
-            506 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            507 => function ($stackPos) {
-                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            508 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
             509 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             510 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $attrs = $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes; $attrs['kind'] = ($this->semStack[$stackPos-(1-1)][0] === "'" || ($this->semStack[$stackPos-(1-1)][1] === "'" && ($this->semStack[$stackPos-(1-1)][0] === 'b' || $this->semStack[$stackPos-(1-1)][0] === 'B')) ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED);
+            $this->semValue = new Scalar\String_(Scalar\String_::parse($this->semStack[$stackPos-(1-1)]), $attrs);
             },
             511 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
+            foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs);
             },
             512 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             513 => function ($stackPos) {
-                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
+                 $this->semValue = new Scalar\DNumber(Scalar\DNumber::parse($this->semStack[$stackPos-(1-1)]), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             514 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             515 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2585,16 +2568,16 @@ class Php7 extends \PhpParser\ParserAbstract
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             517 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             518 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(2-1)], '', $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(2-2)] + $this->endAttributeStack[$stackPos-(2-2)], true);
             },
             519 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseDocString($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes, $this->startAttributeStack[$stackPos-(3-3)] + $this->endAttributeStack[$stackPos-(3-3)], true);
             },
             520 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             521 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2612,192 +2595,210 @@ class Php7 extends \PhpParser\ParserAbstract
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             526 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             527 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             528 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             529 => function ($stackPos) {
-                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             530 => function ($stackPos) {
-                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             531 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             532 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             533 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             534 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             535 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             536 => function ($stackPos) {
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             537 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             538 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             539 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             540 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             541 => function ($stackPos) {
-                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             542 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             543 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             544 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             545 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             546 => function ($stackPos) {
-                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
             },
             547 => function ($stackPos) {
-                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             548 => function ($stackPos) {
                  $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             549 => function ($stackPos) {
-                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             550 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            551 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
-            },
-            552 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            553 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            554 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
-            },
-            555 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            556 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
-            },
-            557 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            },
-            558 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
-            },
-            559 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
-            },
-            560 => function ($stackPos) {
-                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
-            },
-            561 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
-            },
-            562 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
-            },
-            563 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            564 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
-            },
-            565 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            566 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
-            },
-            567 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
-            },
-            568 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
-            },
-            569 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
-            },
-            570 => function ($stackPos) {
-                 $this->semValue = null;
-            },
-            571 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
-            },
-            572 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
-            },
-            573 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
-            },
-            574 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
-            },
-            575 => function ($stackPos) {
-                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            576 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
-            577 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
-            578 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            579 => function ($stackPos) {
+            551 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            552 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            580 => function ($stackPos) {
+            553 => function ($stackPos) {
                  $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            581 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            554 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            582 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            555 => function ($stackPos) {
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            583 => function ($stackPos) {
-                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+            556 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            584 => function ($stackPos) {
+            557 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
+            558 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            559 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            560 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            561 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            562 => function ($stackPos) {
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+            },
+            563 => function ($stackPos) {
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            564 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue);
+            },
+            565 => function ($stackPos) {
+                $this->semValue = $this->semStack[$stackPos];
+            },
+            566 => function ($stackPos) {
+                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+            },
+            567 => function ($stackPos) {
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+            },
+            568 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+            },
+            569 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            570 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            571 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            572 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            573 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            574 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            575 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            576 => function ($stackPos) {
+                 $this->semValue = null;
+            },
+            577 => function ($stackPos) {
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+            },
+            578 => function ($stackPos) {
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+            },
+            579 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+            },
+            580 => function ($stackPos) {
+                 $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
+            },
+            581 => function ($stackPos) {
+                 $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            582 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            583 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+            },
+            584 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
             585 => function ($stackPos) {
-                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             586 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             587 => function ($stackPos) {
-                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             588 => function ($stackPos) {
+                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            589 => function ($stackPos) {
+                 $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
+            },
+            590 => function ($stackPos) {
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+            },
+            591 => function ($stackPos) {
+                 $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            592 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            593 => function ($stackPos) {
+                 $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+            },
+            594 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/lib/PhpParser/PrettyPrinter/Standard.php b/lib/PhpParser/PrettyPrinter/Standard.php
index 62d1f34c..ffac9c09 100644
--- a/lib/PhpParser/PrettyPrinter/Standard.php
+++ b/lib/PhpParser/PrettyPrinter/Standard.php
@@ -45,6 +45,10 @@ class Standard extends PrettyPrinterAbstract
         return $this->pImplode($node->types, '|');
     }
 
+    protected function pIntersectionType(Node\IntersectionType $node) {
+        return $this->pImplode($node->types, '&');
+    }
+
     protected function pIdentifier(Node\Identifier $node) {
         return $node->name;
     }
diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php
index 8a3565f1..5fc36531 100644
--- a/lib/PhpParser/PrettyPrinterAbstract.php
+++ b/lib/PhpParser/PrettyPrinterAbstract.php
@@ -1343,6 +1343,7 @@ abstract class PrettyPrinterAbstract
             //'Scalar_Encapsed->parts' => '',
             'Stmt_Catch->types' => '|',
             'UnionType->types' => '|',
+            'IntersectionType->types' => '&',
             'Stmt_If->elseifs' => ' ',
             'Stmt_TryCatch->catches' => ' ',
 
diff --git a/test/PhpParser/BuilderHelpersTest.php b/test/PhpParser/BuilderHelpersTest.php
index c848dbb6..94d2d3ab 100644
--- a/test/PhpParser/BuilderHelpersTest.php
+++ b/test/PhpParser/BuilderHelpersTest.php
@@ -140,6 +140,9 @@ class BuilderHelpersTest extends \PHPUnit\Framework\TestCase
         $unionType = new Node\UnionType([new Node\Identifier('int'), new Node\Identifier('string')]);
         $this->assertSame($unionType, BuilderHelpers::normalizeType($unionType));
 
+        $intersectionType = new Node\IntersectionType([new Node\Name('A'), new Node\Name('B')]);
+        $this->assertSame($intersectionType, BuilderHelpers::normalizeType($intersectionType));
+
         $expectedNullable = new Node\NullableType($intIdentifier);
         $nullable = BuilderHelpers::normalizeType('?int');
         $this->assertEquals($expectedNullable, $nullable);
diff --git a/test/PhpParser/NodeVisitor/NameResolverTest.php b/test/PhpParser/NodeVisitor/NameResolverTest.php
index 5c85c292..d14402b9 100644
--- a/test/PhpParser/NodeVisitor/NameResolverTest.php
+++ b/test/PhpParser/NodeVisitor/NameResolverTest.php
@@ -204,6 +204,7 @@ class A extends B implements C, D {
 interface A extends C, D {
     public function a(A $a) : A;
     public function b(A|B|int $a): A|B|int;
+    public function c(A&B $a): A&B;
 }
 
 #[X]
@@ -268,6 +269,7 @@ interface A extends \NS\C, \NS\D
 {
     public function a(\NS\A $a) : \NS\A;
     public function b(\NS\A|\NS\B|int $a) : \NS\A|\NS\B|int;
+    public function c(\NS\A&\NS\B $a) : \NS\A&\NS\B;
 }
 #[\NS\X]
 enum E : int
diff --git a/test/code/formatPreservation/listInsertion.test b/test/code/formatPreservation/listInsertion.test
index 0795c9d9..6ddd8168 100644
--- a/test/code/formatPreservation/listInsertion.test
+++ b/test/code/formatPreservation/listInsertion.test
@@ -319,6 +319,16 @@ function test(): A
 |B|C {}
 -----
 <?php
+function test(): A
+&B {}
+-----
+$stmts[0]->returnType->types[] = new Node\Name('C');
+-----
+<?php
+function test(): A
+&B&C {}
+-----
+<?php
 function test() {
     if ($x) {
         $a;
diff --git a/test/code/parser/stmt/function/intersectionTypes.test b/test/code/parser/stmt/function/intersectionTypes.test
new file mode 100644
index 00000000..696100fb
--- /dev/null
+++ b/test/code/parser/stmt/function/intersectionTypes.test
@@ -0,0 +1,104 @@
+Union types
+-----
+<?php
+
+class Test {
+    public A&B $prop;
+}
+
+function test(A&B $a): A&B {}
+-----
+!!php7
+array(
+    0: Stmt_Class(
+        attrGroups: array(
+        )
+        flags: 0
+        name: Identifier(
+            name: Test
+        )
+        extends: null
+        implements: array(
+        )
+        stmts: array(
+            0: Stmt_Property(
+                attrGroups: array(
+                )
+                flags: MODIFIER_PUBLIC (1)
+                type: IntersectionType(
+                    types: array(
+                        0: Name(
+                            parts: array(
+                                0: A
+                            )
+                        )
+                        1: Name(
+                            parts: array(
+                                0: B
+                            )
+                        )
+                    )
+                )
+                props: array(
+                    0: Stmt_PropertyProperty(
+                        name: VarLikeIdentifier(
+                            name: prop
+                        )
+                        default: null
+                    )
+                )
+            )
+        )
+    )
+    1: Stmt_Function(
+        attrGroups: array(
+        )
+        byRef: false
+        name: Identifier(
+            name: test
+        )
+        params: array(
+            0: Param(
+                attrGroups: array(
+                )
+                flags: 0
+                type: IntersectionType(
+                    types: array(
+                        0: Name(
+                            parts: array(
+                                0: A
+                            )
+                        )
+                        1: Name(
+                            parts: array(
+                                0: B
+                            )
+                        )
+                    )
+                )
+                byRef: false
+                variadic: false
+                var: Expr_Variable(
+                    name: a
+                )
+                default: null
+            )
+        )
+        returnType: IntersectionType(
+            types: array(
+                0: Name(
+                    parts: array(
+                        0: A
+                    )
+                )
+                1: Name(
+                    parts: array(
+                        0: B
+                    )
+                )
+            )
+        )
+        stmts: array(
+        )
+    )
+)
\ No newline at end of file
diff --git a/test/code/prettyPrinter/stmt/intersection_types.test b/test/code/prettyPrinter/stmt/intersection_types.test
new file mode 100644
index 00000000..fcb18c20
--- /dev/null
+++ b/test/code/prettyPrinter/stmt/intersection_types.test
@@ -0,0 +1,18 @@
+Union types
+-----
+<?php
+
+class Test {
+    public A&B $prop;
+}
+
+function test(A&B $a): A&B {}
+-----
+!!php7
+class Test
+{
+    public A&B $prop;
+}
+function test(A&B $a) : A&B
+{
+}
\ No newline at end of file