New Upstream Release - php-parser

Ready changes

Summary

Merged new upstream version: 5.0.0~alpha3 (was: 5.0.0~alpha2).

Diff

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..1f8fb404
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,12 @@
+/.github         export-ignore
+/doc             export-ignore
+/test            export-ignore
+/test_old        export-ignore
+/tools           export-ignore
+.editorconfig    export-ignore
+.gitattributes   export-ignore
+.gitignore       export-ignore
+CHANGELOG.md     export-ignore
+CONTRIBUTING.md  export-ignore
+phpunit.xml.dist export-ignore
+UPGRADE-*.md     export-ignore
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6b0442b1..ab07badc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,37 @@
+Version 5.0.0-alpha3 (2023-06-24)
+---------------------------------
+
+See UPGRADE-5.0 for detailed migration instructions.
+
+### Added
+
+* [PHP 8.3] Added support for typed constants.
+* [PHP 8.3] Added support for readonly anonymous classes.
+* Added support for `NodeVisitor::REPLACE_WITH_NULL`.
+* Added support for CRLF newlines in the pretty printer, using the new `newline` option.
+
+### Changed
+
+* Use PHP 7.1 as the default target version for the pretty printer.
+* Print `else if { }` instead of `else { if { } }`.
+* The `leaveNode()` method on visitors is now invoked in reverse order of `enterNode()`.
+* Moved `NodeTraverser::REMOVE_NODE` etc. to `NodeVisitor::REMOVE_NODE`. The old constants are still
+  available for compatibility.
+* The `Name` subnode `parts` has been replaced by `name`, which stores the name as a string rather
+  than an array of parts separated by namespace separators. The `getParts()` method returns the old
+  representation.
+* No longer accept strings for types in Node constructors. Instead, either an `Identifier`, `Name`
+  or `ComplexType` must be passed.
+* `Comment::getReformattedText()` now normalizes CRLF newlines to LF newlines.
+
+### Fixed
+
+* Don't trim leading whitespace in formatting preserving printer.
+* Treat DEL as a label character in the formatting preserving printer depending on the targeted
+  PHP version.
+* Fix error reporting in emulative lexer without explicitly specified error handler.
+* Gracefully handle non-contiguous array indices in the `Differ`.
+
 Version 5.0.0-alpha2 (2023-03-05)
 ---------------------------------
 
diff --git a/README.md b/README.md
index ca745368..bb28f57c 100644
--- a/README.md
+++ b/README.md
@@ -70,12 +70,17 @@ This dumps an AST looking something like this:
 ```
 array(
     0: Stmt_Function(
+        attrGroups: array(
+        )
         byRef: false
         name: Identifier(
             name: test
         )
         params: array(
             0: Param(
+                attrGroups: array(
+                )
+                flags: 0
                 type: null
                 byRef: false
                 variadic: false
@@ -90,12 +95,11 @@ array(
             0: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
+                        name: var_dump
                     )
                     args: array(
                         0: Arg(
+                            name: null
                             value: Expr_Variable(
                                 name: foo
                             )
@@ -137,12 +141,16 @@ This gives us an AST where the `Function_::$stmts` are empty:
 ```
 array(
     0: Stmt_Function(
+        attrGroups: array(
+        )
         byRef: false
         name: Identifier(
             name: test
         )
         params: array(
             0: Param(
+                attrGroups: array(
+                )
                 type: null
                 byRef: false
                 variadic: false
diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md
index b30bb9a7..eab8de16 100644
--- a/UPGRADE-5.0.md
+++ b/UPGRADE-5.0.md
@@ -71,6 +71,17 @@ Now, destructuring is always represented using `Node\Expr\List_`. The `kind` att
 `Node\Expr\List_::KIND_LIST` or `Node\Expr\List_::KIND_ARRAY` specifies which syntax was actually
 used.
 
+### Changes to the name representation
+
+Previously, `Name` nodes had a `parts` subnode, which stores an array of name parts, split by
+namespace separators. Now, `Name` nodes instead have a `name` subnode, which stores a plain string.
+
+For example, the name `Foo\Bar` was previously represented by `Name(parts: ['Foo', 'Bar'])` and is
+now represented by `Name(name: 'Foo\Bar')` instead.
+
+It is possible to convert the name to the previous representation using `$name->getParts()`. The
+`Name` constructor continues to accept both the string and the array representation.
+
 ### Renamed nodes
 
 A number of AST nodes have been renamed or moved in the AST hierarchy:
@@ -104,6 +115,21 @@ PhpParser\Node\Stmt\Class_::MODIFIER_READONLY  -> PhpParser\Modifiers::READONLY
 PhpParser\Node\Stmt\Class_::VISIBILITY_MODIFIER_MASK -> PhpParser\Modifiers::VISIBILITY_MASK
 ```
 
+### Changes to node constructors
+
+Node constructor arguments accepting types now longer accept plain strings. Either an `Identifier` or `Name` (or `ComplexType`) should be passed instead. This affects the following constructor arguments:
+
+* The `'returnType'` key of `$subNodes` argument of `Node\Expr\ArrowFunction`.
+* The `'returnType'` key of `$subNodes` argument of `Node\Expr\Closure`.
+* The `'returnType'` key of `$subNodes` argument of `Node\Stmt\ClassMethod`.
+* The `'returnType'` key of `$subNodes` argument of `Node\Stmt\Function_`.
+* The `$type` argument of `Node\NullableType`.
+* The `$type` argument of `Node\Param`.
+* The `$type` argument of `Node\Stmt\Property`.
+* The `$type` argument of `Node\ClassConst` (new in PHP-Parser 5.0, listed for completeness only).
+
+To follow the previous behavior, an `Identifier` should be passed, which indicates a built-in type.
+
 ### Changes to the pretty printer
 
 A number of changes to the standard pretty printer have been made, to make it match contemporary coding style conventions (and in particular PSR-12). Options to restore the previous behavior are not provided, but it is possible to override the formatting methods (such as `pStmt_ClassMethod`) with your preferred formatting.
@@ -156,12 +182,27 @@ Backslashes in single-quoted strings are now only printed if they are necessary:
 '\\\\';
 ```
 
-The pretty printer now accepts a `phpVersion` option, which accepts a `PhpVersion` object and defaults to PHP 7.0. The pretty printer will make formatting choices to make the code valid for that version. It currently controls the following behavior:
+`else if` structures will now omit redundant parentheses:
+
+```php
+# Before
+else {
+    if ($x) {
+        // ...
+    }
+}
+
+# After
+else if ($x) {
+     // ...
+}
+```
+
+The pretty printer now accepts a `phpVersion` option, which accepts a `PhpVersion` object and defaults to PHP 7.1. The pretty printer will make formatting choices to make the code valid for that version. It currently controls the following behavior:
 
 * For PHP >= 7.0 (default), short array syntax `[]` will be used by default. This does not affect nodes that specify an explicit array syntax using the `kind` attribute.
 * For PHP >= 7.0 (default), parentheses around `yield` expressions will only be printed when necessary. Previously, parentheses were always printed, even if `yield` was used as a statement.
-* For PHP >= 7.1, the short array syntax `[]` will be used for destructuring by default (instead of
-  `list()`). This does not affect nodes that specify and explicit syntax using the `kind` attribute.
+* For PHP >= 7.1 (default), the short array syntax `[]` will be used for destructuring by default (instead of `list()`). This does not affect nodes that specify and explicit syntax using the `kind` attribute.
 * For PHP >= 7.3, a newline is no longer forced after heredoc/nowdoc strings, as the requirement for this has been removed with the introduction of flexible heredoc/nowdoc strings.
 
 ### Changes to precedence handling in the pretty printer
@@ -197,6 +238,33 @@ protected function pExpr_UnaryPlus(
 
 The new `$precedence` and `$lhsPrecedence` arguments need to be passed down to the `pInfixOp()`, `pPrefixOp()` and `pPostfixOp()` methods.
 
+### Changes to the node traverser
+
+If there are multiple visitors, the node traverser will now call `leaveNode()` and `afterTraverse()` methods in the reverse order of the corresponding `enterNode()` and `beforeTraverse()` calls:
+
+```php
+# Before
+$visitor1->enterNode($node);
+$visitor2->enterNode($node);
+$visitor1->leaveNode($node);
+$visitor2->leaveNode($node);
+
+# After
+$visitor1->enterNode($node);
+$visitor2->enterNode($node);
+$visitor2->leaveNode($node);
+$visitor1->leaveNode($node);
+```
+
+Additionally, the special `NodeVisitor` return values have been moved from `NodeTraverser` to `NodeVisitor`. The old names are deprecated, but still available.
+
+```php
+PhpParser\NodeTraverser::REMOVE_NODE -> PhpParser\NodeVisitor::REMOVE_NODE
+PhpParser\NodeTraverser::DONT_TRAVERSE_CHILDREN -> PhpParser\NodeVisitor::DONT_TRAVERSE_CHILDREN
+PhpParser\NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN -> PhpParser\NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN
+PhpParser\NodeTraverser::STOP_TRAVERSAL -> PhpParser\NodeVisitor::STOP_TRAVERSAL
+```
+
 ### Changes to token representation
 
 Tokens are now internally represented using the `PhpParser\Token` class, which exposes the same base interface as
@@ -217,7 +285,8 @@ class Token {
 The `Lexer::getTokens()` method will now return an array of `Token`s, rather than an array of arrays and strings.
 Additionally, the token array is now terminated by a sentinel token with ID 0.
 
-### Other removed functionality
+### Miscellaneous changes
 
  * The deprecated `Builder\Param::setTypeHint()` method has been removed in favor of `Builder\Param::setType()`.
  * The deprecated `Error` constructor taking a start line has been removed. Pass `['startLine' => $startLine]` attributes instead.
+* `Comment::getReformattedText()` now normalizes CRLF newlines to LF newlines.
diff --git a/debian/changelog b/debian/changelog
index 56beb34a..609493e3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+php-parser (5.0.0~alpha3-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 24 Jun 2023 19:26:27 -0000
+
 php-parser (5.0.0~alpha2-1) experimental; urgency=medium
 
   [ Nikita Popov ]
diff --git a/debian/patches/0001-Allow-require-to-search-in-the-path.patch b/debian/patches/0001-Allow-require-to-search-in-the-path.patch
index 690037e5..caf2de36 100644
--- a/debian/patches/0001-Allow-require-to-search-in-the-path.patch
+++ b/debian/patches/0001-Allow-require-to-search-in-the-path.patch
@@ -7,10 +7,10 @@ Forwarded: not-needed
  bin/php-parse | 7 +------
  1 file changed, 1 insertion(+), 6 deletions(-)
 
-diff --git a/bin/php-parse b/bin/php-parse
-index cdf9584..eccc038 100755
---- a/bin/php-parse
-+++ b/bin/php-parse
+Index: php-parser.git/bin/php-parse
+===================================================================
+--- php-parser.git.orig/bin/php-parse
++++ php-parser.git/bin/php-parse
 @@ -1,12 +1,7 @@
  #!/usr/bin/env php
  <?php
diff --git a/debian/patches/0002-Adapt-shebang-for-PHP-script.patch b/debian/patches/0002-Adapt-shebang-for-PHP-script.patch
index 216aa87a..7b39c135 100644
--- a/debian/patches/0002-Adapt-shebang-for-PHP-script.patch
+++ b/debian/patches/0002-Adapt-shebang-for-PHP-script.patch
@@ -7,10 +7,10 @@ Forwarded: not-needed
  bin/php-parse | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/bin/php-parse b/bin/php-parse
-index eccc038..40f26f5 100755
---- a/bin/php-parse
-+++ b/bin/php-parse
+Index: php-parser.git/bin/php-parse
+===================================================================
+--- php-parser.git.orig/bin/php-parse
++++ php-parser.git/bin/php-parse
 @@ -1,4 +1,4 @@
 -#!/usr/bin/env php
 +#!/usr/bin/php
diff --git a/doc/2_Usage_of_basic_components.markdown b/doc/2_Usage_of_basic_components.markdown
index 2a0a89be..3fd462da 100644
--- a/doc/2_Usage_of_basic_components.markdown
+++ b/doc/2_Usage_of_basic_components.markdown
@@ -96,12 +96,17 @@ For the sample code from the previous section, this will produce the following o
 ```
 array(
     0: Stmt_Function(
+        attrGroups: array(
+        )
         byRef: false
         name: Identifier(
             name: printLine
         )
         params: array(
             0: Param(
+                attrGroups: array(
+                )
+                flags: 0
                 type: null
                 byRef: false
                 variadic: false
@@ -129,12 +134,11 @@ array(
     1: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: printLine
-                )
+                name: printLine
             )
             args: array(
                 0: Arg(
+                    name: null
                     value: Scalar_String(
                         value: Hello World!!!
                     )
@@ -343,15 +347,18 @@ i.e. before its subnodes are traversed, the latter when it is left.
 All four methods can either return the changed node or not return at all (i.e. `null`) in which
 case the current node is not changed.
 
-The `enterNode()` method can additionally return the value `NodeTraverser::DONT_TRAVERSE_CHILDREN`,
+The `enterNode()` method can additionally return the value `NodeVisitor::DONT_TRAVERSE_CHILDREN`,
 which instructs the traverser to skip all children of the current node. To furthermore prevent subsequent
-visitors from visiting the current node, `NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN` can be used instead.
+visitors from visiting the current node, `NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN` can be used instead.
 
-Both methods can additionally return the value `NodeTraverser::REMOVE_NODE`, in which
-case the current node will be removed from the parent array. Furthermore, it is possible to return
-an array of nodes, which will be merged into the parent array at the offset of the current node.
-I.e. if in `array(A, B, C)` the node `B` should be replaced with `array(X, Y, Z)` the result will
-be `array(A, X, Y, Z, C)`.
+Both methods can additionally return the following values:
+
+ * `NodeVisitor::STOP_TRAVERSAL`, in which case no further nodes will be visited.
+ * `NodeVisitor::REMOVE_NODE`, in which case the current node will be removed from the parent array.
+ * `NodeVisitor::REPLACE_WITH_NULL`, in which case the current node will be replaced with `null`.
+ * An array of nodes, which will be merged into the parent array at the offset of the current node.
+   I.e. if in `array(A, B, C)` the node `B` should be replaced with `array(X, Y, Z)` the result will
+   be `array(A, X, Y, Z, C)`.
 
 Instead of manually implementing the `NodeVisitor` interface you can also extend the `NodeVisitorAbstract`
 class, which will define empty default implementations for all the above methods.
@@ -493,7 +500,7 @@ The last thing we need to do is remove the `namespace` and `use` statements:
 ```php
 use PhpParser\Node;
 use PhpParser\Node\Stmt;
-use PhpParser\NodeTraverser;
+use PhpParser\NodeVisitor;
 
 class NodeVisitor_NamespaceConverter extends \PhpParser\NodeVisitorAbstract
 {
@@ -513,7 +520,7 @@ class NodeVisitor_NamespaceConverter extends \PhpParser\NodeVisitorAbstract
             return $node->stmts;
         } elseif ($node instanceof Stmt\Use_) {
             // remove use nodes altogether
-            return NodeTraverser::REMOVE_NODE;
+            return NodeVisitor::REMOVE_NODE;
         }
     }
 }
diff --git a/doc/component/Performance.markdown b/doc/component/Performance.markdown
index 4de41607..47e8fea4 100644
--- a/doc/component/Performance.markdown
+++ b/doc/component/Performance.markdown
@@ -42,24 +42,3 @@ When possible, objects should be reused rather than being newly instantiated for
 objects have expensive initialization procedures, which will be unnecessarily repeated if the object
 is not reused. (Currently two objects with particularly expensive setup are lexers and pretty
 printers, though the details might change between versions of this library.)
-
-Garbage collection
-------------------
-
-A limitation in PHP's cyclic garbage collector may lead to major performance degradation when the
-active working set exceeds 10000 objects (or arrays). Especially when parsing very large files this
-limit is significantly exceeded and PHP will spend the majority of time performing unnecessary
-garbage collection attempts.
-
-Without GC, parsing time is roughly linear in the input size. With GC, this degenerates to quadratic
-runtime for large files. While the specifics may differ, as a rough guideline you may expect a 2.5x
-GC overhead for 500KB files and a 5x overhead for 1MB files.
-
-Because this a limitation in PHP's implementation, there is no easy way to work around this. If
-possible, you should avoid parsing very large files, as they will impact overall execution time
-disproportionally (and are usually generated anyway).
-
-Of course, you can also try to (temporarily) disable GC. By design the AST generated by PHP-Parser
-is cycle-free, so the AST itself will never cause leaks with GC disabled. However, other code
-(including for example the parser object itself) may hold cycles, so disabling of GC should be
-approached with care.
diff --git a/doc/component/Pretty_printing.markdown b/doc/component/Pretty_printing.markdown
index ee7cac8a..3e164e20 100644
--- a/doc/component/Pretty_printing.markdown
+++ b/doc/component/Pretty_printing.markdown
@@ -32,10 +32,11 @@ Customizing the formatting
 --------------------------
 
 The pretty printer respects a number of `kind` attributes used by some notes (e.g., whether an
-integer should be printed as decimal, hexadecimal, etc). Additionally, it supports two options:
+integer should be printed as decimal, hexadecimal, etc). Additionally, it supports three options:
 
-* `phpVersion` (defaults to 7.0) allows opting into formatting that is not supported by older PHP
+* `phpVersion` (defaults to 7.1) allows opting into formatting that is not supported by older PHP
   versions.
+* `newline` (defaults to `"\n"`) can be set to `"\r\n"` in order to produce Windows newlines.
 * `shortArraySyntax` determines the used array syntax if the `kind` attribute is not set. This is
   a legacy option, and `phpVersion` should be used to control this behavior instead.
 
diff --git a/doc/component/Walking_the_AST.markdown b/doc/component/Walking_the_AST.markdown
index 3fd668c4..1673c1e0 100644
--- a/doc/component/Walking_the_AST.markdown
+++ b/doc/component/Walking_the_AST.markdown
@@ -129,13 +129,13 @@ Now `$a && $b` will be replaced by `!($a && $b)`. Then the traverser will go int
 only) child of `!($a && $b)`, which is `$a && $b`. The transformation applies again and we end up
 with `!!($a && $b)`. This will continue until PHP hits the memory limit.
 
-Finally, there are two special replacement types. The first is removal of a node:
+Finally, there are three special replacement types. The first is removal of a node:
 
 ```php
 public function leaveNode(Node $node) {
     if ($node instanceof Node\Stmt\Return_) {
         // Remove all return statements
-        return NodeTraverser::REMOVE_NODE;
+        return NodeVisitor::REMOVE_NODE;
     }
 }
 ```
@@ -155,7 +155,7 @@ public function leaveNode(Node $node) {
         && $node->expr->name instanceof Node\Name
         && $node->expr->name->toString() === 'var_dump'
     ) {
-        return NodeTraverser::REMOVE_NODE;
+        return NodeVisitor::REMOVE_NODE;
     }
 }
 ```
@@ -164,6 +164,20 @@ This example will remove all calls to `var_dump()` which occur as expression sta
 that `var_dump($a);` will be removed, but `if (var_dump($a))` will not be removed (and there is no
 obvious way in which it can be removed).
 
+Another way to remove nodes is to replace them with `null`. For example, all `else` statements could
+be removed as follows:
+
+```php
+public function leaveNode(Node $node) {
+    if ($node instanceof Node\Stmt\Else_) {
+        return NodeVisitor::REPLACE_WITH_NULL;
+    }
+}
+```
+
+This is only safe to do if the subnode the node is stored in is nullable. `Node\Stmt\Else_` only
+occurs inside `Node\Stmt\If_::$else`, which is nullable, so this particular replacement is safe.
+
 Next to removing nodes, it is also possible to replace one node with multiple nodes. This
 only works if the parent structure is an array.
 
@@ -197,7 +211,7 @@ private $classes = [];
 public function enterNode(Node $node) {
     if ($node instanceof Node\Stmt\Class_) {
         $this->classes[] = $node;
-        return NodeTraverser::DONT_TRAVERSE_CHILDREN;
+        return NodeVisitor::DONT_TRAVERSE_CHILDREN;
     }
 }
 ```
@@ -217,7 +231,7 @@ public function enterNode(Node $node) {
         $node->namespacedName->toString() === 'Foo\Bar\Baz'
     ) {
         $this->class = $node;
-        return NodeTraverser::STOP_TRAVERSAL;
+        return NodeVisitor::STOP_TRAVERSAL;
     }
 }
 ```
@@ -255,13 +269,14 @@ $visitorA->enterNode(Stmt_Return)
 $visitorB->enterNode(Stmt_Return)
 $visitorA->enterNode(Expr_Variable)
 $visitorB->enterNode(Expr_Variable)
-$visitorA->leaveNode(Expr_Variable)
 $visitorB->leaveNode(Expr_Variable)
-$visitorA->leaveNode(Stmt_Return)
+$visitorA->leaveNode(Expr_Variable)
 $visitorB->leaveNode(Stmt_Return)
+$visitorA->leaveNode(Stmt_Return)
 ```
 
-That is, when visiting a node, enterNode and leaveNode will always be called for all visitors.
+That is, when visiting a node, `enterNode()` and `leaveNode()` will always be called for all
+visitors, with the `leaveNode()` calls happening in the reverse order of the `enterNode()` calls.
 Running multiple visitors in parallel improves performance, as the AST only has to be traversed
 once. However, it is not always possible to write visitors in a way that allows interleaved
 execution. In this case, you can always fall back to performing multiple traversals:
@@ -286,6 +301,7 @@ special enterNode/leaveNode return values:
  * If a visitor returns a replacement node, subsequent visitors will be passed the replacement node,
    not the original one.
  * If a visitor returns `REMOVE_NODE`, subsequent visitors will not see this node.
+ * If a visitor returns `REPLACE_WITH_NULL`, subsequent visitors will not see this node.
  * If a visitor returns an array of replacement nodes, subsequent visitors will see neither the node
    that was replaced, nor the replacement nodes.
 
diff --git a/grammar/php.y b/grammar/php.y
index 4756898b..e5d6914b 100644
--- a/grammar/php.y
+++ b/grammar/php.y
@@ -340,7 +340,10 @@ non_empty_class_const_list:
 ;
 
 class_const:
-    identifier_maybe_reserved '=' expr                      { $$ = Node\Const_[$1, $3]; }
+      T_STRING '=' expr
+          { $$ = Node\Const_[new Node\Identifier($1, stackAttributes(#1)), $3]; }
+    | semi_reserved '=' expr
+          { $$ = Node\Const_[new Node\Identifier($1, stackAttributes(#1)), $3]; }
 ;
 
 inner_statement_list_ex:
@@ -842,6 +845,9 @@ class_statement:
     | optional_attributes method_modifiers T_CONST class_const_list semi
           { $$ = new Stmt\ClassConst($4, $2, attributes(), $1);
             $this->checkClassConst($$, #2); }
+    | optional_attributes method_modifiers T_CONST type_expr class_const_list semi
+          { $$ = new Stmt\ClassConst($5, $2, attributes(), $1, $4);
+            $this->checkClassConst($$, #2); }
     | optional_attributes method_modifiers T_FUNCTION optional_ref identifier_maybe_reserved '(' parameter_list ')'
       optional_return_type method_body
           { $$ = Stmt\ClassMethod[$5, ['type' => $2, 'byRef' => $4, 'params' => $7, 'returnType' => $9, 'stmts' => $10, 'attrGroups' => $1]];
@@ -1070,8 +1076,8 @@ expr:
 ;
 
 anonymous_class:
-      optional_attributes T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
-          { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]], $3);
+      optional_attributes class_entry_type ctor_arguments extends_from implements_list '{' class_statement_list '}'
+          { $$ = array(Stmt\Class_[null, ['type' => $2, 'extends' => $4, 'implements' => $5, 'stmts' => $7, 'attrGroups' => $1]], $3);
             $this->checkClass($$[0], -1); }
 ;
 
diff --git a/lib/PhpParser/Builder/ClassConst.php b/lib/PhpParser/Builder/ClassConst.php
index de51a910..13b4a703 100644
--- a/lib/PhpParser/Builder/ClassConst.php
+++ b/lib/PhpParser/Builder/ClassConst.php
@@ -22,6 +22,8 @@ class ClassConst implements PhpParser\Builder {
 
     /** @var list<Node\AttributeGroup> */
     protected $attributeGroups = [];
+    /** @var Identifier|Node\Name|Node\ComplexType */
+    protected $type;
 
     /**
      * Creates a class constant builder
@@ -119,6 +121,19 @@ class ClassConst implements PhpParser\Builder {
         return $this;
     }
 
+    /**
+     * Sets the constant type.
+     *
+     * @param string|Node\Name|Identifier|Node\ComplexType $type
+     *
+     * @return $this
+     */
+    public function setType($type) {
+        $this->type = BuilderHelpers::normalizeType($type);
+
+        return $this;
+    }
+
     /**
      * Returns the built class node.
      *
@@ -129,7 +144,8 @@ class ClassConst implements PhpParser\Builder {
             $this->constants,
             $this->flags,
             $this->attributes,
-            $this->attributeGroups
+            $this->attributeGroups,
+            $this->type
         );
     }
 }
diff --git a/lib/PhpParser/Builder/Param.php b/lib/PhpParser/Builder/Param.php
index 433801a0..1994a709 100644
--- a/lib/PhpParser/Builder/Param.php
+++ b/lib/PhpParser/Builder/Param.php
@@ -4,6 +4,7 @@ namespace PhpParser\Builder;
 
 use PhpParser;
 use PhpParser\BuilderHelpers;
+use PhpParser\Modifiers;
 use PhpParser\Node;
 
 class Param implements PhpParser\Builder {
@@ -15,6 +16,8 @@ class Param implements PhpParser\Builder {
     protected $type = null;
     /** @var bool */
     protected $byRef = false;
+    /** @var int */
+    protected $flags = 0;
     /** @var bool */
     protected $variadic = false;
     /** @var list<Node\AttributeGroup> */
@@ -80,6 +83,50 @@ class Param implements PhpParser\Builder {
         return $this;
     }
 
+    /**
+     * Makes the (promoted) parameter public.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makePublic() {
+        $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC);
+
+        return $this;
+    }
+
+    /**
+     * Makes the (promoted) parameter protected.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeProtected() {
+        $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED);
+
+        return $this;
+    }
+
+    /**
+     * Makes the (promoted) parameter private.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makePrivate() {
+        $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE);
+
+        return $this;
+    }
+
+    /**
+     * Makes the (promoted) parameter readonly.
+     *
+     * @return $this The builder instance (for fluid interface)
+     */
+    public function makeReadonly() {
+        $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY);
+
+        return $this;
+    }
+
     /**
      * Adds an attribute group.
      *
@@ -101,7 +148,7 @@ class Param implements PhpParser\Builder {
     public function getNode(): Node {
         return new Node\Param(
             new Node\Expr\Variable($this->name),
-            $this->default, $this->type, $this->byRef, $this->variadic, [], 0, $this->attributeGroups
+            $this->default, $this->type, $this->byRef, $this->variadic, [], $this->flags, $this->attributeGroups
         );
     }
 }
diff --git a/lib/PhpParser/Comment.php b/lib/PhpParser/Comment.php
index ff949d9b..87d3eabd 100644
--- a/lib/PhpParser/Comment.php
+++ b/lib/PhpParser/Comment.php
@@ -150,19 +150,21 @@ class Comment implements \JsonSerializable {
      *
      * "Reformatted" here means that we try to clean up the whitespace at the
      * starts of the lines. This is necessary because we receive the comments
-     * without trailing whitespace on the first line, but with trailing whitespace
+     * without leading whitespace on the first line, but with leading whitespace
      * on all subsequent lines.
      *
-     * @return mixed|string
+     * Additionally, this normalizes CRLF newlines to LF newlines.
+     *
+     * @return string
      */
-    public function getReformattedText() {
-        $text = $this->text;
+    public function getReformattedText(): string {
+        $text = str_replace("\r\n", "\n", $this->text);
         $newlinePos = strpos($text, "\n");
         if (false === $newlinePos) {
             // Single line comments don't need further processing
             return $text;
         }
-        if (preg_match('((*BSR_ANYCRLF)(*ANYCRLF)^.*(?:\R\s+\*.*)+$)', $text)) {
+        if (preg_match('(^.*(?:\n\s+\*.*)+$)', $text)) {
             // Multi line comment of the type
             //
             //     /*
@@ -171,9 +173,9 @@ class Comment implements \JsonSerializable {
             //      */
             //
             // is handled by replacing the whitespace sequences before the * by a single space
-            return preg_replace('(^\s+\*)m', ' *', $this->text);
+            return preg_replace('(^\s+\*)m', ' *', $text);
         }
-        if (preg_match('(^/\*\*?\s*[\r\n])', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) {
+        if (preg_match('(^/\*\*?\s*\n)', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) {
             // Multi line comment of the type
             //
             //    /*
diff --git a/lib/PhpParser/Internal/Differ.php b/lib/PhpParser/Internal/Differ.php
index bee9f078..baaad87f 100644
--- a/lib/PhpParser/Internal/Differ.php
+++ b/lib/PhpParser/Internal/Differ.php
@@ -33,6 +33,8 @@ class Differ {
      * @return DiffElem[] Diff (edit script)
      */
     public function diff(array $old, array $new): array {
+        $old = \array_values($old);
+        $new = \array_values($new);
         list($trace, $x, $y) = $this->calculateTrace($old, $new);
         return $this->extractDiff($trace, $x, $y, $old, $new);
     }
diff --git a/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
index f60e0407..e897bf13 100644
--- a/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
+++ b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php
@@ -18,6 +18,8 @@ use PhpParser\Node\Expr;
 class PrintableNewAnonClassNode extends Expr {
     /** @var Node\AttributeGroup[] PHP attribute groups */
     public $attrGroups;
+    /** @var int Modifiers */
+    public $flags;
     /** @var (Node\Arg|Node\VariadicPlaceholder)[] Arguments */
     public $args;
     /** @var null|Node\Name Name of extended class */
@@ -36,11 +38,12 @@ class PrintableNewAnonClassNode extends Expr {
      * @param array<string, mixed> $attributes Attributes
      */
     public function __construct(
-        array $attrGroups, array $args, ?Node\Name $extends, array $implements,
+        array $attrGroups, int $flags, array $args, ?Node\Name $extends, array $implements,
         array $stmts, array $attributes
     ) {
         parent::__construct($attributes);
         $this->attrGroups = $attrGroups;
+        $this->flags = $flags;
         $this->args = $args;
         $this->extends = $extends;
         $this->implements = $implements;
@@ -53,7 +56,7 @@ class PrintableNewAnonClassNode extends Expr {
         // We don't assert that $class->name is null here, to allow consumers to assign unique names
         // to anonymous classes for their own purposes. We simplify ignore the name here.
         return new self(
-            $class->attrGroups, $newNode->args, $class->extends, $class->implements,
+            $class->attrGroups, $class->flags, $newNode->args, $class->extends, $class->implements,
             $class->stmts, $newNode->getAttributes()
         );
     }
@@ -63,6 +66,6 @@ class PrintableNewAnonClassNode extends Expr {
     }
 
     public function getSubNodeNames(): array {
-        return ['attrGroups', 'args', 'extends', 'implements', 'stmts'];
+        return ['attrGroups', 'flags', 'args', 'extends', 'implements', 'stmts'];
     }
 }
diff --git a/lib/PhpParser/Lexer/Emulative.php b/lib/PhpParser/Lexer/Emulative.php
index 054cc734..8993144d 100644
--- a/lib/PhpParser/Lexer/Emulative.php
+++ b/lib/PhpParser/Lexer/Emulative.php
@@ -85,6 +85,10 @@ class Emulative extends Lexer {
             return;
         }
 
+        if ($errorHandler === null) {
+            $errorHandler = new ErrorHandler\Throwing();
+        }
+
         $this->patches = [];
         foreach ($emulators as $emulator) {
             $code = $emulator->preprocessCode($code, $this->patches);
diff --git a/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php b/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
index 197f5052..9803f996 100644
--- a/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
+++ b/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php
@@ -45,7 +45,7 @@ abstract class KeywordEmulator extends TokenEmulator {
 
     public function reverseEmulate(string $code, array $tokens): array {
         $keywordToken = $this->getKeywordToken();
-        foreach ($tokens as $i => $token) {
+        foreach ($tokens as $token) {
             if ($token->id === $keywordToken) {
                 $token->id = \T_STRING;
             }
diff --git a/lib/PhpParser/Node/Expr/ArrowFunction.php b/lib/PhpParser/Node/Expr/ArrowFunction.php
index 98e24a51..f9b4ec36 100644
--- a/lib/PhpParser/Node/Expr/ArrowFunction.php
+++ b/lib/PhpParser/Node/Expr/ArrowFunction.php
@@ -30,7 +30,7 @@ class ArrowFunction extends Expr implements FunctionLike {
      *     static?: bool,
      *     byRef?: bool,
      *     params?: Node\Param[],
-     *     returnType?: null|string|Node\Identifier|Node\Name|Node\ComplexType,
+     *     returnType?: null|Node\Identifier|Node\Name|Node\ComplexType,
      *     attrGroups?: Node\AttributeGroup[]
      * } $subNodes Array of the following subnodes:
      *             'expr'                  : Expression body
@@ -46,8 +46,7 @@ class ArrowFunction extends Expr implements FunctionLike {
         $this->static = $subNodes['static'] ?? false;
         $this->byRef = $subNodes['byRef'] ?? false;
         $this->params = $subNodes['params'] ?? [];
-        $returnType = $subNodes['returnType'] ?? null;
-        $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
+        $this->returnType = $subNodes['returnType'] ?? null;
         $this->expr = $subNodes['expr'];
         $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
diff --git a/lib/PhpParser/Node/Expr/Closure.php b/lib/PhpParser/Node/Expr/Closure.php
index ee257d49..ddb4e0b7 100644
--- a/lib/PhpParser/Node/Expr/Closure.php
+++ b/lib/PhpParser/Node/Expr/Closure.php
@@ -31,7 +31,7 @@ class Closure extends Expr implements FunctionLike {
      *     byRef?: bool,
      *     params?: Node\Param[],
      *     uses?: ClosureUse[],
-     *     returnType?: null|string|Node\Identifier|Node\Name|Node\ComplexType,
+     *     returnType?: null|Node\Identifier|Node\Name|Node\ComplexType,
      *     stmts?: Node\Stmt[],
      *     attrGroups?: Node\AttributeGroup[],
      * } $subNodes Array of the following optional subnodes:
@@ -50,8 +50,7 @@ class Closure extends Expr implements FunctionLike {
         $this->byRef = $subNodes['byRef'] ?? false;
         $this->params = $subNodes['params'] ?? [];
         $this->uses = $subNodes['uses'] ?? [];
-        $returnType = $subNodes['returnType'] ?? null;
-        $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
+        $this->returnType = $subNodes['returnType'] ?? null;
         $this->stmts = $subNodes['stmts'] ?? [];
         $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
diff --git a/lib/PhpParser/Node/Name.php b/lib/PhpParser/Node/Name.php
index 07bcbfd6..e5a2ae0d 100644
--- a/lib/PhpParser/Node/Name.php
+++ b/lib/PhpParser/Node/Name.php
@@ -5,8 +5,8 @@ namespace PhpParser\Node;
 use PhpParser\NodeAbstract;
 
 class Name extends NodeAbstract {
-    /** @var string[] Parts of the name */
-    public $parts;
+    /** @var string Name as string */
+    public $name;
 
     /** @var array<string, bool> */
     private static $specialClassNames = [
@@ -23,11 +23,20 @@ class Name extends NodeAbstract {
      */
     final public function __construct($name, array $attributes = []) {
         $this->attributes = $attributes;
-        $this->parts = self::prepareName($name);
+        $this->name = self::prepareName($name);
     }
 
     public function getSubNodeNames(): array {
-        return ['parts'];
+        return ['name'];
+    }
+
+    /**
+     * Get parts of name (split by the namespace separator).
+     *
+     * @return string[] Parts of name
+     */
+    public function getParts(): array {
+        return \explode('\\', $this->name);
     }
 
     /**
@@ -36,7 +45,10 @@ class Name extends NodeAbstract {
      * @return string First part of the name
      */
     public function getFirst(): string {
-        return $this->parts[0];
+        if (false !== $pos = \strpos($this->name, '\\')) {
+            return \substr($this->name, 0, $pos);
+        }
+        return $this->name;
     }
 
     /**
@@ -45,7 +57,10 @@ class Name extends NodeAbstract {
      * @return string Last part of the name
      */
     public function getLast(): string {
-        return $this->parts[count($this->parts) - 1];
+        if (false !== $pos = \strrpos($this->name, '\\')) {
+            return \substr($this->name, $pos + 1);
+        }
+        return $this->name;
     }
 
     /**
@@ -54,7 +69,7 @@ class Name extends NodeAbstract {
      * @return bool Whether the name is unqualified
      */
     public function isUnqualified(): bool {
-        return 1 === count($this->parts);
+        return false === \strpos($this->name, '\\');
     }
 
     /**
@@ -63,7 +78,7 @@ class Name extends NodeAbstract {
      * @return bool Whether the name is qualified
      */
     public function isQualified(): bool {
-        return 1 < count($this->parts);
+        return false !== \strpos($this->name, '\\');
     }
 
     /**
@@ -91,7 +106,7 @@ class Name extends NodeAbstract {
      * @return string String representation
      */
     public function toString(): string {
-        return implode('\\', $this->parts);
+        return $this->name;
     }
 
     /**
@@ -111,7 +126,7 @@ class Name extends NodeAbstract {
      * @return string Lowercased string representation
      */
     public function toLowerString(): string {
-        return strtolower(implode('\\', $this->parts));
+        return strtolower($this->name);
     }
 
     /**
@@ -120,8 +135,7 @@ class Name extends NodeAbstract {
      * @return bool Whether identifier is a special class name
      */
     public function isSpecialClassName(): bool {
-        return count($this->parts) === 1
-            && isset(self::$specialClassNames[strtolower($this->parts[0])]);
+        return isset(self::$specialClassNames[strtolower($this->name)]);
     }
 
     /**
@@ -131,7 +145,7 @@ class Name extends NodeAbstract {
      * @return string String representation
      */
     public function __toString(): string {
-        return implode('\\', $this->parts);
+        return $this->name;
     }
 
     /**
@@ -151,7 +165,16 @@ class Name extends NodeAbstract {
      * @return static|null Sliced name
      */
     public function slice(int $offset, ?int $length = null) {
-        $numParts = count($this->parts);
+        if ($offset === 1 && $length === null) {
+            // Short-circuit the common case.
+            if (false !== $pos = \strpos($this->name, '\\')) {
+                return new static(\substr($this->name, $pos + 1));
+            }
+            return null;
+        }
+
+        $parts = \explode('\\', $this->name);
+        $numParts = \count($parts);
 
         $realOffset = $offset < 0 ? $offset + $numParts : $offset;
         if ($realOffset < 0 || $realOffset > $numParts) {
@@ -172,7 +195,7 @@ class Name extends NodeAbstract {
             return null;
         }
 
-        return new static(array_slice($this->parts, $realOffset, $realLength), $this->attributes);
+        return new static(array_slice($parts, $realOffset, $realLength), $this->attributes);
     }
 
     /**
@@ -197,42 +220,42 @@ class Name extends NodeAbstract {
             return null;
         }
         if (null === $name1) {
-            return new static(self::prepareName($name2), $attributes);
+            return new static($name2, $attributes);
         }
         if (null === $name2) {
-            return new static(self::prepareName($name1), $attributes);
+            return new static($name1, $attributes);
         } else {
             return new static(
-                array_merge(self::prepareName($name1), self::prepareName($name2)), $attributes
+                self::prepareName($name1) . '\\' . self::prepareName($name2), $attributes
             );
         }
     }
 
     /**
      * Prepares a (string, array or Name node) name for use in name changing methods by converting
-     * it to an array.
+     * it to a string.
      *
      * @param string|string[]|self $name Name to prepare
      *
-     * @return string[] Prepared name
+     * @return string Prepared name
      */
-    private static function prepareName($name): array {
+    private static function prepareName($name): string {
         if (\is_string($name)) {
             if ('' === $name) {
                 throw new \InvalidArgumentException('Name cannot be empty');
             }
 
-            return explode('\\', $name);
+            return $name;
         }
         if (\is_array($name)) {
             if (empty($name)) {
                 throw new \InvalidArgumentException('Name cannot be empty');
             }
 
-            return $name;
+            return implode('\\', $name);
         }
         if ($name instanceof self) {
-            return $name->parts;
+            return $name->name;
         }
 
         throw new \InvalidArgumentException(
diff --git a/lib/PhpParser/Node/NullableType.php b/lib/PhpParser/Node/NullableType.php
index e86d0974..847b6573 100644
--- a/lib/PhpParser/Node/NullableType.php
+++ b/lib/PhpParser/Node/NullableType.php
@@ -2,6 +2,8 @@
 
 namespace PhpParser\Node;
 
+use PhpParser\Node;
+
 class NullableType extends ComplexType {
     /** @var Identifier|Name Type */
     public $type;
@@ -9,12 +11,12 @@ class NullableType extends ComplexType {
     /**
      * Constructs a nullable type (wrapping another type).
      *
-     * @param string|Identifier|Name $type       Type
+     * @param Identifier|Name $type Type
      * @param array<string, mixed> $attributes Additional attributes
      */
-    public function __construct($type, array $attributes = []) {
+    public function __construct(Node $type, array $attributes = []) {
         $this->attributes = $attributes;
-        $this->type = \is_string($type) ? new Identifier($type) : $type;
+        $this->type = $type;
     }
 
     public function getSubNodeNames(): array {
diff --git a/lib/PhpParser/Node/Param.php b/lib/PhpParser/Node/Param.php
index ef110531..0732c574 100644
--- a/lib/PhpParser/Node/Param.php
+++ b/lib/PhpParser/Node/Param.php
@@ -3,6 +3,7 @@
 namespace PhpParser\Node;
 
 use PhpParser\Modifiers;
+use PhpParser\Node;
 use PhpParser\NodeAbstract;
 
 class Param extends NodeAbstract {
@@ -26,7 +27,7 @@ class Param extends NodeAbstract {
      *
      * @param Expr\Variable|Expr\Error                $var        Parameter variable
      * @param null|Expr                               $default    Default value
-     * @param null|string|Identifier|Name|ComplexType $type       Type declaration
+     * @param null|Identifier|Name|ComplexType $type Type declaration
      * @param bool                                    $byRef      Whether is passed by reference
      * @param bool                                    $variadic   Whether this is a variadic argument
      * @param array<string, mixed> $attributes Additional attributes
@@ -34,14 +35,14 @@ class Param extends NodeAbstract {
      * @param list<AttributeGroup> $attrGroups PHP attribute groups
      */
     public function __construct(
-        $var, ?Expr $default = null, $type = null,
+        $var, ?Expr $default = null, ?Node $type = null,
         bool $byRef = false, bool $variadic = false,
         array $attributes = [],
         int $flags = 0,
         array $attrGroups = []
     ) {
         $this->attributes = $attributes;
-        $this->type = \is_string($type) ? new Identifier($type) : $type;
+        $this->type = $type;
         $this->byRef = $byRef;
         $this->variadic = $variadic;
         $this->var = $var;
diff --git a/lib/PhpParser/Node/Stmt/ClassConst.php b/lib/PhpParser/Node/Stmt/ClassConst.php
index 8b05980c..a5e467ab 100644
--- a/lib/PhpParser/Node/Stmt/ClassConst.php
+++ b/lib/PhpParser/Node/Stmt/ClassConst.php
@@ -10,31 +10,36 @@ class ClassConst extends Node\Stmt {
     public $flags;
     /** @var Node\Const_[] Constant declarations */
     public $consts;
-    /** @var Node\AttributeGroup[] */
+    /** @var Node\AttributeGroup[] PHP attribute groups */
     public $attrGroups;
+    /** @var Node\Identifier|Node\Name|Node\ComplexType|null Type declaration */
+    public $type;
 
     /**
      * Constructs a class const list node.
      *
-     * @param Node\Const_[]         $consts     Constant declarations
-     * @param int                   $flags      Modifiers
+     * @param Node\Const_[] $consts Constant declarations
+     * @param int $flags Modifiers
      * @param array<string, mixed> $attributes Additional attributes
      * @param list<Node\AttributeGroup> $attrGroups PHP attribute groups
+     * @param null|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration
      */
     public function __construct(
         array $consts,
         int $flags = 0,
         array $attributes = [],
-        array $attrGroups = []
+        array $attrGroups = [],
+        ?Node $type = null
     ) {
         $this->attributes = $attributes;
         $this->flags = $flags;
         $this->consts = $consts;
         $this->attrGroups = $attrGroups;
+        $this->type = $type;
     }
 
     public function getSubNodeNames(): array {
-        return ['attrGroups', 'flags', 'consts'];
+        return ['attrGroups', 'flags', 'type', 'consts'];
     }
 
     /**
diff --git a/lib/PhpParser/Node/Stmt/ClassMethod.php b/lib/PhpParser/Node/Stmt/ClassMethod.php
index 3cadfd86..aa6424b6 100644
--- a/lib/PhpParser/Node/Stmt/ClassMethod.php
+++ b/lib/PhpParser/Node/Stmt/ClassMethod.php
@@ -51,7 +51,7 @@ class ClassMethod extends Node\Stmt implements FunctionLike {
      *     flags?: int,
      *     byRef?: bool,
      *     params?: Node\Param[],
-     *     returnType?: null|string|Node\Identifier|Node\Name|Node\ComplexType,
+     *     returnType?: null|Node\Identifier|Node\Name|Node\ComplexType,
      *     stmts?: Node\Stmt[]|null,
      *     attrGroups?: Node\AttributeGroup[],
      * } $subNodes Array of the following optional subnodes:
@@ -69,8 +69,7 @@ class ClassMethod extends Node\Stmt implements FunctionLike {
         $this->byRef = $subNodes['byRef'] ?? false;
         $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
         $this->params = $subNodes['params'] ?? [];
-        $returnType = $subNodes['returnType'] ?? null;
-        $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
+        $this->returnType = $subNodes['returnType'] ?? null;
         $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
         $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
diff --git a/lib/PhpParser/Node/Stmt/Class_.php b/lib/PhpParser/Node/Stmt/Class_.php
index 98bf9fd7..71196065 100644
--- a/lib/PhpParser/Node/Stmt/Class_.php
+++ b/lib/PhpParser/Node/Stmt/Class_.php
@@ -2,7 +2,6 @@
 
 namespace PhpParser\Node\Stmt;
 
-use PhpParser\Error;
 use PhpParser\Modifiers;
 use PhpParser\Node;
 
diff --git a/lib/PhpParser/Node/Stmt/Function_.php b/lib/PhpParser/Node/Stmt/Function_.php
index 8948e211..feb5edfe 100644
--- a/lib/PhpParser/Node/Stmt/Function_.php
+++ b/lib/PhpParser/Node/Stmt/Function_.php
@@ -29,7 +29,7 @@ class Function_ extends Node\Stmt implements FunctionLike {
      * @param array{
      *     byRef?: bool,
      *     params?: Node\Param[],
-     *     returnType?: null|string|Node\Identifier|Node\Name|Node\ComplexType,
+     *     returnType?: null|Node\Identifier|Node\Name|Node\ComplexType,
      *     stmts?: Node\Stmt[],
      *     attrGroups?: Node\AttributeGroup[],
      * } $subNodes Array of the following optional subnodes:
@@ -45,8 +45,7 @@ class Function_ extends Node\Stmt implements FunctionLike {
         $this->byRef = $subNodes['byRef'] ?? false;
         $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
         $this->params = $subNodes['params'] ?? [];
-        $returnType = $subNodes['returnType'] ?? null;
-        $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
+        $this->returnType = $subNodes['returnType'] ?? null;
         $this->stmts = $subNodes['stmts'] ?? [];
         $this->attrGroups = $subNodes['attrGroups'] ?? [];
     }
diff --git a/lib/PhpParser/Node/Stmt/Property.php b/lib/PhpParser/Node/Stmt/Property.php
index 279207fd..5d668274 100644
--- a/lib/PhpParser/Node/Stmt/Property.php
+++ b/lib/PhpParser/Node/Stmt/Property.php
@@ -25,14 +25,14 @@ class Property extends Node\Stmt {
      * @param int                                     $flags      Modifiers
      * @param PropertyItem[]                      $props      Properties
      * @param array<string, mixed> $attributes Additional attributes
-     * @param null|string|Identifier|Name|ComplexType $type       Type declaration
+     * @param null|Identifier|Name|ComplexType $type Type declaration
      * @param Node\AttributeGroup[]                   $attrGroups PHP attribute groups
      */
-    public function __construct(int $flags, array $props, array $attributes = [], $type = null, array $attrGroups = []) {
+    public function __construct(int $flags, array $props, array $attributes = [], ?Node $type = null, array $attrGroups = []) {
         $this->attributes = $attributes;
         $this->flags = $flags;
         $this->props = $props;
-        $this->type = \is_string($type) ? new Identifier($type) : $type;
+        $this->type = $type;
         $this->attrGroups = $attrGroups;
     }
 
diff --git a/lib/PhpParser/Node/UseItem.php b/lib/PhpParser/Node/UseItem.php
index 8c8fb065..c0b36e00 100644
--- a/lib/PhpParser/Node/UseItem.php
+++ b/lib/PhpParser/Node/UseItem.php
@@ -3,7 +3,6 @@
 namespace PhpParser\Node;
 
 use PhpParser\Node;
-use PhpParser\Node\Identifier;
 use PhpParser\Node\Stmt\Use_;
 
 class UseItem extends Node\Stmt {
diff --git a/lib/PhpParser/NodeDumper.php b/lib/PhpParser/NodeDumper.php
index 753f767c..a83dc293 100644
--- a/lib/PhpParser/NodeDumper.php
+++ b/lib/PhpParser/NodeDumper.php
@@ -3,7 +3,6 @@
 namespace PhpParser;
 
 use PhpParser\Node\Expr\Include_;
-use PhpParser\Node\Stmt\Class_;
 use PhpParser\Node\Stmt\GroupUse;
 use PhpParser\Node\Stmt\Use_;
 use PhpParser\Node\UseItem;
diff --git a/lib/PhpParser/NodeTraverser.php b/lib/PhpParser/NodeTraverser.php
index b338e981..c68be122 100644
--- a/lib/PhpParser/NodeTraverser.php
+++ b/lib/PhpParser/NodeTraverser.php
@@ -4,39 +4,24 @@ namespace PhpParser;
 
 class NodeTraverser implements NodeTraverserInterface {
     /**
-     * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes
-     * of the current node will not be traversed for any visitors.
-     *
-     * For subsequent visitors enterNode() will still be called on the current
-     * node and leaveNode() will also be invoked for the current node.
+     * @deprecated Use NodeVisitor::DONT_TRAVERSE_CHILDREN instead.
      */
-    public const DONT_TRAVERSE_CHILDREN = 1;
+    public const DONT_TRAVERSE_CHILDREN = NodeVisitor::DONT_TRAVERSE_CHILDREN;
 
     /**
-     * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns
-     * STOP_TRAVERSAL, traversal is aborted.
-     *
-     * The afterTraverse() method will still be invoked.
+     * @deprecated Use NodeVisitor::STOP_TRAVERSAL instead.
      */
-    public const STOP_TRAVERSAL = 2;
+    public const STOP_TRAVERSAL = NodeVisitor::STOP_TRAVERSAL;
 
     /**
-     * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs
-     * in an array, it will be removed from the array.
-     *
-     * For subsequent visitors leaveNode() will still be invoked for the
-     * removed node.
+     * @deprecated Use NodeVisitor::REMOVE_NODE instead.
      */
-    public const REMOVE_NODE = 3;
+    public const REMOVE_NODE = NodeVisitor::REMOVE_NODE;
 
     /**
-     * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes
-     * of the current node will not be traversed for any visitors.
-     *
-     * For subsequent visitors enterNode() will not be called as well.
-     * leaveNode() will be invoked for visitors that has enterNode() method invoked.
+     * @deprecated Use NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN instead.
      */
-    public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4;
+    public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN;
 
     /** @var list<NodeVisitor> Visitors */
     protected $visitors = [];
@@ -63,11 +48,9 @@ class NodeTraverser implements NodeTraverserInterface {
      * @param NodeVisitor $visitor
      */
     public function removeVisitor(NodeVisitor $visitor): void {
-        foreach ($this->visitors as $index => $storedVisitor) {
-            if ($storedVisitor === $visitor) {
-                unset($this->visitors[$index]);
-                break;
-            }
+        $index = array_search($visitor, $this->visitors);
+        if ($index !== false) {
+            array_splice($this->visitors, $index, 1, []);
         }
     }
 
@@ -89,7 +72,8 @@ class NodeTraverser implements NodeTraverserInterface {
 
         $nodes = $this->traverseArray($nodes);
 
-        foreach ($this->visitors as $visitor) {
+        for ($i = \count($this->visitors) - 1; $i >= 0; --$i) {
+            $visitor = $this->visitors[$i];
             if (null !== $return = $visitor->afterTraverse($nodes)) {
                 $nodes = $return;
             }
@@ -102,37 +86,37 @@ class NodeTraverser implements NodeTraverserInterface {
      * Recursively traverse a node.
      *
      * @param Node $node Node to traverse.
-     *
-     * @return Node Result of traversal (may be original node or new one)
      */
-    protected function traverseNode(Node $node): Node {
+    protected function traverseNode(Node $node): void {
         foreach ($node->getSubNodeNames() as $name) {
-            $subNode =& $node->$name;
+            $subNode = $node->$name;
 
             if (\is_array($subNode)) {
-                $subNode = $this->traverseArray($subNode);
+                $node->$name = $this->traverseArray($subNode);
                 if ($this->stopTraversal) {
                     break;
                 }
             } elseif ($subNode instanceof Node) {
                 $traverseChildren = true;
-                $breakVisitorIndex = null;
+                $visitorIndex = -1;
 
                 foreach ($this->visitors as $visitorIndex => $visitor) {
                     $return = $visitor->enterNode($subNode);
                     if (null !== $return) {
                         if ($return instanceof Node) {
                             $this->ensureReplacementReasonable($subNode, $return);
-                            $subNode = $return;
-                        } elseif (self::DONT_TRAVERSE_CHILDREN === $return) {
+                            $subNode = $node->$name = $return;
+                        } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
                             $traverseChildren = false;
-                        } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
+                        } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
                             $traverseChildren = false;
-                            $breakVisitorIndex = $visitorIndex;
                             break;
-                        } elseif (self::STOP_TRAVERSAL === $return) {
+                        } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
                             $this->stopTraversal = true;
                             break 2;
+                        } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+                            $node->$name = null;
+                            continue 2;
                         } else {
                             throw new \LogicException(
                                 'enterNode() returned invalid value of type ' . gettype($return)
@@ -142,22 +126,26 @@ class NodeTraverser implements NodeTraverserInterface {
                 }
 
                 if ($traverseChildren) {
-                    $subNode = $this->traverseNode($subNode);
+                    $this->traverseNode($subNode);
                     if ($this->stopTraversal) {
                         break;
                     }
                 }
 
-                foreach ($this->visitors as $visitorIndex => $visitor) {
+                for (; $visitorIndex >= 0; --$visitorIndex) {
+                    $visitor = $this->visitors[$visitorIndex];
                     $return = $visitor->leaveNode($subNode);
 
                     if (null !== $return) {
                         if ($return instanceof Node) {
                             $this->ensureReplacementReasonable($subNode, $return);
-                            $subNode = $return;
-                        } elseif (self::STOP_TRAVERSAL === $return) {
+                            $subNode = $node->$name = $return;
+                        } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
                             $this->stopTraversal = true;
                             break 2;
+                        } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+                            $node->$name = null;
+                            break;
                         } elseif (\is_array($return)) {
                             throw new \LogicException(
                                 'leaveNode() may only return an array ' .
@@ -169,15 +157,9 @@ class NodeTraverser implements NodeTraverserInterface {
                             );
                         }
                     }
-
-                    if ($breakVisitorIndex === $visitorIndex) {
-                        break;
-                    }
                 }
             }
         }
-
-        return $node;
     }
 
     /**
@@ -193,7 +175,7 @@ class NodeTraverser implements NodeTraverserInterface {
         foreach ($nodes as $i => &$node) {
             if ($node instanceof Node) {
                 $traverseChildren = true;
-                $breakVisitorIndex = null;
+                $visitorIndex = -1;
 
                 foreach ($this->visitors as $visitorIndex => $visitor) {
                     $return = $visitor->enterNode($node);
@@ -204,18 +186,20 @@ class NodeTraverser implements NodeTraverserInterface {
                         } elseif (\is_array($return)) {
                             $doNodes[] = [$i, $return];
                             continue 2;
-                        } elseif (self::REMOVE_NODE === $return) {
+                        } elseif (NodeVisitor::REMOVE_NODE === $return) {
                             $doNodes[] = [$i, []];
                             continue 2;
-                        } elseif (self::DONT_TRAVERSE_CHILDREN === $return) {
+                        } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) {
                             $traverseChildren = false;
-                        } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
+                        } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
                             $traverseChildren = false;
-                            $breakVisitorIndex = $visitorIndex;
                             break;
-                        } elseif (self::STOP_TRAVERSAL === $return) {
+                        } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
                             $this->stopTraversal = true;
                             break 2;
+                        } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+                            throw new \LogicException(
+                                'REPLACE_WITH_NULL can not be used if the parent structure is an array');
                         } else {
                             throw new \LogicException(
                                 'enterNode() returned invalid value of type ' . gettype($return)
@@ -225,13 +209,14 @@ class NodeTraverser implements NodeTraverserInterface {
                 }
 
                 if ($traverseChildren) {
-                    $node = $this->traverseNode($node);
+                    $this->traverseNode($node);
                     if ($this->stopTraversal) {
                         break;
                     }
                 }
 
-                foreach ($this->visitors as $visitorIndex => $visitor) {
+                for (; $visitorIndex >= 0; --$visitorIndex) {
+                    $visitor = $this->visitors[$visitorIndex];
                     $return = $visitor->leaveNode($node);
 
                     if (null !== $return) {
@@ -241,22 +226,21 @@ class NodeTraverser implements NodeTraverserInterface {
                         } elseif (\is_array($return)) {
                             $doNodes[] = [$i, $return];
                             break;
-                        } elseif (self::REMOVE_NODE === $return) {
+                        } elseif (NodeVisitor::REMOVE_NODE === $return) {
                             $doNodes[] = [$i, []];
                             break;
-                        } elseif (self::STOP_TRAVERSAL === $return) {
+                        } elseif (NodeVisitor::STOP_TRAVERSAL === $return) {
                             $this->stopTraversal = true;
                             break 2;
+                        } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) {
+                            throw new \LogicException(
+                                'REPLACE_WITH_NULL can not be used if the parent structure is an array');
                         } else {
                             throw new \LogicException(
                                 'leaveNode() returned invalid value of type ' . gettype($return)
                             );
                         }
                     }
-
-                    if ($breakVisitorIndex === $visitorIndex) {
-                        break;
-                    }
                 }
             } elseif (\is_array($node)) {
                 throw new \LogicException('Invalid node structure: Contains nested arrays');
diff --git a/lib/PhpParser/NodeVisitor.php b/lib/PhpParser/NodeVisitor.php
index 06c694bf..0ec4f7be 100644
--- a/lib/PhpParser/NodeVisitor.php
+++ b/lib/PhpParser/NodeVisitor.php
@@ -3,6 +3,48 @@
 namespace PhpParser;
 
 interface NodeVisitor {
+    /**
+     * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes
+     * of the current node will not be traversed for any visitors.
+     *
+     * For subsequent visitors enterNode() will still be called on the current
+     * node and leaveNode() will also be invoked for the current node.
+     */
+    public const DONT_TRAVERSE_CHILDREN = 1;
+
+    /**
+     * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns
+     * STOP_TRAVERSAL, traversal is aborted.
+     *
+     * The afterTraverse() method will still be invoked.
+     */
+    public const STOP_TRAVERSAL = 2;
+
+    /**
+     * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs
+     * in an array, it will be removed from the array.
+     *
+     * For subsequent visitors leaveNode() will still be invoked for the
+     * removed node.
+     */
+    public const REMOVE_NODE = 3;
+
+    /**
+     * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes
+     * of the current node will not be traversed for any visitors.
+     *
+     * For subsequent visitors enterNode() will not be called as well.
+     * leaveNode() will be invoked for visitors that has enterNode() method invoked.
+     */
+    public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4;
+
+    /**
+     * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns REPLACE_WITH_NULL,
+     * the node will be replaced with null. This is not a legal return value if the node is part
+     * of an array, rather than another node.
+     */
+    public const REPLACE_WITH_NULL = 5;
+
     /**
      * Called once before traversal.
      *
@@ -24,14 +66,16 @@ interface NodeVisitor {
      *        => $node stays as-is
      *  * array (of Nodes)
      *        => The return value is merged into the parent array (at the position of the $node)
-     *  * NodeTraverser::REMOVE_NODE
+     *  * NodeVisitor::REMOVE_NODE
      *        => $node is removed from the parent array
-     *  * NodeTraverser::DONT_TRAVERSE_CHILDREN
+     *  * NodeVisitor::REPLACE_WITH_NULL
+     *        => $node is replaced with null
+     *  * NodeVisitor::DONT_TRAVERSE_CHILDREN
      *        => Children of $node are not traversed. $node stays as-is
-     *  * NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN
+     *  * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN
      *        => Further visitors for the current node are skipped, and its children are not
      *           traversed. $node stays as-is.
-     *  * NodeTraverser::STOP_TRAVERSAL
+     *  * NodeVisitor::STOP_TRAVERSAL
      *        => Traversal is aborted. $node stays as-is
      *  * otherwise
      *        => $node is set to the return value
@@ -48,9 +92,11 @@ interface NodeVisitor {
      * Return value semantics:
      *  * null
      *        => $node stays as-is
-     *  * NodeTraverser::REMOVE_NODE
+     *  * NodeVisitor::REMOVE_NODE
      *        => $node is removed from the parent array
-     *  * NodeTraverser::STOP_TRAVERSAL
+     *  * NodeVisitor::REPLACE_WITH_NULL
+     *        => $node is replaced with null
+     *  * NodeVisitor::STOP_TRAVERSAL
      *        => Traversal is aborted. $node stays as-is
      *  * array (of Nodes)
      *        => The return value is merged into the parent array (at the position of the $node)
diff --git a/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php b/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php
index 2f7c101b..14731556 100644
--- a/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php
+++ b/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php
@@ -3,7 +3,7 @@
 namespace PhpParser\NodeVisitor;
 
 use PhpParser\Node;
-use PhpParser\NodeTraverser;
+use PhpParser\NodeVisitor;
 use PhpParser\NodeVisitorAbstract;
 
 /**
@@ -41,7 +41,7 @@ class FirstFindingVisitor extends NodeVisitorAbstract {
         $filterCallback = $this->filterCallback;
         if ($filterCallback($node)) {
             $this->foundNode = $node;
-            return NodeTraverser::STOP_TRAVERSAL;
+            return NodeVisitor::STOP_TRAVERSAL;
         }
 
         return null;
diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php
index f39511c7..7cb04710 100644
--- a/lib/PhpParser/Parser/Php7.php
+++ b/lib/PhpParser/Parser/Php7.php
@@ -160,16 +160,16 @@ class Php7 extends \PhpParser\ParserAbstract
     public const T_ATTRIBUTE = 395;
 
     protected $tokenToSymbolMapSize = 396;
-    protected $actionTableSize = 1252;
-    protected $gotoTableSize = 615;
+    protected $actionTableSize = 1260;
+    protected $gotoTableSize = 612;
 
     protected $invalidSymbol = 168;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 429;
-    protected $numNonLeafStates = 730;
+    protected $YY2TBLSTATE = 434;
+    protected $numNonLeafStates = 739;
 
     protected $symbolToName = array(
         "EOF",
@@ -386,248 +386,248 @@ class Php7 extends \PhpParser\ParserAbstract
     );
 
     protected $action = array(
-          132,  133,  134,  578,  135,  136,    0,  742,  743,  744,
-          137,   37,  476,  853, 1016,  854,-32766,-32766,-32766,-32767,
-        -32767,-32767,-32767,  101,  102,  103,  104,  105, 1100, 1101,
-         1102, 1099, 1098, 1097, 1103,  736,  735,-32766,  239,-32766,
+          133,  134,  135,  582,  136,  137,    0,  751,  752,  753,
+          138,   38,-32766,-32766,-32766,  151,-32766,-32766,-32766,-32767,
+        -32767,-32767,-32767,  102,  103,  104,  105,  106, 1111, 1112,
+         1113, 1110, 1109, 1108, 1114,  745,  744,-32766,-32766,-32766,
         -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
-        -32767, 1233,-32766,-32766,-32766,  745,-32766,-32766,-32766, -326,
-         -591, -588,  825,-32766,-32766,-32766,  979, -591, -588,  267,
-          138,  399,  749,  750,  751,  752, -192,-32766,  423,-32766,
-        -32766,-32766,-32766,-32766,-32766,  806,  753,  754,  755,  756,
-          757,  758,  759,  760,  761,  762,  782,  579,  783,  784,
-          785,  786,  774,  775,  340,  341,  777,  778,  763,  764,
-          765,  767,  768,  769,  351,  809,  810,  811,  812,  813,
-          580,  770,  771,  581,  582,  930,  794,  792,  793,  805,
-          789,  790,  826,    2,  583,  584,  788,  585,  586,  587,
-          588,  589,  590,  817,  477,-32766,-32766,-32766,  791,  591,
-          592, -191,  139,   19,  132,  133,  134,  578,  135,  136,
-         1049,  742,  743,  744,  137,   37,-32766,   34,-32766,-32766,
-        -32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766, -110, 1100,
-         1101, 1102, 1099, 1098, 1097, 1103, -270,-32766,   21,  736,
-          735,-32766,-32766,-32766,  980,  128,-32766,  932,-32766,-32766,
-        -32766,-32766,  106,  107,  108,  602,  271, 1310,  295,  745,
-         1092,   74,-32766, -326,-32766,-32766,-32766,  322,  109, -591,
-         -588, -591, -588,  267,  138,  399,  749,  750,  751,  752,
-         -192,  -85,  423,-32766,-32766,-32766,  352,  819,  126,  806,
-          753,  754,  755,  756,  757,  758,  759,  760,  761,  762,
-          782,  579,  783,  784,  785,  786,  774,  775,  340,  341,
-          777,  778,  763,  764,  765,  767,  768,  769,  351,  809,
-          810,  811,  812,  813,  580,  770,  771,  581,  582,  423,
-          794,  792,  793,  805,  789,  790,  817,  716,  583,  584,
-          788,  585,  586,  587,  588,  589,  590,  -85,   82,   83,
-           84,  238,  791,  591,  592, -191,  148,  766,  737,  738,
-          739,  740,  741,  821,  742,  743,  744,  779,  780,   36,
-          703,   85,   86,   87,   88,   89,   90,   91,   92,   93,
-           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-          104,  105,  106,  107,  108,  828,  271, 1294,  932,  375,
-          376,-32766,-32766,-32766, 1228, 1227, 1229,  608,  109,  417,
-          948,  949,  745, 1078,  288,  950,  103,  104,  105,  141,
-         1076,  944,-32766,  322,-32766,-32766,  746,  747,  748,  749,
-          750,  751,  752,  144, 1314,  815, 1339,  357, -542, 1340,
-          910, 1313,  806,  753,  754,  755,  756,  757,  758,  759,
-          760,  761,  762,  782,  804,  783,  784,  785,  786,  774,
-          775,  776,  803,  777,  778,  763,  764,  765,  767,  768,
-          769,  808,  809,  810,  811,  812,  813,  814,  770,  771,
-          772,  773, -545,  794,  792,  793,  805,  789,  790,  551,
-          251,  781,  787,  788,  795,  796,  798,  797,  799,  800,
-        -32766,-32766, -542, -542,  306,  791,  802,  801,   49,   50,
-           51,  507,   52,   53,  453,  454,  455, -542,   54,   55,
-         -110,   56, 1025,  900,  910, -110,  323, -110,  288, -548,
-          822, -542,  302,  377,  376, -110, -110, -110, -110, -110,
-         -110, -110, -110,  417,  308,  287, -545, -545, 1233, -364,
-         1266, -364, 1233,  827,  706,  150,   57,   58, 1254,   81,
-          320, -541,   59,  322,   60,  245,  246,   61,   62,   63,
-           64,   65,   66,   67,   68, -545,   27,  269,   69,  439,
-          508,-32766,  -16, -340, 1260, 1261,  509,-32766,  826,  335,
-          461,  462, 1258,   41,   24,  510,  336,  511,  912,  512,
-          910,  513,  701, 1025,  514,  515,  823,  900,-32766,   43,
-           44,  440,  372,  371,-32766,   45,  516, 1012, 1011, 1010,
-         1013,  363,  334, 1077, 1226, -541, -541,  728, 1219,  826,
-          518,  519,  520,  826, 1022,  386, 1025,   18,  826,  826,
-         -541, 1329,  522,  523,  365, 1247, 1248, 1249, 1250, 1244,
-         1245,  294, -547, -582, -541, -582, 1025, 1251, 1246,  287,
-         1224, 1228, 1227, 1229,  295,-32766,  369,   70,  910,-32766,
-        -32766,  318,  319,  322, -152, -152, -152,  910,  384, -110,
-         1022, 1024,  912,  900,-32766,  910,  701, 1025,-32766, -152,
-          853, -152,  854, -152, 1048, -152,  736,  735,  707, 1228,
-         1227, 1229, 1025,   35,  248,  370,  435,  708,   74,  295,
-          287,  436,   74,  437,  322,  711,  948,  949,  322,  438,
-          140,  517,  910,  284,  322,  280,  886,  944, -110, -110,
-         -110,   31,  110,  111,  112,  113,  114,  115,  116,  117,
-          118,  119,  120,  121,  122,  736,  735,  652,   25,  671,
-          672,  900,  718,  736,  735, -543,  948,  949,  912,  832,
-          900,  950,  701, -152,  149,  402,  151,  945,  900,  153,
-          373,  374,  378,  379, 1138, 1140,   47,  154,  155,  643,
-          644,  157,-32766,   32,  123, -540,   27,  124, 1226,  129,
-          130,  143,  -87,  158,  159,-32766,-32766,-32766,  826,-32766,
-          160,-32766, 1258,-32766,  161,  900,-32766,  285,  109, 1022,
-          -84,-32766,-32766,-32766,   -4,  910,  -78,-32766,-32766, -543,
-         -543,  -73,  -72,-32766,  414,  -71,  912,  -70,  -69,  -68,
-          701, 1025,-32766,  -67, -543,  965,  736,  735, 1219,  701,
-          296,  297, -540,  912,  -66, -300,   48,  701, -543, -540,
-         -540,  -65,  522,  523,  280, 1247, 1248, 1249, 1250, 1244,
-         1245,  -46,   73,  -18, -540,  147,  270, 1251, 1246,  125,
-          281,  717,  720,-32766,  909,  146,  926,   72, -540, 1226,
-          912, -296,  319,  322,  701,  276,-32766,-32766,-32766,  277,
-        -32766,  282,-32766,  283,-32766,  328,  286,-32766,  900,  289,
-          290,  145,-32766,-32766,-32766,  271, -540, -540,-32766,-32766,
-          298,  299,  -50,  681,-32766,  414, 1341,  817,  557,  694,
-          370, -540,  430,-32766,  826,  368,  659,  293,  675, 1107,
-        -32766,  948,  949,  303,  553, -540,  517,  641,  300,  127,
-          434,  521,  944, -110, -110, -110,  131,  653,  658,  674,
-           20,  301,-32766,  307, 1265,-32766, -505, 1267,  458,  928,
-           39, 1226,  487,   40,    9, -495,    7,  295,-32766,-32766,
-        -32766,   23,-32766,  912,-32766,    0,-32766,  701,   -4,-32766,
-          825,    0,  725,    0,-32766,-32766,-32766,    0,    0,-32766,
-        -32766,-32766,  910,    0,    0, 1226,-32766,  414,    0,    0,
-          367,    0,-32766,-32766,-32766,-32766,-32766,    0,-32766,    0,
-        -32766,    0,    0,-32766,    0,    0,    0,  563,-32766,-32766,
-        -32766,-32766,  606,    0,-32766,-32766,  726, 1226, 1255,  845,
-        -32766,  414,  910,  891,-32766,-32766,-32766,  989,-32766,-32766,
-        -32766,  966,-32766,  973,  963,-32766,  974,  889,  961,  482,
-        -32766,-32766,-32766,-32766, 1081, 1084,-32766,-32766, 1085, 1226,
-          570, 1082,-32766,  414, 1083, 1089,-32766,-32766,-32766,  837,
-        -32766,-32766,-32766, 1280,-32766,  900, 1298,-32766, 1332,  646,
-           33, -576,-32766,-32766,-32766, -575, -574, -548,-32766,-32766,
-         -547, -248, -248, -248,-32766,  414, -546,  370, -489,    1,
-           27,  269,   28,-32766,   29,   38,   42,   46,  948,  949,
-           71,   75,  826,  517,   76,  900, 1258,   77,  886,  944,
-         -110, -110, -110,   78,   79,   80,  142,  152,  156,  244,
-          324, -247, -247, -247,  352,  353,  354,  370,  355,  356,
-          722,  357,  358,  359,  360,  361,  362,  364,  948,  949,
-          912,  431, 1219,  517,  701, -248,  550,  317,  886,  944,
-         -110, -110, -110, -273, -271, -270,   12,  523,   27, 1247,
-         1248, 1249, 1250, 1244, 1245,   13,   14,   15,   17,  401,
-          826, 1251, 1246,  478, 1258,  479,-32766,  486,  489,  490,
-          912,   72, 1226,  887,  701, -247,  319,  322,  491,-32766,
-        -32766,-32766,  492,-32766,  496,-32766,  497,-32766,  498,  505,
-        -32766,  568,  688, 1237, 1178,-32766,-32766,-32766, 1256, 1051,
-         1219,-32766,-32766, 1050, 1031, 1214, 1027,-32766,  414, -275,
-         -102,   11,   16,   26,  292,  523,-32766, 1247, 1248, 1249,
-         1250, 1244, 1245,  400,  599,  603,  632,  693, 1182, 1251,
-         1246, 1232, 1179, 1311, 1259,  366,  702,  705,  709,   72,
-          710, -509,  712,  713,  319,  322,  714,  715,  719,  704,
-            0, 1336, 1338,  848,  847,  856,    0,  938,  981,  855,
-         1337,  937,  935,  936,  939, 1210,  919,  929,  917,  971,
-          972,  630, 1335, 1292, 1281, 1299, 1308,    0, 1195,    0,
-            0,  322
+        -32767, 1244,  837,-32766, 1321,  754,-32766,-32766,-32766,-32766,
+         -593,-32766,-32766,-32766,  104,  105,  106, -593, 1305,  265,
+          139,  403,  758,  759,  760,  761,  989,-32766,  428,-32766,
+        -32766,  -16,-32766,  242, 1026,  815,  762,  763,  764,  765,
+          766,  767,  768,  769,  770,  771,  791,  583,  792,  793,
+          794,  795,  783,  784,  344,  345,  786,  787,  772,  773,
+          774,  776,  777,  778,  355,  818,  819,  820,  821,  822,
+          584,  779,  780,  585,  586,-32766,  803,  801,  802,  814,
+          798,  799,  835,  826,  587,  588,  797,  589,  590,  591,
+          592,  593,  594,  826,  458,  459,  460, 1035,  800,  595,
+          596,  940,  140,    2,  133,  134,  135,  582,  136,  137,
+         1059,  751,  752,  753,  138,   38, -327, -110, -110, 1325,
+          290,   23, -110,-32766,-32766,-32766, 1324,   35, -110, 1111,
+         1112, 1113, 1110, 1109, 1108, 1114,  612,-32766,  129,  745,
+          744,  107,  108,  109,-32766,  274,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32766,  828,  990, -193,  145,  110,  298,  754,
+          836,   75,-32766,-32766,-32766, 1350,  142,  326, 1351, -593,
+          326, -593,  254,  265,  139,  403,  758,  759,  760,  761,
+           82, -271,  428,-32766,  326,-32766,-32766,-32766,-32766,  815,
+          762,  763,  764,  765,  766,  767,  768,  769,  770,  771,
+          791,  583,  792,  793,  794,  795,  783,  784,  344,  345,
+          786,  787,  772,  773,  774,  776,  777,  778,  355,  818,
+          819,  820,  821,  822,  584,  779,  780,  585,  586,  830,
+          803,  801,  802,  814,  798,  799,  712,  309,  587,  588,
+          797,  589,  590,  591,  592,  593,  594,  -78,   83,   84,
+           85,  -85,  800,  595,  596,  311,  149,  775,  746,  747,
+          748,  749,  750,  725,  751,  752,  753,  788,  789,   37,
+         -327,   86,   87,   88,   89,   90,   91,   92,   93,   94,
+           95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
+          105,  106,  107,  108,  109,  323,  274,  481,-32766,-32766,
+        -32766,  -58,-32766,-32766,-32766,  958,  959,  127,  110, -193,
+          960,  339,  754,-32766,-32766,-32766,  954,  -85,  291,-32766,
+         1087,-32766,-32766,-32766,-32766,-32766,  755,  756,  757,  758,
+          759,  760,  761, -192,-32766,  824,-32766,-32766,-32766, -366,
+          428, -366,  815,  762,  763,  764,  765,  766,  767,  768,
+          769,  770,  771,  791,  813,  792,  793,  794,  795,  783,
+          784,  785,  812,  786,  787,  772,  773,  774,  776,  777,
+          778,  817,  818,  819,  820,  821,  822,  823,  779,  780,
+          781,  782, -547,  803,  801,  802,  814,  798,  799,  340,
+          327,  790,  796,  797,  804,  805,  807,  806,  808,  809,
+         1032,  390,  606,    7,-32766,  800,  811,  810,   50,   51,
+           52,  512,   53,   54,  831, 1239, 1238, 1240,   55,   56,
+         -110,   57, 1035,  920, 1089, -110, 1035, -110,  291,  482,
+          745,  744,  305,  381,  380, -110, -110, -110, -110, -110,
+         -110, -110, -110,  422,  920,  283, -547, -547,  152,  290,
+          379,  380, 1244,  715,  466,  467,   58,   59,  369,   21,
+          422, -544,   60,  555,   61,  248,  249,   62,   63,   64,
+           65,   66,   67,   68,   69, -547,   28,  267,   70,  444,
+          513, 1103,  373, -341, 1271, 1272,  514, -192,  835,  154,
+          832, -543, 1269,   42,   25,  515,  388,  516,  241,  517,
+          920,  518,  298, 1237,  519,  520,  910,  920,  440,   44,
+           45,  445,  376,  375,-32766,   46,  521, 1022, 1021, 1020,
+         1023,  367,  338,  441, 1277, -544, -544,  910, 1230,  442,
+          523,  524,  525,  835, 1244,  835, 1035,  716, 1340, 1235,
+         -544,  155,  527,  528,-32766, 1258, 1259, 1260, 1261, 1255,
+         1256,  297, -550,  942, -544, -543, -543, 1262, 1257,  290,
+         1034, 1239, 1238, 1240,  298,  443, 1035,   71, 1265,  841,
+         -543,  321,  322,  326, -153, -153, -153,  920, 1239, 1238,
+         1240,  922, -549,  910, -543,  710,  942, -590,-32766, -153,
+          910, -153,  356, -153, -590, -153,  862, 1032,  863, 1088,
+           36,  251,  922,  737,  156,  374,  710,  717,  862, -584,
+          863, -584,   75,  158, -545,  835,  958,  959,  326, 1035,
+          -57,  522,  920,-32766,-32766,  361,  896,  954, -110, -110,
+         -110,   32,  111,  112,  113,  114,  115,  116,  117,  118,
+          119,  120,  121,  122,  123,  745,  744,  656,   26,  835,
+         -110, -110,  720,  745,  744, -110,   33,  834,  922,  124,
+          910, -110,  710, -153,  125,  922,  675,  676,  130,  710,
+        -32766,  150,  406,  131, 1149, 1151,   48,  144, -545, -545,
+          377,  378,-32766,  382,  383, -542,   28,  159, 1237,  920,
+          160,  298, 1058, -545,   75,-32766,-32766,-32766,  835,-32766,
+          326,-32766, 1269,-32766,  -87,  910,-32766, -545,  647,  648,
+          161,-32766,-32766,-32766,   -4,  920,  -84,-32766,-32766,  727,
+          162,  287,  163,-32766,  419, -301,  -78,  -73,  -72,  -71,
+          141,  287,-32766,  -70,  326,  975,  745,  744, 1230,  710,
+          299,  300,  -69,  -68,  -67, -297, -590,  -66, -590, -542,
+         -542,  -65,  527,  528,  -46, 1258, 1259, 1260, 1261, 1255,
+         1256,  -18,   74,  148, -542,  273,  284, 1262, 1257,  126,
+         -542,  726,  910,-32766,  729,  919,  147,   73, -542, 1237,
+          922,  690,  322,  326,  710,  279,-32766,-32766,-32766,  280,
+        -32766,  285,-32766,  286,-32766,  332,  288,-32766,  910,  289,
+          292,   49,-32766,-32766,-32766,  293,  274, 1032,-32766,-32766,
+          936,  110,  -50,  685,-32766,  419,  146,  691,  826,  701,
+          374,  703,  435,-32766, 1352,   20,  561,  296,  645, 1035,
+          835,  958,  959, 1118, -542, -542,  522,-32766,  692,  693,
+          557,  526,  954, -110, -110, -110,  132,  922,  834, -542,
+          463,  710,  283,  662,  657,-32766, 1239, 1238, 1240,  678,
+          304, 1237,  283, -542,   10,  301,  302,  492,-32766,-32766,
+        -32766,  663,-32766,  922,-32766,  679,-32766,  710,   -4,-32766,
+          372,  306, -507,  298,-32766,-32766,-32766, -578,  731,-32766,
+        -32766,-32766,  920,  303,  128, 1237,-32766,  419,  310,    0,
+          567,  955,-32766,-32766,-32766,-32766,-32766,    0,-32766,    0,
+        -32766,-32766,    0,-32766,    0, 1276,    0,    0,-32766,-32766,
+        -32766,-32766, 1278,    0,-32766,-32766, -497, 1237,    8,   24,
+        -32766,  419,  920,  371,-32766,-32766,-32766,  938,-32766,-32766,
+        -32766,  610,-32766, -577,   40,-32766,   41, -576,  734,  487,
+        -32766,-32766,-32766,-32766,  735,  854,-32766,-32766,  901, 1237,
+          574,  999,-32766,  419,  976,  983,-32766,-32766,-32766,  973,
+        -32766,-32766,-32766,  984,-32766,  910,  899,-32766,  971, 1092,
+         1095, 1096,-32766,-32766,-32766, 1093, 1094, 1100,-32766,-32766,
+         1266, -249, -249, -249,-32766,  419,  846,  374, 1291, 1309,
+           28,  267, 1343,-32766,  650, -274, -550, -549,  958,  959,
+         -548, -491,  835,  522,    1,  910, 1269,   29,  896,  954,
+         -110, -110, -110,   30,   39,   43,   47,   72,   76,   77,
+           78, -248, -248, -248,   79,   80,   81,  374,  143,  153,
+          897,  157,  247,  328,  356,  357,  358,  359,  958,  959,
+          922,  360, 1230,  522,  710, -249,  361,  362,  896,  954,
+         -110, -110, -110,  363,  364,  365,  366,  528,   28, 1258,
+         1259, 1260, 1261, 1255, 1256,  368,  436,  554, -511, -272,
+          835, 1262, 1257, -271, 1269,   13,-32766,   14,   15,   16,
+          922,   73, 1237, 1347,  710, -248,  322,  326,   18,-32766,
+        -32766,-32766,  405,-32766,  483,-32766,  484,-32766,  491,  494,
+        -32766,  495,  496,  497,  501,-32766,-32766,-32766,  502,  503,
+         1230,-32766,-32766,  510,  572,  696, 1248,-32766,  419, 1189,
+         1267, 1061, 1060, 1041, 1225,  528,-32766, 1258, 1259, 1260,
+         1261, 1255, 1256, 1037, -276, -102,   12,   17,   27, 1262,
+         1257,  295,  404,  603,  607,  636,  702, 1193, 1243,   73,
+           34, 1190, 1322,    0,  322,  326,  320,  370,  711,  714,
+          718,  719,  721,  722,  723,    0,  724,  728,  713,    0,
+         1349,  857,  856,  865,  948,  991,  864, 1348,  947,  945,
+          946,  949, 1221,  929,  939,  927,  981,  982,  634, 1346,
+         1303, 1292, 1310, 1319,    0, 1206,    0, 1270,    0,  326
     );
 
     protected $actionCheck = array(
             2,    3,    4,    5,    6,    7,    0,    9,   10,   11,
-           12,   13,   31,  106,    1,  108,    9,   10,   11,   44,
+           12,   13,    9,   10,   11,   14,    9,   10,   11,   44,
            45,   46,   47,   48,   49,   50,   51,   52,  116,  117,
-          118,  119,  120,  121,  122,   37,   38,   30,   14,   32,
+          118,  119,  120,  121,  122,   37,   38,   30,  116,   32,
            33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
-           43,    1,    9,   10,   11,   57,    9,   10,   11,    8,
-            1,    1,  155,    9,   10,   11,   31,    8,    8,   71,
-           72,   73,   74,   75,   76,   77,    8,   30,   80,   32,
-           33,   34,   35,   36,   30,   87,   88,   89,   90,   91,
+           43,    1,    1,    9,    1,   57,    9,   10,   11,  137,
+            1,    9,   10,   11,   50,   51,   52,    8,    1,   71,
+           72,   73,   74,   75,   76,   77,   31,   30,   80,   32,
+           33,   31,   30,   14,    1,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,    1,  128,  129,  130,  131,
-          132,  133,   82,    8,  136,  137,  138,  139,  140,  141,
-          142,  143,  144,   80,  163,    9,   10,   11,  150,  151,
-          152,    8,  154,    8,    2,    3,    4,    5,    6,    7,
-          162,    9,   10,   11,   12,   13,   30,    8,   32,   33,
-           34,   35,   36,   37,   38,    9,   10,   11,  128,  116,
-          117,  118,  119,  120,  121,  122,  162,  137,  101,   37,
-           38,    9,   10,   11,  159,    8,   30,  122,   32,   33,
-           34,   35,   53,   54,   55,    1,   57,    1,  158,   57,
-          123,  161,   30,  162,   32,   33,   34,  167,   69,  160,
-          160,  162,  162,   71,   72,   73,   74,   75,   76,   77,
-          162,   31,   80,    9,   10,   11,  161,   80,   14,   87,
+          122,  123,  124,  125,  126,  116,  128,  129,  130,  131,
+          132,  133,   82,   80,  136,  137,  138,  139,  140,  141,
+          142,  143,  144,   80,  129,  130,  131,  138,  150,  151,
+          152,    1,  154,    8,    2,    3,    4,    5,    6,    7,
+          162,    9,   10,   11,   12,   13,    8,  117,  118,    1,
+          161,    8,  122,    9,   10,   11,    8,    8,  128,  116,
+          117,  118,  119,  120,  121,  122,   51,  137,    8,   37,
+           38,   53,   54,   55,   30,   57,   32,   33,   34,   35,
+           36,   37,   38,   80,  159,    8,    8,   69,  158,   57,
+          159,  161,    9,   10,   11,   80,  163,  167,   83,  160,
+          167,  162,    8,   71,   72,   73,   74,   75,   76,   77,
+          163,  162,   80,   30,  167,   32,   33,   34,   35,   87,
            88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
            98,   99,  100,  101,  102,  103,  104,  105,  106,  107,
           108,  109,  110,  111,  112,  113,  114,  115,  116,  117,
-          118,  119,  120,  121,  122,  123,  124,  125,  126,   80,
-          128,  129,  130,  131,  132,  133,   80,  163,  136,  137,
-          138,  139,  140,  141,  142,  143,  144,   97,    9,   10,
-           11,   97,  150,  151,  152,  162,  154,    2,    3,    4,
-            5,    6,    7,  156,    9,   10,   11,   12,   13,   30,
-          163,   32,   33,   34,   35,   36,   37,   38,   39,   40,
+          118,  119,  120,  121,  122,  123,  124,  125,  126,  156,
+          128,  129,  130,  131,  132,  133,  163,    8,  136,  137,
+          138,  139,  140,  141,  142,  143,  144,   16,    9,   10,
+           11,   31,  150,  151,  152,    8,  154,    2,    3,    4,
+            5,    6,    7,  163,    9,   10,   11,   12,   13,   30,
+          162,   32,   33,   34,   35,   36,   37,   38,   39,   40,
            41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
-           51,   52,   53,   54,   55,    1,   57,    1,  122,  106,
-          107,    9,   10,   11,  155,  156,  157,   51,   69,  116,
-          117,  118,   57,  164,   30,  122,   50,   51,   52,  163,
-            1,  128,   30,  167,   32,   33,   71,   72,   73,   74,
-           75,   76,   77,    8,    1,   80,   80,  161,   70,   83,
-            1,    8,   87,   88,   89,   90,   91,   92,   93,   94,
+           51,   52,   53,   54,   55,    8,   57,   31,    9,   10,
+           11,   16,    9,   10,   11,  117,  118,   14,   69,  162,
+          122,    8,   57,    9,   10,   11,  128,   97,   30,   30,
+            1,   32,   33,   34,   35,   36,   71,   72,   73,   74,
+           75,   76,   77,    8,   30,   80,   32,   33,   34,  106,
+           80,  108,   87,   88,   89,   90,   91,   92,   93,   94,
            95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
           105,  106,  107,  108,  109,  110,  111,  112,  113,  114,
           115,  116,  117,  118,  119,  120,  121,  122,  123,  124,
-          125,  126,   70,  128,  129,  130,  131,  132,  133,   85,
-            8,  136,  137,  138,  139,  140,  141,  142,  143,  144,
-          116,    9,  134,  135,    8,  150,  151,  152,    2,    3,
-            4,    5,    6,    7,  129,  130,  131,  149,   12,   13,
-          101,   15,  138,   84,    1,  106,   70,  108,   30,  161,
-           80,  163,  113,  106,  107,  116,  117,  118,  119,  120,
-          121,  122,  123,  116,    8,  161,  134,  135,    1,  106,
-          146,  108,    1,  159,   31,   14,   50,   51,    1,  163,
-            8,   70,   56,  167,   58,   59,   60,   61,   62,   63,
+          125,  126,   70,  128,  129,  130,  131,  132,  133,    8,
+           70,  136,  137,  138,  139,  140,  141,  142,  143,  144,
+          116,  106,    1,  108,  116,  150,  151,  152,    2,    3,
+            4,    5,    6,    7,   80,  155,  156,  157,   12,   13,
+          101,   15,  138,    1,  164,  106,  138,  108,   30,  163,
+           37,   38,  113,  106,  107,  116,  117,  118,  119,  120,
+          121,  122,  123,  116,    1,  161,  134,  135,   14,  161,
+          106,  107,    1,   31,  134,  135,   50,   51,    8,  101,
+          116,   70,   56,   85,   58,   59,   60,   61,   62,   63,
            64,   65,   66,   67,   68,  163,   70,   71,   72,   73,
-           74,  116,   31,  164,   78,   79,   80,  116,   82,    8,
-          134,  135,   86,   87,   88,   89,    8,   91,  159,   93,
-            1,   95,  163,  138,   98,   99,  156,   84,  137,  103,
+           74,  123,    8,  164,   78,   79,   80,  162,   82,   14,
+          156,   70,   86,   87,   88,   89,    8,   91,   97,   93,
+            1,   95,  158,   80,   98,   99,   84,    1,    8,  103,
           104,  105,  106,  107,  116,  109,  110,  119,  120,  121,
-          122,  115,  116,  159,   80,  134,  135,  163,  122,   82,
-          124,  125,  126,   82,  116,  106,  138,  108,   82,   82,
-          149,   85,  136,  137,    8,  139,  140,  141,  142,  143,
-          144,  145,  161,  160,  163,  162,  138,  151,  152,  161,
-          116,  155,  156,  157,  158,  116,    8,  161,    1,    9,
-           10,  165,  166,  167,   75,   76,   77,    1,    8,  128,
-          116,  137,  159,   84,  137,    1,  163,  138,  137,   90,
-          106,   92,  108,   94,    1,   96,   37,   38,   31,  155,
-          156,  157,  138,  147,  148,  106,    8,   31,  161,  158,
-          161,    8,  161,    8,  167,   31,  117,  118,  167,    8,
-          163,  122,    1,   30,  167,  161,  127,  128,  129,  130,
+          122,  115,  116,    8,  146,  134,  135,   84,  122,    8,
+          124,  125,  126,   82,    1,   82,  138,   31,   85,  116,
+          149,   14,  136,  137,  116,  139,  140,  141,  142,  143,
+          144,  145,  161,  122,  163,  134,  135,  151,  152,  161,
+          137,  155,  156,  157,  158,    8,  138,  161,    1,    8,
+          149,  165,  166,  167,   75,   76,   77,    1,  155,  156,
+          157,  159,  161,   84,  163,  163,  122,    1,  137,   90,
+           84,   92,  161,   94,    8,   96,  106,  116,  108,  159,
+          147,  148,  159,  163,   14,  106,  163,   31,  106,  160,
+          108,  162,  161,   14,   70,   82,  117,  118,  167,  138,
+           16,  122,    1,    9,   10,  161,  127,  128,  129,  130,
           131,   16,   17,   18,   19,   20,   21,   22,   23,   24,
-           25,   26,   27,   28,   29,   37,   38,   75,   76,   75,
-           76,   84,   31,   37,   38,   70,  117,  118,  159,    8,
-           84,  122,  163,  164,  101,  102,   14,  128,   84,   14,
-          106,  107,  106,  107,   59,   60,   70,   14,   14,  111,
-          112,   14,   74,   14,   16,   70,   70,   16,   80,   16,
-           16,   16,   31,   16,   16,   87,   88,   89,   82,   91,
-           16,   93,   86,   95,   16,   84,   98,   37,   69,  116,
-           31,  103,  104,  105,    0,    1,   31,  109,  110,  134,
-          135,   31,   31,  115,  116,   31,  159,   31,   31,   31,
-          163,  138,  124,   31,  149,  159,   37,   38,  122,  163,
-          134,  135,   70,  159,   31,   35,   70,  163,  163,  134,
-          135,   31,  136,  137,  161,  139,  140,  141,  142,  143,
+           25,   26,   27,   28,   29,   37,   38,   75,   76,   82,
+          117,  118,   31,   37,   38,  122,   14,  155,  159,   16,
+           84,  128,  163,  164,   16,  159,   75,   76,   16,  163,
+          137,  101,  102,   16,   59,   60,   70,   16,  134,  135,
+          106,  107,   74,  106,  107,   70,   70,   16,   80,    1,
+           16,  158,    1,  149,  161,   87,   88,   89,   82,   91,
+          167,   93,   86,   95,   31,   84,   98,  163,  111,  112,
+           16,  103,  104,  105,    0,    1,   31,  109,  110,   31,
+           16,   30,   16,  115,  116,   35,   31,   31,   31,   31,
+          163,   30,  124,   31,  167,  159,   37,   38,  122,  163,
+          134,  135,   31,   31,   31,   35,  160,   31,  162,  134,
+          135,   31,  136,  137,   31,  139,  140,  141,  142,  143,
           144,   31,  154,   31,  149,   31,   31,  151,  152,  163,
-           31,   31,   31,   74,   31,   31,   38,  161,  163,   80,
-          159,   35,  166,  167,  163,   35,   87,   88,   89,   35,
+           70,   31,   84,   74,   31,   31,   31,  161,  163,   80,
+          159,   80,  166,  167,  163,   35,   87,   88,   89,   35,
            91,   35,   93,   35,   95,   35,   37,   98,   84,   37,
-           37,   70,  103,  104,  105,   57,  134,  135,  109,  110,
-          134,  135,   31,   77,  115,  116,   83,   80,   89,   92,
-          106,  149,  108,  124,   82,  149,  100,  113,  100,   82,
-           85,  117,  118,  114,   85,  163,  122,  113,  132,  163,
-          128,  127,  128,  129,  130,  131,   31,   90,   96,   94,
-           97,  133,  137,  132,  146,   74,  149,  146,   97,  154,
-          159,   80,   97,  159,  150,  149,  149,  158,   87,   88,
-           89,  149,   91,  159,   93,   -1,   95,  163,  164,   98,
-          155,   -1,  159,   -1,  103,  104,  105,   -1,   -1,   74,
-          109,  110,    1,   -1,   -1,   80,  115,  116,   -1,   -1,
-          149,   -1,   87,   88,   89,  124,   91,   -1,   93,   -1,
-           95,   -1,   -1,   98,   -1,   -1,   -1,  153,  103,  104,
-          105,   74,  153,   -1,  109,  110,  159,   80,  160,  159,
-          115,  116,    1,  159,   87,   88,   89,  159,   91,  124,
-           93,  159,   95,  159,  159,   98,  159,  159,  159,  102,
+           37,   70,  103,  104,  105,   37,   57,  116,  109,  110,
+           38,   69,   31,   77,  115,  116,   70,  116,   80,   80,
+          106,   92,  108,  124,   83,   97,   89,  113,  113,  138,
+           82,  117,  118,   82,  134,  135,  122,   85,  137,  138,
+           85,  127,  128,  129,  130,  131,   31,  159,  155,  149,
+           97,  163,  161,   96,   90,   74,  155,  156,  157,   94,
+          133,   80,  161,  163,  150,  134,  135,   97,   87,   88,
+           89,  100,   91,  159,   93,  100,   95,  163,  164,   98,
+          149,  114,  149,  158,  103,  104,  105,  161,  164,   74,
+          109,  110,    1,  132,  163,   80,  115,  116,  132,   -1,
+          153,  128,   87,   88,   89,  124,   91,   -1,   93,   -1,
+           95,  137,   -1,   98,   -1,  146,   -1,   -1,  103,  104,
+          105,   74,  146,   -1,  109,  110,  149,   80,  149,  149,
+          115,  116,    1,  149,   87,   88,   89,  154,   91,  124,
+           93,  153,   95,  161,  159,   98,  159,  161,  159,  102,
           103,  104,  105,   74,  159,  159,  109,  110,  159,   80,
-           81,  159,  115,  116,  159,  159,   87,   88,   89,  160,
-           91,  124,   93,  160,   95,   84,  160,   98,  160,  160,
-          163,  161,  103,  104,  105,  161,  161,  161,  109,  110,
-          161,  100,  101,  102,  115,  116,  161,  106,  161,  161,
-           70,   71,  161,  124,  161,  161,  161,  161,  117,  118,
+           81,  159,  115,  116,  159,  159,   87,   88,   89,  159,
+           91,  124,   93,  159,   95,   84,  159,   98,  159,  159,
+          159,  159,  103,  104,  105,  159,  159,  159,  109,  110,
+          160,  100,  101,  102,  115,  116,  160,  106,  160,  160,
+           70,   71,  160,  124,  160,  162,  161,  161,  117,  118,
           161,  161,   82,  122,  161,   84,   86,  161,  127,  128,
           129,  130,  131,  161,  161,  161,  161,  161,  161,  161,
           161,  100,  101,  102,  161,  161,  161,  106,  161,  161,
           164,  161,  161,  161,  161,  161,  161,  161,  117,  118,
-          159,  161,  122,  122,  163,  164,  161,  163,  127,  128,
-          129,  130,  131,  162,  162,  162,  162,  137,   70,  139,
-          140,  141,  142,  143,  144,  162,  162,  162,  162,  162,
+          159,  161,  122,  122,  163,  164,  161,  161,  127,  128,
+          129,  130,  131,  161,  161,  161,  161,  137,   70,  139,
+          140,  141,  142,  143,  144,  161,  161,  161,  165,  162,
            82,  151,  152,  162,   86,  162,   74,  162,  162,  162,
           159,  161,   80,  164,  163,  164,  166,  167,  162,   87,
            88,   89,  162,   91,  162,   93,  162,   95,  162,  162,
@@ -635,19 +635,19 @@ class Php7 extends \PhpParser\ParserAbstract
           122,  109,  110,  162,  162,  162,  162,  115,  116,  162,
           162,  162,  162,  162,  162,  137,  124,  139,  140,  141,
           142,  143,  144,  162,  162,  162,  162,  162,  162,  151,
-          152,  162,  162,  162,  166,  163,  163,  163,  163,  161,
-          163,  165,  163,  163,  166,  167,  163,  163,  163,  163,
-           -1,  164,  164,  164,  164,  164,   -1,  164,  164,  164,
+          152,  162,  162,  162,  162,  162,  162,  162,  162,  161,
+          163,  162,  162,   -1,  166,  167,  163,  163,  163,  163,
+          163,  163,  163,  163,  163,   -1,  163,  163,  163,   -1,
+          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,   -1,
-           -1,  167
+          164,  164,  164,  164,   -1,  165,   -1,  166,   -1,  167
     );
 
     protected $actionBase = array(
-            0,   -2,  152,  549,  764,  941,  981,  507,  199,  157,
-          855,  617,  634,  634,  671,  634,  473,  626,  305,  305,
-           63,  305,  305,  305,  389,  389,  389,  658,  658,  658,
-          658,  749,  749,  897,  897,  929,  865,  831, 1062, 1062,
+            0,   -2,  152,  549,  764,  941,  981,  751,  617,  310,
+          123,  877,  556,  671,  671,  738,  671,  472,  626,  789,
+           63,  305,  305,  789,  305,  493,  493,  493,  658,  658,
+          658,  658,  749,  749,  897,  897,  929,  865,  831, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
@@ -660,66 +660,67 @@ class Php7 extends \PhpParser\ParserAbstract
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
-         1062, 1062,  344,   35,  204,  719, 1022, 1036, 1032, 1039,
-         1020, 1019, 1031, 1033, 1040, 1078, 1079,  794, 1080, 1081,
-         1077, 1082, 1034,  869, 1021, 1035,  289,  289,  289,  289,
+         1062, 1062, 1062, 1062,   51,   45,  451,  692, 1039, 1045,
+         1041, 1046, 1035, 1034, 1040, 1042, 1049, 1085, 1086,  795,
+         1087, 1088, 1084, 1089, 1043,  894, 1036, 1044,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-          289,  289,  442,  224,  610,   43,   43,   43,   43,   43,
-           43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
-           43,   43,   43,   43,   43,   54,   54,   54,  666,  666,
-          342,  182,  980,  166, 1048, 1048, 1048, 1048, 1048, 1048,
-         1048, 1048, 1048,  665,   47,  136,  136,    7,    7,    7,
-            7,    7,  369,  -25,  -25,  -25,  -25,  501,  448,   50,
-          643,  497,   87,  393,  334,  243,  514,  514,  316,  316,
-          468,  468,  499,  499,  468,  468,  468,  415,  415,  415,
-          415,  318,  441,  -93,  354,  765,  206,  206,  206,  206,
-          765,  765,  765,  765,  761, 1038,  765,  765,  765,  635,
-          722,  722,  726,  149,  149,  149,  722,  534,  799,  506,
-          534,  506,  346,  306,  421,  589,  377,  443,  421,  362,
-          656,   60,   59,  775,  614,  775, 1018,   75,  795,  226,
-          780,  740,  856, 1056, 1041,  776, 1075,  778, 1076,  335,
-          406,  735, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
-         1017, 1017, 1017, 1084,  609, 1018,  400, 1084, 1084, 1084,
-          609,  609,  609,  609,  609,  609,  609,  609,  609,  609,
-          618,  400,  622,  624,  400,  810,  609,  344,  766,  344,
-          344,  344,  344,  344,  344,  344,  344,  344,  344,  782,
-          -19,  344,   35,  124,  124,  414,   13,  124,  124,  124,
-          124,  344,  344,  344,  614,  798,  814,  616,  819,  143,
-          798,  798,  798,  200,   51,   24,   68,  760,  796,  479,
-          787,  787,  797,  888,  888,  787,  792,  787,  797,  896,
-          787,  787,  888,  888,  759,  187,  648,  531,  608,  653,
-          888,  446,  787,  787,  787,  787,  771,  655,  787,  432,
-          375,  787,  787,  771,  756,  789,  125,  768,  888,  888,
-          888,  771,  586,  768,  768,  768,  773,  817,  774,  785,
-          502,  486,  701,  159,  788,  785,  785,  787,  620,  774,
-          785,  774,  785,  755,  785,  785,  785,  774,  785,  792,
-          538,  785,  727,  661,  145,  785,    6,  899,  900,  711,
-          903,  894,  906,  940,  912,  913, 1043,  887,  918,  895,
-          914,  945,  893,  891,  793,  718,  721,  767,  757,  885,
-          689,  689,  689,  876,  689,  689,  689,  689,  689,  689,
-          689,  689,  718,  818,  801,  762,  779,  924,  723,  724,
-          999,  758,  979, 1046, 1083,  923, 1001,  915,  751,  725,
-          966,  925,  926,  944,  927,  928,  967, 1002,  820, 1006,
-         1057,  781, 1058, 1059,  859,  931, 1044,  689,  899,  913,
-          729,  895,  914,  893,  891,  770,  763,  748,  752,  747,
-          746,  741,  744,  784, 1007,  875,  870,  863,  930,  879,
-          718,  866,  954,  867,  971,  973, 1042,  811,  783,  868,
-         1060,  932,  933,  934, 1045, 1011, 1047,  754,  963,  951,
-          975,  815, 1061,  976,  977,  986,  990, 1049, 1063, 1050,
-          874, 1053,  824,  807,  952,  802, 1064,  491,  806,  808,
-          813,  936,  702,  919, 1054, 1065, 1066,  992,  994,  996,
-         1067, 1068,  916,  828,  964,  805,  965,  953,  832,  834,
-          705,  812, 1012,  800,  804,  809,  713,  714, 1069, 1070,
-         1071,  917,  790,  786,  835,  837, 1013,  720, 1014, 1072,
-          717,  838,  728, 1073, 1000,  734,  738,  777, 1055,  772,
-          769,  803,  935,  791,  839, 1074,  845,  846,  849,  997,
-          852,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+          289,  289,  289,  289,  289,   44,  343,  664,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+            3,    3,    3,    3,    3,    3,    3,    3,   52,   52,
+           52,  666,  666,   47,  354,  980,  203, 1048, 1048, 1048,
+         1048, 1048, 1048, 1048, 1048, 1048,  665,  339,  164,  164,
+            7,    7,    7,    7,    7,   50,  369,  583,  -25,  -25,
+          -25,  -25,  448,  741,  501,  408,  283,  338,  394,  334,
+          334,   14,   14,  531,  531,    9,    9,  531,  531,  531,
+          478,  478,  478,  478,  441,  471,  552,  428,  824,   53,
+           53,   53,   53,  824,  824,  824,  824,  826, 1091,  824,
+          824,  824,  594,  750,  750,  781,  138,  138,  138,  750,
+          540,  805,  503,  540,  238,  503,   67,  135,  -78,  823,
+          377,  499,  -78,  362,  656,  636,   59,  743,  624,  743,
+         1033,  481,  802,  514,  773,  746,  878, 1065, 1050,  821,
+         1082,  825, 1083,   15,  370,  745, 1032, 1032, 1032, 1032,
+         1032, 1032, 1032, 1032, 1032, 1032, 1032, 1092,  443, 1033,
+          384, 1092, 1092, 1092,  443,  443,  443,  443,  443,  443,
+          443,  443,  443,  443,  647,  384,  622,  641,  384,  810,
+          443,   51,  827,   51,   51,   51,   51,   51,   51,   51,
+           51,   51,   51,  780,  316,   51,   45,  150,  150,  490,
+           83,  150,  150,  150,  150,   51,   51,   51,   51,  624,
+          799,  797,  627,  838,  375,  799,  799,  799,  270,  158,
+           69,  197,  740,  760,  345,  788,  788,  801,  903,  903,
+          788,  798,  788,  801,  915,  788,  788,  903,  903,  775,
+          180,  550,  353,  524,  565,  903,  279,  788,  788,  788,
+          788,  816,  571,  788,  214,  198,  788,  788,  816,  811,
+          785,  145,  777,  903,  903,  903,  816,  500,  777,  777,
+          777,  839,  845,  765,  784,  337,  297,  611,  169,  822,
+          784,  784,  788,  538,  765,  784,  765,  784,  833,  784,
+          784,  784,  765,  784,  798,  431,  784,  721,  607,  163,
+          784,    6,  916,  917,  723,  918,  913,  919,  965,  923,
+          924, 1055,  900,  931,  914,  925,  966,  912,  906,  794,
+          693,  698,  829,  783,  899,  792,  792,  792,  895,  792,
+          792,  792,  792,  792,  792,  792,  792,  693,  880,  834,
+          787,  934,  702,  707, 1012,  819,  926,  963, 1090,  933,
+         1014,  927,  835,  711,  986,  935,  774, 1053,  936,  940,
+          990, 1017,  846, 1018,  979,  796, 1066, 1067,  886,  946,
+         1056,  792,  916,  924,  735,  914,  925,  912,  906,  770,
+          766,  762,  763,  761,  752,  747,  748,  782, 1019,  836,
+          776,  888,  945,  896,  693,  889,  973, 1047,  992,  994,
+         1054,  803,  791,  892, 1068,  952,  953,  954, 1057, 1020,
+         1058,  837,  975,  893,  996,  820, 1069,  997,  999, 1000,
+         1001, 1059, 1070, 1060,  832, 1061,  849,  814,  967,  807,
+         1071,    1,  806,  808,  818,  964,  484,  932, 1063, 1072,
+         1073, 1002, 1006, 1007, 1074, 1075,  928,  852,  976,  815,
+          977,  971,  855,  856,  525,  813, 1021,  800,  804,  812,
+          577,  640, 1076, 1077, 1078,  930,  790,  786,  860,  864,
+         1022,  809, 1031, 1079,  649,  867,  724, 1080, 1013,  744,
+          754,  281,  654,  335,  756,  779, 1064,  830,  817,  778,
+          955,  754,  793,  869, 1081,  870,  871,  872, 1011,  876,
+            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,  456,  456,  456,  456,  456,  456,  305,  305,  305,
-          305,  456,  456,  456,  456,  456,  456,  456,    0,    0,
-          305,    0,    0,    0,  456,  456,  456,  456,  456,  456,
+          456,  456,  456,  456,  456,  456,  305,  305,  305,  305,
+          305,  456,  456,  456,  456,  456,  456,  456,  305,  305,
+            0,    0,  305,    0,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
@@ -733,180 +734,182 @@ class Php7 extends \PhpParser\ParserAbstract
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
-          456,  456,  289,  289,  289,  289,  289,  289,  289,  289,
+          456,  456,  456,  289,  289,  289,  289,  289,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-          289,  289,  289,  289,  289,  289,    0,    0,    0,    0,
+          289,  289,  289,  289,  289,  289,  289,    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,  289,  289,  289,  289,  289,  289,  289,  289,
+            0,    0,    0,    0,  289,  289,  289,  289,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-          289,  289,  289,  289,  289,  289,  289,  289,  494,  494,
-          289,  289,  494,  289,  494,  494,  494,  494,  494,  494,
-          494,  494,  494,    0,  289,  289,  289,  289,  289,  289,
-          289,  289,  759,  149,  149,  149,  149,  494,  494,  494,
-          494,  494,  -88,  -88,  494,  759,  494,  494,  149,  149,
-          494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
-          494,    0,    0,  400,  506,  494,  792,  792,  792,  792,
-          494,  494,  494,  494,  506,  506,  494,  494,  494,    0,
-            0,    0,    0,    0,    0,    0,    0,  400,  506,    0,
-          400,    0,  792,  792,  494,    0,  759,  383,  494,    0,
-            0,    0,    0,  400,  792,  400,  609,  787,  506,  787,
-          609,  609,  124,  344,  383,  613,  613,  613,  613,    0,
-            0,  614,  759,  759,  759,  759,  759,  759,  759,  759,
-          759,  759,  759,  792,    0,  759,    0,  792,  792,  792,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  792,    0,    0,  888,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  896,
-            0,    0,    0,    0,    0,    0,  792,    0,    0,    0,
-            0,    0,    0,    0,    0,  689,  811,    0,  811,    0,
-          689,  689,  689,    0,    0,    0,    0,  812,  720
+          289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+          473,  473,  289,  289,  473,  289,  473,  473,  473,  473,
+          473,  473,  473,  473,  473,    0,  289,  289,  289,  289,
+          289,  289,  289,  289,  473,  775,  473,  138,  138,  138,
+          138,  473,  473,  473,  -88,  -88,  473,  238,  473,  473,
+          138,  138,  473,  473,  473,  473,  473,  473,  473,  473,
+          473,  473,  473,    0,    0,  384,  503,  473,  798,  798,
+          798,  798,  473,  473,  473,  473,  503,  503,  473,  473,
+          473,    0,    0,    0,    0,    0,    0,    0,    0,  384,
+          503,    0,  384,    0,    0,  798,  798,  473,  238,  775,
+          168,  473,    0,    0,    0,    0,  384,  798,  384,  443,
+          788,  503,  788,  443,  443,  150,   51,  168,  620,  620,
+          620,  620,    0,    0,  624,  775,  775,  775,  775,  775,
+          775,  775,  775,  775,  775,  775,  798,    0,  775,    0,
+          798,  798,  798,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  798,    0,
+            0,  903,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,  915,    0,    0,    0,    0,    0,    0,  798,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  792,
+          803,    0,  803,    0,  792,  792,  792,    0,    0,    0,
+            0,  813,  809
     );
 
     protected $actionDefault = array(
             3,32767,  102,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  100,
-        32767,32767,32767,32767,32767,32767,32767,  594,  594,  594,
-          594,32767,32767,  252,  102,32767,32767,  467,  384,  384,
-          384,32767,32767,  538,  538,  538,  538,  538,  538,32767,
-        32767,32767,32767,32767,32767,  467,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  100,32767,32767,32767,32767,  596,  596,
+          596,  596,32767,32767,  253,  102,32767,32767,  469,  386,
+          386,  386,32767,32767,  540,  540,  540,  540,  540,  540,
+        32767,32767,32767,32767,32767,32767,  469,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,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,32767,  100,32767,
-        32767,32767,   36,    7,    8,   10,   11,   49,   17,  322,
-        32767,32767,32767,32767,  102,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  100,
+        32767,32767,32767,   36,    7,    8,   10,   11,   49,   17,
+          323,32767,32767,32767,32767,  102,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  587,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  589,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  471,  450,  451,  453,
-          454,  383,  539,  593,  325,  590,  382,  145,  337,  327,
-          240,  328,  256,  472,  257,  473,  476,  477,  213,  285,
-          379,  149,  414,  468,  416,  466,  470,  415,  389,  395,
-          396,  397,  398,  399,  400,  401,  402,  403,  404,  405,
-          406,  407,  387,  388,  469,  447,  446,  445,32767,32767,
-          412,  413,32767,  417,32767,32767,32767,32767,32767,32767,
-        32767,  102,32767,  386,  420,  418,  419,  436,  437,  434,
-          435,  438,32767,  439,  440,  441,  442,32767,  314,32767,
-        32767,32767,  363,  361,  314,  111,32767,32767,  427,  428,
+        32767,32767,32767,32767,32767,32767,32767,32767,  473,  452,
+          453,  455,  456,  385,  541,  595,  326,  592,  384,  145,
+          338,  328,  241,  329,  257,  474,  258,  475,  478,  479,
+          214,  286,  381,  149,  150,  416,  470,  418,  468,  472,
+          417,  391,  397,  398,  399,  400,  401,  402,  403,  404,
+          405,  406,  407,  408,  409,  389,  390,  471,  449,  448,
+          447,32767,32767,  414,  415,32767,  419,32767,32767,32767,
+        32767,32767,32767,32767,  102,32767,  388,  422,  420,  421,
+          438,  439,  436,  437,  440,32767,32767,32767,  441,  442,
+          443,  444,  315,32767,32767,  365,  363,  315,  111,32767,
+        32767,  429,  430,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,  534,  446,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  102,
+        32767,  100,  536,  411,  413,  503,  424,  425,  423,  392,
+        32767,  510,32767,  102,32767,  512,32767,32767,32767,32767,
+        32767,32767,32767,  535,32767,  542,  542,32767,  496,  100,
+          194,32767,32767,32767,  194,  194,32767,32767,32767,32767,
+        32767,32767,32767,32767,  603,  496,  110,  110,  110,  110,
+          110,  110,  110,  110,  110,  110,  110,32767,  194,  110,
+        32767,32767,32767,  100,  194,  194,  194,  194,  194,  194,
+          194,  194,  194,  194,  189,32767,  267,  269,  102,  557,
+          194,32767,  515,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  508,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  496,
+          434,  138,32767,  138,  542,  426,  427,  428,  498,  542,
+          542,  542,  311,  288,32767,32767,32767,32767,  513,  513,
+          100,  100,  100,  100,  508,32767,32767,32767,32767,  111,
+           99,   99,   99,   99,   99,  103,  101,32767,32767,32767,
+        32767,  222,   99,32767,  101,  101,32767,32767,  222,  224,
+          211,  101,  226,32767,  561,  562,  222,  101,  226,  226,
+          226,  246,  246,  485,  317,  101,   99,  101,  101,  196,
+          317,  317,32767,  101,  485,  317,  485,  317,  198,  317,
+          317,  317,  485,  317,32767,  101,  317,  213,   99,   99,
+          317,32767,32767,32767,  498,32767,32767,32767,32767,32767,
+        32767,32767,  221,32767,32767,32767,32767,32767,32767,32767,
+        32767,  529,32767,  546,  559,  432,  433,  435,  544,  457,
+          458,  459,  460,  461,  462,  463,  465,  591,32767,  502,
+        32767,32767,32767,  337,32767,  601,32767,  601,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,  532,  444,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  102,32767,  100,  534,
-          409,  411,  501,  422,  423,  421,  390,32767,  508,32767,
-          102,  510,32767,32767,32767,32767,32767,32767,32767,  533,
-        32767,  540,  540,32767,  494,  100,  193,32767,32767,32767,
-          193,  193,32767,32767,32767,32767,32767,32767,32767,32767,
-          601,  494,  110,  110,  110,  110,  110,  110,  110,  110,
-          110,  110,  110,32767,  193,  110,32767,32767,32767,  100,
-          193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-          188,32767,  266,  268,  102,  555,  193,32767,  513,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  506,
+        32767,32767,32767,32767,  602,32767,  542,32767,32767,32767,
+        32767,  431,    9,   74,  491,   42,   43,   51,   57,  519,
+          520,  521,  522,  516,  517,  523,  518,32767,32767,  524,
+          567,32767,32767,  543,  594,32767,32767,32767,32767,32767,
+        32767,  138,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  529,32767,  136,32767,32767,32767,32767,
+        32767,32767,32767,32767,  525,32767,32767,32767,  542,32767,
+        32767,32767,32767,  313,  310,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  494,  432,  138,32767,  138,  540,
-          424,  425,  426,  496,  540,  540,  540,  310,  287,32767,
-        32767,32767,32767,  511,  511,  100,  100,  100,  100,  506,
-        32767,32767,32767,32767,  111,   99,   99,   99,   99,   99,
-          103,  101,32767,32767,32767,32767,  221,   99,32767,  101,
-          101,32767,32767,  221,  223,  210,  101,  225,32767,  559,
-          560,  221,  101,  225,  225,  225,  245,  245,  483,  316,
-          101,   99,  101,  101,  195,  316,  316,32767,  101,  483,
-          316,  483,  316,  197,  316,  316,  316,  483,  316,32767,
-          101,  316,  212,   99,   99,  316,32767,32767,32767,  496,
-        32767,32767,32767,32767,32767,32767,32767,  220,32767,32767,
-        32767,32767,32767,32767,32767,32767,  527,32767,  544,  557,
-          430,  431,  433,  542,  455,  456,  457,  458,  459,  460,
-          461,  463,  589,32767,  500,32767,32767,32767,32767,  336,
-        32767,  599,32767,  599,32767,32767,32767,32767,32767,32767,
+        32767,  542,32767,32767,32767,32767,32767,  290,32767,  307,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          600,32767,  540,32767,32767,32767,32767,  429,    9,   74,
-          489,   42,   43,   51,   57,  517,  518,  519,  520,  514,
-          515,  521,  516,32767,32767,  522,  565,32767,32767,  541,
-          592,32767,32767,32767,32767,32767,32767,  138,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  527,
-        32767,  136,32767,32767,32767,32767,32767,32767,32767,32767,
-          523,32767,32767,32767,  540,32767,32767,32767,32767,  312,
-          309,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  540,32767,32767,
-        32767,32767,32767,  289,32767,  306,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  285,32767,32767,  380,
+          498,  293,  295,  296,32767,32767,32767,32767,  359,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,  284,32767,32767,  378,32767,32767,32767,32767,
-          357,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,  151,  151,    3,    3,  339,  151,  151,  151,  339,
-          339,  151,  339,  339,  339,  151,  151,  151,  151,  151,
-          151,  278,  183,  260,  263,  245,  245,  151,  349,  151
+          152,  152,    3,    3,  340,  152,  152,  152,  340,  340,
+          152,  340,  340,  340,  152,  152,  152,  152,  152,  152,
+          279,  184,  261,  264,  246,  246,  152,  351,  152
     );
 
     protected $goto = array(
-          194,  194,  689, 1054,  425,  657,  617,  654,  316,  697,
-          419,  310,  311,  331,  572,  424,  332,  426,  634,  650,
-          651,  843,  668,  669,  670,  844,  165,  165,  165,  165,
-          218,  195,  191,  191,  175,  177,  213,  191,  191,  191,
-          191,  191,  192,  192,  192,  192,  192,  192,  186,  187,
-          188,  189,  190,  215,  213,  216,  530,  531,  415,  532,
-          534,  535,  536,  537,  538,  539,  540,  541, 1124,  166,
-          167,  168,  193,  169,  170,  171,  164,  172,  173,  174,
-          176,  212,  214,  217,  235,  240,  241,  243,  254,  255,
-          256,  257,  258,  259,  260,  261,  263,  264,  265,  266,
-          278,  279,  313,  314,  315,  420,  421,  422,  577,  219,
-          220,  221,  222,  223,  224,  225,  226,  227,  228,  229,
-          230,  231,  232,  233,  178,  234,  179,  196,  197,  198,
-          236,  186,  187,  188,  189,  190,  215, 1124,  199,  180,
-          181,  182,  200,  196,  183,  237,  201,  199,  163,  202,
-          203,  184,  204,  205,  206,  185,  207,  208,  209,  210,
-          211,  846,  820,  249,  249,  470, 1300, 1301,  275,  275,
-          275,  275,  964,  596,  619,  619,  877,  903, 1257,  904,
-         1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,  247,
-          247,  247,  247,  242,  250,  349,  349,  349,  349,  956,
-          405,  696,  555,  547,  346,  851,  818,  899,  894,  895,
-          908,  852,  896,  849,  897,  898,  850, 1204,  933,  902,
-          473, 1205, 1208,  934, 1209, 1325, 1325,  824,  475, 1075,
-         1071, 1072,  337,  547,  555,  564,  565,  339,  575,  598,
-          612,  613, 1325, 1275, 1275, 1095, 1096, 1275,   22, 1275,
-         1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,  494, 1328,
-          495, 1225, 1023, 1225, 1023, 1225,  501,  824, 1023,  824,
-         1023, 1023, 1029, 1028, 1023, 1023, 1023, 1023, 1023, 1023,
-         1023, 1023, 1023, 1023, 1023, 1307, 1307, 1307, 1307, 1225,
-          859,  569, 1326, 1326, 1225, 1225, 1225, 1225,  460,  460,
-         1225, 1225, 1225,  842,  344,  871,  350,  460,  858, 1326,
-          988,  962,  962,  960,  962,  723,  350,  350,  915,  627,
-          629,  631,  916,  546,  997,  992,  931,    5,  931,    6,
-          350,  350, 1315,  350, 1220, 1342,  605,  620,  623,  624,
-          625,  626,  647,  648,  649,  699,  549, 1273, 1273,  985,
-          350, 1273,  389, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
-         1273, 1273,  533,  533,  567,  418,  533,  607,  533,  533,
-          533,  533,  533,  533,  533,  533,  533,  562, 1032, 1033,
-          839,  724,  633,  635,  321,  305,  655,  656, 1221, 1222,
-          679,  683,  999,  687,  695,  995,  834, 1286, 1302, 1303,
-          252,  252,  542,  542,  542,  542, 1173,  600,  573,  610,
-          872,  860, 1059, 1063, 1223, 1283, 1284, 1121,  682,  548,
-          559,  967,  452,  432,  548,  678,  559,  444,  662,  392,
-          456,  839,  444, 1297,  444, 1297,  333, 1297,  836,  864,
-          947,  463,  576,  464,  465,  957,  398,  869,  549,  861,
-         1333, 1334,  347,  348,  272,  611,  544, 1216,  544,  545,
-          544,  545, 1309, 1309, 1309, 1309, 1007, 1104,  876, 1060,
-          727,  595, 1088,  471,  700,  873,  867,  391,  394,  556,
-          597,  601,  686,  686,  450,  502,  692, 1086, 1293,  958,
-          958,  958,  958,  403,  404,  450,  952,  959,  666, 1064,
-          667,  969,  407,  408,  409, 1106,  680,    0,    0,  410,
-            0, 1218,    0,  342,    0,    0,    0,  444,  444,  444,
-          444,  444,  444,  444,  444,  444,  444,  444,    0, 1062,
-          444,  920, 1111, 1295, 1295, 1062,    0,    0,  615,    0,
-            0,    0,  427,    0, 1004,    0,    0,    0,  427,  839,
-            0,    0,  863,    0,  660,  983, 1030, 1030,    0,  428,
-          857,  661, 1041, 1037, 1038,    0,    0,    0,    0,  677,
-          941,    0, 1215, 1018, 1034, 1035,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+          196,  196, 1033, 1064,  697,  430,  661,  621,  658,  319,
+          706,  424,  313,  314,  335,  576,  429,  336,  431,  638,
+          654,  655,  852,  672,  673,  674,  853,  167,  167,  167,
+          167,  221,  197,  193,  193,  177,  179,  216,  193,  193,
+          193,  193,  193,  194,  194,  194,  194,  194,  194,  188,
+          189,  190,  191,  192,  218,  216,  219,  535,  536,  420,
+          537,  539,  540,  541,  542,  543,  544,  545,  546, 1135,
+          168,  169,  170,  195,  171,  172,  173,  166,  174,  175,
+          176,  178,  215,  217,  220,  238,  243,  244,  246,  257,
+          258,  259,  260,  261,  262,  263,  264,  268,  269,  270,
+          271,  281,  282,  316,  317,  318,  425,  426,  427,  581,
+          222,  223,  224,  225,  226,  227,  228,  229,  230,  231,
+          232,  233,  234,  235,  236,  180,  237,  181,  198,  199,
+          200,  239,  188,  189,  190,  191,  192,  218, 1135,  201,
+          182,  183,  184,  202,  198,  185,  240,  203,  201,  165,
+          204,  205,  186,  206,  207,  208,  187,  209,  210,  211,
+          212,  213,  214,  855,  478,  278,  278,  278,  278,  623,
+          623,  974,  480, 1268,  600, 1268, 1268, 1268, 1268, 1268,
+         1268, 1268, 1268, 1268, 1286, 1286,  599, 1099, 1286,  709,
+         1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,  507,
+          700,  848, 1097,  418,  868,  559,  551,  860,  827,  909,
+          904,  905,  918,  861,  906,  858,  907,  908,  859,  880,
+          886,  912,  867,  833,  547,  547,  547,  547,  423,  604,
+          611, 1086, 1081, 1082, 1083,  341,  551,  559,  568,  569,
+          343,  579,  602,  616,  617,  407,  408,  573,  465,  465,
+          670,   22,  671,  848,  411,  412,  413,  465,  684,  348,
+         1236,  414, 1236,  350,  833,  346,  833, 1033, 1033, 1236,
+         1326,  457, 1033,  995, 1033, 1033, 1336, 1336, 1033, 1033,
+         1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1318,
+         1318, 1318, 1318, 1236, 1336,  930, 1122,  393, 1236, 1236,
+         1236, 1236,  619,  571, 1236, 1236, 1236,  913, 1014,  914,
+          354, 1339, 1337, 1337,  252,  252,  872,  439,  664,  993,
+          354,  354, 1132,  925,  866, 1057,    5,  926,    6,  660,
+         1337,  941, 1184,  941,  354,  354, 1226,  437,  354,  682,
+         1353,  250,  250,  250,  250,  245,  253,  353,  353,  353,
+          353,  553, 1284, 1284,  666,  354, 1284,  337, 1284, 1284,
+         1284, 1284, 1284, 1284, 1284, 1284, 1284,  538,  538, 1106,
+         1107,  538,  848,  538,  538,  538,  538,  538,  538,  538,
+          538,  538,  566,  475, 1311, 1312,  733,  637,  639, 1039,
+         1038,  659,  966,  409,  705,  683,  687, 1009,  695,  704,
+         1005,  845, 1297,  609,  624,  627,  628,  629,  630,  651,
+          652,  653,  708, 1215,  943, 1042, 1043, 1216, 1219,  944,
+         1220,  325,  308,  686,  873,  552,  563,  449,  449,  449,
+          552, 1308,  563, 1308,  957,  396,  461, 1012, 1012,  402,
+         1308,  395,  398,  560,  601,  605,  870,  468,  580,  469,
+          470, 1313, 1314,  878,  553,  615, 1344, 1345,  577,  614,
+          549, 1227,  549,  851, 1070, 1320, 1320, 1320, 1320,  549,
+          476,  998,  972,  972,  970,  972,  732,  881,  869, 1069,
+         1073,  736,  876, 1017,  550, 1007, 1002, 1231,  977,  432,
+          882,  979, 1304,  455,  432,  631,  633,  635,  968,  968,
+          968,  968, 1040, 1040,  455,  962,  969,  665, 1051, 1047,
+         1048, 1074,  967,    0, 1117,  351,  352, 1229,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  694,
+            0,  449,  829, 1072, 1115,  885,    0, 1306, 1306, 1072,
+            0,  694, 1232, 1233,    0,  694,    0,    0, 1036, 1036,
+          843,    0,  681,  951,  255,  255, 1028, 1044, 1045,  499,
+            0,  500,    0,    0,    0,    0,    0,  506, 1234, 1294,
+         1295,    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, 1002, 1002
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  324,
+          275,  324
     );
 
     protected $gotoCheck = array(
-           42,   42,   72,  126,   65,   65,   55,   55,   65,    9,
-           65,   65,   65,   65,   65,   65,   65,   65,   65,   85,
-           85,   26,   85,   85,   85,   27,   42,   42,   42,   42,
+           42,   42,   72,  126,   72,   65,   65,   55,   55,   65,
+            9,   65,   65,   65,   65,   65,   65,   65,   65,   65,
+           85,   85,   26,   85,   85,   85,   27,   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,
@@ -920,96 +923,96 @@ 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,   15,    7,    5,    5,  174,  174,  174,   23,   23,
-           23,   23,   49,  129,  107,  107,   45,   64,  107,   64,
-          107,  107,  107,  107,  107,  107,  107,  107,  107,    5,
-            5,    5,    5,    5,    5,   24,   24,   24,   24,   92,
-           92,   92,   75,   75,   96,   15,    6,   15,   15,   15,
-           15,   15,   15,   15,   15,   15,   15,   78,   78,   15,
-           83,   78,   78,   78,   78,  180,  180,   12,   83,   15,
-           15,   15,   75,   75,   75,   75,   75,   75,   75,   75,
-           75,   75,  180,  168,  168,  143,  143,  168,   75,  168,
-          168,  168,  168,  168,  168,  168,  168,  168,  154,  180,
-          154,   72,   72,   72,   72,   72,  154,   12,   72,   12,
-           72,   72,  117,  117,   72,   72,   72,   72,   72,   72,
-           72,   72,   72,   72,   72,    9,    9,    9,    9,   72,
-           35,  170,  181,  181,   72,   72,   72,   72,  148,  148,
-           72,   72,   72,   25,  177,   35,   14,  148,   35,  181,
-           25,   25,   25,   25,   25,   25,   14,   14,   72,   84,
-           84,   84,   72,   25,   25,   25,    9,   46,    9,   46,
-           14,   14,  179,   14,   20,   14,   80,   80,   80,   80,
-           80,   80,   80,   80,   80,   80,   14,  169,  169,  102,
-           14,  169,   61,  169,  169,  169,  169,  169,  169,  169,
-          169,  169,  171,  171,  103,   13,  171,   13,  171,  171,
-          171,  171,  171,  171,  171,  171,  171,   48,  118,  118,
-           22,   48,   48,   48,  167,  167,   48,   63,   20,   20,
-           48,   48,   48,   48,   48,   48,   20,   14,  176,  176,
-            5,    5,  106,  106,  106,  106,  150,  106,    2,    2,
-           16,   16,   16,   16,   20,   20,   20,  149,   14,    9,
-            9,   16,   82,  112,    9,  115,    9,   23,  119,    9,
-            9,   22,   23,  129,   23,  129,   29,  129,   18,   39,
-           91,    9,    9,    9,    9,   16,   28,    9,   14,   37,
-            9,    9,   96,   96,   24,   79,   19,  159,   19,   24,
-           19,   24,  129,  129,  129,  129,  109,   16,   16,  128,
-           98,    8,    8,  156,    8,   41,    9,   58,   58,   58,
-           58,   58,    8,    8,   19,    8,    8,    8,  129,   19,
-           19,   19,   19,   81,   81,   19,   19,   19,   81,  131,
-           81,   95,   81,   81,   81,  146,   81,   -1,   -1,   81,
-           -1,   14,   -1,   81,   -1,   -1,   -1,   23,   23,   23,
-           23,   23,   23,   23,   23,   23,   23,   23,   -1,  129,
-           23,   17,   17,  129,  129,  129,   -1,   -1,   17,   -1,
-           -1,   -1,  116,   -1,   17,   -1,   -1,   -1,  116,   22,
-           -1,   -1,   17,   -1,   17,   17,  116,  116,   -1,   88,
-           17,  116,  116,  116,  116,   -1,   -1,   -1,   -1,   88,
-           88,   -1,   17,   88,   88,   88,   -1,   -1,   -1,   -1,
+           42,   42,   42,   15,   83,   23,   23,   23,   23,  107,
+          107,   49,   83,  107,  129,  107,  107,  107,  107,  107,
+          107,  107,  107,  107,  168,  168,    8,    8,  168,    8,
+          168,  168,  168,  168,  168,  168,  168,  168,  168,    8,
+            8,   22,    8,   43,   35,   75,   75,   15,    6,   15,
+           15,   15,   15,   15,   15,   15,   15,   15,   15,   35,
+           45,   15,   35,   12,  106,  106,  106,  106,   13,  106,
+           13,   15,   15,   15,   15,   75,   75,   75,   75,   75,
+           75,   75,   75,   75,   75,   81,   81,  170,  148,  148,
+           81,   75,   81,   22,   81,   81,   81,  148,   81,  177,
+           72,   81,   72,   96,   12,   81,   12,   72,   72,   72,
+          179,   82,   72,  102,   72,   72,  180,  180,   72,   72,
+           72,   72,   72,   72,   72,   72,   72,   72,   72,    9,
+            9,    9,    9,   72,  180,   17,   17,   61,   72,   72,
+           72,   72,   17,  103,   72,   72,   72,   64,   17,   64,
+           14,  180,  181,  181,    5,    5,   17,   82,   17,   17,
+           14,   14,  149,   72,   17,  113,   46,   72,   46,   63,
+          181,    9,  150,    9,   14,   14,   17,  112,   14,  115,
+           14,    5,    5,    5,    5,    5,    5,   24,   24,   24,
+           24,   14,  169,  169,  119,   14,  169,   29,  169,  169,
+          169,  169,  169,  169,  169,  169,  169,  171,  171,  143,
+          143,  171,   22,  171,  171,  171,  171,  171,  171,  171,
+          171,  171,   48,  174,  174,  174,   48,   48,   48,  117,
+          117,   48,   92,   92,   92,   48,   48,   48,   48,   48,
+           48,   18,   14,   80,   80,   80,   80,   80,   80,   80,
+           80,   80,   80,   78,   78,  118,  118,   78,   78,   78,
+           78,  167,  167,   14,   39,    9,    9,   23,   23,   23,
+            9,  129,    9,  129,   91,    9,    9,  106,  106,   28,
+          129,   58,   58,   58,   58,   58,   37,    9,    9,    9,
+            9,  176,  176,    9,   14,   79,    9,    9,    2,    2,
+           19,  159,   19,   25,  128,  129,  129,  129,  129,   19,
+          156,   25,   25,   25,   25,   25,   25,   16,   16,   16,
+           16,   98,    9,  109,   25,   25,   25,   20,   16,  116,
+           41,   95,  129,   19,  116,   84,   84,   84,   19,   19,
+           19,   19,  116,  116,   19,   19,   19,  116,  116,  116,
+          116,  131,   16,   -1,  146,   96,   96,   14,   23,   23,
+           23,   23,   23,   23,   23,   23,   23,   23,   23,    7,
+           -1,   23,    7,  129,   16,   16,   -1,  129,  129,  129,
+           -1,    7,   20,   20,   -1,    7,   -1,   -1,   88,   88,
+           20,   -1,   88,   88,    5,    5,   88,   88,   88,  154,
+           -1,  154,   -1,   -1,   -1,   -1,   -1,  154,   20,   20,
+           20,   -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,  106,  106
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   24,
+           24,   24
     );
 
     protected $gotoBase = array(
-            0,    0, -295,    0,    0,  162,  186,  153,  464,  -11,
-            0,    0,  -66,   32,   12, -182,  -36,   72,  132,  189,
-          -54,    0,  105,  165,  192,  299,   17,   21,  113,  143,
-            0,    0,    0,    0,    0,  -76,    0,  114,    0,  119,
-            0,   40,   -1,    0,    0,  157, -400,    0, -325,  155,
-            0,    0,    0,    0,    0,  -33,    0,    0,  433,    0,
-            0,  311,    0,  148,  164, -234,    0,    0,    0,    0,
-            0,    0,   -6,    0,    0, -138,    0,    0, -186,  116,
-          -17,    8,  147, -243, -154, -690,    0,    0,  289,    0,
-            0,  115, -102,    0,    0,   64, -273,    0,   68,    0,
-            0,    0,  315,  322,    0,    0,  375,  -64,    0,  101,
-            0,    0,  149,    0,    0,  145,  274,   -4,   96,  141,
-            0,    0,    0,    0,    0,    0,    1,    0,  100,  166,
-            0,   63,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  -27,    0,    0,   67,    0,  265,  175,
-          135,    0,    0,    0, -231,    0,   39,    0,    0,   93,
-            0,    0,    0,    0,    0,    0,    0,   66,    5,  109,
-          263,  124,    0,    0, -132,    0,   31,  275,    0,  302,
-          -79,  -12,    0,    0
+            0,    0, -254,    0,    0,  313,  188,  522,  178,  -10,
+            0,    0,  -73, -109,   13, -184,   26, -169,   92,  195,
+           95,    0,  -77,  162,  344,  459,   18,   22,  102,   61,
+            0,    0,    0,    0,    0, -166,    0,  107,    0,  101,
+            0,   50,   -1,  184,    0,  197, -410,    0, -329,  153,
+            0,    0,    0,    0,    0,  -33,    0,    0,  396,    0,
+            0,  255,    0,   87,  293, -236,    0,    0,    0,    0,
+            0,    0,   -5,    0,    0, -139,    0,    0,    6,  112,
+           46, -245,   -7, -304,   17, -698,    0,    0,  269,    0,
+            0,  105,   88,    0,    0,   49, -219,    0,   75,    0,
+            0,    0,  238,  260,    0,    0,  196,  -72,    0,  114,
+            0,    0,   60,   52,    0,   56,  217,  110,  130,   64,
+            0,    0,    0,    0,    0,    0,    1,    0,   91,  166,
+            0,   70,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,   94,    0,    0,   71,    0,  214,   77,
+           58,    0,    0,    0,   65,    0,   31,    0,    0,   93,
+            0,    0,    0,    0,    0,    0,    0,  100,  -57,  111,
+          218,  126,    0,    0,   83,    0,   80,  229,    0,  239,
+          -31,    5,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  506,  731,    4,  732,  924,  807,  816,  593,  524,
-          698,  343,  621,  416, 1291,  901, 1110,  574,  835, 1234,
-         1242,  451,  838,  326,  721,  883,  884,  885,  395,  381,
-          387,  393,  645,  622,  488,  870,  447,  862,  480,  865,
-          446,  874,  162,  413,  504,  878,    3,  880,  552,  911,
-          382,  888,  383,  673,  890,  558,  892,  893,  390,  396,
-          397, 1115,  566,  618,  905,  253,  560,  906,  380,  907,
-          914,  385,  388,  684,  459,  499,  493,  406, 1090,  561,
-          604,  642,  441,  467,  616,  628,  614,  474, 1026,  411,
-          325,  946,  954,  481,  457,  968,  345,  976,  729, 1123,
-          636,  483,  984,  637,  991,  994,  525,  526,  472, 1006,
-          268, 1009,  484, 1047,  663, 1020, 1021,  664,  638, 1043,
-          639,  665,  640, 1045,  466,  594, 1053,  448, 1061, 1279,
-          449, 1065,  262, 1068,  274,  412,  429, 1073, 1074,    8,
-         1080,  690,  691,   10,  273,  503, 1105,  685,  445, 1122,
-          433, 1192, 1194,  554,  485, 1212, 1211,  676,  500, 1217,
-          442, 1282,  443,  527,  468,  312,  528,  304,  329,  309,
-          543,  291,  330,  529,  469, 1288, 1296,  327,   30, 1316,
-         1327,  338,  571,  609
+        -32768,  511,  740,    4,  741,  934,  816,  825,  597,  529,
+          707,  347,  625,  421, 1302,  911, 1121,  578,  844, 1245,
+         1253,  456,  847,  330,  730,  893,  894,  895,  399,  385,
+          391,  397,  649,  626,  493,  879,  452,  871,  485,  874,
+          451,  883,  164,  417,  509,  887,    3,  890,  556,  921,
+          386,  898,  387,  677,  900,  562,  902,  903,  394,  400,
+          401, 1126,  570,  622,  915,  256,  564,  916,  384,  917,
+          924,  389,  392,  688,  464,  504,  498,  410, 1101,  565,
+          608,  646,  446,  472,  620,  632,  618,  479,  433,  415,
+          329,  956,  964,  486,  462,  978,  349,  986,  738, 1134,
+          640,  488,  994,  641, 1001, 1004,  530,  531,  477, 1016,
+          272, 1019,  489,   19,  667, 1030, 1031,  668,  642, 1053,
+          643,  669,  644, 1055,  471,  598, 1063,  453, 1071, 1290,
+          454, 1075,  266, 1078,  277,  416,  434, 1084, 1085,    9,
+         1091,  698,  699,   11,  276,  508, 1116,  689,  450, 1133,
+          438, 1203, 1205,  558,  490, 1223, 1222,  680,  505, 1228,
+          447, 1293,  448,  532,  473,  315,  533,  307,  333,  312,
+          548,  294,  334,  534,  474, 1299, 1307,  331,   31, 1327,
+         1338,  342,  575,  613
     );
 
     protected $ruleToNonTerminal = array(
@@ -1028,30 +1031,30 @@ class Php7 extends \PhpParser\ParserAbstract
             4,    4,    4,   29,   29,   30,   30,   32,   34,   34,
            28,   36,   36,   33,   38,   38,   35,   35,   37,   37,
            39,   39,   31,   40,   40,   41,   43,   44,   44,   45,
-           46,   46,   48,   47,   47,   47,   47,   49,   49,   49,
+           45,   46,   46,   48,   47,   47,   47,   47,   49,   49,
            49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
            49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-           49,   25,   25,   68,   68,   71,   71,   70,   69,   69,
-           62,   74,   74,   75,   75,   76,   76,   77,   77,   78,
-           78,   79,   79,   26,   26,   27,   27,   27,   27,   27,
-           87,   87,   89,   89,   82,   82,   90,   90,   91,   91,
-           91,   83,   83,   86,   86,   84,   84,   92,   93,   93,
-           56,   56,   64,   64,   67,   67,   67,   66,   94,   94,
-           95,   57,   57,   57,   57,   96,   96,   97,   97,   98,
-           98,   99,  100,  100,  101,  101,  102,  102,   54,   54,
-           50,   50,  104,   52,   52,  105,   51,   51,   53,   53,
-           63,   63,   63,   63,   80,   80,  108,  108,  110,  110,
-          111,  111,  111,  111,  109,  109,  109,  113,  113,  113,
-          113,   88,   88,  116,  116,  116,  117,  117,  114,  114,
-          118,  118,  120,  120,  121,  121,  115,  122,  122,  119,
-          123,  123,  123,  123,  112,  112,   81,   81,   81,   20,
-           20,   20,  125,  124,  124,  126,  126,  126,  126,   59,
-          127,  127,  128,   60,  130,  130,  131,  131,  132,  132,
-           85,  133,  133,  133,  133,  133,  133,  138,  138,  139,
-          139,  140,  140,  140,  140,  140,  141,  142,  142,  137,
-          137,  134,  134,  136,  136,  144,  144,  143,  143,  143,
-          143,  143,  143,  143,  135,  145,  145,  147,  146,  146,
-           61,  103,  148,  148,   55,   55,   42,   42,   42,   42,
+           49,   49,   25,   25,   68,   68,   71,   71,   70,   69,
+           69,   62,   74,   74,   75,   75,   76,   76,   77,   77,
+           78,   78,   79,   79,   26,   26,   27,   27,   27,   27,
+           27,   87,   87,   89,   89,   82,   82,   90,   90,   91,
+           91,   91,   83,   83,   86,   86,   84,   84,   92,   93,
+           93,   56,   56,   64,   64,   67,   67,   67,   66,   94,
+           94,   95,   57,   57,   57,   57,   96,   96,   97,   97,
+           98,   98,   99,  100,  100,  101,  101,  102,  102,   54,
+           54,   50,   50,  104,   52,   52,  105,   51,   51,   53,
+           53,   63,   63,   63,   63,   80,   80,  108,  108,  110,
+          110,  111,  111,  111,  111,  109,  109,  109,  113,  113,
+          113,  113,   88,   88,  116,  116,  116,  117,  117,  114,
+          114,  118,  118,  120,  120,  121,  121,  115,  122,  122,
+          119,  123,  123,  123,  123,  112,  112,   81,   81,   81,
+           20,   20,   20,  125,  124,  124,  126,  126,  126,  126,
+           59,  127,  127,  128,   60,  130,  130,  131,  131,  132,
+          132,   85,  133,  133,  133,  133,  133,  133,  133,  138,
+          138,  139,  139,  140,  140,  140,  140,  140,  141,  142,
+          142,  137,  137,  134,  134,  136,  136,  144,  144,  143,
+          143,  143,  143,  143,  143,  143,  135,  145,  145,  147,
+          146,  146,   61,  103,  148,  148,   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,
@@ -1061,20 +1064,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,
-          155,  149,  149,  154,  154,  157,  158,  158,  159,  160,
-          161,  161,  161,  161,   19,   19,   72,   72,   72,   72,
-          150,  150,  150,  150,  163,  163,  151,  151,  153,  153,
-          153,  156,  156,  168,  168,  168,  168,  168,  168,  168,
-          168,  168,  169,  169,  169,  107,  171,  171,  171,  171,
-          152,  152,  152,  152,  152,  152,  152,  152,   58,   58,
-          166,  166,  166,  166,  172,  172,  162,  162,  162,  173,
-          173,  173,  173,  173,  173,   73,   73,   65,   65,   65,
-           65,  129,  129,  129,  129,  176,  175,  165,  165,  165,
-          165,  165,  165,  165,  164,  164,  164,  174,  174,  174,
-          174,  106,  170,  178,  178,  177,  177,  179,  179,  179,
-          179,  179,  179,  179,  179,  167,  167,  167,  167,  181,
-          182,  180,  180,  180,  180,  180,  180,  180,  180,  183,
-          183,  183,  183
+           42,   42,  155,  149,  149,  154,  154,  157,  158,  158,
+          159,  160,  161,  161,  161,  161,   19,   19,   72,   72,
+           72,   72,  150,  150,  150,  150,  163,  163,  151,  151,
+          153,  153,  153,  156,  156,  168,  168,  168,  168,  168,
+          168,  168,  168,  168,  169,  169,  169,  107,  171,  171,
+          171,  171,  152,  152,  152,  152,  152,  152,  152,  152,
+           58,   58,  166,  166,  166,  166,  172,  172,  162,  162,
+          162,  173,  173,  173,  173,  173,  173,   73,   73,   65,
+           65,   65,   65,  129,  129,  129,  129,  176,  175,  165,
+          165,  165,  165,  165,  165,  165,  164,  164,  164,  174,
+          174,  174,  174,  106,  170,  178,  178,  177,  177,  179,
+          179,  179,  179,  179,  179,  179,  179,  167,  167,  167,
+          167,  181,  182,  180,  180,  180,  180,  180,  180,  180,
+          180,  183,  183,  183,  183
     );
 
     protected $ruleToLength = array(
@@ -1093,53 +1096,53 @@ class Php7 extends \PhpParser\ParserAbstract
             4,    2,    3,    1,    1,    7,    6,    2,    3,    1,
             2,    3,    1,    2,    3,    1,    1,    3,    1,    3,
             1,    2,    2,    3,    1,    3,    2,    3,    1,    3,
-            2,    0,    1,    1,    1,    1,    1,    3,    7,   10,
-            5,    7,    9,    5,    3,    3,    3,    3,    3,    3,
-            1,    2,    5,    7,    9,    6,    5,    6,    3,    2,
-            1,    1,    1,    0,    2,    1,    3,    8,    0,    4,
-            2,    1,    3,    0,    1,    0,    1,    0,    1,    3,
-            1,    1,    1,    8,    9,    7,    8,    7,    6,    8,
-            0,    2,    0,    2,    1,    2,    1,    2,    1,    1,
-            1,    0,    2,    0,    2,    0,    2,    2,    1,    3,
-            1,    4,    1,    4,    1,    1,    4,    2,    1,    3,
-            3,    3,    4,    4,    5,    0,    2,    4,    3,    1,
-            1,    7,    0,    2,    1,    3,    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,    1,    1,    3,    3,    3,
-            1,    3,    3,    3,    3,    3,    1,    3,    3,    1,
-            1,    2,    1,    1,    0,    1,    0,    2,    2,    2,
-            4,    3,    1,    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,    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,    2,    0,    1,    1,    1,    1,    1,    3,    7,
+           10,    5,    7,    9,    5,    3,    3,    3,    3,    3,
+            3,    1,    2,    5,    7,    9,    6,    5,    6,    3,
+            2,    1,    1,    1,    0,    2,    1,    3,    8,    0,
+            4,    2,    1,    3,    0,    1,    0,    1,    0,    1,
+            3,    1,    1,    1,    8,    9,    7,    8,    7,    6,
+            8,    0,    2,    0,    2,    1,    2,    1,    2,    1,
+            1,    1,    0,    2,    0,    2,    0,    2,    2,    1,
+            3,    1,    4,    1,    4,    1,    1,    4,    2,    1,
+            3,    3,    3,    4,    4,    5,    0,    2,    4,    3,
+            1,    1,    7,    0,    2,    1,    3,    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,    1,    1,    3,    3,
+            3,    1,    3,    3,    3,    3,    3,    1,    3,    3,
+            1,    1,    2,    1,    1,    0,    1,    0,    2,    2,
+            2,    4,    3,    1,    1,    3,    1,    2,    2,    3,
+            2,    3,    1,    1,    2,    3,    1,    1,    3,    2,
+            0,    1,    5,    5,    6,   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,    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,    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,    1,
-            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,    5,    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
+            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,    1,    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,    5,    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(): void {
@@ -1599,20 +1602,20 @@ class Php7 extends \PhpParser\ParserAbstract
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             149 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos-(3-1)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributeStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             150 => function ($stackPos) {
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
+                 $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos-(3-1)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributeStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             151 => function ($stackPos) {
-                 $this->semValue = array();
+                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
             },
             152 => 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)];
+                 $this->semValue = array();
             },
             153 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $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)];
             },
             154 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -1621,9 +1624,12 @@ class Php7 extends \PhpParser\ParserAbstract
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             156 => function ($stackPos) {
-                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             157 => function ($stackPos) {
+                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            158 => function ($stackPos) {
 
         if ($this->semStack[$stackPos-(3-2)]) {
             $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
@@ -1633,46 +1639,46 @@ class Php7 extends \PhpParser\ParserAbstract
         }
 
             },
-            158 => function ($stackPos) {
+            159 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            159 => function ($stackPos) {
+            160 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
-            160 => function ($stackPos) {
+            161 => function ($stackPos) {
                  $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            161 => function ($stackPos) {
+            162 => function ($stackPos) {
                  $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            162 => function ($stackPos) {
+            163 => function ($stackPos) {
                  $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            163 => function ($stackPos) {
+            164 => function ($stackPos) {
                  $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            164 => function ($stackPos) {
+            165 => function ($stackPos) {
                  $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            165 => function ($stackPos) {
+            166 => function ($stackPos) {
                  $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            166 => function ($stackPos) {
+            167 => function ($stackPos) {
                  $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            167 => function ($stackPos) {
+            168 => function ($stackPos) {
                  $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            168 => function ($stackPos) {
+            169 => function ($stackPos) {
                  $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            169 => function ($stackPos) {
+            170 => function ($stackPos) {
                  $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            170 => function ($stackPos) {
+            171 => function ($stackPos) {
                  $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            171 => function ($stackPos) {
+            172 => function ($stackPos) {
 
         $e = $this->semStack[$stackPos-(2-1)];
         if ($e instanceof Expr\Throw_) {
@@ -1684,1145 +1690,1143 @@ class Php7 extends \PhpParser\ParserAbstract
         }
 
             },
-            172 => function ($stackPos) {
+            173 => function ($stackPos) {
                  $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            173 => function ($stackPos) {
+            174 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            174 => function ($stackPos) {
+            175 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            175 => function ($stackPos) {
+            176 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            176 => function ($stackPos) {
+            177 => function ($stackPos) {
                  $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            177 => function ($stackPos) {
+            178 => function ($stackPos) {
                  $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
             },
-            178 => function ($stackPos) {
+            179 => function ($stackPos) {
                  $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            179 => function ($stackPos) {
+            180 => function ($stackPos) {
                  $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            180 => function ($stackPos) {
+            181 => function ($stackPos) {
                  $this->semValue = array(); /* means: no statement */
             },
-            181 => function ($stackPos) {
+            182 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            182 => function ($stackPos) {
+            183 => function ($stackPos) {
                  $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
             if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
             },
-            183 => function ($stackPos) {
+            184 => function ($stackPos) {
                  $this->semValue = array();
             },
-            184 => function ($stackPos) {
+            185 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            185 => function ($stackPos) {
+            186 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            186 => function ($stackPos) {
+            187 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            187 => function ($stackPos) {
+            188 => function ($stackPos) {
                  $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
-            188 => function ($stackPos) {
+            189 => function ($stackPos) {
                  $this->semValue = null;
             },
-            189 => function ($stackPos) {
+            190 => function ($stackPos) {
                  $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            190 => function ($stackPos) {
+            191 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            191 => function ($stackPos) {
+            192 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            192 => function ($stackPos) {
+            193 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            193 => function ($stackPos) {
+            194 => function ($stackPos) {
                  $this->semValue = false;
             },
-            194 => function ($stackPos) {
+            195 => function ($stackPos) {
                  $this->semValue = true;
             },
-            195 => function ($stackPos) {
+            196 => function ($stackPos) {
                  $this->semValue = false;
             },
-            196 => function ($stackPos) {
+            197 => function ($stackPos) {
                  $this->semValue = true;
             },
-            197 => function ($stackPos) {
+            198 => function ($stackPos) {
                  $this->semValue = false;
             },
-            198 => function ($stackPos) {
+            199 => function ($stackPos) {
                  $this->semValue = true;
             },
-            199 => function ($stackPos) {
+            200 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            200 => function ($stackPos) {
+            201 => function ($stackPos) {
                  $this->semValue = [];
             },
-            201 => function ($stackPos) {
+            202 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            202 => function ($stackPos) {
+            203 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            203 => function ($stackPos) {
+            204 => function ($stackPos) {
                  $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
-            204 => function ($stackPos) {
+            205 => function ($stackPos) {
                  $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], '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);
             },
-            205 => function ($stackPos) {
+            206 => function ($stackPos) {
                  $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             $this->checkClass($this->semValue, $stackPos-(7-2));
             },
-            206 => function ($stackPos) {
+            207 => function ($stackPos) {
                  $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], '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->checkClass($this->semValue, $stackPos-(8-3));
             },
-            207 => function ($stackPos) {
+            208 => function ($stackPos) {
                  $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             $this->checkInterface($this->semValue, $stackPos-(7-3));
             },
-            208 => function ($stackPos) {
+            209 => function ($stackPos) {
                  $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            209 => function ($stackPos) {
+            210 => function ($stackPos) {
                  $this->semValue = new Stmt\Enum_($this->semStack[$stackPos-(8-3)], ['scalarType' => $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->checkEnum($this->semValue, $stackPos-(8-3));
             },
-            210 => function ($stackPos) {
-                 $this->semValue = null;
-            },
             211 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             212 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             213 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             214 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             215 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = 0;
             },
             216 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             217 => function ($stackPos) {
-                 $this->checkClassModifier($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)];
             },
             218 => function ($stackPos) {
-                 $this->semValue = Modifiers::ABSTRACT;
+                 $this->checkClassModifier($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)];
             },
             219 => function ($stackPos) {
-                 $this->semValue = Modifiers::FINAL;
+                 $this->semValue = Modifiers::ABSTRACT;
             },
             220 => function ($stackPos) {
-                 $this->semValue = Modifiers::READONLY;
+                 $this->semValue = Modifiers::FINAL;
             },
             221 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = Modifiers::READONLY;
             },
             222 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             223 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             224 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = array();
             },
             225 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             226 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = array();
             },
             227 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             228 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             229 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             230 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             231 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             232 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             233 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             234 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             235 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             236 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = null;
             },
             237 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             238 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             239 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             240 => function ($stackPos) {
-                 $this->semValue = new Node\DeclareItem($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)];
             },
             241 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Node\DeclareItem($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             242 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             243 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             244 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             245 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(5-3)];
             },
             246 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             247 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             248 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             249 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             250 => function ($stackPos) {
                 $this->semValue = $this->semStack[$stackPos];
             },
             251 => function ($stackPos) {
-                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             252 => function ($stackPos) {
-                 $this->semValue = [];
+                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             253 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = [];
             },
             254 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             255 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             256 => function ($stackPos) {
-                 $this->semValue = new Node\MatchArm($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)];
             },
             257 => function ($stackPos) {
-                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             258 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             259 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             260 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             261 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             262 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             263 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             264 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             265 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             266 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
             },
             267 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             268 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             269 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
+                 $this->semValue = null;
             },
             270 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
             },
             271 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             272 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
             },
             273 => function ($stackPos) {
-                 $this->semValue = array($this->fixupArrayDestructuring($this->semStack[$stackPos-(1-1)]), false);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             274 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->fixupArrayDestructuring($this->semStack[$stackPos-(1-1)]), false);
             },
             275 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             276 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             277 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             278 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             279 => 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 = 0;
             },
             280 => function ($stackPos) {
-                 $this->semValue = Modifiers::PUBLIC;
+                 $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)];
             },
             281 => function ($stackPos) {
-                 $this->semValue = Modifiers::PROTECTED;
+                 $this->semValue = Modifiers::PUBLIC;
             },
             282 => function ($stackPos) {
-                 $this->semValue = Modifiers::PRIVATE;
+                 $this->semValue = Modifiers::PROTECTED;
             },
             283 => function ($stackPos) {
-                 $this->semValue = Modifiers::READONLY;
+                 $this->semValue = Modifiers::PRIVATE;
             },
             284 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
-            $this->checkParam($this->semValue);
+                 $this->semValue = Modifiers::READONLY;
             },
             285 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
             $this->checkParam($this->semValue);
             },
             286 => function ($stackPos) {
-                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
+            $this->checkParam($this->semValue);
             },
             287 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
             },
             288 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             289 => function ($stackPos) {
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             290 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             291 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             292 => function ($stackPos) {
-                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             293 => function ($stackPos) {
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             294 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
             },
             295 => 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);
             },
             296 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             297 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             298 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             299 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             300 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             301 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             302 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             303 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             304 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             305 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             306 => function ($stackPos) {
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             307 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             308 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             309 => function ($stackPos) {
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             310 => 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);
             },
             311 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             312 => function ($stackPos) {
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             313 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             314 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             315 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             316 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             317 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             318 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             319 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             320 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = array();
             },
             321 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-2)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             322 => function ($stackPos) {
-                 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(3-2)]);
             },
             323 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             324 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             325 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             326 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             327 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             328 => 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 = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             329 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-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)]);
             },
             330 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             331 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             332 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             333 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             334 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             335 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             336 => function ($stackPos) {
-                 $this->semValue = new Node\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             337 => function ($stackPos) {
-                 $this->semValue = new Node\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             338 => 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 = new Node\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             339 => function ($stackPos) {
-                 $this->semValue = array();
+                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
             },
             340 => function ($stackPos) {
+                 $this->semValue = array();
+            },
+            341 => 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)];
             },
-            341 => function ($stackPos) {
+            342 => 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));
             },
-            342 => function ($stackPos) {
+            343 => 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));
             },
-            343 => 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));
-            },
             344 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-4)]);
+            $this->checkClassConst($this->semValue, $stackPos-(6-2));
             },
             345 => 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);
+                 $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));
             },
             346 => function ($stackPos) {
-                 $this->semValue = null; /* will be skipped */
+                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             347 => function ($stackPos) {
-                 $this->semValue = array();
+                 $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);
             },
             348 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = null; /* will be skipped */
             },
             349 => function ($stackPos) {
                  $this->semValue = array();
             },
             350 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             351 => 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);
+                 $this->semValue = array();
             },
             352 => 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);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             353 => 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 = 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);
             },
             354 => 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 = 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);
             },
             355 => 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 = 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);
             },
             356 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $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);
             },
             357 => 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);
             },
             358 => function ($stackPos) {
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             359 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             360 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
             },
             361 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             362 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             363 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             364 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = 0;
             },
             365 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = 0;
             },
             366 => 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)];
             },
             367 => function ($stackPos) {
-                 $this->semValue = Modifiers::PUBLIC;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             368 => function ($stackPos) {
-                 $this->semValue = Modifiers::PROTECTED;
+                 $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)];
             },
             369 => function ($stackPos) {
-                 $this->semValue = Modifiers::PRIVATE;
+                 $this->semValue = Modifiers::PUBLIC;
             },
             370 => function ($stackPos) {
-                 $this->semValue = Modifiers::STATIC;
+                 $this->semValue = Modifiers::PROTECTED;
             },
             371 => function ($stackPos) {
-                 $this->semValue = Modifiers::ABSTRACT;
+                 $this->semValue = Modifiers::PRIVATE;
             },
             372 => function ($stackPos) {
-                 $this->semValue = Modifiers::FINAL;
+                 $this->semValue = Modifiers::STATIC;
             },
             373 => function ($stackPos) {
-                 $this->semValue = Modifiers::READONLY;
+                 $this->semValue = Modifiers::ABSTRACT;
             },
             374 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = Modifiers::FINAL;
             },
             375 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Modifiers::READONLY;
             },
             376 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             377 => function ($stackPos) {
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             378 => function ($stackPos) {
-                 $this->semValue = new Node\PropertyItem($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)];
             },
             379 => function ($stackPos) {
-                 $this->semValue = new Node\PropertyItem($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             380 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\PropertyItem($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             381 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\PropertyItem($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             382 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             383 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             384 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             385 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             386 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             387 => 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-(1-1)];
             },
             388 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->fixupArrayDestructuring($this->semStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             389 => function ($stackPos) {
                  $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             390 => 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 = new Expr\Assign($this->fixupArrayDestructuring($this->semStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             391 => function ($stackPos) {
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            392 => function ($stackPos) {
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            393 => function ($stackPos) {
                  $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             if (!$this->phpVersion->allowsAssignNewByReference()) {
                 $this->emitError(new Error('Cannot assign new by reference', $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes));
             }
 
             },
-            392 => function ($stackPos) {
+            394 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            393 => function ($stackPos) {
+            395 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            394 => function ($stackPos) {
+            396 => function ($stackPos) {
                  $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            395 => function ($stackPos) {
+            397 => 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);
             },
-            396 => function ($stackPos) {
+            398 => 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);
             },
-            397 => function ($stackPos) {
+            399 => 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);
             },
-            398 => function ($stackPos) {
+            400 => 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);
             },
-            399 => function ($stackPos) {
+            401 => 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);
             },
-            400 => function ($stackPos) {
+            402 => 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);
             },
-            401 => function ($stackPos) {
+            403 => 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);
             },
-            402 => function ($stackPos) {
+            404 => 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);
             },
-            403 => function ($stackPos) {
+            405 => 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);
             },
-            404 => function ($stackPos) {
+            406 => 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);
             },
-            405 => function ($stackPos) {
+            407 => 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);
             },
-            406 => function ($stackPos) {
+            408 => 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);
             },
-            407 => function ($stackPos) {
+            409 => 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);
             },
-            408 => function ($stackPos) {
+            410 => function ($stackPos) {
                  $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            409 => function ($stackPos) {
+            411 => function ($stackPos) {
                  $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            410 => function ($stackPos) {
+            412 => function ($stackPos) {
                  $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            411 => function ($stackPos) {
+            413 => function ($stackPos) {
                  $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            412 => function ($stackPos) {
+            414 => 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);
             },
-            413 => function ($stackPos) {
+            415 => 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);
             },
-            414 => function ($stackPos) {
+            416 => 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);
             },
-            415 => function ($stackPos) {
+            417 => 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);
             },
-            416 => function ($stackPos) {
+            418 => 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);
             },
-            417 => function ($stackPos) {
+            419 => 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);
             },
-            418 => function ($stackPos) {
+            420 => 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);
             },
-            419 => function ($stackPos) {
+            421 => 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);
             },
-            420 => function ($stackPos) {
+            422 => 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);
             },
-            421 => function ($stackPos) {
+            423 => 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);
             },
-            422 => function ($stackPos) {
+            424 => 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);
             },
-            423 => function ($stackPos) {
+            425 => 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);
             },
-            424 => function ($stackPos) {
+            426 => 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);
             },
-            425 => function ($stackPos) {
+            427 => 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);
             },
-            426 => function ($stackPos) {
+            428 => 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);
             },
-            427 => function ($stackPos) {
+            429 => 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);
             },
-            428 => function ($stackPos) {
+            430 => 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);
             },
-            429 => function ($stackPos) {
+            431 => 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);
             },
-            430 => function ($stackPos) {
+            432 => function ($stackPos) {
                  $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            431 => function ($stackPos) {
+            433 => function ($stackPos) {
                  $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            432 => function ($stackPos) {
+            434 => function ($stackPos) {
                  $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            433 => function ($stackPos) {
+            435 => function ($stackPos) {
                  $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            434 => function ($stackPos) {
+            436 => 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);
             },
-            435 => function ($stackPos) {
+            437 => 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);
             },
-            436 => function ($stackPos) {
+            438 => 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);
             },
-            437 => function ($stackPos) {
+            439 => 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);
             },
-            438 => function ($stackPos) {
+            440 => 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);
             },
-            439 => function ($stackPos) {
+            441 => 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);
             },
-            440 => function ($stackPos) {
+            442 => 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);
             },
-            441 => function ($stackPos) {
+            443 => 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);
             },
-            442 => function ($stackPos) {
+            444 => 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);
             },
-            443 => function ($stackPos) {
+            445 => function ($stackPos) {
                  $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            444 => function ($stackPos) {
+            446 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            445 => function ($stackPos) {
+            447 => 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);
             },
-            446 => function ($stackPos) {
+            448 => 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);
             },
-            447 => function ($stackPos) {
+            449 => 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);
             },
-            448 => function ($stackPos) {
+            450 => function ($stackPos) {
                  $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            449 => function ($stackPos) {
+            451 => function ($stackPos) {
                  $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            450 => function ($stackPos) {
+            452 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            451 => function ($stackPos) {
+            453 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            452 => function ($stackPos) {
+            454 => function ($stackPos) {
                  $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            453 => function ($stackPos) {
+            455 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            454 => function ($stackPos) {
+            456 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            455 => function ($stackPos) {
+            457 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            456 => function ($stackPos) {
+            458 => 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);
             },
-            457 => function ($stackPos) {
+            459 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            458 => function ($stackPos) {
+            460 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            459 => function ($stackPos) {
+            461 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            460 => function ($stackPos) {
+            462 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            461 => function ($stackPos) {
+            463 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            462 => function ($stackPos) {
+            464 => 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);
             },
-            463 => function ($stackPos) {
-                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
-            },
-            464 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
             465 => function ($stackPos) {
-                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             466 => function ($stackPos) {
-                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             467 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             468 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             469 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             470 => function ($stackPos) {
-                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             471 => function ($stackPos) {
-                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             472 => 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);
+                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             473 => 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);
+                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             474 => 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);
+                 $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);
             },
             475 => 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);
+                 $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);
             },
             476 => 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);
+                 $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);
             },
             477 => 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);
+                 $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);
             },
             478 => 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);
+                 $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);
             },
             479 => 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);
+                 $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);
             },
             480 => 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);
+                 $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);
             },
             481 => function ($stackPos) {
-                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $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);
             },
             482 => function ($stackPos) {
-                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array(new Stmt\Class_(null, ['type' => $this->semStack[$stackPos-(8-2)], '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);
             },
             483 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             484 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             485 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             486 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             487 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             488 => function ($stackPos) {
-                 $this->semValue = new Node\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             489 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             490 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             491 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             492 => function ($stackPos) {
                  $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             493 => 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);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             494 => 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);
             },
             495 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $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);
             },
             496 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             497 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             499 => function ($stackPos) {
-                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             500 => 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);
             },
             501 => 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);
             },
             502 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             503 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             504 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             505 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             506 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             507 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             508 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             509 => function ($stackPos) {
-                 $this->semValue = array(new Node\InterpolatedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             510 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             511 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array(new Node\InterpolatedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             512 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             513 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             514 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             515 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             516 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             517 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             518 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             519 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             520 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             521 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             522 => 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\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             523 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             524 => 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 Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             525 => function ($stackPos) {
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+            },
+            526 => 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;
+            },
+            527 => 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);
             },
-            526 => function ($stackPos) {
+            528 => 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);
             $this->createdArrays->attach($this->semValue);
             },
-            527 => function ($stackPos) {
+            529 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->createdArrays->attach($this->semValue);
             },
-            528 => function ($stackPos) {
+            530 => function ($stackPos) {
                  $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            529 => function ($stackPos) {
+            531 => 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\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\InterpolatedString($this->semStack[$stackPos-(3-2)], $attrs);
             },
-            530 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, $this->phpVersion->allowsInvalidOctals());
-            },
-            531 => function ($stackPos) {
-                 $this->semValue = Scalar\Float_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
             532 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, $this->phpVersion->allowsInvalidOctals());
             },
             533 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = Scalar\Float_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             534 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             535 => 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 = $this->semStack[$stackPos-(1-1)];
             },
             536 => 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->semStack[$stackPos-(1-1)];
             },
             537 => 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);
             },
             538 => function ($stackPos) {
-                 $this->semValue = null;
+                 $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);
             },
             539 => 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);
             },
             540 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             541 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             542 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             543 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             544 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2834,205 +2838,211 @@ class Php7 extends \PhpParser\ParserAbstract
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             547 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             548 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             549 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             550 => 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)];
             },
             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);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             552 => 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);
             },
             553 => 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 = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             554 => 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)];
             },
             555 => function ($stackPos) {
-                 $this->semValue = null;
+                 $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);
             },
             556 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $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);
             },
             557 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             558 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             559 => 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 = $this->semStack[$stackPos-(1-1)];
             },
             560 => 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 = $this->semStack[$stackPos-(1-1)];
             },
             561 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             562 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-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);
             },
             563 => 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)];
             },
             564 => 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 = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             565 => 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\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             566 => 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\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
             },
             567 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             568 => 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\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             569 => 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)];
             },
             570 => 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\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             571 => 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\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             572 => 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\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             573 => 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);
             },
             574 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             575 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             576 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             577 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             578 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             579 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             580 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             581 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Expr\List_::KIND_LIST);
-            $this->postprocessList($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             582 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end]->value instanceof Expr\Error) array_pop($this->semValue);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             583 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Expr\List_::KIND_LIST);
+            $this->postprocessList($this->semValue);
             },
             584 => function ($stackPos) {
-                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end]->value instanceof Expr\Error) array_pop($this->semValue);
             },
             585 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                $this->semValue = $this->semStack[$stackPos];
             },
             586 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
             },
             587 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             588 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             589 => function ($stackPos) {
                  $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             590 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             591 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             592 => function ($stackPos) {
                  $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             593 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true);
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             594 => function ($stackPos) {
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            595 => function ($stackPos) {
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true);
+            },
+            596 => function ($stackPos) {
                  /* Create an Error node now to remember the position. We'll later either report an error,
              or convert this into a null element, depending on whether this is a creation or destructuring context. */
           $attrs = $this->createEmptyElemAttributes($this->lookaheadStartAttributes);
           $this->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, false, $attrs);
             },
-            595 => function ($stackPos) {
+            597 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            596 => function ($stackPos) {
+            598 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            597 => function ($stackPos) {
+            599 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            598 => function ($stackPos) {
+            600 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
             },
-            599 => function ($stackPos) {
+            601 => function ($stackPos) {
                  $this->semValue = new Node\InterpolatedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            600 => function ($stackPos) {
+            602 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            601 => function ($stackPos) {
+            603 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            602 => function ($stackPos) {
+            604 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            603 => function ($stackPos) {
+            605 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            604 => function ($stackPos) {
+            606 => function ($stackPos) {
                  $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            605 => function ($stackPos) {
+            607 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            606 => function ($stackPos) {
+            608 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            607 => function ($stackPos) {
+            609 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            608 => function ($stackPos) {
+            610 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            609 => function ($stackPos) {
+            611 => function ($stackPos) {
                  $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            610 => function ($stackPos) {
+            612 => function ($stackPos) {
                  $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            611 => function ($stackPos) {
+            613 => function ($stackPos) {
                  $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            612 => function ($stackPos) {
+            614 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/lib/PhpParser/Parser/Php8.php b/lib/PhpParser/Parser/Php8.php
index cdf3e436..009a8b6a 100644
--- a/lib/PhpParser/Parser/Php8.php
+++ b/lib/PhpParser/Parser/Php8.php
@@ -160,16 +160,16 @@ class Php8 extends \PhpParser\ParserAbstract
     public const T_ATTRIBUTE = 395;
 
     protected $tokenToSymbolMapSize = 396;
-    protected $actionTableSize = 1252;
-    protected $gotoTableSize = 646;
+    protected $actionTableSize = 1260;
+    protected $gotoTableSize = 656;
 
     protected $invalidSymbol = 168;
     protected $errorSymbol = 1;
     protected $defaultAction = -32766;
     protected $unexpectedTokenRule = 32767;
 
-    protected $YY2TBLSTATE = 429;
-    protected $numNonLeafStates = 730;
+    protected $YY2TBLSTATE = 434;
+    protected $numNonLeafStates = 739;
 
     protected $symbolToName = array(
         "EOF",
@@ -386,248 +386,248 @@ class Php8 extends \PhpParser\ParserAbstract
     );
 
     protected $action = array(
-          132,  133,  134,  578,  135,  136,    0,  742,  743,  744,
-          137,   37,-32766,-32766,-32766,  979,-32766,-32766,-32766,-32766,
-        -32766,-32766, 1294,  817,-32767,-32767,-32767,-32767,  101,  102,
-          103,-32766,  930,-32766,  828,  736,  735,-32766, 1016,-32766,
+          133,  134,  135,  582,  136,  137,    0,  751,  752,  753,
+          138,   38,  327,-32766,-32766,-32766,-32766,-32766,-32766,  837,
+          826,-32767,-32767,-32767,-32767,  102,  103,  104, 1111, 1112,
+         1113, 1110, 1109, 1108, 1114,  745,  744,-32766, 1026,-32766,
         -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,
-        -32767, 1233, -364, 1025, -364,  745,-32766,-32766,-32766, 1100,
-         1101, 1102, 1099, 1098, 1097, 1103, -326, -192,  819,  267,
-          138,  399,  749,  750,  751,  752,  288,-32766,  423,-32766,
-        -32766,-32766,-32766,-32766,  602,  806,  753,  754,  755,  756,
-          757,  758,  759,  760,  761,  762,  782,  579,  783,  784,
-          785,  786,  774,  775,  340,  341,  777,  778,  763,  764,
-          765,  767,  768,  769,  351,  809,  810,  811,  812,  813,
-          580,  770,  771,  581,  582, -191,  794,  792,  793,  805,
-          789,  790,  826,    2,  583,  584,  788,  585,  586,  587,
-          588,  589,  590,  980,  821,-32766,-32766,-32766,  791,  591,
-          592,  703,  139,   19,  132,  133,  134,  578,  135,  136,
-         1049,  742,  743,  744,  137,   37,-32766,   34,-32766,-32766,
-        -32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766, -110,  128,
-          238,-32766,-32766,-32766,   81,  144, -591,-32766,  322,  736,
-          735,  608,  827, -591,  716,  386,-32766,   18,-32766,-32766,
-        -32766,-32766,-32766, 1314,-32766,-32766,-32766, 1310,  296,  745,
-         1313,   74,  104,  105,  106,  107,  108,  322,  271, 1339,
-         -326, -192, 1340,  267,  138,  399,  749,  750,  751,  752,
-          109,  476,  423,-32766,-32766,-32766,  551,  822,  126,  806,
-          753,  754,  755,  756,  757,  758,  759,  760,  761,  762,
-          782,  579,  783,  784,  785,  786,  774,  775,  340,  341,
-          777,  778,  763,  764,  765,  767,  768,  769,  351,  809,
-          810,  811,  812,  813,  580,  770,  771,  581,  582, -191,
-          794,  792,  793,  805,  789,  790,  817,  251,  583,  584,
-          788,  585,  586,  587,  588,  589,  590, 1266,   82,   83,
-           84, 1077,  791,  591,  592,  728,  148,  766,  737,  738,
-          739,  740,  741,  823,  742,  743,  744,  779,  780,   36,
-          307,   85,   86,   87,   88,   89,   90,   91,   92,   93,
-           94,   95,   96,   97,   98,   99,  100,  101,  102,  103,
-          104,  105,  106,  107,  108, -591,  271, -591,  309,  375,
-          376, 1100, 1101, 1102, 1099, 1098, 1097, 1103,  109,  417,
-          948,  949,  745,  477,  289,  950,-32766,-32766,-32766,  141,
-         1076,  944,-32766,  322,  377,  376,  746,  747,  748,  749,
-          750,  751,  752,  320,  417,  815,  335,-32766, -542,-32766,
-        -32766,  336,  806,  753,  754,  755,  756,  757,  758,  759,
-          760,  761,  762,  782,  804,  783,  784,  785,  786,  774,
-          775,  776,  803,  777,  778,  763,  764,  765,  767,  768,
-          769,  808,  809,  810,  811,  812,  813,  814,  770,  771,
-          772,  773, -545,  794,  792,  793,  805,  789,  790,  239,
-          -85,  781,  787,  788,  795,  796,  798,  797,  799,  800,
-        -32766,   21, -542, -542, 1022,  791,  802,  801,   49,   50,
-           51,  507,   52,   53,  423,  736,  735, -542,   54,   55,
-         -110,   56, 1025, 1092,  910, -110, 1025, -110,  289, -548,
-        -32766, -542,  303,-32766,-32766, -110, -110, -110, -110, -110,
-         -110, -110, -110,  365,  910,  288, -545, -545, 1233,  279,
-          369,-32766, 1233,  853,  706,  854,  -85,   57,   58,-32766,
-          384, -541,   59,  435,   60,  245,  246,   61,   62,   63,
-           64,   65,   66,   67,   68, -545,   27,  269,   69,  439,
-          508, 1025,  -16, -340, 1260, 1261,  509,  436,  826, 1228,
-         1227, 1229, 1258,   41,   24,  510,  932,  511, 1078,  512,
-          910,  513,  825,  437,  514,  515,  853,  900,  854,   43,
-           44,  440,  372,  371,-32766,   45,  516, 1012, 1011, 1010,
-         1013,  363,  334,  438, 1226, -541, -541,  900, 1219,  826,
-          518,  519,  520,  826, 1022,  352, 1025, -270, 1254,  932,
-         -541,  832,  522,  523,  150, 1247, 1248, 1249, 1250, 1244,
-         1245,  295, -547, -582, -541, -582, 1025, 1251, 1246,  288,
-         1224, 1228, 1227, 1229,  296,  102,  103,   70,  910,  652,
-           25,  318,  319,  322, -152, -152, -152,  910,  357, -110,
-          123, 1024,  912,  900,-32766,  910,  701,  151,-32766, -152,
-          -87, -152,  153, -152, 1048, -152,-32766,-32766,  707, 1228,
-         1227, 1229,  912,  124, -588,  370,  701,  708,   74,  296,
-          154, -588,   74,  155,  322,  711,  948,  949,  322,  826,
-          129,  517,  910,  283,  157,  323,  886,  944, -110, -110,
-         -110,   31,  110,  111,  112,  113,  114,  115,  116,  117,
-          118,  119,  120,  121,  122,  736,  735,  453,  454,  455,
-           32,  900,  718,  736,  735, -543,  826,  130,  912, 1329,
-          900,  143,  701, -152,  671,  672,  948,  949,  900,  149,
-          402,  950,  373,  374, 1138, 1140,   47,  945,  378,  379,
-          643,  644,-32766,  158,  159, -540,   27,  160, 1226,  461,
-          462,  161,  -84,  -78,  -73,-32766,-32766,-32766,  826,-32766,
-          140,-32766, 1258,-32766,  322,  900,-32766,  284,  -72, 1022,
-          -71,-32766,-32766,-32766,   -4,  910,  -70,-32766,-32766, -543,
-         -543,   35,  248,-32766,  414,  -69,  912,  -68,  -67,  -66,
-          701, 1025,-32766,  -65, -543,  965,  736,  735, 1219,  701,
-          297,  298, -540,  912,  -46, -300,   48,  701, -543, -540,
-         -540,  -18,  522,  523,  279, 1247, 1248, 1249, 1250, 1244,
-         1245,  147,   73, -588, -540, -588,  270, 1251, 1246,  125,
-          280,  717,  720,-32766,  909,  146,  926,   72, -540, 1226,
-          912, -296,  319,  322,  701,  277,-32766,-32766,-32766,  278,
-        -32766,  281,-32766,  282,-32766,  328,  285,-32766,  900,  290,
-          291,  109,-32766,-32766,-32766,  271, -540, -540,-32766,-32766,
-          299,  300,  -50,  681,-32766,  414,  826,  145,-32766, 1107,
-          370, -540,  430,-32766,  658,  368,   20,  294, 1341,  817,
-          641,  948,  949,  304,  694, -540,  517,  553,  301,  127,
-          557,  521,  944, -110, -110, -110,  131,  653,  308,  674,
-          458,  434,-32766, 1265,  302,-32766,  563, 1267,  487,  928,
-           39, 1226,  606,  825,    9,  659,  675, -505,-32766,-32766,
-        -32766, -495,-32766,  912,-32766,    7,-32766,  701,   -4,-32766,
-           23,    0,  296,    0,-32766,-32766,-32766, 1255,   33,-32766,
-        -32766,-32766,  910,    0,    0, 1226,-32766,  414,    0,    0,
+        -32767, 1244,-32766,-32766, 1321,  754, 1111, 1112, 1113, 1110,
+         1109, 1108, 1114,  458,  459,  460,    2,  989, 1305,  265,
+          139,  403,  758,  759,  760,  761,  466,  467,  428,  835,
+          606,  -16, 1340,   23,  292,  815,  762,  763,  764,  765,
+          766,  767,  768,  769,  770,  771,  791,  583,  792,  793,
+          794,  795,  783,  784,  344,  345,  786,  787,  772,  773,
+          774,  776,  777,  778,  355,  818,  819,  820,  821,  822,
+          584,  779,  780,  585,  586,  940,  803,  801,  802,  814,
+          798,  799,  835,  826,  587,  588,  797,  589,  590,  591,
+          592,  593,  594, -327,   36,  251,   35, -193,  800,  595,
+          596, -192,  140,  -85,  133,  134,  135,  582,  136,  137,
+         1059,  751,  752,  753,  138,   38,  129, -110, -110, -584,
+        -32766, -584, -110,-32766,-32766,-32766,  241,  836, -110,  145,
+          958,  959,-32766,-32766,-32766,  960, -593,-32766,  481,  745,
+          744,  954, 1035, -593,-32766,  990,-32766,-32766,-32766,-32766,
+        -32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,  299,  754,
+          831,   75,-32766,-32766,-32766,  291,  142,  326,  242,  -85,
+          326,  381,  380,  265,  139,  403,  758,  759,  760,  761,
+           82,  422,  428,-32766,  326,-32766,-32766,-32766,-32766,  815,
+          762,  763,  764,  765,  766,  767,  768,  769,  770,  771,
+          791,  583,  792,  793,  794,  795,  783,  784,  344,  345,
+          786,  787,  772,  773,  774,  776,  777,  778,  355,  818,
+          819,  820,  821,  822,  584,  779,  780,  585,  586,  254,
+          803,  801,  802,  814,  798,  799,  832,  725,  587,  588,
+          797,  589,  590,  591,  592,  593,  594, -327,   83,   84,
+           85, -193,  800,  595,  596, -192,  149,  775,  746,  747,
+          748,  749,  750,  151,  751,  752,  753,  788,  789,   37,
+          482,   86,   87,   88,   89,   90,   91,   92,   93,   94,
+           95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
+          105,  106,  107,  108,  109, -593,  274, -593,-32766,-32766,
+        -32766,-32766,-32766,-32766,  310, 1088,  127,  312,  110,  737,
+         1325,   21,  754,-32766,-32766,-32766, -271, 1324,-32766,-32766,
+         1087,-32766,-32766,-32766,-32766,-32766,  755,  756,  757,  758,
+          759,  760,  761, 1103,-32766,  824,-32766,-32766, -544,  428,
+         1035,  323,  815,  762,  763,  764,  765,  766,  767,  768,
+          769,  770,  771,  791,  813,  792,  793,  794,  795,  783,
+          784,  785,  812,  786,  787,  772,  773,  774,  776,  777,
+          778,  817,  818,  819,  820,  821,  822,  823,  779,  780,
+          781,  782, 1032,  803,  801,  802,  814,  798,  799,  745,
+          744,  790,  796,  797,  804,  805,  807,  806,  808,  809,
+          152,-32766, -544, -544, 1035,  800,  811,  810,   50,   51,
+           52,  512,   53,   54, 1239, 1238, 1240, -544,   55,   56,
+         -110,   57,-32766, 1089,  920, -110,  555, -110,  292, -550,
+          339, -544,  306,  103,  104, -110, -110, -110, -110, -110,
+         -110, -110, -110,  105,  106,  107,  108,  109, 1244,  274,
+          379,  380, -590, -366,  715, -366,  340,   58,   59, -590,
+          422,  110,   60,  369,   61,  248,  249,   62,   63,   64,
+           65,   66,   67,   68,   69, -543,   28,  267,   70,  444,
+          513,-32766,  373, -341, 1271, 1272,  514, 1277,  835,  862,
+          388,  863, 1269,   42,   25,  515,  942,  516,  942,  517,
+          920,  518,  299, 1035,  519,  520, 1265,  910,  440,   44,
+           45,  445,  376,  375,-32766,   46,  521, 1022, 1021, 1020,
+         1023,  367,  338,  390, 1237,    7,  291,  441, 1230,  835,
+          523,  524,  525,  442, 1244,  356, 1035,  361,  834, -543,
+         -543,  154,  527,  528,  443, 1258, 1259, 1260, 1261, 1255,
+         1256,  298,-32766,-32766, -543, -547, 1058, 1262, 1257,  291,
+         1235, 1239, 1238, 1240,  299,  841, -549,   71, -543,  656,
+           26,  321,  322,  326, -153, -153, -153,  920,  612,  675,
+          676, 1034,  922,  910,-32766,  286,  710,  835,  155, -153,
+          828, -153,  862, -153,  863, -153,  150,  406,  156, 1239,
+         1238, 1240,-32766,-32766,-32766,  374, 1350,  716,   75, 1351,
+          158, -590,   33, -590,  326,  835,  958,  959,  -78, -547,
+         -547,  522,  920,-32766,  377,  378,  896,  954, -110, -110,
+         -110,   32,  111,  112,  113,  114,  115,  116,  117,  118,
+          119,  120,  121,  122,  123,  745,  744,  -58, -547,  -57,
+         -110, -110,  717,  745,  744, -110,  382,  383,  922, 1032,
+          910, -110,  710, -153,  647,  648,  830,  124,  141,  125,
+        -32766, 1032,  326,  712, 1149, 1151,   48,  130,  131,  144,
+          159, 1035,-32766,  160,  161, -542,   28,  162, 1237,  920,
+          163,  299,  920, 1035,   75,-32766,-32766,-32766,  835,-32766,
+          326,-32766, 1269,-32766,  282,  910,-32766,  -87,  -84,  -78,
+          -73,-32766,-32766,-32766,   -4,  920,  282,-32766,-32766,  720,
+          -72,  -71,  727,-32766,  419,  -70,  -69,  -68,  -67,  -66,
+          287,  286,-32766,  -65,  -46,  922,  745,  744, 1230,  710,
+          300,  301, -545,  -18,  148, -301,  273,  283,  726, -542,
+         -542,  729,  527,  528,  920, 1258, 1259, 1260, 1261, 1255,
+         1256,  919,   74,  147, -542,  288,  293, 1262, 1257,  126,
+         -297,  280,  910,-32766,  281,  910,  284,   73, -542, 1237,
+          975,  690,  322,  326,  710,  285,-32766,-32766,-32766,  332,
+        -32766,  274,-32766,  294,-32766,  936,  110,-32766,  910,  685,
+          835, -542,-32766,-32766,-32766,  826, -545, -545,-32766,-32766,
+          146,-32766,  -50,  701,-32766,  419,  703,  691,   20, 1118,
+          374, -545,  435,-32766,  645, 1352, 1276,  297,  557,-32766,
+         1278,  958,  959,  561,  662, -545,  522,  910,  692,  693,
+          678,  526,  954, -110, -110, -110,  132,  922,  657,  463,
+          922,  710,  492, -507,  710,-32766, 1239, 1238, 1240,  663,
+          679, 1237,  282,  307,   10, -542, -542,  299,-32766,-32766,
+        -32766,   34,-32766,  922,-32766,  955,-32766,  710,   -4,-32766,
+         -542,  305,   40,  304,-32766,-32766,-32766,    0,    0,-32766,
+        -32766,-32766,  920,  311, -542, 1237,-32766,  419,  567,    0,
             0,    0,-32766,-32766,-32766,-32766,-32766,    0,-32766,    0,
-        -32766,    0,    0,-32766,    0,    0,  367,    0,-32766,-32766,
-        -32766,-32766,    0,   40,-32766,-32766,    0, 1226,  725,  726,
-        -32766,  414,  910,  845,-32766,-32766,-32766,  891,-32766,-32766,
-        -32766,  989,-32766,  966,  973,-32766,  963,  974,  889,  482,
-        -32766,-32766,-32766,-32766,  961, 1081,-32766,-32766, 1084, 1226,
-          570, 1085,-32766,  414, 1082, 1083,-32766,-32766,-32766, 1089,
-        -32766,-32766,-32766,  837,-32766,  900, 1280,-32766, 1298, 1332,
-          646,  722,-32766,-32766,-32766, -576, -575, -574,-32766,-32766,
-         -548, -248, -248, -248,-32766,  414, -547,  370, -546, -489,
-           27,  269,    1,-32766,   28,   29,   38,   42,  948,  949,
-           46,   71,  826,  517,   75,  900, 1258,   76,  886,  944,
-         -110, -110, -110,   77,   78,   79,   80,  142,  152,  156,
-          244, -247, -247, -247,  324,  352,  353,  370,  354,  355,
-          887,  356,  357,  358,  359,  360,  361,  362,  948,  949,
-          912,  364, 1219,  517,  701, -248,  431,  550,  886,  944,
-         -110, -110, -110, -273, -271, -270,   12,  523,   27, 1247,
-         1248, 1249, 1250, 1244, 1245,   13,   14,   15,   17,  401,
-          826, 1251, 1246,  478, 1258,  479,-32766,  486,  489,  490,
-          912,   72, 1226, 1336,  701, -247,  319,  322,  491,-32766,
-        -32766,-32766,  492,-32766,  496,-32766,  497,-32766,  498,  505,
-        -32766,  568,  688, 1237, 1178,-32766,-32766,-32766, 1256, 1051,
-         1219,-32766,-32766, 1050, 1031, 1214, 1027,-32766,  414, -275,
-         -102,   11,   16,   26,  293,  523,-32766, 1247, 1248, 1249,
-         1250, 1244, 1245,  400,  599,  603,  632,  693, 1182, 1251,
-         1246, 1232, 1179, 1311, 1259,  317,  366,  702,  705,   72,
-          709, -509,  710,  712,  319,  322,  713,  714,  715,  719,
-          704,    0, 1338,  848,  847,  856,    0,  938,  981,  855,
-         1337,  937,  935,  936,  939, 1210,  919,  929,  917,  971,
-          972,  630, 1335, 1292, 1281, 1299, 1308,    0, 1195,    0,
-            0,  322
+        -32766, -497,  922,-32766,    8,   24,  710,  371,-32766,-32766,
+        -32766,-32766,  610,   41,-32766,-32766,  938, 1237,  834,  734,
+        -32766,  419,  920,  735,-32766,-32766,-32766,  854,-32766,-32766,
+        -32766,  901,-32766,  999,  976,-32766,   49,  983,  973,  487,
+        -32766,-32766,-32766,-32766,  984,  899,-32766,-32766,  971, 1237,
+          574, 1092,-32766,  419, 1095, 1096,-32766,-32766,-32766, 1093,
+        -32766,-32766,-32766, 1094,-32766,  910, 1100,-32766, 1266,  846,
+         1291, 1309,-32766,-32766,-32766, 1343,  650,  320,-32766,-32766,
+         -578, -249, -249, -249,-32766,  419, -577,  374, -576, -550,
+           28,  267, -549,-32766, -548, -491,    1,   29,  958,  959,
+          302,  303,  835,  522,   30,  910, 1269,   39,  896,  954,
+         -110, -110, -110,   43,   47,  372,   72,   76,   77,   78,
+           79, -248, -248, -248,   80,   81,  143,  374,  153,  128,
+         -274,  157,  247,  328,  356,  357,  358,  359,  958,  959,
+          922,  360, 1230,  522,  710, -249,  361,  362,  896,  954,
+         -110, -110, -110,  363,  364,  365,  366,  528,   28, 1258,
+         1259, 1260, 1261, 1255, 1256,  368,  436,  554, -511, -272,
+          835, 1262, 1257, -271, 1269,   13,-32766,   14,   15,   16,
+          922,   73, 1237,  731,  710, -248,  322,  326,   18,-32766,
+        -32766,-32766,  405,-32766,  483,-32766,  484,-32766,  491,  494,
+        -32766,  495,  496,  497,  501,-32766,-32766,-32766,  502,  503,
+         1230,-32766,-32766,  510,  572,  696, 1248,-32766,  419, 1189,
+         1267, 1061, 1060, 1041, 1225,  528,-32766, 1258, 1259, 1260,
+         1261, 1255, 1256, 1037, -276, -102,   12,   17,   27, 1262,
+         1257,  296,  404,  603,  607,  636,  702, 1193, 1243,   73,
+          370, 1190, 1322,    0,  322,  326,  711,  714,  718,  719,
+          721,  722,  723,  724,  728,    0,  713,    0,  897, 1347,
+         1349,  857,  856,  865,  948,  991,  864, 1348,  947,  945,
+          946,  949, 1221,  929,  939,  927,  981,  982,  634, 1346,
+         1303, 1292, 1310, 1319,    0, 1206,    0, 1270,    0,  326
     );
 
     protected $actionCheck = array(
             2,    3,    4,    5,    6,    7,    0,    9,   10,   11,
-           12,   13,    9,   10,   11,   31,    9,   10,   11,    9,
-           10,   11,    1,   80,   44,   45,   46,   47,   48,   49,
-           50,  116,    1,   30,    1,   37,   38,   30,    1,   32,
+           12,   13,   70,    9,   10,   11,    9,   10,   11,    1,
+           80,   44,   45,   46,   47,   48,   49,   50,  116,  117,
+          118,  119,  120,  121,  122,   37,   38,   30,    1,   32,
            33,   34,   35,   36,   37,   38,   39,   40,   41,   42,
-           43,    1,  106,  138,  108,   57,    9,   10,   11,  116,
-          117,  118,  119,  120,  121,  122,    8,    8,   80,   71,
-           72,   73,   74,   75,   76,   77,  161,   30,   80,   32,
-           33,   34,   35,   36,    1,   87,   88,   89,   90,   91,
+           43,    1,    9,   10,    1,   57,  116,  117,  118,  119,
+          120,  121,  122,  129,  130,  131,    8,   31,    1,   71,
+           72,   73,   74,   75,   76,   77,  134,  135,   80,   82,
+            1,   31,   85,    8,   30,   87,   88,   89,   90,   91,
            92,   93,   94,   95,   96,   97,   98,   99,  100,  101,
           102,  103,  104,  105,  106,  107,  108,  109,  110,  111,
           112,  113,  114,  115,  116,  117,  118,  119,  120,  121,
-          122,  123,  124,  125,  126,    8,  128,  129,  130,  131,
-          132,  133,   82,    8,  136,  137,  138,  139,  140,  141,
-          142,  143,  144,  159,  156,    9,   10,   11,  150,  151,
-          152,  163,  154,    8,    2,    3,    4,    5,    6,    7,
-          162,    9,   10,   11,   12,   13,   30,    8,   32,   33,
-           34,   35,   36,   37,   38,    9,   10,   11,  128,    8,
-           97,    9,   10,   11,  163,    8,    1,  137,  167,   37,
-           38,   52,  159,    8,  163,  106,   30,  108,   32,   33,
-           34,   35,   30,    1,   32,   33,   34,    1,  158,   57,
-            8,  161,   51,   52,   53,   54,   55,  167,   57,   80,
-          162,  162,   83,   71,   72,   73,   74,   75,   76,   77,
-           69,   31,   80,    9,   10,   11,   85,   80,   14,   87,
+          122,  123,  124,  125,  126,    1,  128,  129,  130,  131,
+          132,  133,   82,   80,  136,  137,  138,  139,  140,  141,
+          142,  143,  144,    8,  147,  148,    8,    8,  150,  151,
+          152,    8,  154,   31,    2,    3,    4,    5,    6,    7,
+          162,    9,   10,   11,   12,   13,    8,  117,  118,  160,
+          116,  162,  122,    9,   10,   11,   97,  159,  128,    8,
+          117,  118,    9,   10,   11,  122,    1,  137,   31,   37,
+           38,  128,  138,    8,   30,  159,   32,   33,   34,   35,
+           36,   37,   38,   30,    9,   32,   33,   34,  158,   57,
+           80,  161,    9,   10,   11,  161,  163,  167,   14,   97,
+          167,  106,  107,   71,   72,   73,   74,   75,   76,   77,
+          163,  116,   80,   30,  167,   32,   33,   34,   35,   87,
            88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
            98,   99,  100,  101,  102,  103,  104,  105,  106,  107,
           108,  109,  110,  111,  112,  113,  114,  115,  116,  117,
-          118,  119,  120,  121,  122,  123,  124,  125,  126,  162,
-          128,  129,  130,  131,  132,  133,   80,    8,  136,  137,
-          138,  139,  140,  141,  142,  143,  144,  146,    9,   10,
-           11,  159,  150,  151,  152,  163,  154,    2,    3,    4,
-            5,    6,    7,  156,    9,   10,   11,   12,   13,   30,
-            8,   32,   33,   34,   35,   36,   37,   38,   39,   40,
+          118,  119,  120,  121,  122,  123,  124,  125,  126,    8,
+          128,  129,  130,  131,  132,  133,  156,  163,  136,  137,
+          138,  139,  140,  141,  142,  143,  144,  162,    9,   10,
+           11,  162,  150,  151,  152,  162,  154,    2,    3,    4,
+            5,    6,    7,   14,    9,   10,   11,   12,   13,   30,
+          163,   32,   33,   34,   35,   36,   37,   38,   39,   40,
            41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
-           51,   52,   53,   54,   55,  160,   57,  162,    8,  106,
-          107,  116,  117,  118,  119,  120,  121,  122,   69,  116,
-          117,  118,   57,  163,   30,  122,    9,   10,   11,  163,
-            1,  128,    9,  167,  106,  107,   71,   72,   73,   74,
-           75,   76,   77,    8,  116,   80,    8,   30,   70,   32,
-           33,    8,   87,   88,   89,   90,   91,   92,   93,   94,
+           51,   52,   53,   54,   55,  160,   57,  162,    9,   10,
+           11,    9,   10,   11,    8,  159,   14,    8,   69,  163,
+            1,  101,   57,    9,   10,   11,  162,    8,  116,   30,
+            1,   32,   33,   34,   35,   36,   71,   72,   73,   74,
+           75,   76,   77,  123,   30,   80,   32,   33,   70,   80,
+          138,    8,   87,   88,   89,   90,   91,   92,   93,   94,
            95,   96,   97,   98,   99,  100,  101,  102,  103,  104,
           105,  106,  107,  108,  109,  110,  111,  112,  113,  114,
           115,  116,  117,  118,  119,  120,  121,  122,  123,  124,
-          125,  126,   70,  128,  129,  130,  131,  132,  133,   14,
-           31,  136,  137,  138,  139,  140,  141,  142,  143,  144,
-          116,  101,  134,  135,  116,  150,  151,  152,    2,    3,
-            4,    5,    6,    7,   80,   37,   38,  149,   12,   13,
-          101,   15,  138,  123,    1,  106,  138,  108,   30,  161,
-          116,  163,  113,    9,   10,  116,  117,  118,  119,  120,
-          121,  122,  123,    8,    1,  161,  134,  135,    1,  161,
-            8,  137,    1,  106,   31,  108,   97,   51,   52,  116,
-            8,   70,   56,    8,   58,   59,   60,   61,   62,   63,
-           64,   65,   66,   67,   68,  163,   70,   71,   72,   73,
-           74,  138,   31,  164,   78,   79,   80,    8,   82,  155,
-          156,  157,   86,   87,   88,   89,  122,   91,  164,   93,
-            1,   95,  155,    8,   98,   99,  106,   84,  108,  103,
+          125,  126,  116,  128,  129,  130,  131,  132,  133,   37,
+           38,  136,  137,  138,  139,  140,  141,  142,  143,  144,
+           14,  116,  134,  135,  138,  150,  151,  152,    2,    3,
+            4,    5,    6,    7,  155,  156,  157,  149,   12,   13,
+          101,   15,  137,  164,    1,  106,   85,  108,   30,  161,
+            8,  163,  113,   49,   50,  116,  117,  118,  119,  120,
+          121,  122,  123,   51,   52,   53,   54,   55,    1,   57,
+          106,  107,    1,  106,   31,  108,    8,   51,   52,    8,
+          116,   69,   56,    8,   58,   59,   60,   61,   62,   63,
+           64,   65,   66,   67,   68,   70,   70,   71,   72,   73,
+           74,  116,    8,  164,   78,   79,   80,  146,   82,  106,
+            8,  108,   86,   87,   88,   89,  122,   91,  122,   93,
+            1,   95,  158,  138,   98,   99,    1,   84,    8,  103,
           104,  105,  106,  107,  116,  109,  110,  119,  120,  121,
-          122,  115,  116,    8,   80,  134,  135,   84,  122,   82,
-          124,  125,  126,   82,  116,  161,  138,  162,    1,  122,
-          149,    8,  136,  137,   14,  139,  140,  141,  142,  143,
-          144,  145,  161,  160,  163,  162,  138,  151,  152,  161,
-          116,  155,  156,  157,  158,   49,   50,  161,    1,   75,
-           76,  165,  166,  167,   75,   76,   77,    1,  161,  128,
-           16,  137,  159,   84,  137,    1,  163,   14,  137,   90,
-           31,   92,   14,   94,    1,   96,   51,   52,   31,  155,
-          156,  157,  159,   16,    1,  106,  163,   31,  161,  158,
-           14,    8,  161,   14,  167,   31,  117,  118,  167,   82,
-           16,  122,    1,   30,   14,   70,  127,  128,  129,  130,
+          122,  115,  116,  106,   80,  108,  161,    8,  122,   82,
+          124,  125,  126,    8,    1,  161,  138,  161,  155,  134,
+          135,   14,  136,  137,    8,  139,  140,  141,  142,  143,
+          144,  145,   51,   52,  149,   70,    1,  151,  152,  161,
+          116,  155,  156,  157,  158,    8,  161,  161,  163,   75,
+           76,  165,  166,  167,   75,   76,   77,    1,   52,   75,
+           76,  137,  159,   84,  137,   30,  163,   82,   14,   90,
+           80,   92,  106,   94,  108,   96,  101,  102,   14,  155,
+          156,  157,    9,   10,   11,  106,   80,   31,  161,   83,
+           14,  160,   14,  162,  167,   82,  117,  118,   16,  134,
+          135,  122,    1,   30,  106,  107,  127,  128,  129,  130,
           131,   16,   17,   18,   19,   20,   21,   22,   23,   24,
-           25,   26,   27,   28,   29,   37,   38,  129,  130,  131,
-           14,   84,   31,   37,   38,   70,   82,   16,  159,   85,
-           84,   16,  163,  164,   75,   76,  117,  118,   84,  101,
-          102,  122,  106,  107,   59,   60,   70,  128,  106,  107,
-          111,  112,   74,   16,   16,   70,   70,   16,   80,  134,
-          135,   16,   31,   31,   31,   87,   88,   89,   82,   91,
-          163,   93,   86,   95,  167,   84,   98,   37,   31,  116,
-           31,  103,  104,  105,    0,    1,   31,  109,  110,  134,
-          135,  147,  148,  115,  116,   31,  159,   31,   31,   31,
-          163,  138,  124,   31,  149,  159,   37,   38,  122,  163,
-          134,  135,   70,  159,   31,   35,   70,  163,  163,  134,
-          135,   31,  136,  137,  161,  139,  140,  141,  142,  143,
-          144,   31,  154,  160,  149,  162,   31,  151,  152,  163,
-           31,   31,   31,   74,   31,   31,   38,  161,  163,   80,
-          159,   35,  166,  167,  163,   35,   87,   88,   89,   35,
-           91,   35,   93,   35,   95,   35,   37,   98,   84,   37,
-           37,   69,  103,  104,  105,   57,  134,  135,  109,  110,
-          134,  135,   31,   77,  115,  116,   82,   70,   85,   82,
-          106,  149,  108,  124,   96,  149,   97,  113,   83,   80,
-          113,  117,  118,  114,   92,  163,  122,   85,  132,  163,
-           89,  127,  128,  129,  130,  131,   31,   90,  132,   94,
-           97,  128,  137,  146,  133,   74,  153,  146,   97,  154,
-          159,   80,  153,  155,  150,  100,  100,  149,   87,   88,
-           89,  149,   91,  159,   93,  149,   95,  163,  164,   98,
-          149,   -1,  158,   -1,  103,  104,  105,  160,  163,   74,
-          109,  110,    1,   -1,   -1,   80,  115,  116,   -1,   -1,
+           25,   26,   27,   28,   29,   37,   38,   16,  163,   16,
+          117,  118,   31,   37,   38,  122,  106,  107,  159,  116,
+           84,  128,  163,  164,  111,  112,  156,   16,  163,   16,
+          137,  116,  167,  163,   59,   60,   70,   16,   16,   16,
+           16,  138,   74,   16,   16,   70,   70,   16,   80,    1,
+           16,  158,    1,  138,  161,   87,   88,   89,   82,   91,
+          167,   93,   86,   95,  161,   84,   98,   31,   31,   31,
+           31,  103,  104,  105,    0,    1,  161,  109,  110,   31,
+           31,   31,   31,  115,  116,   31,   31,   31,   31,   31,
+           37,   30,  124,   31,   31,  159,   37,   38,  122,  163,
+          134,  135,   70,   31,   31,   35,   31,   31,   31,  134,
+          135,   31,  136,  137,    1,  139,  140,  141,  142,  143,
+          144,   31,  154,   31,  149,   37,   37,  151,  152,  163,
+           35,   35,   84,   74,   35,   84,   35,  161,  163,   80,
+          159,   80,  166,  167,  163,   35,   87,   88,   89,   35,
+           91,   57,   93,   37,   95,   38,   69,   98,   84,   77,
+           82,   70,  103,  104,  105,   80,  134,  135,  109,  110,
+           70,   85,   31,   80,  115,  116,   92,  116,   97,   82,
+          106,  149,  108,  124,  113,   83,  146,  113,   85,  137,
+          146,  117,  118,   89,   96,  163,  122,   84,  137,  138,
+           94,  127,  128,  129,  130,  131,   31,  159,   90,   97,
+          159,  163,   97,  149,  163,   74,  155,  156,  157,  100,
+          100,   80,  161,  114,  150,  134,  135,  158,   87,   88,
+           89,  163,   91,  159,   93,  128,   95,  163,  164,   98,
+          149,  133,  159,  132,  103,  104,  105,   -1,   -1,   74,
+          109,  110,    1,  132,  163,   80,  115,  116,  153,   -1,
            -1,   -1,   87,   88,   89,  124,   91,   -1,   93,   -1,
-           95,   -1,   -1,   98,   -1,   -1,  149,   -1,  103,  104,
-          105,   74,   -1,  159,  109,  110,   -1,   80,  159,  159,
+           95,  149,  159,   98,  149,  149,  163,  149,  103,  104,
+          105,   74,  153,  159,  109,  110,  154,   80,  155,  159,
           115,  116,    1,  159,   87,   88,   89,  159,   91,  124,
-           93,  159,   95,  159,  159,   98,  159,  159,  159,  102,
+           93,  159,   95,  159,  159,   98,   70,  159,  159,  102,
           103,  104,  105,   74,  159,  159,  109,  110,  159,   80,
            81,  159,  115,  116,  159,  159,   87,   88,   89,  159,
-           91,  124,   93,  160,   95,   84,  160,   98,  160,  160,
-          160,  164,  103,  104,  105,  161,  161,  161,  109,  110,
+           91,  124,   93,  159,   95,   84,  159,   98,  160,  160,
+          160,  160,  103,  104,  105,  160,  160,  163,  109,  110,
           161,  100,  101,  102,  115,  116,  161,  106,  161,  161,
            70,   71,  161,  124,  161,  161,  161,  161,  117,  118,
-          161,  161,   82,  122,  161,   84,   86,  161,  127,  128,
-          129,  130,  131,  161,  161,  161,  161,  161,  161,  161,
-          161,  100,  101,  102,  161,  161,  161,  106,  161,  161,
-          164,  161,  161,  161,  161,  161,  161,  161,  117,  118,
+          134,  135,   82,  122,  161,   84,   86,  161,  127,  128,
+          129,  130,  131,  161,  161,  149,  161,  161,  161,  161,
+          161,  100,  101,  102,  161,  161,  161,  106,  161,  163,
+          162,  161,  161,  161,  161,  161,  161,  161,  117,  118,
           159,  161,  122,  122,  163,  164,  161,  161,  127,  128,
-          129,  130,  131,  162,  162,  162,  162,  137,   70,  139,
-          140,  141,  142,  143,  144,  162,  162,  162,  162,  162,
+          129,  130,  131,  161,  161,  161,  161,  137,   70,  139,
+          140,  141,  142,  143,  144,  161,  161,  161,  165,  162,
            82,  151,  152,  162,   86,  162,   74,  162,  162,  162,
           159,  161,   80,  164,  163,  164,  166,  167,  162,   87,
            88,   89,  162,   91,  162,   93,  162,   95,  162,  162,
@@ -635,19 +635,19 @@ class Php8 extends \PhpParser\ParserAbstract
           122,  109,  110,  162,  162,  162,  162,  115,  116,  162,
           162,  162,  162,  162,  162,  137,  124,  139,  140,  141,
           142,  143,  144,  162,  162,  162,  162,  162,  162,  151,
-          152,  162,  162,  162,  166,  163,  163,  163,  163,  161,
-          163,  165,  163,  163,  166,  167,  163,  163,  163,  163,
-          163,   -1,  164,  164,  164,  164,   -1,  164,  164,  164,
+          152,  162,  162,  162,  162,  162,  162,  162,  162,  161,
+          163,  162,  162,   -1,  166,  167,  163,  163,  163,  163,
+          163,  163,  163,  163,  163,   -1,  163,   -1,  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,   -1,
-           -1,  167
+          164,  164,  164,  164,   -1,  165,   -1,  166,   -1,  167
     );
 
     protected $actionBase = array(
-            0,   -2,  152,  549,  764,  941,  981,  587,  384,  -12,
-          856,  617,  634,  634,  671,  634,  473,  626,  305,  305,
-          -57,  305,  305,  305,  493,  493,  493,  658,  658,  658,
-          658,  749,  749,  897,  897,  929,  865,  831, 1062, 1062,
+            0,   -2,  152,  549,  764,  941,  981,  751,  555,  309,
+          560,  864,  626,  738,  738,  741,  738,  473,  671,  783,
+          -60,  305,  305,  783,  305,  803,  803,  803,  658,  658,
+          658,  658,  749,  749,  897,  897,  929,  865,  831, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
@@ -660,66 +660,67 @@ class Php8 extends \PhpParser\ParserAbstract
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
          1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
-         1062, 1062,   33,  -16,   83,  686, 1022, 1036, 1032, 1039,
-         1020, 1019, 1031, 1033, 1040, 1078, 1079,  794, 1080, 1081,
-         1077, 1082, 1034,  870, 1021, 1035,  289,  289,  289,  289,
+         1062, 1062, 1062, 1062,   18,   36,   79,  648, 1039, 1045,
+         1041, 1046, 1035, 1034, 1040, 1042, 1049, 1085, 1086,  782,
+         1087, 1088, 1084, 1089, 1043,  876, 1036, 1044,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-          289,  289,  363,  224,  474,   10,   10,   10,   10,   10,
-           10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
-           10,   10,   10,   10,   10,    3,    3,    3,  666,  666,
-          357,  172,  980,  166, 1048, 1048, 1048, 1048, 1048, 1048,
-         1048, 1048, 1048,  665,   47,  136,  136,    7,    7,    7,
-            7,    7,  369,  -20,  -20,  -20,  -20,  501,  448,   50,
-          643,  497,  350,  -54,  566,  334,  243,  338,  338,  468,
-          468,  -85,  -85,  468,  468,  468,  161,  161,  393,  393,
-          393,  393,  318,  441,  397,  151,  765,  206,  206,  206,
-          206,  765,  765,  765,  765,  761, 1038,  765,  765,  765,
-          635,  722,  722,  726,  595,  595,  722,  450,  802,  624,
-          450,  624,   21,  139,  364,  599,  268,  443,  364,  362,
-          656,  653,  185,  758,  616,  758, 1018,  424,  783,  467,
-          763,  713,  860, 1057, 1041,  815, 1075,  816, 1076,  568,
-          605,  712, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1017,
-         1017, 1017, 1017, 1084,  428, 1018,  157, 1084, 1084, 1084,
-          428,  428,  428,  428,  428,  428,  428,  428,  428,  428,
-          619,  157,  544,  639,  157,  810,  428,   33,  772,   33,
-           33,   33,   33,   33,   33,   33,   33,   33,   33,  770,
-          200,   33,  -16,   31,   31,  142,   37,   31,   31,   31,
-           31,   33,   33,   33,  616,  798,  753,  622,  759,  117,
-          798,  798,  798,  409,   58,  425,   59,  760,  796,   89,
-          799,  799,  787,  891,  891,  799,  784,  799,  787,  899,
-          799,  799,  891,  891,  774,  171,  505,  378,  492,  529,
-          891,  312,  799,  799,  799,  799,  766,  545,  799,  279,
-          177,  799,  799,  766,  756,  789,  125,  771,  891,  891,
-          891,  766,  485,  771,  771,  771,  819,  820,  767,  785,
-          375,  340,  583,  159,  788,  785,  785,  799,  502,  767,
-          785,  767,  785,  755,  785,  785,  785,  767,  785,  784,
-          383,  785,  717,  565,  145,  785,    6,  900,  903,  609,
-          906,  895,  912,  945,  913,  914, 1044,  888,  919,  896,
-          915,  946,  894,  893,  793,  614,  637,  776,  768,  887,
-          782,  782,  782,  879,  782,  782,  782,  782,  782,  782,
-          782,  782,  614,  777,  817,  773,  801,  925,  654,  691,
-          999,  757,  926, 1046, 1083,  924, 1001,  916,  751,  695,
-          966,  927,  867, 1042,  928,  930,  967, 1002,  824, 1006,
-          979,  797, 1058, 1059,  863,  932, 1045,  782,  900,  914,
-          711,  896,  915,  894,  893,  752,  748,  746,  747,  744,
-          735,  727,  729,  780, 1007,  876,  874,  866,  931,  885,
-          614,  868,  954,  775,  971,  973, 1043,  803,  795,  869,
-         1060,  933,  934,  935, 1047, 1011, 1049,  814,  963,  951,
-          975,  811, 1061,  976,  977,  986,  990, 1050, 1063, 1053,
-          875, 1054,  828,  807,  952,  778, 1064,  580,  806,  808,
-          813,  940,  623,  923, 1055, 1065, 1066,  992,  994,  996,
-         1067, 1068,  917,  832,  964,  805,  965,  953,  834,  835,
-          628,  812, 1012,  800,  804,  809,  646,  649, 1069, 1070,
-         1071,  918,  790,  786,  837,  838, 1013,  720, 1014, 1072,
-          660,  839,  718, 1073, 1000,  721,  725,  792, 1056,  781,
-          769,  779,  936,  791,  845, 1074,  846,  849,  852,  997,
-          855,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+          289,  289,  289,  289,  289,  195,  342,   43,    4,    4,
+            4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
+            4,    4,    4,    4,    4,    4,    4,    4,  643,  643,
+          643,  666,  666,  354,  173,  980,  203, 1048, 1048, 1048,
+         1048, 1048, 1048, 1048, 1048, 1048,  665,  339,  164,  164,
+            7,    7,    7,    7,    7,   50,  369,  583,  -23,  -23,
+          -23,  -23,  448,  605,  497,  260,  397,  434,   54,  394,
+          593,  593,  316,  316,  415,  415,  316,  316,  316,  442,
+          442,  252,  252,  252,  252,  318,  455,  433,  391,  742,
+           53,   53,   53,   53,  742,  742,  742,  742,  734, 1091,
+          742,  742,  742,  722,  781,  781,  926,  551,  551,  781,
+          536,  793,   -3,  536,   63,   -3,   67,  576,  335,  797,
+          115,    9,  335,  535,  656,  501,  185,  823,  568,  823,
+         1033,  424,  776,  426,  753,  729,  867, 1063, 1050,  809,
+         1082,  810, 1083,  -66,  -58,  728, 1032, 1032, 1032, 1032,
+         1032, 1032, 1032, 1032, 1032, 1032, 1032, 1092,  402, 1033,
+          130, 1092, 1092, 1092,  402,  402,  402,  402,  402,  402,
+          402,  402,  402,  402,  603,  130,  544,  554,  130,  804,
+          402,   18,  812,   18,   18,   18,   18,   18,   18,   18,
+           18,   18,   18,  762,  157,   18,   36,  124,  124,  196,
+           37,  124,  124,  124,  124,   18,   18,   18,   18,  568,
+          784,  795,  600,  819,  143,  784,  784,  784,  122,  135,
+          204,  139,  760,  785,  467,  775,  775,  787,  895,  895,
+          775,  768,  775,  787,  913,  775,  775,  895,  895,  759,
+          158,  550,  472,  524,  569,  895,  346,  775,  775,  775,
+          775,  811,  575,  775,  271,  171,  775,  775,  811,  801,
+          766,   58,  798,  895,  895,  895,  811,  505,  798,  798,
+          798,  820,  824,  761,  765,  383,  349,  607,  138,  807,
+          765,  765,  775,  532,  761,  765,  761,  765,  822,  765,
+          765,  765,  761,  765,  768,  498,  765,  714,  586,   75,
+          765,    6,  915,  916,  726,  917,  906,  918,  965,  919,
+          923, 1053,  894,  931,  912,  924,  966,  903,  896,  780,
+          701,  703,  815,  754,  893,  777,  777,  777,  888,  777,
+          777,  777,  777,  777,  777,  777,  777,  701,  868,  818,
+          794,  934,  711,  712, 1012,  730, 1064,  963, 1090,  933,
+         1014,  925,  773,  713,  986,  935,  979,  874,  936,  940,
+          990, 1017,  828, 1018, 1065,  790, 1066, 1067,  869,  946,
+         1054,  777,  915,  923,  727,  912,  924,  903,  896,  752,
+          748,  746,  747,  745,  744,  739,  740,  763, 1019,  887,
+          879,  870,  945,  891,  701,  871,  973,  758,  992,  994,
+         1047,  802,  792,  875, 1068,  952,  953,  954, 1055, 1020,
+         1056,  814,  975,  928,  996,  805, 1069,  997,  999, 1000,
+         1001, 1057, 1070, 1058,  885, 1059,  832,  808,  967,  788,
+         1071,  299,  791,  800,  806,  964,  436,  932, 1060, 1072,
+         1073, 1002, 1006, 1007, 1074, 1075,  927,  834,  976,  796,
+          977,  971,  835,  838,  577,  779, 1021,  786,  789,  778,
+          624,  634, 1076, 1077, 1078,  930,  767,  772,  839,  845,
+         1022,  743, 1031, 1079,  646,  846,  717, 1080, 1013,  718,
+          721,  652,  683,  681,  724,  774, 1061,  816,  799,  771,
+          955,  721,  770,  849, 1081,  852,  855,  856, 1011,  860,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,  456,  456,  456,  456,  456,  456,  305,  305,  305,
-          305,  456,  456,  456,  456,  456,  456,  456,    0,    0,
-          305,    0,    0,    0,  456,  456,  456,  456,  456,  456,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+          456,  456,  456,  456,  456,  456,  305,  305,  305,  305,
+          305,  456,  456,  456,  456,  456,  456,  456,  305,  305,
+            0,    0,  305,    0,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
@@ -733,183 +734,186 @@ class Php8 extends \PhpParser\ParserAbstract
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
           456,  456,  456,  456,  456,  456,  456,  456,  456,  456,
-          456,  456,  289,  289,  289,  289,  289,  289,  289,  289,
+          456,  456,  456,  289,  289,  289,  289,  289,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-          289,  289,  289,  289,  289,  289,    0,    0,    0,    0,
+          289,  289,  289,  289,  289,  289,  289,    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,  289,  289,  289,  289,  289,  289,  289,  289,
+            0,    0,    0,    0,  289,  289,  289,  289,  289,  289,
           289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
-          289,  289,  289,  289,  289,  289,  289,  289,  494,  494,
-          289,  289,  494,  289,  494,  494,  494,  494,  494,  494,
-          494,  494,  494,    0,  289,  289,  289,  289,  289,  289,
-          289,  289,  774,  161,  161,  161,  161,  494,  494,  494,
-          494,  494,  235,  235,  161,  494,  774,  494,  494,  494,
-          494,  494,  494,  494,  494,  494,    0,    0,  494,  494,
-          494,  494,    0,    0,  157,  624,  494,  784,  784,  784,
-          784,  494,  494,  494,  494,  624,  624,  494,  494,  494,
-            0,    0,    0,    0,  161,  161,    0,  157,  624,    0,
-          157,    0,  784,  784,  494,    0,  774,  202,  494,    0,
-            0,    0,    0,  157,  784,  157,  428,  799,  624,  799,
-          428,  428,   31,   33,  202,  618,  618,  618,  618,    0,
-            0,  616,  774,  774,  774,  774,  774,  774,  774,  774,
-          774,  774,  774,  784,    0,  774,    0,  784,  784,  784,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,  784,    0,    0,  891,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,    0,  899,
-            0,    0,    0,    0,    0,    0,  784,    0,    0,    0,
-            0,    0,    0,    0,    0,  782,  803,    0,  803,    0,
-          782,  782,  782,    0,    0,    0,    0,  812,  720
+          289,  289,  289,  289,  289,  289,  289,  289,  289,  289,
+          494,  494,  289,  289,  494,  289,  494,  494,  494,  494,
+          494,  494,  494,  494,  494,    0,  289,  289,  289,  289,
+          289,  289,  289,  289,  494,  759,  494,  442,  442,  442,
+          442,  494,  494,  494,  -88,  -88,  442,  494,   63,  494,
+          494,  494,  494,  494,  494,  494,  494,  494,    0,    0,
+          494,  494,  494,  494,    0,    0,  130,   -3,  494,  768,
+          768,  768,  768,  494,  494,  494,  494,   -3,   -3,  494,
+          494,  494,    0,    0,    0,    0,  442,  442,    0,  130,
+           -3,    0,  130,    0,    0,  768,  768,  494,   63,  759,
+          359,  494,    0,    0,    0,    0,  130,  768,  130,  402,
+          775,   -3,  775,  402,  402,  124,   18,  359,  545,  545,
+          545,  545,    0,    0,  568,  759,  759,  759,  759,  759,
+          759,  759,  759,  759,  759,  759,  768,    0,  759,    0,
+          768,  768,  768,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,  768,    0,
+            0,  895,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,  913,    0,    0,    0,    0,    0,    0,  768,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,  777,
+          802,    0,  802,    0,  777,  777,  777,    0,    0,    0,
+            0,  779,  743
     );
 
     protected $actionDefault = array(
             3,32767,  102,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  100,
-        32767,32767,32767,32767,32767,32767,32767,  594,  594,  594,
-          594,32767,32767,  252,  102,32767,32767,  467,  384,  384,
-          384,32767,32767,  538,  538,  538,  538,  538,  538,32767,
-        32767,32767,32767,32767,32767,  467,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  100,32767,32767,32767,32767,  596,  596,
+          596,  596,32767,32767,  253,  102,32767,32767,  469,  386,
+          386,  386,32767,32767,  540,  540,  540,  540,  540,  540,
+        32767,32767,32767,32767,32767,32767,  469,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,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,32767,32767,  100,
+        32767,32767,32767,   36,    7,    8,   10,   11,   49,   17,
+          323,32767,32767,32767,32767,  102,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,  589,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,  100,32767,
-        32767,32767,   36,    7,    8,   10,   11,   49,   17,  322,
-        32767,32767,32767,32767,  102,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,  473,  452,
+          453,  455,  456,  385,  541,  595,  326,  592,  384,  145,
+          338,  328,  241,  329,  257,  474,  258,  475,  478,  479,
+          214,  286,  381,  149,  150,  416,  470,  418,  468,  472,
+          417,  391,  397,  398,  399,  400,  401,  402,  403,  404,
+          405,  406,  407,  408,  409,  389,  390,  471,  449,  448,
+          447,32767,32767,  414,  415,32767,  419,32767,32767,32767,
+        32767,32767,32767,32767,  102,32767,  388,  422,  420,  421,
+          438,  439,  436,  437,  440,32767,32767,32767,  441,  442,
+          443,  444,  315,32767,32767,  365,  363,  423,  315,  111,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  429,
+          430,32767,32767,32767,32767,  534,  446,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,  587,32767,32767,32767,32767,
+          102,32767,  100,  536,  411,  413,  503,  424,  425,  392,
+        32767,  510,32767,  102,32767,  512,32767,32767,32767,32767,
+        32767,32767,32767,  535,32767,  542,  542,32767,  496,  100,
+          194,32767,32767,32767,  194,  194,32767,32767,32767,32767,
+        32767,32767,32767,32767,  603,  496,  110,  110,  110,  110,
+          110,  110,  110,  110,  110,  110,  110,32767,  194,  110,
+        32767,32767,32767,  100,  194,  194,  194,  194,  194,  194,
+          194,  194,  194,  194,  189,32767,  267,  269,  102,  557,
+          194,32767,  515,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  508,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,32767,32767,32767,  496,
+          434,  138,32767,  138,  542,  426,  427,  428,  498,  542,
+          542,  542,  311,  288,32767,32767,32767,32767,  513,  513,
+          100,  100,  100,  100,  508,32767,32767,32767,32767,  111,
+           99,   99,   99,   99,   99,  103,  101,32767,32767,32767,
+        32767,  222,   99,32767,  101,  101,32767,32767,  222,  224,
+          211,  101,  226,32767,  561,  562,  222,  101,  226,  226,
+          226,  246,  246,  485,  317,  101,   99,  101,  101,  196,
+          317,  317,32767,  101,  485,  317,  485,  317,  198,  317,
+          317,  317,  485,  317,32767,  101,  317,  213,   99,   99,
+          317,32767,32767,32767,  498,32767,32767,32767,32767,32767,
+        32767,32767,  221,32767,32767,32767,32767,32767,32767,32767,
+        32767,  529,32767,  546,  559,  432,  433,  435,  544,  457,
+          458,  459,  460,  461,  462,  463,  465,  591,32767,  502,
+        32767,32767,32767,  337,32767,  601,32767,  601,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  471,  450,  451,  453,
-          454,  383,  539,  593,  325,  590,  382,  145,  337,  327,
-          240,  328,  256,  472,  257,  473,  476,  477,  213,  285,
-          379,  149,  414,  468,  416,  466,  470,  415,  389,  395,
-          396,  397,  398,  399,  400,  401,  402,  403,  404,  405,
-          406,  407,  387,  388,  469,  447,  446,  445,32767,32767,
-          412,  413,32767,  417,32767,32767,32767,32767,32767,32767,
-        32767,  102,32767,  386,  420,  418,  419,  436,  437,  434,
-          435,  438,32767,  439,  440,  441,  442,32767,  314,32767,
-        32767,32767,  363,  361,  421,  314,  111,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,  427,  428,32767,32767,
-        32767,32767,  532,  444,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  102,32767,  100,
-          534,  409,  411,  501,  422,  423,  390,32767,  508,32767,
-          102,  510,32767,32767,32767,32767,32767,32767,32767,  533,
-        32767,  540,  540,32767,  494,  100,  193,32767,32767,32767,
-          193,  193,32767,32767,32767,32767,32767,32767,32767,32767,
-          601,  494,  110,  110,  110,  110,  110,  110,  110,  110,
-          110,  110,  110,32767,  193,  110,32767,32767,32767,  100,
-          193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
-          188,32767,  266,  268,  102,  555,  193,32767,  513,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  506,
+        32767,32767,32767,32767,  602,32767,  542,32767,32767,32767,
+        32767,  431,    9,   74,  491,   42,   43,   51,   57,  519,
+          520,  521,  522,  516,  517,  523,  518,32767,32767,  524,
+          567,32767,32767,  543,  594,32767,32767,32767,32767,32767,
+        32767,  138,32767,32767,32767,32767,32767,32767,32767,32767,
+        32767,32767,32767,  529,32767,  136,32767,32767,32767,32767,
+        32767,32767,32767,32767,  525,32767,32767,32767,  542,32767,
+        32767,32767,32767,  313,  310,32767,32767,32767,32767,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,  494,  432,  138,32767,  138,  540,
-          424,  425,  426,  496,  540,  540,  540,  310,  287,32767,
-        32767,32767,32767,  511,  511,  100,  100,  100,  100,  506,
-        32767,32767,32767,32767,  111,   99,   99,   99,   99,   99,
-          103,  101,32767,32767,32767,32767,  221,   99,32767,  101,
-          101,32767,32767,  221,  223,  210,  101,  225,32767,  559,
-          560,  221,  101,  225,  225,  225,  245,  245,  483,  316,
-          101,   99,  101,  101,  195,  316,  316,32767,  101,  483,
-          316,  483,  316,  197,  316,  316,  316,  483,  316,32767,
-          101,  316,  212,   99,   99,  316,32767,32767,32767,  496,
-        32767,32767,32767,32767,32767,32767,32767,  220,32767,32767,
-        32767,32767,32767,32767,32767,32767,  527,32767,  544,  557,
-          430,  431,  433,  542,  455,  456,  457,  458,  459,  460,
-          461,  463,  589,32767,  500,32767,32767,32767,32767,  336,
-        32767,  599,32767,  599,32767,32767,32767,32767,32767,32767,
+        32767,  542,32767,32767,32767,32767,32767,  290,32767,  307,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-          600,32767,  540,32767,32767,32767,32767,  429,    9,   74,
-          489,   42,   43,   51,   57,  517,  518,  519,  520,  514,
-          515,  521,  516,32767,32767,  522,  565,32767,32767,  541,
-          592,32767,32767,32767,32767,32767,32767,  138,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,32767,32767,  527,
-        32767,  136,32767,32767,32767,32767,32767,32767,32767,32767,
-          523,32767,32767,32767,  540,32767,32767,32767,32767,  312,
-          309,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,32767,32767,32767,32767,32767,  540,32767,32767,
-        32767,32767,32767,  289,32767,  306,32767,32767,32767,32767,
+        32767,32767,32767,32767,32767,32767,  285,32767,32767,  380,
+          498,  293,  295,  296,32767,32767,32767,32767,  359,32767,
         32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,32767,  284,32767,32767,  378,32767,32767,32767,32767,
-          357,32767,32767,32767,32767,32767,32767,32767,32767,32767,
-        32767,  151,  151,    3,    3,  339,  151,  151,  151,  339,
-          339,  151,  339,  339,  339,  151,  151,  151,  151,  151,
-          151,  278,  183,  260,  263,  245,  245,  151,  349,  151
+          152,  152,    3,    3,  340,  152,  152,  152,  340,  340,
+          152,  340,  340,  340,  152,  152,  152,  152,  152,  152,
+          279,  184,  261,  264,  246,  246,  152,  351,  152
     );
 
     protected $goto = array(
-          194,  194,  689, 1054,  425,  657,  617,  654,  316,  697,
-          419,  311,  312,  331,  572,  424,  332,  426,  634,  650,
-          651,  843,  668,  669,  670,  820,  165,  165,  165,  165,
-          218,  195,  191,  191,  175,  177,  213,  191,  191,  191,
-          191,  191,  192,  192,  192,  192,  192,  192,  186,  187,
-          188,  189,  190,  215,  213,  216,  530,  531,  415,  532,
-          534,  535,  536,  537,  538,  539,  540,  541, 1124,  166,
-          167,  168,  193,  169,  170,  171,  164,  172,  173,  174,
-          176,  212,  214,  217,  235,  240,  241,  243,  254,  255,
-          256,  257,  258,  259,  260,  261,  263,  264,  265,  266,
-          274,  286,  287,  314,  315,  420,  421,  422,  577,  219,
-          220,  221,  222,  223,  224,  225,  226,  227,  228,  229,
-          230,  231,  232,  233,  178,  234,  179,  196,  197,  198,
-          236,  186,  187,  188,  189,  190,  215, 1124,  199,  180,
-          181,  182,  200,  196,  183,  237,  201,  199,  163,  202,
-          203,  184,  204,  205,  206,  185,  207,  208,  209,  210,
-          211,  846,  391,  394,  556,  597,  601,  346,  276,  276,
-          276,  276,  844,  596,  619,  619,  859,  964, 1257,  824,
-         1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1275,
-         1275,  871,  877, 1275,  858, 1275, 1275, 1275, 1275, 1275,
-         1275, 1275, 1275, 1275,  903,  851,  904,  899,  894,  895,
-          908,  852,  896,  849,  897,  898,  850,  818,  824,  902,
-          824, 1095, 1096,  872,  860, 1059, 1063,  350,  569, 1075,
-         1071, 1072,  473,  344,  967, 1273, 1273,  350,  350, 1273,
-          475, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
-          350,  350,  418,  350,  607, 1342,  389,  839,  957,  460,
-          460, 1225, 1023, 1225, 1023, 1225,  549, 1315,  460, 1023,
-          350, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
-         1104,  876, 1023, 1023, 1023, 1023, 1307, 1307, 1307, 1307,
-         1225,    5,  427,    6,  985, 1225, 1225, 1225, 1225,  427,
-          567, 1225, 1225, 1225,  656, 1030, 1030,  839, 1121,  555,
-          547, 1173,  661, 1041, 1037, 1038,  432, 1286,  915,  470,
-         1300, 1301,  916,  533,  533,  452,  931,  533,  931,  533,
-          533,  533,  533,  533,  533,  533,  533,  533,  682,  337,
-          547,  555,  564,  565,  339,  575,  598,  612,  613,  544,
-          494,  544,  495,  544,  678,   22,  562,  333,  501,  662,
-          724,  633,  635, 1029, 1028,  655,  249,  249,  549,  679,
-          683,  999,  687,  695,  995,  956,  405,  696,  450,  349,
-          349,  349,  349,  958,  958,  958,  958,  321,  306,  450,
-          952,  959,  247,  247,  247,  247,  242,  250, 1326, 1326,
-          864,  842,  542,  542,  542,  542,  947,  600,  988,  962,
-          962,  960,  962,  723, 1326,  347,  348, 1032, 1033,  548,
-          559,  546,  997,  992,  548,  839,  559,  444,  836,  392,
-          456, 1218,  444, 1297,  444, 1297,  398, 1297,  627,  629,
-          631,  463,  576,  464,  465, 1302, 1303,  869,  573,  610,
-         1333, 1334,  605,  620,  623,  624,  625,  626,  647,  648,
-          649,  699,  861, 1309, 1309, 1309, 1309,  611, 1216, 1060,
-          403,  404, 1007,  471, 1064,  666,  867,  667,  727,  407,
-          408,  409,  873,  680,  595, 1088,  410,  700, 1293,  969,
-          342, 1106,  428,    0, 1220,  686,  686,    0,  502,  692,
-         1086,  677,  941,    0,    0, 1018, 1034, 1035, 1204,  933,
-            0,    0, 1205, 1208,  934, 1209,    0,  444,  444,  444,
-          444,  444,  444,  444,  444,  444,  444,  444,    0, 1062,
-          444,  920, 1111, 1295, 1295, 1062,    0,    0,  615,    0,
-            0,    0,    0,    0, 1004, 1325, 1325,    0, 1221, 1222,
-            0,    0,  863,    0,  660,  983,  834,    0,    0,    0,
-          857, 1325,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0, 1215,    0, 1223, 1283, 1284,    0, 1328,    0,
+          196,  196, 1033, 1064,  697,  430,  661,  621,  658,  319,
+          706,  424,  314,  315,  335,  576,  429,  336,  431,  638,
+          654,  655,  852,  672,  673,  674,  853,  167,  167,  167,
+          167,  221,  197,  193,  193,  177,  179,  216,  193,  193,
+          193,  193,  193,  194,  194,  194,  194,  194,  194,  188,
+          189,  190,  191,  192,  218,  216,  219,  535,  536,  420,
+          537,  539,  540,  541,  542,  543,  544,  545,  546, 1135,
+          168,  169,  170,  195,  171,  172,  173,  166,  174,  175,
+          176,  178,  215,  217,  220,  238,  243,  244,  246,  257,
+          258,  259,  260,  261,  262,  263,  264,  268,  269,  270,
+          271,  277,  289,  290,  317,  318,  425,  426,  427,  581,
+          222,  223,  224,  225,  226,  227,  228,  229,  230,  231,
+          232,  233,  234,  235,  236,  180,  237,  181,  198,  199,
+          200,  239,  188,  189,  190,  191,  192,  218, 1135,  201,
+          182,  183,  184,  202,  198,  185,  240,  203,  201,  165,
+          204,  205,  186,  206,  207,  208,  187,  209,  210,  211,
+          212,  213,  214,  855,  478,  279,  279,  279,  279,  623,
+          623,  974,  480, 1268,  600, 1268, 1268, 1268, 1268, 1268,
+         1268, 1268, 1268, 1268, 1286, 1286,  599, 1099, 1286,  709,
+         1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,  507,
+          700,  418, 1097, 1337, 1337,  559,  551,  860,  827,  909,
+          904,  905,  918,  861,  906,  858,  907,  908,  859,  457,
+         1337,  912,  353,  353,  353,  353,  395,  398,  560,  601,
+          605, 1086, 1081, 1082, 1083,  341,  551,  559,  568,  569,
+          343,  579,  602,  616,  617,  407,  408,  913,  868,  914,
+          670,   22,  671,  350,  411,  412,  413,  423,  684,  611,
+         1236,  414, 1236,  880,  439,  346,  867, 1033, 1033, 1236,
+          833,  886,    5, 1033,    6, 1033, 1033, 1033, 1033, 1033,
+         1033, 1033, 1033, 1033,  573,  848, 1033, 1033, 1033, 1033,
+         1318, 1318, 1318, 1318, 1236,  348,  930, 1122, 1326, 1236,
+         1236, 1236, 1236,  619,  995, 1236, 1236, 1236,  393, 1014,
+          833,  354,  833,  571,  252,  252,  499,  872,  500,  664,
+          993,  354,  354,  925,  506,  866,  660,  926,  475, 1311,
+         1312,  941, 1132,  941,  354,  354,  848, 1226,  354, 1057,
+         1353,  250,  250,  250,  250,  245,  253, 1184,  549,  437,
+          549,  553, 1284, 1284,  682,  354, 1284,  549, 1284, 1284,
+         1284, 1284, 1284, 1284, 1284, 1284, 1284,  538,  538, 1336,
+         1336,  538,  666,  538,  538,  538,  538,  538,  538,  538,
+          538,  538,  455,  966,  409,  705, 1336,  968,  968,  968,
+          968,  337,  566,  455,  962,  969,  733,  637,  639, 1106,
+         1107,  659, 1297, 1339,  957,  683,  687, 1009,  695,  704,
+         1005,  609,  624,  627,  628,  629,  630,  651,  652,  653,
+          708, 1039, 1038,  686,  845,  552,  563,  449,  449,  449,
+          552, 1308,  563, 1308,  870,  396,  461,  631,  633,  635,
+         1308,  547,  547,  547,  547,  873,  604,  468,  580,  469,
+          470,  851,  402,  878,  553,  848, 1344, 1345, 1227,  998,
+          972,  972,  970,  972,  732, 1017, 1320, 1320, 1320, 1320,
+         1042, 1043,  550, 1007, 1002,  325,  309,  881,  869, 1069,
+         1073,  432,  876,  615,  324,  275,  324,  432,  977, 1231,
+          465,  465, 1304, 1040, 1040,  736, 1313, 1314,  476,  465,
+          665, 1051, 1047, 1048, 1070,  351,  352, 1036, 1036,  681,
+          951, 1074,  967, 1028, 1044, 1045,  882, 1229,  449,  449,
+          449,  449,  449,  449,  449,  449,  449,  449,  449,  577,
+          614,  449,    0, 1072, 1115,  885, 1117, 1306, 1306, 1072,
+          979,    0, 1215,  943, 1232, 1233, 1216, 1219,  944, 1220,
+          694,    0,  843,  829,  255,  255,    0,    0,    0,    0,
+            0,    0,  694,    0,    0,    0,  694,    0,    0,    0,
+         1234, 1294, 1295,    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,  252,  252,    0,    0,    0,    0,    0,
-            0,    0,    0, 1002, 1002,    0,    0,    0,    0,    0,
             0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,    0,    0,    0,    0,    0,  272,    0,
-            0,    0,    0,  545,    0,  545
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,    0, 1012, 1012
     );
 
     protected $gotoCheck = array(
-           42,   42,   72,  126,   65,   65,   55,   55,   65,    9,
-           65,   65,   65,   65,   65,   65,   65,   65,   65,   85,
-           85,   26,   85,   85,   85,    7,   42,   42,   42,   42,
+           42,   42,   72,  126,   72,   65,   65,   55,   55,   65,
+            9,   65,   65,   65,   65,   65,   65,   65,   65,   65,
+           85,   85,   26,   85,   85,   85,   27,   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,
@@ -923,99 +927,100 @@ class Php8 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,   15,   58,   58,   58,   58,   58,   96,   23,   23,
-           23,   23,   27,  129,  107,  107,   35,   49,  107,   12,
-          107,  107,  107,  107,  107,  107,  107,  107,  107,  168,
-          168,   35,   45,  168,   35,  168,  168,  168,  168,  168,
-          168,  168,  168,  168,   64,   15,   64,   15,   15,   15,
-           15,   15,   15,   15,   15,   15,   15,    6,   12,   15,
-           12,  143,  143,   16,   16,   16,   16,   14,  170,   15,
-           15,   15,   83,  177,   16,  169,  169,   14,   14,  169,
-           83,  169,  169,  169,  169,  169,  169,  169,  169,  169,
-           14,   14,   13,   14,   13,   14,   61,   22,   16,  148,
-          148,   72,   72,   72,   72,   72,   14,  179,  148,   72,
-           14,   72,   72,   72,   72,   72,   72,   72,   72,   72,
-           16,   16,   72,   72,   72,   72,    9,    9,    9,    9,
-           72,   46,  116,   46,  102,   72,   72,   72,   72,  116,
-          103,   72,   72,   72,   63,  116,  116,   22,  149,   75,
-           75,  150,  116,  116,  116,  116,  112,   14,   72,  174,
-          174,  174,   72,  171,  171,   82,    9,  171,    9,  171,
-          171,  171,  171,  171,  171,  171,  171,  171,   14,   75,
-           75,   75,   75,   75,   75,   75,   75,   75,   75,   19,
-          154,   19,  154,   19,  115,   75,   48,   29,  154,  119,
-           48,   48,   48,  117,  117,   48,    5,    5,   14,   48,
-           48,   48,   48,   48,   48,   92,   92,   92,   19,   24,
-           24,   24,   24,   19,   19,   19,   19,  167,  167,   19,
-           19,   19,    5,    5,    5,    5,    5,    5,  181,  181,
-           39,   25,  106,  106,  106,  106,   91,  106,   25,   25,
-           25,   25,   25,   25,  181,   96,   96,  118,  118,    9,
-            9,   25,   25,   25,    9,   22,    9,   23,   18,    9,
-            9,   14,   23,  129,   23,  129,   28,  129,   84,   84,
-           84,    9,    9,    9,    9,  176,  176,    9,    2,    2,
-            9,    9,   80,   80,   80,   80,   80,   80,   80,   80,
-           80,   80,   37,  129,  129,  129,  129,   79,  159,  128,
-           81,   81,  109,  156,  131,   81,    9,   81,   98,   81,
-           81,   81,   41,   81,    8,    8,   81,    8,  129,   95,
-           81,  146,   88,   -1,   20,    8,    8,   -1,    8,    8,
-            8,   88,   88,   -1,   -1,   88,   88,   88,   78,   78,
-           -1,   -1,   78,   78,   78,   78,   -1,   23,   23,   23,
-           23,   23,   23,   23,   23,   23,   23,   23,   -1,  129,
-           23,   17,   17,  129,  129,  129,   -1,   -1,   17,   -1,
-           -1,   -1,   -1,   -1,   17,  180,  180,   -1,   20,   20,
-           -1,   -1,   17,   -1,   17,   17,   20,   -1,   -1,   -1,
-           17,  180,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   17,   -1,   20,   20,   20,   -1,  180,   -1,
+           42,   42,   42,   15,   83,   23,   23,   23,   23,  107,
+          107,   49,   83,  107,  129,  107,  107,  107,  107,  107,
+          107,  107,  107,  107,  168,  168,    8,    8,  168,    8,
+          168,  168,  168,  168,  168,  168,  168,  168,  168,    8,
+            8,   43,    8,  181,  181,   75,   75,   15,    6,   15,
+           15,   15,   15,   15,   15,   15,   15,   15,   15,   82,
+          181,   15,   24,   24,   24,   24,   58,   58,   58,   58,
+           58,   15,   15,   15,   15,   75,   75,   75,   75,   75,
+           75,   75,   75,   75,   75,   81,   81,   64,   35,   64,
+           81,   75,   81,   96,   81,   81,   81,   13,   81,   13,
+           72,   81,   72,   35,   82,   81,   35,   72,   72,   72,
+           12,   45,   46,   72,   46,   72,   72,   72,   72,   72,
+           72,   72,   72,   72,  170,   22,   72,   72,   72,   72,
+            9,    9,    9,    9,   72,  177,   17,   17,  179,   72,
+           72,   72,   72,   17,  102,   72,   72,   72,   61,   17,
+           12,   14,   12,  103,    5,    5,  154,   17,  154,   17,
+           17,   14,   14,   72,  154,   17,   63,   72,  174,  174,
+          174,    9,  149,    9,   14,   14,   22,   17,   14,  113,
+           14,    5,    5,    5,    5,    5,    5,  150,   19,  112,
+           19,   14,  169,  169,  115,   14,  169,   19,  169,  169,
+          169,  169,  169,  169,  169,  169,  169,  171,  171,  180,
+          180,  171,  119,  171,  171,  171,  171,  171,  171,  171,
+          171,  171,   19,   92,   92,   92,  180,   19,   19,   19,
+           19,   29,   48,   19,   19,   19,   48,   48,   48,  143,
+          143,   48,   14,  180,   91,   48,   48,   48,   48,   48,
+           48,   80,   80,   80,   80,   80,   80,   80,   80,   80,
+           80,  117,  117,   14,   18,    9,    9,   23,   23,   23,
+            9,  129,    9,  129,   37,    9,    9,   84,   84,   84,
+          129,  106,  106,  106,  106,   39,  106,    9,    9,    9,
+            9,   25,   28,    9,   14,   22,    9,    9,  159,   25,
+           25,   25,   25,   25,   25,  109,  129,  129,  129,  129,
+          118,  118,   25,   25,   25,  167,  167,   16,   16,   16,
+           16,  116,    9,   79,   24,   24,   24,  116,   16,   20,
+          148,  148,  129,  116,  116,   98,  176,  176,  156,  148,
+          116,  116,  116,  116,  128,   96,   96,   88,   88,   88,
+           88,  131,   16,   88,   88,   88,   41,   14,   23,   23,
+           23,   23,   23,   23,   23,   23,   23,   23,   23,    2,
+            2,   23,   -1,  129,   16,   16,  146,  129,  129,  129,
+           95,   -1,   78,   78,   20,   20,   78,   78,   78,   78,
+            7,   -1,   20,    7,    5,    5,   -1,   -1,   -1,   -1,
+           -1,   -1,    7,   -1,   -1,   -1,    7,   -1,   -1,   -1,
+           20,   20,   20,   -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,    5,    5,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,  106,  106,   -1,   -1,   -1,   -1,   -1,
            -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   24,   -1,
-           -1,   -1,   -1,   24,   -1,   24
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+           -1,   -1,   -1,   -1,  106,  106
     );
 
     protected $gotoBase = array(
-            0,    0, -255,    0,    0,  365,  197,   16,  477,  -11,
-            0,    0, -115,  -81,  -68, -182, -223,   72,  121,   82,
-          106,    0,  -19,  165,  376,  397,   17,  168,  103,   63,
-            0,    0,    0,    0,    0, -190,    0,  127,    0,   80,
-            0,   47,   -1,    0,    0,  173, -436,    0, -346,  160,
-            0,    0,    0,    0,    0,  -33,    0,    0,  118,    0,
-            0,  215,    0,   65,  191, -234,    0,    0,    0,    0,
-            0,    0,   -6,    0,    0,  -31,    0,    0,  105,  128,
-           99,  -15,   49, -231,  -35, -690,    0,    0,  222,    0,
-            0,   81,   73,    0,    0,   52, -310,    0,   76,    0,
-            0,    0,  260,  258,    0,    0,  375,  -64,    0,  107,
-            0,    0,   41,    0,    0,   75,   24,   86,  136,   71,
-            0,    0,    0,    0,    0,    0,    1,    0,  100,  166,
-            0,   38,    0,    0,    0,    0,    0,    0,    0,    0,
-            0,    0,    0,  -51,    0,    0,   53,    0,  226,   66,
-           40,    0,    0,    0, -139,    0,   39,    0,    0,  104,
-            0,    0,    0,    0,    0,    0,    0,   69,  -49,   -3,
-          200,   85,    0,    0,   21,    0,   78,  204,    0,  237,
-          240,   93,    0,    0
+            0,    0, -183,    0,    0,  313,  188,  543,  178,  -10,
+            0,    0,  -27,  -80,   13, -184,   26, -168,  114,   83,
+           97,    0,    6,  162,  219,  447,   18,   22,  115,   94,
+            0,    0,    0,    0,    0, -122,    0,   95,    0,  122,
+            0,   76,   -1,  182,    0,  248, -464,    0, -319,  153,
+            0,    0,    0,    0,    0,  -33,    0,    0,  181,    0,
+            0,  266,    0,   84,  233, -236,    0,    0,    0,    0,
+            0,    0,   -5,    0,    0, -139,    0,    0,  135,  140,
+           54, -245,  -60, -304,  -41, -698,    0,    0,  227,    0,
+            0,   75,   78,    0,    0,   98, -229,    0,   89,    0,
+            0,    0,  269,  270,    0,    0,  413,  -72,    0,   96,
+            0,    0,   71,   66,    0,   72,  209,  141,  186,   81,
+            0,    0,    0,    0,    0,    0,    1,    0,  131,  166,
+            0,   70,    0,    0,    0,    0,    0,    0,    0,    0,
+            0,    0,    0,  124,    0,    0,   93,    0,  456,   87,
+           73,    0,    0,    0, -178,    0,   59,    0,    0,   90,
+            0,    0,    0,    0,    0,    0,    0,  154,  -57,  111,
+          255,  126,    0,    0,   27,    0,  125,  265,    0,  267,
+           61, -105,    0,    0
     );
 
     protected $gotoDefault = array(
-        -32768,  506,  731,    4,  732,  924,  807,  816,  593,  524,
-          698,  343,  621,  416, 1291,  901, 1110,  574,  835, 1234,
-         1242,  451,  838,  326,  721,  883,  884,  885,  395,  381,
-          387,  393,  645,  622,  488,  870,  447,  862,  480,  865,
-          446,  874,  162,  413,  504,  878,    3,  880,  552,  911,
-          382,  888,  383,  673,  890,  558,  892,  893,  390,  396,
-          397, 1115,  566,  618,  905,  253,  560,  906,  380,  907,
-          914,  385,  388,  684,  459,  499,  493,  406, 1090,  561,
-          604,  642,  441,  467,  616,  628,  614,  474, 1026,  411,
-          325,  946,  954,  481,  457,  968,  345,  976,  729, 1123,
-          636,  483,  984,  637,  991,  994,  525,  526,  472, 1006,
-          268, 1009,  484, 1047,  663, 1020, 1021,  664,  638, 1043,
-          639,  665,  640, 1045,  466,  594, 1053,  448, 1061, 1279,
-          449, 1065,  262, 1068,  275,  412,  429, 1073, 1074,    8,
-         1080,  690,  691,   10,  273,  503, 1105,  685,  445, 1122,
-          433, 1192, 1194,  554,  485, 1212, 1211,  676,  500, 1217,
-          442, 1282,  443,  527,  468,  313,  528,  305,  329,  310,
-          543,  292,  330,  529,  469, 1288, 1296,  327,   30, 1316,
-         1327,  338,  571,  609
+        -32768,  511,  740,    4,  741,  934,  816,  825,  597,  529,
+          707,  347,  625,  421, 1302,  911, 1121,  578,  844, 1245,
+         1253,  456,  847,  330,  730,  893,  894,  895,  399,  385,
+          391,  397,  649,  626,  493,  879,  452,  871,  485,  874,
+          451,  883,  164,  417,  509,  887,    3,  890,  556,  921,
+          386,  898,  387,  677,  900,  562,  902,  903,  394,  400,
+          401, 1126,  570,  622,  915,  256,  564,  916,  384,  917,
+          924,  389,  392,  688,  464,  504,  498,  410, 1101,  565,
+          608,  646,  446,  472,  620,  632,  618,  479,  433,  415,
+          329,  956,  964,  486,  462,  978,  349,  986,  738, 1134,
+          640,  488,  994,  641, 1001, 1004,  530,  531,  477, 1016,
+          272, 1019,  489,   19,  667, 1030, 1031,  668,  642, 1053,
+          643,  669,  644, 1055,  471,  598, 1063,  453, 1071, 1290,
+          454, 1075,  266, 1078,  278,  416,  434, 1084, 1085,    9,
+         1091,  698,  699,   11,  276,  508, 1116,  689,  450, 1133,
+          438, 1203, 1205,  558,  490, 1223, 1222,  680,  505, 1228,
+          447, 1293,  448,  532,  473,  316,  533,  308,  333,  313,
+          548,  295,  334,  534,  474, 1299, 1307,  331,   31, 1327,
+         1338,  342,  575,  613
     );
 
     protected $ruleToNonTerminal = array(
@@ -1034,30 +1039,30 @@ class Php8 extends \PhpParser\ParserAbstract
             4,    4,    4,   29,   29,   30,   30,   32,   34,   34,
            28,   36,   36,   33,   38,   38,   35,   35,   37,   37,
            39,   39,   31,   40,   40,   41,   43,   44,   44,   45,
-           46,   46,   48,   47,   47,   47,   47,   49,   49,   49,
+           45,   46,   46,   48,   47,   47,   47,   47,   49,   49,
            49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
            49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
-           49,   25,   25,   68,   68,   71,   71,   70,   69,   69,
-           62,   74,   74,   75,   75,   76,   76,   77,   77,   78,
-           78,   79,   79,   26,   26,   27,   27,   27,   27,   27,
-           87,   87,   89,   89,   82,   82,   90,   90,   91,   91,
-           91,   83,   83,   86,   86,   84,   84,   92,   93,   93,
-           56,   56,   64,   64,   67,   67,   67,   66,   94,   94,
-           95,   57,   57,   57,   57,   96,   96,   97,   97,   98,
-           98,   99,  100,  100,  101,  101,  102,  102,   54,   54,
-           50,   50,  104,   52,   52,  105,   51,   51,   53,   53,
-           63,   63,   63,   63,   80,   80,  108,  108,  110,  110,
-          111,  111,  111,  111,  109,  109,  109,  113,  113,  113,
-          113,   88,   88,  116,  116,  116,  117,  117,  114,  114,
-          118,  118,  120,  120,  121,  121,  115,  122,  122,  119,
-          123,  123,  123,  123,  112,  112,   81,   81,   81,   20,
-           20,   20,  125,  124,  124,  126,  126,  126,  126,   59,
-          127,  127,  128,   60,  130,  130,  131,  131,  132,  132,
-           85,  133,  133,  133,  133,  133,  133,  138,  138,  139,
-          139,  140,  140,  140,  140,  140,  141,  142,  142,  137,
-          137,  134,  134,  136,  136,  144,  144,  143,  143,  143,
-          143,  143,  143,  143,  135,  145,  145,  147,  146,  146,
-           61,  103,  148,  148,   55,   55,   42,   42,   42,   42,
+           49,   49,   25,   25,   68,   68,   71,   71,   70,   69,
+           69,   62,   74,   74,   75,   75,   76,   76,   77,   77,
+           78,   78,   79,   79,   26,   26,   27,   27,   27,   27,
+           27,   87,   87,   89,   89,   82,   82,   90,   90,   91,
+           91,   91,   83,   83,   86,   86,   84,   84,   92,   93,
+           93,   56,   56,   64,   64,   67,   67,   67,   66,   94,
+           94,   95,   57,   57,   57,   57,   96,   96,   97,   97,
+           98,   98,   99,  100,  100,  101,  101,  102,  102,   54,
+           54,   50,   50,  104,   52,   52,  105,   51,   51,   53,
+           53,   63,   63,   63,   63,   80,   80,  108,  108,  110,
+          110,  111,  111,  111,  111,  109,  109,  109,  113,  113,
+          113,  113,   88,   88,  116,  116,  116,  117,  117,  114,
+          114,  118,  118,  120,  120,  121,  121,  115,  122,  122,
+          119,  123,  123,  123,  123,  112,  112,   81,   81,   81,
+           20,   20,   20,  125,  124,  124,  126,  126,  126,  126,
+           59,  127,  127,  128,   60,  130,  130,  131,  131,  132,
+          132,   85,  133,  133,  133,  133,  133,  133,  133,  138,
+          138,  139,  139,  140,  140,  140,  140,  140,  141,  142,
+          142,  137,  137,  134,  134,  136,  136,  144,  144,  143,
+          143,  143,  143,  143,  143,  143,  135,  145,  145,  147,
+          146,  146,   61,  103,  148,  148,   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,
@@ -1067,20 +1072,20 @@ class Php8 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,
-          155,  149,  149,  154,  154,  157,  158,  158,  159,  160,
-          161,  161,  161,  161,   19,   19,   72,   72,   72,   72,
-          150,  150,  150,  150,  163,  163,  151,  151,  153,  153,
-          153,  156,  156,  168,  168,  168,  168,  168,  168,  168,
-          168,  168,  169,  169,  169,  107,  171,  171,  171,  171,
-          152,  152,  152,  152,  152,  152,  152,  152,   58,   58,
-          166,  166,  166,  166,  172,  172,  162,  162,  162,  173,
-          173,  173,  173,  173,  173,   73,   73,   65,   65,   65,
-           65,  129,  129,  129,  129,  176,  175,  165,  165,  165,
-          165,  165,  165,  165,  164,  164,  164,  174,  174,  174,
-          174,  106,  170,  178,  178,  177,  177,  179,  179,  179,
-          179,  179,  179,  179,  179,  167,  167,  167,  167,  181,
-          182,  180,  180,  180,  180,  180,  180,  180,  180,  183,
-          183,  183,  183
+           42,   42,  155,  149,  149,  154,  154,  157,  158,  158,
+          159,  160,  161,  161,  161,  161,   19,   19,   72,   72,
+           72,   72,  150,  150,  150,  150,  163,  163,  151,  151,
+          153,  153,  153,  156,  156,  168,  168,  168,  168,  168,
+          168,  168,  168,  168,  169,  169,  169,  107,  171,  171,
+          171,  171,  152,  152,  152,  152,  152,  152,  152,  152,
+           58,   58,  166,  166,  166,  166,  172,  172,  162,  162,
+          162,  173,  173,  173,  173,  173,  173,   73,   73,   65,
+           65,   65,   65,  129,  129,  129,  129,  176,  175,  165,
+          165,  165,  165,  165,  165,  165,  164,  164,  164,  174,
+          174,  174,  174,  106,  170,  178,  178,  177,  177,  179,
+          179,  179,  179,  179,  179,  179,  179,  167,  167,  167,
+          167,  181,  182,  180,  180,  180,  180,  180,  180,  180,
+          180,  183,  183,  183,  183
     );
 
     protected $ruleToLength = array(
@@ -1099,53 +1104,53 @@ class Php8 extends \PhpParser\ParserAbstract
             4,    2,    3,    1,    1,    7,    6,    2,    3,    1,
             2,    3,    1,    2,    3,    1,    1,    3,    1,    3,
             1,    2,    2,    3,    1,    3,    2,    3,    1,    3,
-            2,    0,    1,    1,    1,    1,    1,    3,    7,   10,
-            5,    7,    9,    5,    3,    3,    3,    3,    3,    3,
-            1,    2,    5,    7,    9,    6,    5,    6,    3,    2,
-            1,    1,    1,    0,    2,    1,    3,    8,    0,    4,
-            2,    1,    3,    0,    1,    0,    1,    0,    1,    3,
-            1,    1,    1,    8,    9,    7,    8,    7,    6,    8,
-            0,    2,    0,    2,    1,    2,    1,    2,    1,    1,
-            1,    0,    2,    0,    2,    0,    2,    2,    1,    3,
-            1,    4,    1,    4,    1,    1,    4,    2,    1,    3,
-            3,    3,    4,    4,    5,    0,    2,    4,    3,    1,
-            1,    7,    0,    2,    1,    3,    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,    1,    1,    3,    3,    3,
-            1,    3,    3,    3,    3,    3,    1,    3,    3,    1,
-            1,    2,    1,    1,    0,    1,    0,    2,    2,    2,
-            4,    3,    1,    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,    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,    2,    0,    1,    1,    1,    1,    1,    3,    7,
+           10,    5,    7,    9,    5,    3,    3,    3,    3,    3,
+            3,    1,    2,    5,    7,    9,    6,    5,    6,    3,
+            2,    1,    1,    1,    0,    2,    1,    3,    8,    0,
+            4,    2,    1,    3,    0,    1,    0,    1,    0,    1,
+            3,    1,    1,    1,    8,    9,    7,    8,    7,    6,
+            8,    0,    2,    0,    2,    1,    2,    1,    2,    1,
+            1,    1,    0,    2,    0,    2,    0,    2,    2,    1,
+            3,    1,    4,    1,    4,    1,    1,    4,    2,    1,
+            3,    3,    3,    4,    4,    5,    0,    2,    4,    3,
+            1,    1,    7,    0,    2,    1,    3,    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,    1,    1,    3,    3,
+            3,    1,    3,    3,    3,    3,    3,    1,    3,    3,
+            1,    1,    2,    1,    1,    0,    1,    0,    2,    2,
+            2,    4,    3,    1,    1,    3,    1,    2,    2,    3,
+            2,    3,    1,    1,    2,    3,    1,    1,    3,    2,
+            0,    1,    5,    5,    6,   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,    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,    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,    1,
-            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,    5,    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
+            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,    1,    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,    5,    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(): void {
@@ -1605,20 +1610,20 @@ class Php8 extends \PhpParser\ParserAbstract
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             149 => function ($stackPos) {
-                 $this->semValue = new Node\Const_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos-(3-1)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributeStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             150 => function ($stackPos) {
-                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
+                 $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos-(3-1)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributeStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             151 => function ($stackPos) {
-                 $this->semValue = array();
+                 if (is_array($this->semStack[$stackPos-(2-2)])) { $this->semValue = array_merge($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); } else { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; };
             },
             152 => 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)];
+                 $this->semValue = array();
             },
             153 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $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)];
             },
             154 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -1627,9 +1632,12 @@ class Php8 extends \PhpParser\ParserAbstract
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             156 => function ($stackPos) {
-                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             157 => function ($stackPos) {
+                 throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+            },
+            158 => function ($stackPos) {
 
         if ($this->semStack[$stackPos-(3-2)]) {
             $this->semValue = $this->semStack[$stackPos-(3-2)]; $attrs = $this->startAttributeStack[$stackPos-(3-1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) {$stmts[0]->setAttribute('comments', array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); };
@@ -1639,46 +1647,46 @@ class Php8 extends \PhpParser\ParserAbstract
         }
 
             },
-            158 => function ($stackPos) {
+            159 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(7-3)], ['stmts' => is_array($this->semStack[$stackPos-(7-5)]) ? $this->semStack[$stackPos-(7-5)] : array($this->semStack[$stackPos-(7-5)]), 'elseifs' => $this->semStack[$stackPos-(7-6)], 'else' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            159 => function ($stackPos) {
+            160 => function ($stackPos) {
                  $this->semValue = new Stmt\If_($this->semStack[$stackPos-(10-3)], ['stmts' => $this->semStack[$stackPos-(10-6)], 'elseifs' => $this->semStack[$stackPos-(10-7)], 'else' => $this->semStack[$stackPos-(10-8)]], $this->startAttributeStack[$stackPos-(10-1)] + $this->endAttributes);
             },
-            160 => function ($stackPos) {
+            161 => function ($stackPos) {
                  $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            161 => function ($stackPos) {
+            162 => function ($stackPos) {
                  $this->semValue = new Stmt\Do_($this->semStack[$stackPos-(7-5)], is_array($this->semStack[$stackPos-(7-2)]) ? $this->semStack[$stackPos-(7-2)] : array($this->semStack[$stackPos-(7-2)]), $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            162 => function ($stackPos) {
+            163 => function ($stackPos) {
                  $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos-(9-3)], 'cond' => $this->semStack[$stackPos-(9-5)], 'loop' => $this->semStack[$stackPos-(9-7)], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            163 => function ($stackPos) {
+            164 => function ($stackPos) {
                  $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            164 => function ($stackPos) {
+            165 => function ($stackPos) {
                  $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            165 => function ($stackPos) {
+            166 => function ($stackPos) {
                  $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            166 => function ($stackPos) {
+            167 => function ($stackPos) {
                  $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            167 => function ($stackPos) {
+            168 => function ($stackPos) {
                  $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            168 => function ($stackPos) {
+            169 => function ($stackPos) {
                  $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            169 => function ($stackPos) {
+            170 => function ($stackPos) {
                  $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            170 => function ($stackPos) {
+            171 => function ($stackPos) {
                  $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            171 => function ($stackPos) {
+            172 => function ($stackPos) {
 
         $e = $this->semStack[$stackPos-(2-1)];
         if ($e instanceof Expr\Throw_) {
@@ -1690,1145 +1698,1143 @@ class Php8 extends \PhpParser\ParserAbstract
         }
 
             },
-            172 => function ($stackPos) {
+            173 => function ($stackPos) {
                  $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            173 => function ($stackPos) {
+            174 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos-(7-5)][1], 'stmts' => $this->semStack[$stackPos-(7-7)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
-            174 => function ($stackPos) {
+            175 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(9-3)], $this->semStack[$stackPos-(9-7)][0], ['keyVar' => $this->semStack[$stackPos-(9-5)], 'byRef' => $this->semStack[$stackPos-(9-7)][1], 'stmts' => $this->semStack[$stackPos-(9-9)]], $this->startAttributeStack[$stackPos-(9-1)] + $this->endAttributes);
             },
-            175 => function ($stackPos) {
+            176 => function ($stackPos) {
                  $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos-(6-3)], new Expr\Error($this->startAttributeStack[$stackPos-(6-4)] + $this->endAttributeStack[$stackPos-(6-4)]), ['stmts' => $this->semStack[$stackPos-(6-6)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            176 => function ($stackPos) {
+            177 => function ($stackPos) {
                  $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
-            177 => function ($stackPos) {
+            178 => function ($stackPos) {
                  $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->checkTryCatch($this->semValue);
             },
-            178 => function ($stackPos) {
+            179 => function ($stackPos) {
                  $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            179 => function ($stackPos) {
+            180 => function ($stackPos) {
                  $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            180 => function ($stackPos) {
+            181 => function ($stackPos) {
                  $this->semValue = array(); /* means: no statement */
             },
-            181 => function ($stackPos) {
+            182 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            182 => function ($stackPos) {
+            183 => function ($stackPos) {
                  $startAttributes = $this->startAttributeStack[$stackPos-(1-1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; };
             if ($this->semValue === null) $this->semValue = array(); /* means: no statement */
             },
-            183 => function ($stackPos) {
+            184 => function ($stackPos) {
                  $this->semValue = array();
             },
-            184 => function ($stackPos) {
+            185 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            185 => function ($stackPos) {
+            186 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            186 => function ($stackPos) {
+            187 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            187 => function ($stackPos) {
+            188 => function ($stackPos) {
                  $this->semValue = new Stmt\Catch_($this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-7)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
-            188 => function ($stackPos) {
+            189 => function ($stackPos) {
                  $this->semValue = null;
             },
-            189 => function ($stackPos) {
+            190 => function ($stackPos) {
                  $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            190 => function ($stackPos) {
+            191 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            191 => function ($stackPos) {
+            192 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            192 => function ($stackPos) {
+            193 => function ($stackPos) {
                  $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
-            193 => function ($stackPos) {
+            194 => function ($stackPos) {
                  $this->semValue = false;
             },
-            194 => function ($stackPos) {
+            195 => function ($stackPos) {
                  $this->semValue = true;
             },
-            195 => function ($stackPos) {
+            196 => function ($stackPos) {
                  $this->semValue = false;
             },
-            196 => function ($stackPos) {
+            197 => function ($stackPos) {
                  $this->semValue = true;
             },
-            197 => function ($stackPos) {
+            198 => function ($stackPos) {
                  $this->semValue = false;
             },
-            198 => function ($stackPos) {
+            199 => function ($stackPos) {
                  $this->semValue = true;
             },
-            199 => function ($stackPos) {
+            200 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            200 => function ($stackPos) {
+            201 => function ($stackPos) {
                  $this->semValue = [];
             },
-            201 => function ($stackPos) {
+            202 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            202 => function ($stackPos) {
+            203 => function ($stackPos) {
                  $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            203 => function ($stackPos) {
+            204 => function ($stackPos) {
                  $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(8-3)], ['byRef' => $this->semStack[$stackPos-(8-2)], 'params' => $this->semStack[$stackPos-(8-5)], 'returnType' => $this->semStack[$stackPos-(8-7)], 'stmts' => $this->semStack[$stackPos-(8-8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes);
             },
-            204 => function ($stackPos) {
+            205 => function ($stackPos) {
                  $this->semValue = new Stmt\Function_($this->semStack[$stackPos-(9-4)], ['byRef' => $this->semStack[$stackPos-(9-3)], 'params' => $this->semStack[$stackPos-(9-6)], '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);
             },
-            205 => function ($stackPos) {
+            206 => function ($stackPos) {
                  $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(7-2)], ['type' => $this->semStack[$stackPos-(7-1)], 'extends' => $this->semStack[$stackPos-(7-3)], 'implements' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => []], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             $this->checkClass($this->semValue, $stackPos-(7-2));
             },
-            206 => function ($stackPos) {
+            207 => function ($stackPos) {
                  $this->semValue = new Stmt\Class_($this->semStack[$stackPos-(8-3)], ['type' => $this->semStack[$stackPos-(8-2)], '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->checkClass($this->semValue, $stackPos-(8-3));
             },
-            207 => function ($stackPos) {
+            208 => function ($stackPos) {
                  $this->semValue = new Stmt\Interface_($this->semStack[$stackPos-(7-3)], ['extends' => $this->semStack[$stackPos-(7-4)], 'stmts' => $this->semStack[$stackPos-(7-6)], 'attrGroups' => $this->semStack[$stackPos-(7-1)]], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             $this->checkInterface($this->semValue, $stackPos-(7-3));
             },
-            208 => function ($stackPos) {
+            209 => function ($stackPos) {
                  $this->semValue = new Stmt\Trait_($this->semStack[$stackPos-(6-3)], ['stmts' => $this->semStack[$stackPos-(6-5)], 'attrGroups' => $this->semStack[$stackPos-(6-1)]], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            209 => function ($stackPos) {
+            210 => function ($stackPos) {
                  $this->semValue = new Stmt\Enum_($this->semStack[$stackPos-(8-3)], ['scalarType' => $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->checkEnum($this->semValue, $stackPos-(8-3));
             },
-            210 => function ($stackPos) {
-                 $this->semValue = null;
-            },
             211 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             212 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             213 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             214 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             215 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = 0;
             },
             216 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             217 => function ($stackPos) {
-                 $this->checkClassModifier($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)];
             },
             218 => function ($stackPos) {
-                 $this->semValue = Modifiers::ABSTRACT;
+                 $this->checkClassModifier($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)];
             },
             219 => function ($stackPos) {
-                 $this->semValue = Modifiers::FINAL;
+                 $this->semValue = Modifiers::ABSTRACT;
             },
             220 => function ($stackPos) {
-                 $this->semValue = Modifiers::READONLY;
+                 $this->semValue = Modifiers::FINAL;
             },
             221 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = Modifiers::READONLY;
             },
             222 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             223 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             224 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = array();
             },
             225 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             226 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = array();
             },
             227 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             228 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             229 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             230 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             231 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             232 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             233 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             234 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             235 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             236 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = null;
             },
             237 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             238 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             239 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             240 => function ($stackPos) {
-                 $this->semValue = new Node\DeclareItem($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)];
             },
             241 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Node\DeclareItem($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             242 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             243 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             244 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(5-3)];
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             245 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(5-3)];
             },
             246 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             247 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             248 => function ($stackPos) {
-                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\Case_($this->semStack[$stackPos-(4-2)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             249 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             250 => function ($stackPos) {
                 $this->semValue = $this->semStack[$stackPos];
             },
             251 => function ($stackPos) {
-                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
+                $this->semValue = $this->semStack[$stackPos];
             },
             252 => function ($stackPos) {
-                 $this->semValue = [];
+                 $this->semValue = new Expr\Match_($this->semStack[$stackPos-(7-3)], $this->semStack[$stackPos-(7-6)], $this->startAttributeStack[$stackPos-(7-1)] + $this->endAttributes);
             },
             253 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = [];
             },
             254 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             255 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             256 => function ($stackPos) {
-                 $this->semValue = new Node\MatchArm($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)];
             },
             257 => function ($stackPos) {
-                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Node\MatchArm($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             258 => function ($stackPos) {
-                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             259 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = is_array($this->semStack[$stackPos-(1-1)]) ? $this->semStack[$stackPos-(1-1)] : array($this->semStack[$stackPos-(1-1)]);
             },
             260 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             261 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             262 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             263 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(5-3)], is_array($this->semStack[$stackPos-(5-5)]) ? $this->semStack[$stackPos-(5-5)] : array($this->semStack[$stackPos-(5-5)]), $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
             },
             264 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             265 => function ($stackPos) {
-                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             266 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-6)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
             },
             267 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = null;
             },
             268 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = new Stmt\Else_(is_array($this->semStack[$stackPos-(2-2)]) ? $this->semStack[$stackPos-(2-2)] : array($this->semStack[$stackPos-(2-2)]), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             269 => function ($stackPos) {
-                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
+                 $this->semValue = null;
             },
             270 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = new Stmt\Else_($this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue);
             },
             271 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             272 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
+                 $this->semValue = array($this->semStack[$stackPos-(2-2)], true);
             },
             273 => function ($stackPos) {
-                 $this->semValue = array($this->fixupArrayDestructuring($this->semStack[$stackPos-(1-1)]), false);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)], false);
             },
             274 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array($this->fixupArrayDestructuring($this->semStack[$stackPos-(1-1)]), false);
             },
             275 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             276 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array();
             },
             277 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             278 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             279 => 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 = 0;
             },
             280 => function ($stackPos) {
-                 $this->semValue = Modifiers::PUBLIC;
+                 $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)];
             },
             281 => function ($stackPos) {
-                 $this->semValue = Modifiers::PROTECTED;
+                 $this->semValue = Modifiers::PUBLIC;
             },
             282 => function ($stackPos) {
-                 $this->semValue = Modifiers::PRIVATE;
+                 $this->semValue = Modifiers::PROTECTED;
             },
             283 => function ($stackPos) {
-                 $this->semValue = Modifiers::READONLY;
+                 $this->semValue = Modifiers::PRIVATE;
             },
             284 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
-            $this->checkParam($this->semValue);
+                 $this->semValue = Modifiers::READONLY;
             },
             285 => function ($stackPos) {
-                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(6-6)], null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
             $this->checkParam($this->semValue);
             },
             286 => function ($stackPos) {
-                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
+                 $this->semValue = new Node\Param($this->semStack[$stackPos-(8-6)], $this->semStack[$stackPos-(8-8)], $this->semStack[$stackPos-(8-3)], $this->semStack[$stackPos-(8-4)], $this->semStack[$stackPos-(8-5)], $this->startAttributeStack[$stackPos-(8-1)] + $this->endAttributes, $this->semStack[$stackPos-(8-2)], $this->semStack[$stackPos-(8-1)]);
+            $this->checkParam($this->semValue);
             },
             287 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes), null, $this->semStack[$stackPos-(6-3)], $this->semStack[$stackPos-(6-4)], $this->semStack[$stackPos-(6-5)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-1)]);
             },
             288 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             289 => function ($stackPos) {
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             290 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             291 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             292 => function ($stackPos) {
-                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             293 => function ($stackPos) {
-                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             294 => function ($stackPos) {
-                 $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]);
             },
             295 => 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);
             },
             296 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             297 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             298 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             299 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             300 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             301 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             302 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             303 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             304 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             305 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             306 => function ($stackPos) {
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             307 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             308 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             309 => function ($stackPos) {
-                 $this->semValue = new Node\IntersectionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             310 => 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);
             },
             311 => function ($stackPos) {
-                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             312 => function ($stackPos) {
-                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Node\NullableType($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             313 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Node\UnionType($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             314 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             315 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             316 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             317 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-2)];
+                 $this->semValue = null;
             },
             318 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(2-2)];
             },
             319 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             320 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-2)];
+                 $this->semValue = array();
             },
             321 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-2)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-2)];
             },
             322 => function ($stackPos) {
-                 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(3-2)]);
             },
             323 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             324 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             325 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             326 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(1-1)], false, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             327 => function ($stackPos) {
-                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\Arg($this->semStack[$stackPos-(2-2)], true, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             328 => 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 = new Node\Arg($this->semStack[$stackPos-(2-2)], false, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             329 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-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)]);
             },
             330 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             331 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             332 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             333 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             334 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             335 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             336 => function ($stackPos) {
-                 $this->semValue = new Node\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             337 => function ($stackPos) {
-                 $this->semValue = new Node\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             338 => 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 = new Node\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             339 => function ($stackPos) {
-                 $this->semValue = array();
+                 if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }
             },
             340 => function ($stackPos) {
+                 $this->semValue = array();
+            },
+            341 => 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)];
             },
-            341 => function ($stackPos) {
+            342 => 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));
             },
-            342 => function ($stackPos) {
+            343 => 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));
             },
-            343 => 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));
-            },
             344 => function ($stackPos) {
-                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos-(6-5)], $this->semStack[$stackPos-(6-2)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes, $this->semStack[$stackPos-(6-1)], $this->semStack[$stackPos-(6-4)]);
+            $this->checkClassConst($this->semValue, $stackPos-(6-2));
             },
             345 => 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);
+                 $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));
             },
             346 => function ($stackPos) {
-                 $this->semValue = null; /* will be skipped */
+                 $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             347 => function ($stackPos) {
-                 $this->semValue = array();
+                 $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);
             },
             348 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = null; /* will be skipped */
             },
             349 => function ($stackPos) {
                  $this->semValue = array();
             },
             350 => function ($stackPos) {
-                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             351 => 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);
+                 $this->semValue = array();
             },
             352 => 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);
+                 $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             353 => 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 = 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);
             },
             354 => 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 = 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);
             },
             355 => 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 = 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);
             },
             356 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
+                 $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);
             },
             357 => 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);
             },
             358 => function ($stackPos) {
-                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]);
             },
             359 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             360 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]);
             },
             361 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             362 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             363 => function ($stackPos) {
-                 $this->semValue = 0;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             364 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = 0;
             },
             365 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = 0;
             },
             366 => 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)];
             },
             367 => function ($stackPos) {
-                 $this->semValue = Modifiers::PUBLIC;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             368 => function ($stackPos) {
-                 $this->semValue = Modifiers::PROTECTED;
+                 $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)];
             },
             369 => function ($stackPos) {
-                 $this->semValue = Modifiers::PRIVATE;
+                 $this->semValue = Modifiers::PUBLIC;
             },
             370 => function ($stackPos) {
-                 $this->semValue = Modifiers::STATIC;
+                 $this->semValue = Modifiers::PROTECTED;
             },
             371 => function ($stackPos) {
-                 $this->semValue = Modifiers::ABSTRACT;
+                 $this->semValue = Modifiers::PRIVATE;
             },
             372 => function ($stackPos) {
-                 $this->semValue = Modifiers::FINAL;
+                 $this->semValue = Modifiers::STATIC;
             },
             373 => function ($stackPos) {
-                 $this->semValue = Modifiers::READONLY;
+                 $this->semValue = Modifiers::ABSTRACT;
             },
             374 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = Modifiers::FINAL;
             },
             375 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = Modifiers::READONLY;
             },
             376 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             377 => function ($stackPos) {
-                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             378 => function ($stackPos) {
-                 $this->semValue = new Node\PropertyItem($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)];
             },
             379 => function ($stackPos) {
-                 $this->semValue = new Node\PropertyItem($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             380 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\PropertyItem($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             381 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = new Node\PropertyItem($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             382 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             383 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             384 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             385 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             386 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             387 => 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-(1-1)];
             },
             388 => function ($stackPos) {
-                 $this->semValue = new Expr\Assign($this->fixupArrayDestructuring($this->semStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             389 => function ($stackPos) {
                  $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             390 => 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 = new Expr\Assign($this->fixupArrayDestructuring($this->semStack[$stackPos-(3-1)]), $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             391 => function ($stackPos) {
+                 $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            392 => function ($stackPos) {
+                 $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+            },
+            393 => function ($stackPos) {
                  $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             if (!$this->phpVersion->allowsAssignNewByReference()) {
                 $this->emitError(new Error('Cannot assign new by reference', $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes));
             }
 
             },
-            392 => function ($stackPos) {
+            394 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            393 => function ($stackPos) {
+            395 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            394 => function ($stackPos) {
+            396 => function ($stackPos) {
                  $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            395 => function ($stackPos) {
+            397 => 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);
             },
-            396 => function ($stackPos) {
+            398 => 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);
             },
-            397 => function ($stackPos) {
+            399 => 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);
             },
-            398 => function ($stackPos) {
+            400 => 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);
             },
-            399 => function ($stackPos) {
+            401 => 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);
             },
-            400 => function ($stackPos) {
+            402 => 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);
             },
-            401 => function ($stackPos) {
+            403 => 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);
             },
-            402 => function ($stackPos) {
+            404 => 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);
             },
-            403 => function ($stackPos) {
+            405 => 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);
             },
-            404 => function ($stackPos) {
+            406 => 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);
             },
-            405 => function ($stackPos) {
+            407 => 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);
             },
-            406 => function ($stackPos) {
+            408 => 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);
             },
-            407 => function ($stackPos) {
+            409 => 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);
             },
-            408 => function ($stackPos) {
+            410 => function ($stackPos) {
                  $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            409 => function ($stackPos) {
+            411 => function ($stackPos) {
                  $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            410 => function ($stackPos) {
+            412 => function ($stackPos) {
                  $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            411 => function ($stackPos) {
+            413 => function ($stackPos) {
                  $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            412 => function ($stackPos) {
+            414 => 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);
             },
-            413 => function ($stackPos) {
+            415 => 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);
             },
-            414 => function ($stackPos) {
+            416 => 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);
             },
-            415 => function ($stackPos) {
+            417 => 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);
             },
-            416 => function ($stackPos) {
+            418 => 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);
             },
-            417 => function ($stackPos) {
+            419 => 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);
             },
-            418 => function ($stackPos) {
+            420 => 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);
             },
-            419 => function ($stackPos) {
+            421 => 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);
             },
-            420 => function ($stackPos) {
+            422 => 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);
             },
-            421 => function ($stackPos) {
+            423 => 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);
             },
-            422 => function ($stackPos) {
+            424 => 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);
             },
-            423 => function ($stackPos) {
+            425 => 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);
             },
-            424 => function ($stackPos) {
+            426 => 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);
             },
-            425 => function ($stackPos) {
+            427 => 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);
             },
-            426 => function ($stackPos) {
+            428 => 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);
             },
-            427 => function ($stackPos) {
+            429 => 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);
             },
-            428 => function ($stackPos) {
+            430 => 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);
             },
-            429 => function ($stackPos) {
+            431 => 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);
             },
-            430 => function ($stackPos) {
+            432 => function ($stackPos) {
                  $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            431 => function ($stackPos) {
+            433 => function ($stackPos) {
                  $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            432 => function ($stackPos) {
+            434 => function ($stackPos) {
                  $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            433 => function ($stackPos) {
+            435 => function ($stackPos) {
                  $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            434 => function ($stackPos) {
+            436 => 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);
             },
-            435 => function ($stackPos) {
+            437 => 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);
             },
-            436 => function ($stackPos) {
+            438 => 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);
             },
-            437 => function ($stackPos) {
+            439 => 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);
             },
-            438 => function ($stackPos) {
+            440 => 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);
             },
-            439 => function ($stackPos) {
+            441 => 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);
             },
-            440 => function ($stackPos) {
+            442 => 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);
             },
-            441 => function ($stackPos) {
+            443 => 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);
             },
-            442 => function ($stackPos) {
+            444 => 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);
             },
-            443 => function ($stackPos) {
+            445 => function ($stackPos) {
                  $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            444 => function ($stackPos) {
+            446 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            445 => function ($stackPos) {
+            447 => 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);
             },
-            446 => function ($stackPos) {
+            448 => 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);
             },
-            447 => function ($stackPos) {
+            449 => 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);
             },
-            448 => function ($stackPos) {
+            450 => function ($stackPos) {
                  $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            449 => function ($stackPos) {
+            451 => function ($stackPos) {
                  $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            450 => function ($stackPos) {
+            452 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            451 => function ($stackPos) {
+            453 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            452 => function ($stackPos) {
+            454 => function ($stackPos) {
                  $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            453 => function ($stackPos) {
+            455 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            454 => function ($stackPos) {
+            456 => function ($stackPos) {
                  $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            455 => function ($stackPos) {
+            457 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            456 => function ($stackPos) {
+            458 => 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);
             },
-            457 => function ($stackPos) {
+            459 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            458 => function ($stackPos) {
+            460 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            459 => function ($stackPos) {
+            461 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            460 => function ($stackPos) {
+            462 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            461 => function ($stackPos) {
+            463 => function ($stackPos) {
                  $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            462 => function ($stackPos) {
+            464 => 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);
             },
-            463 => function ($stackPos) {
-                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
-            },
-            464 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
-            },
             465 => function ($stackPos) {
-                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             466 => function ($stackPos) {
-                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             467 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             468 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             469 => function ($stackPos) {
-                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             470 => function ($stackPos) {
-                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             471 => function ($stackPos) {
-                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             472 => 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);
+                 $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             473 => 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);
+                 $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             474 => 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);
+                 $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);
             },
             475 => 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);
+                 $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);
             },
             476 => 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);
+                 $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);
             },
             477 => 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);
+                 $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);
             },
             478 => 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);
+                 $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);
             },
             479 => 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);
+                 $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);
             },
             480 => 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);
+                 $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);
             },
             481 => function ($stackPos) {
-                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $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);
             },
             482 => function ($stackPos) {
-                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array(new Stmt\Class_(null, ['type' => $this->semStack[$stackPos-(8-2)], '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);
             },
             483 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             484 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(4-3)];
+                 list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             485 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(2-1)];
+                 $this->semValue = array();
             },
             486 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 $this->semValue = $this->semStack[$stackPos-(4-3)];
             },
             487 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                 $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
             488 => function ($stackPos) {
-                 $this->semValue = new Node\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             489 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             490 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Node\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             491 => function ($stackPos) {
-                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             492 => function ($stackPos) {
                  $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             493 => 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);
+                 $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             494 => 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);
             },
             495 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $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);
             },
             496 => function ($stackPos) {
                  $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             497 => function ($stackPos) {
-                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             498 => function ($stackPos) {
-                 $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             499 => function ($stackPos) {
-                 $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             500 => 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);
             },
             501 => 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);
             },
             502 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             503 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             504 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             505 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             506 => function ($stackPos) {
-                 $this->semValue = null;
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             507 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             508 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = null;
             },
             509 => function ($stackPos) {
-                 $this->semValue = array(new Node\InterpolatedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             510 => function ($stackPos) {
-                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = array();
             },
             511 => function ($stackPos) {
-                 $this->semValue = array();
+                 $this->semValue = array(new Node\InterpolatedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes));
             },
             512 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             513 => function ($stackPos) {
-                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = array();
             },
             514 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             515 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             516 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             517 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             518 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             519 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             520 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             521 => function ($stackPos) {
-                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             522 => 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\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             523 => function ($stackPos) {
-                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+                 $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             524 => 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 Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             525 => function ($stackPos) {
+                 $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-4)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes);
+            },
+            526 => 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;
+            },
+            527 => 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);
             },
-            526 => function ($stackPos) {
+            528 => 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);
             $this->createdArrays->attach($this->semValue);
             },
-            527 => function ($stackPos) {
+            529 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)]; $this->createdArrays->attach($this->semValue);
             },
-            528 => function ($stackPos) {
+            530 => function ($stackPos) {
                  $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            529 => function ($stackPos) {
+            531 => 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\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\InterpolatedString($this->semStack[$stackPos-(3-2)], $attrs);
             },
-            530 => function ($stackPos) {
-                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, $this->phpVersion->allowsInvalidOctals());
-            },
-            531 => function ($stackPos) {
-                 $this->semValue = Scalar\Float_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
-            },
             532 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes, $this->phpVersion->allowsInvalidOctals());
             },
             533 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = Scalar\Float_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             534 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             535 => 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 = $this->semStack[$stackPos-(1-1)];
             },
             536 => 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->semStack[$stackPos-(1-1)];
             },
             537 => 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);
             },
             538 => function ($stackPos) {
-                 $this->semValue = null;
+                 $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);
             },
             539 => 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);
             },
             540 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             541 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             542 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             543 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             544 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
@@ -2840,205 +2846,211 @@ class Php8 extends \PhpParser\ParserAbstract
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             547 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             548 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             549 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             550 => 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)];
             },
             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);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             552 => 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);
             },
             553 => 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 = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             554 => 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)];
             },
             555 => function ($stackPos) {
-                 $this->semValue = null;
+                 $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);
             },
             556 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $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);
             },
             557 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = null;
             },
             558 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             559 => 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 = $this->semStack[$stackPos-(1-1)];
             },
             560 => 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 = $this->semStack[$stackPos-(1-1)];
             },
             561 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             562 => function ($stackPos) {
-                 $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-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);
             },
             563 => 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)];
             },
             564 => 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 = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             565 => 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\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             566 => 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\Variable(new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes), $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2;
             },
             567 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var;
             },
             568 => 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\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             569 => 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)];
             },
             570 => 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\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             571 => 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\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             572 => 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\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             573 => 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);
             },
             574 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             575 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             576 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             577 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)];
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             578 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(3-2)];
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             579 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             580 => function ($stackPos) {
-                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
+                 $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
             581 => function ($stackPos) {
-                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Expr\List_::KIND_LIST);
-            $this->postprocessList($this->semValue);
+                 $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
             582 => function ($stackPos) {
-                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end]->value instanceof Expr\Error) array_pop($this->semValue);
+                 $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2;
             },
             583 => function ($stackPos) {
-                $this->semValue = $this->semStack[$stackPos];
+                 $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Expr\List_::KIND_LIST);
+            $this->postprocessList($this->semValue);
             },
             584 => function ($stackPos) {
-                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
+                 $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end]->value instanceof Expr\Error) array_pop($this->semValue);
             },
             585 => function ($stackPos) {
-                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
+                $this->semValue = $this->semStack[$stackPos];
             },
             586 => function ($stackPos) {
-                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
+                 /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */
             },
             587 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
+                 $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)];
             },
             588 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
+                 $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
             589 => function ($stackPos) {
                  $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             590 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
             591 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
             592 => function ($stackPos) {
                  $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
             593 => function ($stackPos) {
-                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true);
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
             594 => function ($stackPos) {
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
+            },
+            595 => function ($stackPos) {
+                 $this->semValue = new Node\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true);
+            },
+            596 => function ($stackPos) {
                  /* Create an Error node now to remember the position. We'll later either report an error,
              or convert this into a null element, depending on whether this is a creation or destructuring context. */
           $attrs = $this->createEmptyElemAttributes($this->lookaheadStartAttributes);
           $this->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, false, $attrs);
             },
-            595 => function ($stackPos) {
+            597 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            596 => function ($stackPos) {
+            598 => function ($stackPos) {
                  $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)];
             },
-            597 => function ($stackPos) {
+            599 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(1-1)]);
             },
-            598 => function ($stackPos) {
+            600 => function ($stackPos) {
                  $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]);
             },
-            599 => function ($stackPos) {
+            601 => function ($stackPos) {
                  $this->semValue = new Node\InterpolatedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            600 => function ($stackPos) {
+            602 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            601 => function ($stackPos) {
+            603 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
-            602 => function ($stackPos) {
+            604 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes);
             },
-            603 => function ($stackPos) {
+            605 => function ($stackPos) {
                  $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            604 => function ($stackPos) {
+            606 => function ($stackPos) {
                  $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            605 => function ($stackPos) {
+            607 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            606 => function ($stackPos) {
+            608 => function ($stackPos) {
                  $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes);
             },
-            607 => function ($stackPos) {
+            609 => function ($stackPos) {
                  $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes);
             },
-            608 => function ($stackPos) {
+            610 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(3-2)];
             },
-            609 => function ($stackPos) {
+            611 => function ($stackPos) {
                  $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            610 => function ($stackPos) {
+            612 => function ($stackPos) {
                  $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes);
             },
-            611 => function ($stackPos) {
+            613 => function ($stackPos) {
                  $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes);
             },
-            612 => function ($stackPos) {
+            614 => function ($stackPos) {
                  $this->semValue = $this->semStack[$stackPos-(1-1)];
             },
         ];
diff --git a/lib/PhpParser/PhpVersion.php b/lib/PhpParser/PhpVersion.php
index 0a28d054..9dd16816 100644
--- a/lib/PhpParser/PhpVersion.php
+++ b/lib/PhpParser/PhpVersion.php
@@ -141,6 +141,13 @@ class PhpVersion {
         return $this->id < 70000;
     }
 
+    /**
+     * Whether this version allows DEL (\x7f) to occur in identifiers.
+     */
+    public function allowsDelInIdentifiers(): bool {
+        return $this->id < 70100;
+    }
+
     /**
      * Whether this version support yield in expression context without parentheses.
      */
diff --git a/lib/PhpParser/PrettyPrinter.php b/lib/PhpParser/PrettyPrinter.php
index 9eed6072..ceaaba95 100644
--- a/lib/PhpParser/PrettyPrinter.php
+++ b/lib/PhpParser/PrettyPrinter.php
@@ -1,4 +1,4 @@
-<?php
+<?php declare(strict_types=1);
 
 namespace PhpParser;
 
diff --git a/lib/PhpParser/PrettyPrinter/Standard.php b/lib/PhpParser/PrettyPrinter/Standard.php
index efdbcf53..27b2f9fd 100644
--- a/lib/PhpParser/PrettyPrinter/Standard.php
+++ b/lib/PhpParser/PrettyPrinter/Standard.php
@@ -80,15 +80,15 @@ class Standard extends PrettyPrinterAbstract {
     // Names
 
     protected function pName(Name $node): string {
-        return implode('\\', $node->parts);
+        return $node->name;
     }
 
     protected function pName_FullyQualified(Name\FullyQualified $node): string {
-        return '\\' . implode('\\', $node->parts);
+        return '\\' . $node->name;
     }
 
     protected function pName_Relative(Name\Relative $node): string {
-        return 'namespace\\' . implode('\\', $node->parts);
+        return 'namespace\\' . $node->name;
     }
 
     // Magic Constants
@@ -134,12 +134,12 @@ class Standard extends PrettyPrinterAbstract {
                 $label = $node->getAttribute('docLabel');
                 if ($label && !$this->containsEndLabel($node->value, $label)) {
                     if ($node->value === '') {
-                        return "<<<'$label'\n$label" . $this->docStringEndToken;
+                        return "<<<'$label'{$this->newline}$label{$this->docStringEndToken}";
                     }
 
                     // Make sure trailing \r is not combined with following \n into CRLF.
                     if ($node->value[strlen($node->value) - 1] !== "\r") {
-                        return "<<<'$label'\n$node->value\n$label"
+                        return "<<<'$label'{$this->newline}{$node->value}{$this->newline}$label"
                             . $this->docStringEndToken;
                     }
                 }
@@ -152,10 +152,10 @@ class Standard extends PrettyPrinterAbstract {
                 $escaped = $this->escapeString($node->value, null);
                 if ($label && !$this->containsEndLabel($escaped, $label)) {
                     if ($escaped === '') {
-                        return "<<<$label\n$label" . $this->docStringEndToken;
+                        return "<<<$label{$this->newline}$label{$this->docStringEndToken}";
                     }
 
-                    return "<<<$label\n" . $escaped . "\n$label"
+                    return "<<<$label{$this->newline}$escaped{$this->newline}$label"
                          . $this->docStringEndToken;
                 }
                 /* break missing intentionally */
@@ -174,11 +174,11 @@ class Standard extends PrettyPrinterAbstract {
                     && $node->parts[0] instanceof Node\InterpolatedStringPart
                     && $node->parts[0]->value === ''
                 ) {
-                    return "<<<$label\n$label" . $this->docStringEndToken;
+                    return "<<<$label{$this->newline}$label{$this->docStringEndToken}";
                 }
 
-                return "<<<$label\n" . $this->pEncapsList($node->parts, null) . "\n$label"
-                     . $this->docStringEndToken;
+                return "<<<$label{$this->newline}" . $this->pEncapsList($node->parts, null)
+                     . "{$this->newline}$label{$this->docStringEndToken}";
             }
         }
         return '"' . $this->pEncapsList($node->parts, '"') . '"';
@@ -728,7 +728,7 @@ class Standard extends PrettyPrinterAbstract {
             }
             return $this->pPrefixOp(
                 Expr\Yield_::class, 'yield ' . $this->pKey($node->key),
-                 $node->value, $precedence, $lhsPrecedence);
+                $node->value, $precedence, $lhsPrecedence);
         }
     }
 
@@ -842,7 +842,9 @@ class Standard extends PrettyPrinterAbstract {
     protected function pStmt_ClassConst(Stmt\ClassConst $node): string {
         return $this->pAttrGroups($node->attrGroups)
              . $this->pModifiers($node->flags)
-             . 'const ' . $this->pCommaSeparated($node->consts) . ';';
+             . 'const '
+             . (null !== $node->type ? $this->p($node->type) . ' ' : '')
+             . $this->pCommaSeparated($node->consts) . ';';
     }
 
     protected function pStmt_Function(Stmt\Function_ $node): string {
@@ -881,6 +883,10 @@ class Standard extends PrettyPrinterAbstract {
     }
 
     protected function pStmt_Else(Stmt\Else_ $node): string {
+        if (\count($node->stmts) === 1 && $node->stmts[0] instanceof Stmt\If_) {
+            // Print as "else if" rather than "else { if }"
+            return 'else ' . $this->p($node->stmts[0]);
+        }
         return 'else {' . $this->pStmts($node->stmts) . $this->nl . '}';
     }
 
@@ -987,7 +993,7 @@ class Standard extends PrettyPrinterAbstract {
     }
 
     protected function pStmt_InlineHTML(Stmt\InlineHTML $node): string {
-        $newline = $node->getAttribute('hasLeadingNewline', true) ? "\n" : '';
+        $newline = $node->getAttribute('hasLeadingNewline', true) ? $this->newline : '';
         return '?>' . $newline . $node->value . '<?php ';
     }
 
diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php
index d20b4f6b..3eb03db0 100644
--- a/lib/PhpParser/PrettyPrinterAbstract.php
+++ b/lib/PhpParser/PrettyPrinterAbstract.php
@@ -104,6 +104,8 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
 
     /** @var int Current indentation level. */
     protected $indentLevel;
+    /** @var string Newline style. Does not include current indentation. */
+    protected $newline;
     /** @var string Newline including current indentation. */
     protected $nl;
     /** @var string|null Token placed at end of doc string to ensure it is followed by a newline.
@@ -159,20 +161,29 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
      * Creates a pretty printer instance using the given options.
      *
      * Supported options:
-     *  * PhpVersion $phpVersion: The PHP version to target (default to PHP 7.0). This option
+     *  * PhpVersion $phpVersion: The PHP version to target (default to PHP 7.1). This option
      *                            controls compatibility of the generated code with older PHP
      *                            versions in cases where a simple stylistic choice exists (e.g.
      *                            array() vs []). It is safe to pretty-print an AST for a newer
      *                            PHP version while specifying an older target (but the result will
      *                            of course not be compatible with the older version in that case).
+     *  * string $newline:        The newline style to use. Should be "\n" (default) or "\r\n".
      *  * bool $shortArraySyntax: Whether to use [] instead of array() as the default array
      *                            syntax, if the node does not specify a format. Defaults to whether
      *                            the phpVersion support short array syntax.
      *
-     * @param array{phpVersion?: PhpVersion, shortArraySyntax?: bool} $options Dictionary of formatting options
+     * @param array{
+     *     phpVersion?: PhpVersion, newline?: string, shortArraySyntax?: bool
+     * } $options Dictionary of formatting options
      */
     public function __construct(array $options = []) {
-        $this->phpVersion = $options['phpVersion'] ?? PhpVersion::fromComponents(7, 0);
+        $this->phpVersion = $options['phpVersion'] ?? PhpVersion::fromComponents(7, 1);
+
+        $this->newline = $options['newline'] ?? "\n";
+        if ($this->newline !== "\n" && $this->newline != "\r\n") {
+            throw new \LogicException('Option "newline" must be one of "\n" or "\r\n"');
+        }
+
         $this->shortArraySyntax =
             $options['shortArraySyntax'] ?? $this->phpVersion->supportsShortArraySyntax();
         $this->docStringEndToken =
@@ -184,7 +195,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
      */
     protected function resetState(): void {
         $this->indentLevel = 0;
-        $this->nl = "\n";
+        $this->nl = $this->newline;
         $this->origTokens = null;
     }
 
@@ -195,7 +206,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
      */
     protected function setIndentLevel(int $level): void {
         $this->indentLevel = $level;
-        $this->nl = "\n" . \str_repeat(' ', $level);
+        $this->nl = $this->newline . \str_repeat(' ', $level);
     }
 
     /**
@@ -212,7 +223,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
     protected function outdent(): void {
         assert($this->indentLevel >= 4);
         $this->indentLevel -= 4;
-        $this->nl = "\n" . str_repeat(' ', $this->indentLevel);
+        $this->nl = $this->newline . str_repeat(' ', $this->indentLevel);
     }
 
     /**
@@ -250,13 +261,13 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
      */
     public function prettyPrintFile(array $stmts): string {
         if (!$stmts) {
-            return "<?php\n\n";
+            return "<?php" . $this->newline . $this->newline;
         }
 
-        $p = "<?php\n\n" . $this->prettyPrint($stmts);
+        $p = "<?php" . $this->newline . $this->newline . $this->prettyPrint($stmts);
 
         if ($stmts[0] instanceof Stmt\InlineHTML) {
-            $p = preg_replace('/^<\?php\s+\?>\n?/', '', $p);
+            $p = preg_replace('/^<\?php\s+\?>\r?\n?/', '', $p);
         }
         if ($stmts[count($stmts) - 1] instanceof Stmt\InlineHTML) {
             $p = preg_replace('/<\?php$/', '', rtrim($p));
@@ -290,8 +301,11 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
     protected function handleMagicTokens(string $str): string {
         if ($this->docStringEndToken !== null) {
             // Replace doc-string-end tokens with nothing or a newline
-            $str = str_replace($this->docStringEndToken . ";\n", ";\n", $str);
-            $str = str_replace($this->docStringEndToken, "\n", $str);
+            $str = str_replace(
+                $this->docStringEndToken . ';' . $this->newline,
+                ';' . $this->newline,
+                $str);
+            $str = str_replace($this->docStringEndToken, $this->newline, $str);
         }
 
         return $str;
@@ -537,10 +551,10 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
         } else {
             // Fallback
             // TODO Add <?php properly
-            $result = "<?php\n" . $this->pStmts($stmts, false);
+            $result = "<?php" . $this->newline . $this->pStmts($stmts, false);
         }
 
-        return ltrim($this->handleMagicTokens($result));
+        return $this->handleMagicTokens($result);
     }
 
     protected function pFallback(Node $node, int $precedence, int $lhsPrecedence): string {
@@ -1244,10 +1258,12 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
 
         $this->labelCharMap = [];
         for ($i = 0; $i < 256; $i++) {
-            // Since PHP 7.1 The lower range is 0x80. However, we also want to support code for
-            // older versions.
             $chr = chr($i);
-            $this->labelCharMap[$chr] = $i >= 0x7f || ctype_alnum($chr);
+            $this->labelCharMap[$chr] = $i >= 0x80 || ctype_alnum($chr);
+        }
+
+        if ($this->phpVersion->allowsDelInIdentifiers()) {
+            $this->labelCharMap["\x7f"] = true;
         }
     }
 
@@ -1389,6 +1405,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
             'Param->default' => $stripEquals,
             'Stmt_Break->num' => $stripBoth,
             'Stmt_Catch->var' => $stripLeft,
+            'Stmt_ClassConst->type' => $stripRight,
             'Stmt_ClassMethod->returnType' => $stripColon,
             'Stmt_Class->extends' => ['left' => \T_EXTENDS],
             'Stmt_Enum->scalarType' => $stripColon,
@@ -1432,6 +1449,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
             'Stmt_Break->num' => [\T_BREAK, false, ' ', null],
             'Stmt_Catch->var' => [null, false, ' ', null],
             'Stmt_ClassMethod->returnType' => [')', false, ': ', null],
+            'Stmt_ClassConst->type' => [\T_CONST, false, ' ', null],
             'Stmt_Class->extends' => [null, false, ' extends ', null],
             'Stmt_Enum->scalarType' => [null, false, ' : ', null],
             'Stmt_EnumCase->expr' => [null, false, ' = ', null],
@@ -1629,6 +1647,7 @@ abstract class PrettyPrinterAbstract implements PrettyPrinter {
             Stmt\ClassMethod::class . '->flags' => ['pModifiers', \T_FUNCTION],
             Stmt\Class_::class . '->flags' => ['pModifiers', \T_CLASS],
             Stmt\Property::class . '->flags' => ['pModifiers', \T_VARIABLE],
+            PrintableNewAnonClassNode::class . '->flags' => ['pModifiers', \T_CLASS],
             Param::class . '->flags' => ['pModifiers', \T_VARIABLE],
             Expr\Closure::class . '->static' => ['pStatic', \T_FUNCTION],
             Expr\ArrowFunction::class . '->static' => ['pStatic', \T_FN],
diff --git a/test/PhpParser/Builder/ClassConstTest.php b/test/PhpParser/Builder/ClassConstTest.php
index 715a5bb6..4a71e0fd 100644
--- a/test/PhpParser/Builder/ClassConstTest.php
+++ b/test/PhpParser/Builder/ClassConstTest.php
@@ -142,6 +142,18 @@ class ClassConstTest extends \PHPUnit\Framework\TestCase {
         );
     }
 
+    public function testType() {
+        $node = $this->createClassConstBuilder('TYPE', 1)
+            ->setType('int')
+            ->getNode();
+        $this->assertEquals(
+            new Stmt\ClassConst(
+                [new Const_('TYPE', new Int_(1))],
+                0, [], [], new Identifier('int')),
+            $node
+        );
+    }
+
     /**
      * @dataProvider provideTestDefaultValues
      */
diff --git a/test/PhpParser/Builder/ParamTest.php b/test/PhpParser/Builder/ParamTest.php
index 62c357e7..58a6c042 100644
--- a/test/PhpParser/Builder/ParamTest.php
+++ b/test/PhpParser/Builder/ParamTest.php
@@ -2,6 +2,7 @@
 
 namespace PhpParser\Builder;
 
+use PhpParser\Modifiers;
 use PhpParser\Node;
 use PhpParser\Node\Arg;
 use PhpParser\Node\Attribute;
@@ -204,6 +205,54 @@ class ParamTest extends \PHPUnit\Framework\TestCase {
         );
     }
 
+    public function testMakePublic() {
+        $node = $this->createParamBuilder('test')
+            ->makePublic()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param(new Expr\Variable('test'), null, null, false, false, [], Modifiers::PUBLIC),
+            $node
+        );
+    }
+
+    public function testMakeProtected() {
+        $node = $this->createParamBuilder('test')
+            ->makeProtected()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param(new Expr\Variable('test'), null, null, false, false, [], Modifiers::PROTECTED),
+            $node
+        );
+    }
+
+    public function testMakePrivate() {
+        $node = $this->createParamBuilder('test')
+            ->makePrivate()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param(new Expr\Variable('test'), null, null, false, false, [], Modifiers::PRIVATE),
+            $node
+        );
+    }
+
+    public function testMakeReadonly() {
+        $node = $this->createParamBuilder('test')
+            ->makeReadonly()
+            ->getNode()
+        ;
+
+        $this->assertEquals(
+            new Node\Param(new Expr\Variable('test'), null, null, false, false, [], Modifiers::READONLY),
+            $node
+        );
+    }
+
     public function testAddAttribute() {
         $attribute = new Attribute(
             new Name('Attr'),
diff --git a/test/PhpParser/BuilderHelpersTest.php b/test/PhpParser/BuilderHelpersTest.php
index 493e71e9..d70be9d8 100644
--- a/test/PhpParser/BuilderHelpersTest.php
+++ b/test/PhpParser/BuilderHelpersTest.php
@@ -3,6 +3,7 @@
 namespace PhpParser;
 
 use PhpParser\Builder\Class_;
+use PhpParser\Node\Identifier;
 use PhpParser\Node\Scalar;
 use PhpParser\Node\Stmt;
 use PhpParser\Node\Expr;
@@ -136,7 +137,7 @@ class BuilderHelpersTest extends \PHPUnit\Framework\TestCase {
         $intName = new Node\Name('int');
         $this->assertSame($intName, BuilderHelpers::normalizeType($intName));
 
-        $intNullable = new Node\NullableType('int');
+        $intNullable = new Node\NullableType(new Identifier('int'));
         $this->assertSame($intNullable, BuilderHelpers::normalizeType($intNullable));
 
         $unionType = new Node\UnionType([new Node\Identifier('int'), new Node\Identifier('string')]);
diff --git a/test/PhpParser/CodeTestParser.php b/test/PhpParser/CodeTestParser.php
index d77a50f0..bde0a5fd 100644
--- a/test/PhpParser/CodeTestParser.php
+++ b/test/PhpParser/CodeTestParser.php
@@ -47,7 +47,7 @@ class CodeTestParser {
             }
             $result .= $lastPart;
         }
-        return $result;
+        return $result . "\n";
     }
 
     private function extractMode(string $expected): array {
diff --git a/test/PhpParser/CommentTest.php b/test/PhpParser/CommentTest.php
index 49cf631a..7b3493de 100644
--- a/test/PhpParser/CommentTest.php
+++ b/test/PhpParser/CommentTest.php
@@ -33,47 +33,37 @@ class CommentTest extends \PHPUnit\Framework\TestCase {
             ['// Some text', '// Some text'],
             ['/* Some text */', '/* Some text */'],
             [
-                '/**
-     * Some text.
-     * Some more text.
-     */',
-                '/**
- * Some text.
- * Some more text.
- */'
+                "/**\n     * Some text.\n     * Some more text.\n     */",
+                "/**\n * Some text.\n * Some more text.\n */"
             ],
             [
-                '/*
-        Some text.
-        Some more text.
-    */',
-                '/*
-    Some text.
-    Some more text.
-*/'
+                "/**\r\n     * Some text.\r\n     * Some more text.\r\n     */",
+                "/**\n * Some text.\n * Some more text.\n */"
             ],
             [
-                '/* Some text.
-       More text.
-       Even more text. */',
-                '/* Some text.
-   More text.
-   Even more text. */'
+                "/*\n        Some text.\n        Some more text.\n    */",
+                "/*\n    Some text.\n    Some more text.\n*/"
             ],
             [
-                '/* Some text.
-       More text.
-         Indented text. */',
-                '/* Some text.
-   More text.
-     Indented text. */',
+                "/*\r\n        Some text.\r\n        Some more text.\r\n    */",
+                "/*\n    Some text.\n    Some more text.\n*/"
+            ],
+            [
+                "/* Some text.\n       More text.\n       Even more text. */",
+                "/* Some text.\n   More text.\n   Even more text. */"
+            ],
+            [
+                "/* Some text.\r\n       More text.\r\n       Even more text. */",
+                "/* Some text.\n   More text.\n   Even more text. */"
+            ],
+            [
+                "/* Some text.\n       More text.\n         Indented text. */",
+                "/* Some text.\n   More text.\n     Indented text. */",
             ],
             // invalid comment -> no reformatting
             [
-                'hallo
-    world',
-                'hallo
-    world',
+                "hello\n    world",
+                "hello\n    world",
             ],
         ];
     }
diff --git a/test/PhpParser/Internal/DifferTest.php b/test/PhpParser/Internal/DifferTest.php
index 8ff3cb5c..8b84c1a0 100644
--- a/test/PhpParser/Internal/DifferTest.php
+++ b/test/PhpParser/Internal/DifferTest.php
@@ -65,4 +65,15 @@ class DifferTest extends \PHPUnit\Framework\TestCase {
             ['abcde', 'axyzue', 'a-b-c-d+x+y+z+ue'],
         ];
     }
+
+    public function testNonContiguousIndices() {
+        $differ = new Differ(function ($a, $b) {
+            return $a === $b;
+        });
+        $diff = $differ->diff([0 => 'a', 2 => 'b'], [0 => 'a', 3 => 'b']);
+        $this->assertEquals([
+            new DiffElem(DiffElem::TYPE_KEEP, 'a', 'a'),
+            new DiffElem(DiffElem::TYPE_KEEP, 'b', 'b'),
+        ], $diff);
+    }
 }
diff --git a/test/PhpParser/LexerTest.php b/test/PhpParser/LexerTest.php
index 2d6b8c92..4538280c 100644
--- a/test/PhpParser/LexerTest.php
+++ b/test/PhpParser/LexerTest.php
@@ -47,6 +47,14 @@ class LexerTest extends \PHPUnit\Framework\TestCase {
         ];
     }
 
+    public function testDefaultErrorHandler() {
+        $this->expectException(Error::class);
+        $this->expectExceptionMessage('Unterminated comment on line 1');
+        $lexer = $this->getLexer();
+        $lexer->startLexing("<?php readonly /*");
+        $lexer->getNextToken();
+    }
+
     /**
      * @dataProvider provideTestLex
      */
diff --git a/test/PhpParser/Node/NameTest.php b/test/PhpParser/Node/NameTest.php
index 36121ec4..50df3624 100644
--- a/test/PhpParser/Node/NameTest.php
+++ b/test/PhpParser/Node/NameTest.php
@@ -5,23 +5,25 @@ namespace PhpParser\Node;
 class NameTest extends \PHPUnit\Framework\TestCase {
     public function testConstruct() {
         $name = new Name(['foo', 'bar']);
-        $this->assertSame(['foo', 'bar'], $name->parts);
+        $this->assertSame('foo\bar', $name->name);
 
         $name = new Name('foo\bar');
-        $this->assertSame(['foo', 'bar'], $name->parts);
+        $this->assertSame('foo\bar', $name->name);
 
         $name = new Name($name);
-        $this->assertSame(['foo', 'bar'], $name->parts);
+        $this->assertSame('foo\bar', $name->name);
     }
 
     public function testGet() {
         $name = new Name('foo');
         $this->assertSame('foo', $name->getFirst());
         $this->assertSame('foo', $name->getLast());
+        $this->assertSame(['foo'], $name->getParts());
 
         $name = new Name('foo\bar');
         $this->assertSame('foo', $name->getFirst());
         $this->assertSame('bar', $name->getLast());
+        $this->assertSame(['foo', 'bar'], $name->getParts());
     }
 
     public function testToString() {
diff --git a/test/PhpParser/NodeDumperTest.php b/test/PhpParser/NodeDumperTest.php
index 70ca6f21..79b27345 100644
--- a/test/PhpParser/NodeDumperTest.php
+++ b/test/PhpParser/NodeDumperTest.php
@@ -34,10 +34,7 @@ class NodeDumperTest extends \PHPUnit\Framework\TestCase {
             [
                 new Node\Name(['Hallo', 'World']),
 'Name(
-    parts: array(
-        0: Hallo
-        1: World
-    )
+    name: Hallo\World
 )'
             ],
             [
diff --git a/test/PhpParser/NodeTraverserTest.php b/test/PhpParser/NodeTraverserTest.php
index 26f3d12b..6af99622 100644
--- a/test/PhpParser/NodeTraverserTest.php
+++ b/test/PhpParser/NodeTraverserTest.php
@@ -3,7 +3,10 @@
 namespace PhpParser;
 
 use PhpParser\Node\Expr;
+use PhpParser\Node\Scalar\Int_;
 use PhpParser\Node\Scalar\String_;
+use PhpParser\Node\Stmt\Else_;
+use PhpParser\Node\Stmt\If_;
 
 class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
     public function testNonModifying() {
@@ -34,8 +37,9 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
         $str2Node  = new String_('Bar');
         $printNode = new Expr\Print_($str1Node);
 
-        // first visitor changes the node, second verifies the change
-        $visitor1 = new NodeVisitorForTesting([
+        // Visitor 2 performs changes, visitors 1 and 3 observe the changes.
+        $visitor1 = new NodeVisitorForTesting();
+        $visitor2 = new NodeVisitorForTesting([
             ['beforeTraverse', [], [$str1Node]],
             ['enterNode', $str1Node, $printNode],
             ['enterNode', $str1Node, $str2Node],
@@ -43,22 +47,35 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
             ['leaveNode', $printNode, $str1Node],
             ['afterTraverse', [$str1Node], []],
         ]);
-        $visitor2 = new NodeVisitorForTesting();
+        $visitor3 = new NodeVisitorForTesting();
 
         $traverser = new NodeTraverser();
         $traverser->addVisitor($visitor1);
         $traverser->addVisitor($visitor2);
+        $traverser->addVisitor($visitor3);
 
         // as all operations are reversed we end where we start
         $this->assertEquals([], $traverser->traverse([]));
         $this->assertEquals([
-            ['beforeTraverse', [$str1Node]],
-            ['enterNode', $printNode],
-            ['enterNode', $str2Node],
+            // Sees nodes before changes on entry.
+            ['beforeTraverse', []],
+            ['enterNode', $str1Node],
+            ['enterNode', $str1Node],
+            // Sees nodes after changes on leave.
             ['leaveNode', $str1Node],
             ['leaveNode', $str1Node],
             ['afterTraverse', []],
-        ], $visitor2->trace);
+        ], $visitor1->trace);
+        $this->assertEquals([
+            // Sees nodes after changes on entry.
+            ['beforeTraverse', [$str1Node]],
+            ['enterNode', $printNode],
+            ['enterNode', $str2Node],
+            // Sees nodes before changes on leave.
+            ['leaveNode', $str2Node],
+            ['leaveNode', $printNode],
+            ['afterTraverse', [$str1Node]],
+        ], $visitor3->trace);
     }
 
     public function testRemoveFromLeave() {
@@ -66,13 +83,13 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
         $str2Node = new String_('Bar');
 
         $visitor = new NodeVisitorForTesting([
-            ['leaveNode', $str1Node, NodeTraverser::REMOVE_NODE],
+            ['leaveNode', $str1Node, NodeVisitor::REMOVE_NODE],
         ]);
         $visitor2 = new NodeVisitorForTesting();
 
         $traverser = new NodeTraverser();
-        $traverser->addVisitor($visitor);
         $traverser->addVisitor($visitor2);
+        $traverser->addVisitor($visitor);
 
         $stmts = [$str1Node, $str2Node];
         $this->assertEquals([$str2Node], $traverser->traverse($stmts));
@@ -90,7 +107,7 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
         $str2Node = new String_('Bar');
 
         $visitor = new NodeVisitorForTesting([
-            ['enterNode', $str1Node, NodeTraverser::REMOVE_NODE],
+            ['enterNode', $str1Node, NodeVisitor::REMOVE_NODE],
         ]);
         $visitor2 = new NodeVisitorForTesting();
 
@@ -172,10 +189,10 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
         $stmts = [$printNode, $negNode];
 
         $visitor1 = new NodeVisitorForTesting([
-            ['enterNode', $printNode, NodeTraverser::DONT_TRAVERSE_CHILDREN],
+            ['enterNode', $printNode, NodeVisitor::DONT_TRAVERSE_CHILDREN],
         ]);
         $visitor2 = new NodeVisitorForTesting([
-            ['enterNode', $mulNode, NodeTraverser::DONT_TRAVERSE_CHILDREN],
+            ['enterNode', $mulNode, NodeVisitor::DONT_TRAVERSE_CHILDREN],
         ]);
 
         $expectedTrace = [
@@ -209,8 +226,8 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
         $stmts = [$printNode, $negNode];
 
         $visitor1 = new NodeVisitorForTesting([
-            ['enterNode', $printNode, NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN],
-            ['enterNode', $mulNode, NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN],
+            ['enterNode', $printNode, NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN],
+            ['enterNode', $mulNode, NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN],
             ['leaveNode', $mulNode, $divNode],
         ]);
         $visitor2 = new NodeVisitorForTesting();
@@ -250,7 +267,7 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
 
         // From enterNode() with array parent
         $visitor = new NodeVisitorForTesting([
-            ['enterNode', $mulNode, NodeTraverser::STOP_TRAVERSAL],
+            ['enterNode', $mulNode, NodeVisitor::STOP_TRAVERSAL],
         ]);
         $traverser = new NodeTraverser();
         $traverser->addVisitor($visitor);
@@ -263,7 +280,7 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
 
         // From enterNode with Node parent
         $visitor = new NodeVisitorForTesting([
-            ['enterNode', $varNode1, NodeTraverser::STOP_TRAVERSAL],
+            ['enterNode', $varNode1, NodeVisitor::STOP_TRAVERSAL],
         ]);
         $traverser = new NodeTraverser();
         $traverser->addVisitor($visitor);
@@ -277,7 +294,7 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
 
         // From leaveNode with Node parent
         $visitor = new NodeVisitorForTesting([
-            ['leaveNode', $varNode1, NodeTraverser::STOP_TRAVERSAL],
+            ['leaveNode', $varNode1, NodeVisitor::STOP_TRAVERSAL],
         ]);
         $traverser = new NodeTraverser();
         $traverser->addVisitor($visitor);
@@ -292,7 +309,7 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
 
         // From leaveNode with array parent
         $visitor = new NodeVisitorForTesting([
-            ['leaveNode', $mulNode, NodeTraverser::STOP_TRAVERSAL],
+            ['leaveNode', $mulNode, NodeVisitor::STOP_TRAVERSAL],
         ]);
         $traverser = new NodeTraverser();
         $traverser->addVisitor($visitor);
@@ -310,8 +327,8 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
 
         // Check that pending array modifications are still carried out
         $visitor = new NodeVisitorForTesting([
-            ['leaveNode', $mulNode, NodeTraverser::REMOVE_NODE],
-            ['enterNode', $printNode, NodeTraverser::STOP_TRAVERSAL],
+            ['leaveNode', $mulNode, NodeVisitor::REMOVE_NODE],
+            ['enterNode', $printNode, NodeVisitor::STOP_TRAVERSAL],
         ]);
         $traverser = new NodeTraverser();
         $traverser->addVisitor($visitor);
@@ -329,6 +346,44 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
         ], $visitor->trace);
     }
 
+    public function testReplaceWithNull() {
+        $one = new Int_(1);
+        $else1 = new Else_();
+        $else2 = new Else_();
+        $if1 = new If_($one, ['else' => $else1]);
+        $if2 = new If_($one, ['else' => $else2]);
+        $stmts = [$if1, $if2];
+        $visitor1 = new NodeVisitorForTesting([
+            ['enterNode', $else1, NodeVisitor::REPLACE_WITH_NULL],
+            ['leaveNode', $else2, NodeVisitor::REPLACE_WITH_NULL],
+        ]);
+        $visitor2 = new NodeVisitorForTesting();
+        $traverser = new NodeTraverser();
+        $traverser->addVisitor($visitor1);
+        $traverser->addVisitor($visitor2);
+        $newStmts = $traverser->traverse($stmts);
+        $this->assertEquals([
+            new If_($one),
+            new If_($one),
+        ], $newStmts);
+        $this->assertEquals([
+            ['beforeTraverse', $stmts],
+            ['enterNode', $if1],
+            ['enterNode', $one],
+            // We never see the if1 Else node.
+            ['leaveNode', $one],
+            ['leaveNode', $if1],
+            ['enterNode', $if2],
+            ['enterNode', $one],
+            ['leaveNode', $one],
+            // We do see the if2 Else node, as it will only be replaced afterwards.
+            ['enterNode', $else2],
+            ['leaveNode', $else2],
+            ['leaveNode', $if2],
+            ['afterTraverse', $stmts],
+        ], $visitor2->trace);
+    }
+
     public function testRemovingVisitor() {
         $visitor1 = new class () extends NodeVisitorAbstract {};
         $visitor2 = new class () extends NodeVisitorAbstract {};
@@ -348,7 +403,7 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
 
         $traverser->removeVisitor($visitor2);
 
-        $postExpected = [0 => $visitor1, 2 => $visitor3];
+        $postExpected = [$visitor1, $visitor3];
         $this->assertSame($postExpected, $getVisitors());
     }
 
@@ -401,6 +456,12 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
         $visitor8 = new NodeVisitorForTesting([
             ['enterNode', $num, new Node\Stmt\Return_()],
         ]);
+        $visitor9 = new NodeVisitorForTesting([
+            ['enterNode', $expr, NodeVisitor::REPLACE_WITH_NULL],
+        ]);
+        $visitor10 = new NodeVisitorForTesting([
+            ['leaveNode', $expr, NodeVisitor::REPLACE_WITH_NULL],
+        ]);
 
         return [
             [$stmts, $visitor1, 'enterNode() returned invalid value of type string'],
@@ -411,6 +472,8 @@ class NodeTraverserTest extends \PHPUnit\Framework\TestCase {
             [$stmts, $visitor6, 'leaveNode() returned invalid value of type bool'],
             [$stmts, $visitor7, 'Trying to replace statement (Stmt_Expression) with expression (Scalar_Int). Are you missing a Stmt_Expression wrapper?'],
             [$stmts, $visitor8, 'Trying to replace expression (Scalar_Int) with statement (Stmt_Return)'],
+            [$stmts, $visitor9, 'REPLACE_WITH_NULL can not be used if the parent structure is an array'],
+            [$stmts, $visitor10, 'REPLACE_WITH_NULL can not be used if the parent structure is an array'],
         ];
     }
 }
diff --git a/test/PhpParser/NodeVisitor/NameResolverTest.php b/test/PhpParser/NodeVisitor/NameResolverTest.php
index e7b986c5..d38a90c8 100644
--- a/test/PhpParser/NodeVisitor/NameResolverTest.php
+++ b/test/PhpParser/NodeVisitor/NameResolverTest.php
@@ -460,7 +460,7 @@ EOC;
         $stmt = $stmts[0];
 
         $assign = $stmt->stmts[1]->expr;
-        $this->assertSame(['Bar', 'Baz'], $assign->expr->class->parts);
+        $this->assertSame('Bar\\Baz', $assign->expr->class->name);
     }
 
     public function testSpecialClassNamesAreCaseInsensitive() {
diff --git a/test/PhpParser/PrettyPrinterTest.php b/test/PhpParser/PrettyPrinterTest.php
index a2b68f4e..d64b69cb 100644
--- a/test/PhpParser/PrettyPrinterTest.php
+++ b/test/PhpParser/PrettyPrinterTest.php
@@ -210,6 +210,7 @@ use PhpParser\Node;
 use PhpParser\Node\Expr;
 use PhpParser\Node\Scalar;
 use PhpParser\Node\Stmt;
+use PhpParser\Modifiers;
 \$fn = function(&\$stmts) { $modification };
 CODE
         );
@@ -269,4 +270,49 @@ CODE
             $this->getTests(__DIR__ . '/../code/parser', 'test')
         );
     }
+
+    public function testWindowsNewline() {
+        $prettyPrinter = new Standard(['newline' => "\r\n"]);
+        $stmts = [
+            new Stmt\If_(new Int_(1), [
+                'stmts' => [
+                    new Stmt\Echo_([new String_('Hello')]),
+                    new Stmt\Echo_([new String_('World')]),
+                ],
+            ]),
+        ];
+        $code = $prettyPrinter->prettyPrint($stmts);
+        $this->assertSame("if (1) {\r\n    echo 'Hello';\r\n    echo 'World';\r\n}", $code);
+        $code = $prettyPrinter->prettyPrintFile($stmts);
+        $this->assertSame("<?php\r\n\r\nif (1) {\r\n    echo 'Hello';\r\n    echo 'World';\r\n}", $code);
+
+        $stmts = [new Stmt\InlineHTML('Hello world')];
+        $code = $prettyPrinter->prettyPrintFile($stmts);
+        $this->assertSame("Hello world", $code);
+
+        $stmts = [
+            new Stmt\Expression(new String_('Test', [
+                'kind' => String_::KIND_NOWDOC,
+                'docLabel' => 'STR'
+            ])),
+            new Stmt\Expression(new String_('Test 2', [
+                'kind' => String_::KIND_HEREDOC,
+                'docLabel' => 'STR'
+            ])),
+            new Stmt\Expression(new InterpolatedString([new InterpolatedStringPart('Test 3')], [
+                'kind' => String_::KIND_HEREDOC,
+                'docLabel' => 'STR'
+            ])),
+        ];
+        $code = $prettyPrinter->prettyPrint($stmts);
+        $this->assertSame(
+            "<<<'STR'\r\nTest\r\nSTR;\r\n<<<STR\r\nTest 2\r\nSTR;\r\n<<<STR\r\nTest 3\r\nSTR\r\n;",
+            $code);
+    }
+
+    public function testInvalidNewline() {
+        $this->expectException(\LogicException::class);
+        $this->expectExceptionMessage('Option "newline" must be one of "\n" or "\r\n"');
+        new PrettyPrinter\Standard(['newline' => 'foo']);
+    }
 }
diff --git a/test/code/formatPreservation/delAfterIdentifier.test b/test/code/formatPreservation/delAfterIdentifier.test
new file mode 100644
index 00000000..be6f3b62
--- /dev/null
+++ b/test/code/formatPreservation/delAfterIdentifier.test
@@ -0,0 +1,9 @@
+DEL after identifier
+-----
+<?php
+"$a@@{ "\x7f" }@@";
+-----
+/* do nothing */
+-----
+<?php
+"$a@@{ "\x7f" }@@";
diff --git a/test/code/formatPreservation/inlineHtml.test b/test/code/formatPreservation/inlineHtml.test
index 0b131fed..c3afc699 100644
--- a/test/code/formatPreservation/inlineHtml.test
+++ b/test/code/formatPreservation/inlineHtml.test
@@ -110,3 +110,13 @@ function test()
     foo();
     baz();
 }
+-----
+
+
+<?php $x;
+-----
+/* Do nothing, but make sure leading newlines are preserved. */
+-----
+
+
+<?php $x;
diff --git a/test/code/formatPreservation/insertionOfNullable.test b/test/code/formatPreservation/insertionOfNullable.test
index 9822eede..9278d3ec 100644
--- a/test/code/formatPreservation/insertionOfNullable.test
+++ b/test/code/formatPreservation/insertionOfNullable.test
@@ -49,6 +49,10 @@ X
     private
         $x
     ;
+
+    const
+    X
+    = 1;
 }
 
 foreach (
@@ -86,6 +90,7 @@ $stmts[9]->expr = new Expr\Variable('x');
 $stmts[10]->extends = new Node\Name\FullyQualified('Bar');
 $stmts[10]->stmts[0]->returnType = new Node\Name('Y');
 $stmts[10]->stmts[1]->props[0]->default = new Scalar\DNumber(42.0);
+$stmts[10]->stmts[2]->type = new Node\Identifier('int');
 $stmts[11]->keyVar = new Expr\Variable('z');
 $stmts[12]->vars[0]->default = new Scalar\String_('abc');
 $stmts[13]->finally = new Stmt\Finally_([]);
@@ -140,6 +145,10 @@ X extends \Bar
     private
         $x = 42.0
     ;
+
+    const int
+    X
+    = 1;
 }
 
 foreach (
diff --git a/test/code/formatPreservation/listInsertion.test b/test/code/formatPreservation/listInsertion.test
index 30b12917..05ae43a2 100644
--- a/test/code/formatPreservation/listInsertion.test
+++ b/test/code/formatPreservation/listInsertion.test
@@ -141,7 +141,7 @@ function test() {
 namespace
 Foo;
 -----
-$stmts[0]->name->parts[0] = 'Xyz';
+$stmts[0]->name->name = 'Xyz';
 -----
 <?php
 namespace
diff --git a/test/code/formatPreservation/listRemoval.test b/test/code/formatPreservation/listRemoval.test
index b0877024..aa276844 100644
--- a/test/code/formatPreservation/listRemoval.test
+++ b/test/code/formatPreservation/listRemoval.test
@@ -207,4 +207,16 @@ class Foo
     function getBaz()
     {
     }
-}
\ No newline at end of file
+}
+-----
+<?php
+class Test {
+    use A, B;
+}
+-----
+unset($stmts[0]->stmts[0]->traits[0]);
+-----
+<?php
+class Test {
+    use B;
+}
diff --git a/test/code/formatPreservation/modifierChange.test b/test/code/formatPreservation/modifierChange.test
index 0c4f6cc4..af74aa28 100644
--- a/test/code/formatPreservation/modifierChange.test
+++ b/test/code/formatPreservation/modifierChange.test
@@ -55,3 +55,14 @@ function test(
     public T3 $z
         = 'x',
 ) {}
+-----
+<?php
+new class {};
+new readonly class {};
+-----
+$stmts[0]->expr->class->flags = Modifiers::READONLY;
+$stmts[1]->expr->class->flags = 0;
+-----
+<?php
+readonly class {};
+class {};
diff --git a/test/code/formatPreservation/removalViaNull.test b/test/code/formatPreservation/removalViaNull.test
index 4cc43b2a..a3679289 100644
--- a/test/code/formatPreservation/removalViaNull.test
+++ b/test/code/formatPreservation/removalViaNull.test
@@ -35,6 +35,11 @@ Bar
         y
         ;
     }
+
+    const
+    int
+    X
+    = 1;
 }
 
 $foo [ $bar ];
@@ -97,6 +102,7 @@ $stmts[2]->extends = null;
 $stmts[2]->stmts[0]->returnType = null;
 $stmts[2]->stmts[1]->props[0]->default = null;
 $stmts[2]->stmts[2]->adaptations[0]->newName = null;
+$stmts[2]->stmts[3]->type = null;
 $stmts[3]->expr->dim = null;
 $stmts[4]->expr->expr = null;
 $stmts[5]->expr->if = null;
@@ -141,6 +147,10 @@ Foo
         public
         ;
     }
+
+    const
+    X
+    = 1;
 }
 
 $foo [];
diff --git a/test/code/parser/blockComments.test b/test/code/parser/blockComments.test
index 8cfe166d..bc72183d 100644
--- a/test/code/parser/blockComments.test
+++ b/test/code/parser/blockComments.test
@@ -33,4 +33,4 @@ array(
             0: // empty
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/comments.test b/test/code/parser/comments.test
index be797fd3..404cfaa8 100644
--- a/test/code/parser/comments.test
+++ b/test/code/parser/comments.test
@@ -105,4 +105,4 @@ array(
             0: // comment
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/errorHandling/eofError.test b/test/code/parser/errorHandling/eofError.test
index 012841de..c3423856 100644
--- a/test/code/parser/errorHandling/eofError.test
+++ b/test/code/parser/errorHandling/eofError.test
@@ -7,9 +7,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
         )
     )
@@ -22,9 +20,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
         )
     )
@@ -33,4 +29,4 @@ array(
             0: /* bar */
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/errorHandling/recovery.test b/test/code/parser/errorHandling/recovery.test
index e26bdd12..8101a7e2 100644
--- a/test/code/parser/errorHandling/recovery.test
+++ b/test/code/parser/errorHandling/recovery.test
@@ -13,9 +13,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
             )
@@ -24,9 +22,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: bar
-                )
+                name: bar
             )
             args: array(
             )
@@ -35,9 +31,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: baz
-                )
+                name: baz
             )
             args: array(
             )
@@ -56,9 +50,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
             )
@@ -67,9 +59,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: bar
-                )
+                name: bar
             )
             args: array(
             )
@@ -78,9 +68,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: baz
-                )
+                name: baz
             )
             args: array(
             )
@@ -99,9 +87,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
             )
@@ -110,9 +96,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: bar
-                )
+                name: bar
             )
             args: array(
             )
@@ -121,9 +105,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: baz
-                )
+                name: baz
             )
             args: array(
             )
@@ -140,9 +122,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: abc
-                )
+                name: abc
             )
         )
     )
@@ -339,9 +319,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_New(
             class: Name(
-                parts: array(
-                    0: T
-                )
+                name: T
             )
             args: array(
             )
@@ -402,9 +380,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_StaticPropertyFetch(
             class: Name(
-                parts: array(
-                    0: Foo
-                )
+                name: Foo
             )
             name: Expr_Error(
             )
@@ -420,9 +396,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_ClassConstFetch(
             class: Name(
-                parts: array(
-                    0: Foo
-                )
+                name: Foo
             )
             name: Expr_Error(
             )
@@ -455,9 +429,7 @@ Syntax error, unexpected T_THROW, expecting ';' from 15:1 to 15:5
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: Foo
-            )
+            name: Foo
         )
         stmts: array(
             0: Stmt_Use(
@@ -466,9 +438,7 @@ array(
                     0: UseItem(
                         type: TYPE_UNKNOWN (0)
                         name: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         alias: null
                     )
@@ -480,9 +450,7 @@ array(
                     0: UseItem(
                         type: TYPE_UNKNOWN (0)
                         name: Name(
-                            parts: array(
-                                0: a
-                            )
+                            name: a
                         )
                         alias: null
                     )
@@ -491,17 +459,13 @@ array(
             2: Stmt_GroupUse(
                 type: TYPE_UNKNOWN (0)
                 prefix: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 uses: array(
                     0: UseItem(
                         type: TYPE_NORMAL (1)
                         name: Name(
-                            parts: array(
-                                0: B
-                            )
+                            name: B
                         )
                         alias: null
                     )
@@ -619,17 +583,13 @@ array(
     0: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 alias: null
             )
@@ -638,17 +598,13 @@ array(
     1: Stmt_GroupUse(
         type: TYPE_FUNCTION (2)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: b
-                    )
+                    name: b
                 )
                 alias: null
             )
@@ -660,9 +616,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 alias: null
             )
@@ -690,18 +644,14 @@ array(
         extends: null
         implements: array(
             0: Name(
-                parts: array(
-                    0: Y
-                )
+                name: Y
             )
         )
         stmts: array(
             0: Stmt_TraitUse(
                 traits: array(
                     0: Name(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                 )
                 adaptations: array(
@@ -710,26 +660,20 @@ array(
             1: Stmt_TraitUse(
                 traits: array(
                     0: Name(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                 )
                 adaptations: array(
                     0: Stmt_TraitUseAdaptation_Precedence(
                         trait: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         method: Identifier(
                             name: b
                         )
                         insteadof: array(
                             0: Name(
-                                parts: array(
-                                    0: C
-                                )
+                                name: C
                             )
                         )
                     )
@@ -739,6 +683,7 @@ array(
                 attrGroups: array(
                 )
                 flags: 0
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -774,9 +719,7 @@ array(
         )
         extends: array(
             0: Name(
-                parts: array(
-                    0: J
-                )
+                name: J
             )
         )
         stmts: array(
@@ -866,18 +809,14 @@ array(
     0: Stmt_Expression[3:1 - 3:11](
         expr: Expr_FuncCall[3:1 - 3:10](
             name: Name[3:1 - 3:3](
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
                 0: Arg[3:5 - 3:9](
                     name: null
                     value: Expr_ClassConstFetch[3:5 - 3:9](
                         class: Name[3:5 - 3:7](
-                            parts: array(
-                                0: Bar
-                            )
+                            name: Bar
                         )
                         name: Expr_Error[3:10 - 3:9](
                         )
@@ -1017,9 +956,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: Type
-                    )
+                    name: Type
                 )
                 byRef: false
                 variadic: false
@@ -1050,9 +987,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: Type1
-                    )
+                    name: Type1
                 )
                 byRef: false
                 variadic: false
@@ -1066,9 +1001,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: Type2
-                    )
+                    name: Type2
                 )
                 byRef: false
                 variadic: false
@@ -1157,9 +1090,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: Bar
-                    )
+                    name: Bar
                 )
                 byRef: false
                 variadic: false
@@ -1197,9 +1128,7 @@ array(
                         )
                         flags: 0
                         type: Name(
-                            parts: array(
-                                0: Baz
-                            )
+                            name: Baz
                         )
                         byRef: false
                         variadic: false
@@ -1226,9 +1155,7 @@ array(
                     )
                     flags: 0
                     type: Name(
-                        parts: array(
-                            0: Foo
-                        )
+                        name: Foo
                     )
                     byRef: false
                     variadic: false
@@ -1495,6 +1422,7 @@ array(
                 attrGroups: array(
                 )
                 flags: 0
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
diff --git a/test/code/parser/expr/arrayDef.test b/test/code/parser/expr/arrayDef.test
index 11596277..7c068010 100644
--- a/test/code/parser/expr/arrayDef.test
+++ b/test/code/parser/expr/arrayDef.test
@@ -170,4 +170,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/arrayDestructuring.test b/test/code/parser/expr/arrayDestructuring.test
index 148019ba..9b0dfa58 100644
--- a/test/code/parser/expr/arrayDestructuring.test
+++ b/test/code/parser/expr/arrayDestructuring.test
@@ -169,4 +169,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/arrayEmptyElemens.test b/test/code/parser/expr/arrayEmptyElemens.test
index 48e6451d..919c0ece 100644
--- a/test/code/parser/expr/arrayEmptyElemens.test
+++ b/test/code/parser/expr/arrayEmptyElemens.test
@@ -67,4 +67,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/arraySpread.test b/test/code/parser/expr/arraySpread.test
index c6004406..66746794 100644
--- a/test/code/parser/expr/arraySpread.test
+++ b/test/code/parser/expr/arraySpread.test
@@ -220,9 +220,7 @@ array(
                     key: null
                     value: Expr_FuncCall(
                         name: Name(
-                            parts: array(
-                                0: getArr
-                            )
+                            name: getArr
                         )
                         args: array(
                         )
@@ -240,9 +238,7 @@ array(
                     key: null
                     value: Expr_FuncCall(
                         name: Name(
-                            parts: array(
-                                0: arrGen
-                            )
+                            name: arrGen
                         )
                         args: array(
                         )
@@ -260,9 +256,7 @@ array(
                     key: null
                     value: Expr_New(
                         class: Name(
-                            parts: array(
-                                0: ArrayIterator
-                            )
+                            name: ArrayIterator
                         )
                         args: array(
                             0: Arg(
@@ -329,9 +323,7 @@ array(
                     key: null
                     value: Expr_FuncCall(
                         name: Name(
-                            parts: array(
-                                0: getArr
-                            )
+                            name: getArr
                         )
                         args: array(
                         )
@@ -383,9 +375,7 @@ array(
                     key: null
                     value: Expr_FuncCall(
                         name: Name(
-                            parts: array(
-                                0: arrGen
-                            )
+                            name: arrGen
                         )
                         args: array(
                         )
@@ -434,4 +424,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/arrow_function.test b/test/code/parser/expr/arrow_function.test
index 47bd8c55..3ab9e271 100644
--- a/test/code/parser/expr/arrow_function.test
+++ b/test/code/parser/expr/arrow_function.test
@@ -260,4 +260,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/assign.test b/test/code/parser/expr/assign.test
index 9066ac8a..971407e1 100644
--- a/test/code/parser/expr/assign.test
+++ b/test/code/parser/expr/assign.test
@@ -378,4 +378,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/assignNewByRef.test b/test/code/parser/expr/assignNewByRef.test
index 8ed227bd..338d6507 100644
--- a/test/code/parser/expr/assignNewByRef.test
+++ b/test/code/parser/expr/assignNewByRef.test
@@ -12,9 +12,7 @@ array(
             )
             expr: Expr_New(
                 class: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 args: array(
                 )
@@ -36,13 +34,11 @@ array(
             )
             expr: Expr_New(
                 class: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 args: array(
                 )
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/cast.test b/test/code/parser/expr/cast.test
index a875bb47..b996548c 100644
--- a/test/code/parser/expr/cast.test
+++ b/test/code/parser/expr/cast.test
@@ -91,4 +91,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/clone.test b/test/code/parser/expr/clone.test
index 418eb0e6..3b2c4a40 100644
--- a/test/code/parser/expr/clone.test
+++ b/test/code/parser/expr/clone.test
@@ -12,4 +12,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/closure.test b/test/code/parser/expr/closure.test
index e87d6a35..304603b3 100644
--- a/test/code/parser/expr/closure.test
+++ b/test/code/parser/expr/closure.test
@@ -190,13 +190,10 @@ array(
                 )
             )
             returnType: Name_FullyQualified(
-                parts: array(
-                    0: Foo
-                    1: Bar
-                )
+                name: Foo\Bar
             )
             stmts: array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/closure_use_trailing_comma.test b/test/code/parser/expr/closure_use_trailing_comma.test
index a7fd0e12..3dfdd7ba 100644
--- a/test/code/parser/expr/closure_use_trailing_comma.test
+++ b/test/code/parser/expr/closure_use_trailing_comma.test
@@ -25,4 +25,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/comparison.test b/test/code/parser/expr/comparison.test
index 011692f0..2ff0dd95 100644
--- a/test/code/parser/expr/comparison.test
+++ b/test/code/parser/expr/comparison.test
@@ -110,9 +110,7 @@ array(
                 name: a
             )
             class: Name(
-                parts: array(
-                    0: B
-                )
+                name: B
             )
         )
     )
@@ -126,4 +124,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/concatPrecedence.test b/test/code/parser/expr/concatPrecedence.test
index b7a8ce94..293d7d73 100644
--- a/test/code/parser/expr/concatPrecedence.test
+++ b/test/code/parser/expr/concatPrecedence.test
@@ -94,4 +94,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/constant_expr.test b/test/code/parser/expr/constant_expr.test
index 926ebcbc..de7acd91 100644
--- a/test/code/parser/expr/constant_expr.test
+++ b/test/code/parser/expr/constant_expr.test
@@ -682,13 +682,11 @@ array(
                 value: Expr_BooleanNot(
                     expr: Expr_ConstFetch(
                         name: Name(
-                            parts: array(
-                                0: false
-                            )
+                            name: false
                         )
                     )
                 )
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/dynamicClassConst.test b/test/code/parser/expr/dynamicClassConst.test
index a333df8a..0bd68e6b 100644
--- a/test/code/parser/expr/dynamicClassConst.test
+++ b/test/code/parser/expr/dynamicClassConst.test
@@ -8,15 +8,11 @@ array(
     0: Stmt_Expression(
         expr: Expr_ClassConstFetch(
             class: Name(
-                parts: array(
-                    0: Foo
-                )
+                name: Foo
             )
             name: Expr_FuncCall(
                 name: Name(
-                    parts: array(
-                        0: bar
-                    )
+                    name: bar
                 )
                 args: array(
                 )
@@ -30,9 +26,7 @@ array(
             )
             name: Expr_FuncCall(
                 name: Name(
-                    parts: array(
-                        0: bar
-                    )
+                    name: bar
                 )
                 args: array(
                 )
diff --git a/test/code/parser/expr/errorSuppress.test b/test/code/parser/expr/errorSuppress.test
index 7f099988..44f9b6cf 100644
--- a/test/code/parser/expr/errorSuppress.test
+++ b/test/code/parser/expr/errorSuppress.test
@@ -11,4 +11,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/exit.test b/test/code/parser/expr/exit.test
index c880921f..ced97a4d 100644
--- a/test/code/parser/expr/exit.test
+++ b/test/code/parser/expr/exit.test
@@ -43,4 +43,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/exprInIsset.test b/test/code/parser/expr/exprInIsset.test
index 43e78b4b..f8b678e8 100644
--- a/test/code/parser/expr/exprInIsset.test
+++ b/test/code/parser/expr/exprInIsset.test
@@ -45,4 +45,4 @@ array(
             0: // This is illegal, but not a syntax error.
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/exprInList.test b/test/code/parser/expr/exprInList.test
index 1916074c..b4715286 100644
--- a/test/code/parser/expr/exprInList.test
+++ b/test/code/parser/expr/exprInList.test
@@ -77,4 +77,4 @@ array(
             0: // This is illegal, but not a syntax error.
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/args.test b/test/code/parser/expr/fetchAndCall/args.test
index 5c4f3863..e883c9cb 100644
--- a/test/code/parser/expr/fetchAndCall/args.test
+++ b/test/code/parser/expr/fetchAndCall/args.test
@@ -12,9 +12,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: f
-                )
+                name: f
             )
             args: array(
             )
@@ -23,9 +21,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: f
-                )
+                name: f
             )
             args: array(
                 0: Arg(
@@ -42,9 +38,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: f
-                )
+                name: f
             )
             args: array(
                 0: Arg(
@@ -69,9 +63,7 @@ array(
     3: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: f
-                )
+                name: f
             )
             args: array(
                 0: Arg(
@@ -88,9 +80,7 @@ array(
     4: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: f
-                )
+                name: f
             )
             args: array(
                 0: Arg(
@@ -112,4 +102,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/constFetch.test b/test/code/parser/expr/fetchAndCall/constFetch.test
index 98af79dd..2ef7d5d7 100644
--- a/test/code/parser/expr/fetchAndCall/constFetch.test
+++ b/test/code/parser/expr/fetchAndCall/constFetch.test
@@ -12,18 +12,14 @@ array(
     0: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
         )
     )
     1: Stmt_Expression(
         expr: Expr_ClassConstFetch(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Identifier(
                 name: B
@@ -33,9 +29,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_ClassConstFetch(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Identifier(
                 name: class
@@ -62,4 +56,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/constantDeref.test b/test/code/parser/expr/fetchAndCall/constantDeref.test
index b13349ac..181650b0 100644
--- a/test/code/parser/expr/fetchAndCall/constantDeref.test
+++ b/test/code/parser/expr/fetchAndCall/constantDeref.test
@@ -210,9 +210,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_ConstFetch(
                 name: Name(
-                    parts: array(
-                        0: FOO
-                    )
+                    name: FOO
                 )
             )
             dim: Scalar_Int(
@@ -224,9 +222,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: Foo
-                    )
+                    name: Foo
                 )
                 name: Identifier(
                     name: BAR
@@ -262,4 +258,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/funcCall.test b/test/code/parser/expr/fetchAndCall/funcCall.test
index 4a826514..69d5a120 100644
--- a/test/code/parser/expr/fetchAndCall/funcCall.test
+++ b/test/code/parser/expr/fetchAndCall/funcCall.test
@@ -19,9 +19,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: a
-                )
+                name: a
                 comments: array(
                     0: // function name variations
                 )
@@ -131,9 +129,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_FuncCall(
                 name: Name(
-                    parts: array(
-                        0: a
-                    )
+                    name: a
                     comments: array(
                         0: // array dereferencing
                     )
@@ -155,4 +151,4 @@ array(
             0: // array dereferencing
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/namedArgs.test b/test/code/parser/expr/fetchAndCall/namedArgs.test
index 1d75cf2d..7a27c6e9 100644
--- a/test/code/parser/expr/fetchAndCall/namedArgs.test
+++ b/test/code/parser/expr/fetchAndCall/namedArgs.test
@@ -8,9 +8,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
                 0: Arg(
@@ -39,9 +37,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: bar
-                )
+                name: bar
             )
             args: array(
                 0: Arg(
@@ -57,4 +53,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/newDeref.test b/test/code/parser/expr/fetchAndCall/newDeref.test
index a4b7a724..bfed4374 100644
--- a/test/code/parser/expr/fetchAndCall/newDeref.test
+++ b/test/code/parser/expr/fetchAndCall/newDeref.test
@@ -12,9 +12,7 @@ array(
         expr: Expr_PropertyFetch(
             var: Expr_New(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 args: array(
                 )
@@ -28,9 +26,7 @@ array(
         expr: Expr_MethodCall(
             var: Expr_New(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 args: array(
                 )
@@ -46,9 +42,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_New(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 args: array(
                 )
@@ -63,9 +57,7 @@ array(
             var: Expr_ArrayDimFetch(
                 var: Expr_New(
                     class: Name(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                     args: array(
                     )
@@ -79,4 +71,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/objectAccess.test b/test/code/parser/expr/fetchAndCall/objectAccess.test
index 5f7751ee..9772f261 100644
--- a/test/code/parser/expr/fetchAndCall/objectAccess.test
+++ b/test/code/parser/expr/fetchAndCall/objectAccess.test
@@ -177,4 +177,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test b/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
index 133771b7..9cc88b9e 100644
--- a/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
+++ b/test/code/parser/expr/fetchAndCall/simpleArrayAccess.test
@@ -69,4 +69,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/staticCall.test b/test/code/parser/expr/fetchAndCall/staticCall.test
index 47df8f5f..602fe5a9 100644
--- a/test/code/parser/expr/fetchAndCall/staticCall.test
+++ b/test/code/parser/expr/fetchAndCall/staticCall.test
@@ -22,9 +22,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
                 comments: array(
                     0: // method name variations
                 )
@@ -45,9 +43,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Scalar_String(
                 value: b
@@ -59,9 +55,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Expr_Variable(
                 name: b
@@ -75,9 +69,7 @@ array(
             name: Expr_ArrayDimFetch(
                 var: Expr_StaticPropertyFetch(
                     class: Name(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                     name: VarLikeIdentifier(
                         name: b
@@ -97,9 +89,7 @@ array(
                 var: Expr_ArrayDimFetch(
                     var: Expr_StaticPropertyFetch(
                         class: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         name: VarLikeIdentifier(
                             name: b
@@ -121,9 +111,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_StaticCall(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                     comments: array(
                         0: // array dereferencing
                     )
@@ -151,9 +139,7 @@ array(
     6: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: static
-                )
+                name: static
                 comments: array(
                     0: // class name variations
                 )
@@ -214,4 +200,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test b/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
index a1de3c8c..23878409 100644
--- a/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
+++ b/test/code/parser/expr/fetchAndCall/staticPropertyFetch.test
@@ -17,9 +17,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_StaticPropertyFetch(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
                 comments: array(
                     0: // property name variations
                 )
@@ -38,9 +36,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_StaticPropertyFetch(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Expr_Variable(
                 name: b
@@ -50,9 +46,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_StaticPropertyFetch(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Scalar_String(
                 value: b
@@ -63,9 +57,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_StaticPropertyFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                     comments: array(
                         0: // array access
                     )
@@ -92,9 +84,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_StaticPropertyFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: VarLikeIdentifier(
                     name: b
@@ -110,4 +100,4 @@ array(
             0: // class name variations can be found in staticCall.test
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/firstClassCallables.test b/test/code/parser/expr/firstClassCallables.test
index 73ec2ce6..cf1933f3 100644
--- a/test/code/parser/expr/firstClassCallables.test
+++ b/test/code/parser/expr/firstClassCallables.test
@@ -16,9 +16,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
                 0: VariadicPlaceholder(
@@ -43,9 +41,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Identifier(
                 name: foo
@@ -59,9 +55,7 @@ array(
     3: Stmt_Expression(
         expr: Expr_New(
             class: Name(
-                parts: array(
-                    0: Foo
-                )
+                name: Foo
             )
             args: array(
                 0: VariadicPlaceholder(
@@ -95,9 +89,7 @@ array(
                 attrs: array(
                     0: Attribute(
                         name: Name(
-                            parts: array(
-                                0: Foo
-                            )
+                            name: Foo
                         )
                         args: array(
                             0: VariadicPlaceholder(
@@ -117,4 +109,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/includeAndEval.test b/test/code/parser/expr/includeAndEval.test
index 0ab18908..6d28e7c5 100644
--- a/test/code/parser/expr/includeAndEval.test
+++ b/test/code/parser/expr/includeAndEval.test
@@ -47,4 +47,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/issetAndEmpty.test b/test/code/parser/expr/issetAndEmpty.test
index 3db32c3d..94babbc0 100644
--- a/test/code/parser/expr/issetAndEmpty.test
+++ b/test/code/parser/expr/issetAndEmpty.test
@@ -44,9 +44,7 @@ array(
         expr: Expr_Empty(
             expr: Expr_FuncCall(
                 name: Name(
-                    parts: array(
-                        0: foo
-                    )
+                    name: foo
                 )
                 args: array(
                 )
@@ -85,4 +83,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/keywordsInNamespacedName.test b/test/code/parser/expr/keywordsInNamespacedName.test
index 742beb81..47279f1d 100644
--- a/test/code/parser/expr/keywordsInNamespacedName.test
+++ b/test/code/parser/expr/keywordsInNamespacedName.test
@@ -14,55 +14,41 @@ private\protected\public\static\abstract\final();
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: fn
-            )
+            name: fn
         )
         stmts: array(
         )
     )
     1: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: fn
-                1: use
-            )
+            name: fn\use
         )
         stmts: array(
         )
     )
     2: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: self
-            )
+            name: self
         )
         stmts: array(
         )
     )
     3: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: parent
-            )
+            name: parent
         )
         stmts: array(
         )
     )
     4: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: static
-            )
+            name: static
         )
         stmts: array(
             0: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: fn
-                            1: use
-                        )
+                        name: fn\use
                     )
                     args: array(
                     )
@@ -71,10 +57,7 @@ array(
             1: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name_FullyQualified(
-                        parts: array(
-                            0: fn
-                            1: use
-                        )
+                        name: fn\use
                     )
                     args: array(
                     )
@@ -83,10 +66,7 @@ array(
             2: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name_Relative(
-                        parts: array(
-                            0: fn
-                            1: use
-                        )
+                        name: fn\use
                     )
                     args: array(
                     )
@@ -95,14 +75,7 @@ array(
             3: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: private
-                            1: protected
-                            2: public
-                            3: static
-                            4: abstract
-                            5: final
-                        )
+                        name: private\protected\public\static\abstract\final
                     )
                     args: array(
                     )
@@ -110,4 +83,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/listReferences.test b/test/code/parser/expr/listReferences.test
index 0e02d368..fd333555 100644
--- a/test/code/parser/expr/listReferences.test
+++ b/test/code/parser/expr/listReferences.test
@@ -88,4 +88,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/listWithKeys.test b/test/code/parser/expr/listWithKeys.test
index e800236d..aa07d45e 100644
--- a/test/code/parser/expr/listWithKeys.test
+++ b/test/code/parser/expr/listWithKeys.test
@@ -80,4 +80,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/logic.test b/test/code/parser/expr/logic.test
index 6b434565..6b841f50 100644
--- a/test/code/parser/expr/logic.test
+++ b/test/code/parser/expr/logic.test
@@ -187,4 +187,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/match.test b/test/code/parser/expr/match.test
index 364701eb..cb2367e3 100644
--- a/test/code/parser/expr/match.test
+++ b/test/code/parser/expr/match.test
@@ -105,9 +105,7 @@ array(
                         conds: array(
                             0: Expr_ClassConstFetch(
                                 class: Name(
-                                    parts: array(
-                                        0: BinaryOperator
-                                    )
+                                    name: BinaryOperator
                                 )
                                 name: Identifier(
                                     name: ADD
@@ -210,4 +208,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/math.test b/test/code/parser/expr/math.test
index 8399400c..5d22bf8e 100644
--- a/test/code/parser/expr/math.test
+++ b/test/code/parser/expr/math.test
@@ -310,4 +310,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/new.test b/test/code/parser/expr/new.test
index 5c6a82a1..dd9ef66d 100644
--- a/test/code/parser/expr/new.test
+++ b/test/code/parser/expr/new.test
@@ -22,9 +22,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_New(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             args: array(
             )
@@ -33,9 +31,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_New(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             args: array(
                 0: Arg(
@@ -82,9 +78,7 @@ array(
         expr: Expr_New(
             class: Expr_StaticPropertyFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: VarLikeIdentifier(
                     name: b
@@ -174,9 +168,7 @@ array(
     9: Stmt_Expression(
         expr: Expr_New(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             args: array(
             )
@@ -185,4 +177,4 @@ array(
             0: // test regression introduces by new dereferencing syntax
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/newWithoutClass.test b/test/code/parser/expr/newWithoutClass.test
index 2ad0af00..d06f880f 100644
--- a/test/code/parser/expr/newWithoutClass.test
+++ b/test/code/parser/expr/newWithoutClass.test
@@ -13,4 +13,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/print.test b/test/code/parser/expr/print.test
index 84ed7775..98e45b56 100644
--- a/test/code/parser/expr/print.test
+++ b/test/code/parser/expr/print.test
@@ -11,4 +11,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/shellExec.test b/test/code/parser/expr/shellExec.test
index ccb110e4..594bce6f 100644
--- a/test/code/parser/expr/shellExec.test
+++ b/test/code/parser/expr/shellExec.test
@@ -53,4 +53,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/ternaryAndCoalesce.test b/test/code/parser/expr/ternaryAndCoalesce.test
index ea1010ca..3d163087 100644
--- a/test/code/parser/expr/ternaryAndCoalesce.test
+++ b/test/code/parser/expr/ternaryAndCoalesce.test
@@ -171,4 +171,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/throw.test b/test/code/parser/expr/throw.test
index 2b54521d..a8597ffe 100644
--- a/test/code/parser/expr/throw.test
+++ b/test/code/parser/expr/throw.test
@@ -8,9 +8,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: test
-                )
+                name: test
             )
             args: array(
                 0: Arg(
@@ -34,9 +32,7 @@ array(
             right: Expr_Throw(
                 expr: Expr_New(
                     class: Name(
-                        parts: array(
-                            0: Exception
-                        )
+                        name: Exception
                     )
                     args: array(
                     )
@@ -44,4 +40,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/trailingCommas.test b/test/code/parser/expr/trailingCommas.test
index 4a7a3437..cbb5f99a 100644
--- a/test/code/parser/expr/trailingCommas.test
+++ b/test/code/parser/expr/trailingCommas.test
@@ -13,9 +13,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
                 0: Arg(
@@ -68,9 +66,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: Foo
-                )
+                name: Foo
             )
             name: Identifier(
                 name: bar
@@ -98,9 +94,7 @@ array(
     3: Stmt_Expression(
         expr: Expr_New(
             class: Name(
-                parts: array(
-                    0: Foo
-                )
+                name: Foo
             )
             args: array(
                 0: Arg(
@@ -144,4 +138,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/uvs/constDeref.test b/test/code/parser/expr/uvs/constDeref.test
index 03f67175..501b5b58 100644
--- a/test/code/parser/expr/uvs/constDeref.test
+++ b/test/code/parser/expr/uvs/constDeref.test
@@ -26,9 +26,7 @@ array(
         expr: Expr_PropertyFetch(
             var: Expr_ConstFetch(
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
             )
             name: Identifier(
@@ -40,9 +38,7 @@ array(
         expr: Expr_MethodCall(
             var: Expr_ConstFetch(
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
             )
             name: Identifier(
@@ -56,9 +52,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_ConstFetch(
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
             )
             dim: Scalar_Int(
@@ -72,9 +66,7 @@ array(
                 var: Expr_ArrayDimFetch(
                     var: Expr_ConstFetch(
                         name: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                     )
                     dim: Scalar_Int(
@@ -94,9 +86,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_ConstFetch(
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
             )
             dim: Scalar_Int(
@@ -108,9 +98,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Identifier(
                     name: B
@@ -127,9 +115,7 @@ array(
                 var: Expr_ArrayDimFetch(
                     var: Expr_ClassConstFetch(
                         class: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         name: Identifier(
                             name: B
@@ -152,9 +138,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Identifier(
                     name: B
@@ -169,9 +153,7 @@ array(
         expr: Expr_PropertyFetch(
             var: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Identifier(
                     name: B
@@ -186,9 +168,7 @@ array(
         expr: Expr_MethodCall(
             var: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Identifier(
                     name: B
@@ -205,9 +185,7 @@ array(
         expr: Expr_ClassConstFetch(
             class: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Identifier(
                     name: B
@@ -222,9 +200,7 @@ array(
         expr: Expr_StaticPropertyFetch(
             class: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Identifier(
                     name: B
@@ -239,9 +215,7 @@ array(
         expr: Expr_StaticCall(
             class: Expr_ClassConstFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Identifier(
                     name: B
@@ -276,9 +250,7 @@ array(
         expr: Expr_MethodCall(
             var: Expr_ConstFetch(
                 name: Name(
-                    parts: array(
-                        0: __FUNCIONT__
-                    )
+                    name: __FUNCIONT__
                 )
             )
             name: Identifier(
@@ -288,4 +260,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/uvs/globalNonSimpleVarError.test b/test/code/parser/expr/uvs/globalNonSimpleVarError.test
index 54dd467d..8b8fd40e 100644
--- a/test/code/parser/expr/uvs/globalNonSimpleVarError.test
+++ b/test/code/parser/expr/uvs/globalNonSimpleVarError.test
@@ -17,10 +17,8 @@ array(
     1: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: bar
-                )
+                name: bar
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/uvs/indirectCall.test b/test/code/parser/expr/uvs/indirectCall.test
index 7168b4e7..08535cf5 100644
--- a/test/code/parser/expr/uvs/indirectCall.test
+++ b/test/code/parser/expr/uvs/indirectCall.test
@@ -20,9 +20,7 @@ array(
         expr: Expr_FuncCall(
             name: Expr_FuncCall(
                 name: Name(
-                    parts: array(
-                        0: id
-                    )
+                    name: id
                 )
                 args: array(
                     0: Arg(
@@ -52,9 +50,7 @@ array(
             name: Expr_FuncCall(
                 name: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: id
-                        )
+                        name: id
                     )
                     args: array(
                         0: Arg(
@@ -96,9 +92,7 @@ array(
                 name: Expr_FuncCall(
                     name: Expr_FuncCall(
                         name: Name(
-                            parts: array(
-                                0: id
-                            )
+                            name: id
                         )
                         args: array(
                         )
@@ -136,9 +130,7 @@ array(
                     name: Expr_ArrayDimFetch(
                         var: Expr_FuncCall(
                             name: Name(
-                                parts: array(
-                                    0: id
-                                )
+                                name: id
                             )
                             args: array(
                                 0: Arg(
@@ -294,9 +286,7 @@ array(
                                             )
                                             default: Expr_ConstFetch(
                                                 name: Name(
-                                                    parts: array(
-                                                        0: null
-                                                    )
+                                                    name: null
                                                 )
                                             )
                                         )
@@ -543,4 +533,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/uvs/isset.test b/test/code/parser/expr/uvs/isset.test
index 9757d6a4..fe20e985 100644
--- a/test/code/parser/expr/uvs/isset.test
+++ b/test/code/parser/expr/uvs/isset.test
@@ -83,4 +83,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/uvs/new.test b/test/code/parser/expr/uvs/new.test
index 0d93615e..bb7888ff 100644
--- a/test/code/parser/expr/uvs/new.test
+++ b/test/code/parser/expr/uvs/new.test
@@ -65,9 +65,7 @@ array(
         expr: Expr_New(
             class: Expr_StaticPropertyFetch(
                 class: Name(
-                    parts: array(
-                        0: Test
-                    )
+                    name: Test
                 )
                 name: VarLikeIdentifier(
                     name: className
@@ -115,4 +113,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/uvs/newInstanceofExpr.test b/test/code/parser/expr/uvs/newInstanceofExpr.test
index 2908c9e3..0fe70746 100644
--- a/test/code/parser/expr/uvs/newInstanceofExpr.test
+++ b/test/code/parser/expr/uvs/newInstanceofExpr.test
@@ -58,4 +58,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/uvs/staticProperty.test b/test/code/parser/expr/uvs/staticProperty.test
index 96c61a61..f9120301 100644
--- a/test/code/parser/expr/uvs/staticProperty.test
+++ b/test/code/parser/expr/uvs/staticProperty.test
@@ -14,9 +14,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_StaticPropertyFetch(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: VarLikeIdentifier(
                 name: b
@@ -76,9 +74,7 @@ array(
     5: Stmt_Expression(
         expr: Expr_StaticPropertyFetch(
             class: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
             name: Expr_Variable(
                 name: b
@@ -89,9 +85,7 @@ array(
         expr: Expr_ArrayDimFetch(
             var: Expr_StaticPropertyFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: Expr_Variable(
                     name: c
@@ -106,9 +100,7 @@ array(
         expr: Expr_StaticPropertyFetch(
             class: Expr_StaticPropertyFetch(
                 class: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 name: VarLikeIdentifier(
                     name: A
@@ -119,4 +111,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/varVarPos.test b/test/code/parser/expr/varVarPos.test
index 26c747f5..aefb8f52 100644
--- a/test/code/parser/expr/varVarPos.test
+++ b/test/code/parser/expr/varVarPos.test
@@ -14,4 +14,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/expr/variable.test b/test/code/parser/expr/variable.test
index b28a9321..f34e495c 100644
--- a/test/code/parser/expr/variable.test
+++ b/test/code/parser/expr/variable.test
@@ -26,9 +26,7 @@ array(
         expr: Expr_Variable(
             name: Expr_FuncCall(
                 name: Name(
-                    parts: array(
-                        0: foo
-                    )
+                    name: foo
                 )
                 args: array(
                 )
@@ -63,4 +61,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/nopPositions.test b/test/code/parser/nopPositions.test
index 7f5d15b3..d790741a 100644
--- a/test/code/parser/nopPositions.test
+++ b/test/code/parser/nopPositions.test
@@ -24,4 +24,4 @@ array(
             0: /* comment */
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/scalar/explicitOctal.test b/test/code/parser/scalar/explicitOctal.test
index b3c9aa29..d6bb8500 100644
--- a/test/code/parser/scalar/explicitOctal.test
+++ b/test/code/parser/scalar/explicitOctal.test
@@ -27,4 +27,4 @@ array(
             value: 9.2233720368548E+18
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/scalar/invalidOctal.test b/test/code/parser/scalar/invalidOctal.test
index 04160487..c489abe7 100644
--- a/test/code/parser/scalar/invalidOctal.test
+++ b/test/code/parser/scalar/invalidOctal.test
@@ -23,4 +23,4 @@ array(
             value: 7
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/scalar/magicConst.test b/test/code/parser/scalar/magicConst.test
index 520ea177..c0980f13 100644
--- a/test/code/parser/scalar/magicConst.test
+++ b/test/code/parser/scalar/magicConst.test
@@ -44,4 +44,4 @@ array(
         expr: Scalar_MagicConst_Trait(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/scalar/numberSeparators.test b/test/code/parser/scalar/numberSeparators.test
index 24b2e670..cbc16c32 100644
--- a/test/code/parser/scalar/numberSeparators.test
+++ b/test/code/parser/scalar/numberSeparators.test
@@ -58,9 +58,7 @@ array(
     5: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: _100
-                )
+                name: _100
                 comments: array(
                     0: // already a valid constant name
                 )
@@ -87,9 +85,7 @@ array(
     7: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: _
-                )
+                name: _
             )
         )
     )
@@ -101,9 +97,7 @@ array(
     9: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: __1
-                )
+                name: __1
             )
         )
     )
@@ -115,9 +109,7 @@ array(
     11: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: _
-                )
+                name: _
             )
         )
     )
@@ -134,9 +126,7 @@ array(
     14: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: _0
-                )
+                name: _0
             )
         )
     )
@@ -148,9 +138,7 @@ array(
     16: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: x_123
-                )
+                name: x_123
             )
         )
     )
@@ -162,9 +150,7 @@ array(
     18: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: b_101
-                )
+                name: b_101
             )
         )
     )
@@ -176,9 +162,7 @@ array(
     20: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: _e2
-                )
+                name: _e2
             )
         )
     )
@@ -190,9 +174,7 @@ array(
     22: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: e_2
-                )
+                name: e_2
             )
         )
     )
diff --git a/test/code/parser/semiReserved.test b/test/code/parser/semiReserved.test
index 1d3594a4..5b361cb7 100644
--- a/test/code/parser/semiReserved.test
+++ b/test/code/parser/semiReserved.test
@@ -152,6 +152,7 @@ array(
                 attrGroups: array(
                 )
                 flags: 0
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -175,6 +176,7 @@ array(
                 attrGroups: array(
                 )
                 flags: 0
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -256,9 +258,7 @@ array(
             )
             expr: Expr_New(
                 class: Name(
-                    parts: array(
-                        0: Test
-                    )
+                    name: Test
                 )
                 args: array(
                 )
@@ -292,9 +292,7 @@ array(
     4: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: Test
-                )
+                name: Test
             )
             name: Identifier(
                 name: list
@@ -306,9 +304,7 @@ array(
     5: Stmt_Expression(
         expr: Expr_StaticCall(
             class: Name(
-                parts: array(
-                    0: Test
-                )
+                name: Test
             )
             name: Identifier(
                 name: protected
@@ -340,9 +336,7 @@ array(
     8: Stmt_Expression(
         expr: Expr_ClassConstFetch(
             class: Name(
-                parts: array(
-                    0: Test
-                )
+                name: Test
             )
             name: Identifier(
                 name: TRAIT
@@ -352,9 +346,7 @@ array(
     9: Stmt_Expression(
         expr: Expr_ClassConstFetch(
             class: Name(
-                parts: array(
-                    0: Test
-                )
+                name: Test
             )
             name: Identifier(
                 name: FINAL
@@ -375,39 +367,29 @@ array(
             0: Stmt_TraitUse(
                 traits: array(
                     0: Name(
-                        parts: array(
-                            0: TraitA
-                        )
+                        name: TraitA
                     )
                     1: Name(
-                        parts: array(
-                            0: TraitB
-                        )
+                        name: TraitB
                     )
                 )
                 adaptations: array(
                     0: Stmt_TraitUseAdaptation_Precedence(
                         trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
+                            name: TraitA
                         )
                         method: Identifier(
                             name: catch
                         )
                         insteadof: array(
                             0: Name_Relative(
-                                parts: array(
-                                    0: TraitB
-                                )
+                                name: TraitB
                             )
                         )
                     )
                     1: Stmt_TraitUseAdaptation_Alias(
                         trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
+                            name: TraitA
                         )
                         method: Identifier(
                             name: list
@@ -419,9 +401,7 @@ array(
                     )
                     2: Stmt_TraitUseAdaptation_Alias(
                         trait: Name(
-                            parts: array(
-                                0: TraitB
-                            )
+                            name: TraitB
                         )
                         method: Identifier(
                             name: throw
@@ -433,9 +413,7 @@ array(
                     )
                     3: Stmt_TraitUseAdaptation_Alias(
                         trait: Name(
-                            parts: array(
-                                0: TraitB
-                            )
+                            name: TraitB
                         )
                         method: Identifier(
                             name: self
@@ -455,9 +433,7 @@ array(
                     )
                     5: Stmt_TraitUseAdaptation_Alias(
                         trait: Name_FullyQualified(
-                            parts: array(
-                                0: TraitC
-                            )
+                            name: TraitC
                         )
                         method: Identifier(
                             name: exit
@@ -469,9 +445,7 @@ array(
                     )
                     6: Stmt_TraitUseAdaptation_Alias(
                         trait: Name_Relative(
-                            parts: array(
-                                0: TraitC
-                            )
+                            name: TraitC
                         )
                         method: Identifier(
                             name: exit
@@ -483,9 +457,7 @@ array(
                     )
                     7: Stmt_TraitUseAdaptation_Precedence(
                         trait: Name(
-                            parts: array(
-                                0: TraitA
-                            )
+                            name: TraitA
                         )
                         method: Identifier(
                             name: catch
@@ -497,9 +469,7 @@ array(
                         )
                         insteadof: array(
                             0: Name(
-                                parts: array(
-                                    0: TraitB
-                                )
+                                name: TraitB
                             )
                         )
                     )
diff --git a/test/code/parser/stmt/attributes.test b/test/code/parser/stmt/attributes.test
index aa477435..2a0d2d28 100644
--- a/test/code/parser/stmt/attributes.test
+++ b/test/code/parser/stmt/attributes.test
@@ -38,27 +38,21 @@ array(
                 attrs: array(
                     0: Attribute(
                         name: Name(
-                            parts: array(
-                                0: A1
-                            )
+                            name: A1
                         )
                         args: array(
                         )
                     )
                     1: Attribute(
                         name: Name(
-                            parts: array(
-                                0: A2
-                            )
+                            name: A2
                         )
                         args: array(
                         )
                     )
                     2: Attribute(
                         name: Name(
-                            parts: array(
-                                0: A3
-                            )
+                            name: A3
                         )
                         args: array(
                             0: Arg(
@@ -73,9 +67,7 @@ array(
                     )
                     3: Attribute(
                         name: Name(
-                            parts: array(
-                                0: A4
-                            )
+                            name: A4
                         )
                         args: array(
                             0: Arg(
@@ -109,9 +101,7 @@ array(
                 attrs: array(
                     0: Attribute(
                         name: Name(
-                            parts: array(
-                                0: A5
-                            )
+                            name: A5
                         )
                         args: array(
                         )
@@ -133,9 +123,7 @@ array(
                         attrs: array(
                             0: Attribute(
                                 name: Name(
-                                    parts: array(
-                                        0: A6
-                                    )
+                                    name: A6
                                 )
                                 args: array(
                                 )
@@ -155,9 +143,7 @@ array(
                                 attrs: array(
                                     0: Attribute(
                                         name: Name(
-                                            parts: array(
-                                                0: A7
-                                            )
+                                            name: A7
                                         )
                                         args: array(
                                         )
@@ -185,9 +171,7 @@ array(
                         attrs: array(
                             0: Attribute(
                                 name: Name(
-                                    parts: array(
-                                        0: A14
-                                    )
+                                    name: A14
                                 )
                                 args: array(
                                 )
@@ -214,9 +198,7 @@ array(
                 attrs: array(
                     0: Attribute(
                         name: Name(
-                            parts: array(
-                                0: A8
-                            )
+                            name: A8
                         )
                         args: array(
                         )
@@ -238,9 +220,7 @@ array(
                 attrs: array(
                     0: Attribute(
                         name: Name(
-                            parts: array(
-                                0: A9
-                            )
+                            name: A9
                         )
                         args: array(
                         )
@@ -265,9 +245,7 @@ array(
                         attrs: array(
                             0: Attribute(
                                 name: Name(
-                                    parts: array(
-                                        0: A10
-                                    )
+                                    name: A10
                                 )
                                 args: array(
                                 )
@@ -298,9 +276,7 @@ array(
                         attrs: array(
                             0: Attribute(
                                 name: Name(
-                                    parts: array(
-                                        0: A11
-                                    )
+                                    name: A11
                                 )
                                 args: array(
                                 )
@@ -330,9 +306,7 @@ array(
                         attrs: array(
                             0: Attribute(
                                 name: Name(
-                                    parts: array(
-                                        0: A12
-                                    )
+                                    name: A12
                                 )
                                 args: array(
                                 )
@@ -363,9 +337,7 @@ array(
                         attrs: array(
                             0: Attribute(
                                 name: Name(
-                                    parts: array(
-                                        0: A13
-                                    )
+                                    name: A13
                                 )
                                 args: array(
                                 )
diff --git a/test/code/parser/stmt/class/abstract.test b/test/code/parser/stmt/class/abstract.test
index 8c7444cf..8b81fd95 100644
--- a/test/code/parser/stmt/class/abstract.test
+++ b/test/code/parser/stmt/class/abstract.test
@@ -48,4 +48,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/anonymous.test b/test/code/parser/stmt/class/anonymous.test
index 89fe3f36..0af0e769 100644
--- a/test/code/parser/stmt/class/anonymous.test
+++ b/test/code/parser/stmt/class/anonymous.test
@@ -61,20 +61,14 @@ array(
                 flags: 0
                 name: null
                 extends: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 implements: array(
                     0: Name(
-                        parts: array(
-                            0: B
-                        )
+                        name: B
                     )
                     1: Name(
-                        parts: array(
-                            0: C
-                        )
+                        name: C
                     )
                 )
                 stmts: array(
@@ -123,9 +117,7 @@ array(
                 flags: 0
                 name: null
                 extends: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 implements: array(
                 )
@@ -133,9 +125,7 @@ array(
                     0: Stmt_TraitUse(
                         traits: array(
                             0: Name(
-                                parts: array(
-                                    0: T
-                                )
+                                name: T
                             )
                         )
                         adaptations: array(
@@ -194,9 +184,7 @@ array(
                                 flags: 0
                                 name: null
                                 extends: Name(
-                                    parts: array(
-                                        0: A
-                                    )
+                                    name: A
                                 )
                                 implements: array(
                                 )
@@ -205,6 +193,7 @@ array(
                                         attrGroups: array(
                                         )
                                         flags: 0
+                                        type: null
                                         consts: array(
                                             0: Const(
                                                 name: Identifier(
diff --git a/test/code/parser/stmt/class/class_position.test b/test/code/parser/stmt/class/class_position.test
index 82991499..1f6e11b7 100644
--- a/test/code/parser/stmt/class/class_position.test
+++ b/test/code/parser/stmt/class/class_position.test
@@ -91,4 +91,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/conditional.test b/test/code/parser/stmt/class/conditional.test
index 53a38c2e..dbe27e6a 100644
--- a/test/code/parser/stmt/class/conditional.test
+++ b/test/code/parser/stmt/class/conditional.test
@@ -10,9 +10,7 @@ array(
     0: Stmt_If(
         cond: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: true
-                )
+                name: true
             )
         )
         stmts: array(
@@ -34,4 +32,4 @@ array(
         )
         else: null
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/constModifierErrors.test b/test/code/parser/stmt/class/constModifierErrors.test
index c810bfb8..5cde50d4 100644
--- a/test/code/parser/stmt/class/constModifierErrors.test
+++ b/test/code/parser/stmt/class/constModifierErrors.test
@@ -22,6 +22,7 @@ array(
                 attrGroups: array(
                 )
                 flags: STATIC (8)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -59,6 +60,7 @@ array(
                 attrGroups: array(
                 )
                 flags: ABSTRACT (16)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -96,6 +98,7 @@ array(
                 attrGroups: array(
                 )
                 flags: READONLY (64)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -133,6 +136,7 @@ array(
                 attrGroups: array(
                 )
                 flags: PUBLIC (1)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -146,4 +150,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/constModifiers.test b/test/code/parser/stmt/class/constModifiers.test
index 6a16ca32..1a448b9c 100644
--- a/test/code/parser/stmt/class/constModifiers.test
+++ b/test/code/parser/stmt/class/constModifiers.test
@@ -26,6 +26,7 @@ array(
                 attrGroups: array(
                 )
                 flags: 0
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -41,6 +42,7 @@ array(
                 attrGroups: array(
                 )
                 flags: PUBLIC (1)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -56,6 +58,7 @@ array(
                 attrGroups: array(
                 )
                 flags: PROTECTED (2)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -71,6 +74,7 @@ array(
                 attrGroups: array(
                 )
                 flags: PRIVATE (4)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -86,6 +90,7 @@ array(
                 attrGroups: array(
                 )
                 flags: FINAL (32)
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -99,4 +104,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/enum.test b/test/code/parser/stmt/class/enum.test
index dfc76522..1fdd0c22 100644
--- a/test/code/parser/stmt/class/enum.test
+++ b/test/code/parser/stmt/class/enum.test
@@ -41,14 +41,10 @@ array(
         scalarType: null
         implements: array(
             0: Name(
-                parts: array(
-                    0: Bar
-                )
+                name: Bar
             )
             1: Name(
-                parts: array(
-                    0: Baz
-                )
+                name: Baz
             )
         )
         stmts: array(
@@ -65,9 +61,7 @@ array(
         )
         implements: array(
             0: Name(
-                parts: array(
-                    0: Bar
-                )
+                name: Bar
             )
         )
         stmts: array(
@@ -83,4 +77,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/enum_with_string.test b/test/code/parser/stmt/class/enum_with_string.test
index a8f8655a..49deeba5 100644
--- a/test/code/parser/stmt/class/enum_with_string.test
+++ b/test/code/parser/stmt/class/enum_with_string.test
@@ -63,4 +63,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/final.test b/test/code/parser/stmt/class/final.test
index 1a9f52e0..44d9f664 100644
--- a/test/code/parser/stmt/class/final.test
+++ b/test/code/parser/stmt/class/final.test
@@ -18,4 +18,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/interface.test b/test/code/parser/stmt/class/interface.test
index a726d53b..b87e6afd 100644
--- a/test/code/parser/stmt/class/interface.test
+++ b/test/code/parser/stmt/class/interface.test
@@ -15,14 +15,10 @@ array(
         )
         extends: array(
             0: Name(
-                parts: array(
-                    0: C
-                )
+                name: C
             )
             1: Name(
-                parts: array(
-                    0: D
-                )
+                name: D
             )
         )
         stmts: array(
@@ -41,4 +37,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/name.test b/test/code/parser/stmt/class/name.test
index 77ba1f27..e3029f24 100644
--- a/test/code/parser/stmt/class/name.test
+++ b/test/code/parser/stmt/class/name.test
@@ -56,9 +56,7 @@ array(
             name: A
         )
         extends: Name(
-            parts: array(
-                0: self
-            )
+            name: self
         )
         implements: array(
         )
@@ -79,9 +77,7 @@ array(
             name: A
         )
         extends: Name(
-            parts: array(
-                0: PARENT
-            )
+            name: PARENT
         )
         implements: array(
         )
@@ -102,9 +98,7 @@ array(
             name: A
         )
         extends: Name(
-            parts: array(
-                0: static
-            )
+            name: static
         )
         implements: array(
         )
@@ -127,9 +121,7 @@ array(
         extends: null
         implements: array(
             0: Name(
-                parts: array(
-                    0: self
-                )
+                name: self
             )
         )
         stmts: array(
@@ -151,9 +143,7 @@ array(
         extends: null
         implements: array(
             0: Name(
-                parts: array(
-                    0: PARENT
-                )
+                name: PARENT
             )
         )
         stmts: array(
@@ -175,9 +165,7 @@ array(
         extends: null
         implements: array(
             0: Name(
-                parts: array(
-                    0: static
-                )
+                name: static
             )
         )
         stmts: array(
@@ -237,9 +225,7 @@ array(
         )
         extends: array(
             0: Name(
-                parts: array(
-                    0: self
-                )
+                name: self
             )
         )
         stmts: array(
@@ -259,9 +245,7 @@ array(
         )
         extends: array(
             0: Name(
-                parts: array(
-                    0: PARENT
-                )
+                name: PARENT
             )
         )
         stmts: array(
@@ -281,12 +265,10 @@ array(
         )
         extends: array(
             0: Name(
-                parts: array(
-                    0: static
-                )
+                name: static
             )
         )
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/propertyTypes.test b/test/code/parser/stmt/class/propertyTypes.test
index e502795c..bc301d12 100644
--- a/test/code/parser/stmt/class/propertyTypes.test
+++ b/test/code/parser/stmt/class/propertyTypes.test
@@ -42,9 +42,7 @@ array(
                 )
                 flags: PROTECTED | STATIC (10)
                 type: Name(
-                    parts: array(
-                        0: D
-                    )
+                    name: D
                 )
                 props: array(
                     0: PropertyItem(
diff --git a/test/code/parser/stmt/class/property_promotion.test b/test/code/parser/stmt/class/property_promotion.test
index 467943b7..f613623c 100644
--- a/test/code/parser/stmt/class/property_promotion.test
+++ b/test/code/parser/stmt/class/property_promotion.test
@@ -104,4 +104,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/readonly.test b/test/code/parser/stmt/class/readonly.test
index cccd60df..fb2131e6 100644
--- a/test/code/parser/stmt/class/readonly.test
+++ b/test/code/parser/stmt/class/readonly.test
@@ -40,4 +40,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/readonlyAnonyous.test b/test/code/parser/stmt/class/readonlyAnonyous.test
new file mode 100644
index 00000000..dd80f6db
--- /dev/null
+++ b/test/code/parser/stmt/class/readonlyAnonyous.test
@@ -0,0 +1,25 @@
+Readonly anonymous class
+-----
+<?php
+
+new readonly class {};
+-----
+array(
+    0: Stmt_Expression(
+        expr: Expr_New(
+            class: Stmt_Class(
+                attrGroups: array(
+                )
+                flags: READONLY (64)
+                name: null
+                extends: null
+                implements: array(
+                )
+                stmts: array(
+                )
+            )
+            args: array(
+            )
+        )
+    )
+)
diff --git a/test/code/parser/stmt/class/readonlyAsClassName.test b/test/code/parser/stmt/class/readonlyAsClassName.test
index 7d3010dd..3bf53f77 100644
--- a/test/code/parser/stmt/class/readonlyAsClassName.test
+++ b/test/code/parser/stmt/class/readonlyAsClassName.test
@@ -25,4 +25,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/readonlyMethod.test b/test/code/parser/stmt/class/readonlyMethod.test
index 3b252260..c509d11c 100644
--- a/test/code/parser/stmt/class/readonlyMethod.test
+++ b/test/code/parser/stmt/class/readonlyMethod.test
@@ -31,4 +31,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/shortEchoAsIdentifier.test b/test/code/parser/stmt/class/shortEchoAsIdentifier.test
index 90d05c7e..4ac05642 100644
--- a/test/code/parser/stmt/class/shortEchoAsIdentifier.test
+++ b/test/code/parser/stmt/class/shortEchoAsIdentifier.test
@@ -23,9 +23,7 @@ array(
             0: Stmt_TraitUse(
                 traits: array(
                     0: Name(
-                        parts: array(
-                            0: T
-                        )
+                        name: T
                     )
                 )
                 adaptations: array(
diff --git a/test/code/parser/stmt/class/simple.test b/test/code/parser/stmt/class/simple.test
index fde02c33..c601f0cf 100644
--- a/test/code/parser/stmt/class/simple.test
+++ b/test/code/parser/stmt/class/simple.test
@@ -25,20 +25,14 @@ array(
             name: A
         )
         extends: Name(
-            parts: array(
-                0: B
-            )
+            name: B
         )
         implements: array(
             0: Name(
-                parts: array(
-                    0: C
-                )
+                name: C
             )
             1: Name(
-                parts: array(
-                    0: D
-                )
+                name: D
             )
         )
         stmts: array(
@@ -46,6 +40,7 @@ array(
                 attrGroups: array(
                 )
                 flags: 0
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -168,9 +163,7 @@ array(
                 params: array(
                 )
                 returnType: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 stmts: array(
                 )
diff --git a/test/code/parser/stmt/class/staticMethod.test b/test/code/parser/stmt/class/staticMethod.test
index 28b012c0..aabacbb8 100644
--- a/test/code/parser/stmt/class/staticMethod.test
+++ b/test/code/parser/stmt/class/staticMethod.test
@@ -196,4 +196,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/staticType.test b/test/code/parser/stmt/class/staticType.test
index 9d87f3b2..28dd8375 100644
--- a/test/code/parser/stmt/class/staticType.test
+++ b/test/code/parser/stmt/class/staticType.test
@@ -28,13 +28,11 @@ array(
                 params: array(
                 )
                 returnType: Name(
-                    parts: array(
-                        0: static
-                    )
+                    name: static
                 )
                 stmts: array(
                 )
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/trait.test b/test/code/parser/stmt/class/trait.test
index 4031ef24..f1702ca3 100644
--- a/test/code/parser/stmt/class/trait.test
+++ b/test/code/parser/stmt/class/trait.test
@@ -59,9 +59,7 @@ array(
             0: Stmt_TraitUse(
                 traits: array(
                     0: Name(
-                        parts: array(
-                            0: C
-                        )
+                        name: C
                     )
                 )
                 adaptations: array(
@@ -70,9 +68,7 @@ array(
             1: Stmt_TraitUse(
                 traits: array(
                     0: Name(
-                        parts: array(
-                            0: D
-                        )
+                        name: D
                     )
                 )
                 adaptations: array(
@@ -109,49 +105,35 @@ array(
             2: Stmt_TraitUse(
                 traits: array(
                     0: Name(
-                        parts: array(
-                            0: E
-                        )
+                        name: E
                     )
                     1: Name(
-                        parts: array(
-                            0: F
-                        )
+                        name: F
                     )
                     2: Name(
-                        parts: array(
-                            0: G
-                        )
+                        name: G
                     )
                 )
                 adaptations: array(
                     0: Stmt_TraitUseAdaptation_Precedence(
                         trait: Name(
-                            parts: array(
-                                0: E
-                            )
+                            name: E
                         )
                         method: Identifier(
                             name: a
                         )
                         insteadof: array(
                             0: Name(
-                                parts: array(
-                                    0: F
-                                )
+                                name: F
                             )
                             1: Name(
-                                parts: array(
-                                    0: G
-                                )
+                                name: G
                             )
                         )
                     )
                     1: Stmt_TraitUseAdaptation_Alias(
                         trait: Name(
-                            parts: array(
-                                0: E
-                            )
+                            name: E
                         )
                         method: Identifier(
                             name: b
@@ -163,9 +145,7 @@ array(
                     )
                     2: Stmt_TraitUseAdaptation_Alias(
                         trait: Name(
-                            parts: array(
-                                0: E
-                            )
+                            name: E
                         )
                         method: Identifier(
                             name: d
@@ -177,9 +157,7 @@ array(
                     )
                     3: Stmt_TraitUseAdaptation_Alias(
                         trait: Name(
-                            parts: array(
-                                0: E
-                            )
+                            name: E
                         )
                         method: Identifier(
                             name: f
@@ -191,4 +169,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/class/typedConstants.test b/test/code/parser/stmt/class/typedConstants.test
new file mode 100644
index 00000000..b44cb411
--- /dev/null
+++ b/test/code/parser/stmt/class/typedConstants.test
@@ -0,0 +1,118 @@
+Typed constants
+-----
+<?php
+class Test {
+    const int X = 1;
+    private const string Y = "a", Z = "b";
+    const array ARRAY = [];
+    const Foo|Bar|null FOO = null;
+}
+-----
+array(
+    0: Stmt_Class(
+        attrGroups: array(
+        )
+        flags: 0
+        name: Identifier(
+            name: Test
+        )
+        extends: null
+        implements: array(
+        )
+        stmts: array(
+            0: Stmt_ClassConst(
+                attrGroups: array(
+                )
+                flags: 0
+                type: Identifier(
+                    name: int
+                )
+                consts: array(
+                    0: Const(
+                        name: Identifier(
+                            name: X
+                        )
+                        value: Scalar_Int(
+                            value: 1
+                        )
+                    )
+                )
+            )
+            1: Stmt_ClassConst(
+                attrGroups: array(
+                )
+                flags: PRIVATE (4)
+                type: Identifier(
+                    name: string
+                )
+                consts: array(
+                    0: Const(
+                        name: Identifier(
+                            name: Y
+                        )
+                        value: Scalar_String(
+                            value: a
+                        )
+                    )
+                    1: Const(
+                        name: Identifier(
+                            name: Z
+                        )
+                        value: Scalar_String(
+                            value: b
+                        )
+                    )
+                )
+            )
+            2: Stmt_ClassConst(
+                attrGroups: array(
+                )
+                flags: 0
+                type: Identifier(
+                    name: array
+                )
+                consts: array(
+                    0: Const(
+                        name: Identifier(
+                            name: ARRAY
+                        )
+                        value: Expr_Array(
+                            items: array(
+                            )
+                        )
+                    )
+                )
+            )
+            3: Stmt_ClassConst(
+                attrGroups: array(
+                )
+                flags: 0
+                type: UnionType(
+                    types: array(
+                        0: Name(
+                            name: Foo
+                        )
+                        1: Name(
+                            name: Bar
+                        )
+                        2: Identifier(
+                            name: null
+                        )
+                    )
+                )
+                consts: array(
+                    0: Const(
+                        name: Identifier(
+                            name: FOO
+                        )
+                        value: Expr_ConstFetch(
+                            name: Name(
+                                name: null
+                            )
+                        )
+                    )
+                )
+            )
+        )
+    )
+)
diff --git a/test/code/parser/stmt/const.test b/test/code/parser/stmt/const.test
index 2e7a1ce2..958c4cfe 100644
--- a/test/code/parser/stmt/const.test
+++ b/test/code/parser/stmt/const.test
@@ -37,12 +37,10 @@ array(
                 )
                 value: Expr_ConstFetch(
                     name: Name(
-                        parts: array(
-                            0: E
-                        )
+                        name: E
                     )
                 )
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/controlFlow.test b/test/code/parser/stmt/controlFlow.test
index 94184f8f..be786f9a 100644
--- a/test/code/parser/stmt/controlFlow.test
+++ b/test/code/parser/stmt/controlFlow.test
@@ -56,4 +56,4 @@ array(
             name: label
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/echo.test b/test/code/parser/stmt/echo.test
index 1d03eae5..74241b0e 100644
--- a/test/code/parser/stmt/echo.test
+++ b/test/code/parser/stmt/echo.test
@@ -29,4 +29,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/builtinTypeDeclarations.test b/test/code/parser/stmt/function/builtinTypeDeclarations.test
index 3229b4df..64cbedcf 100644
--- a/test/code/parser/stmt/function/builtinTypeDeclarations.test
+++ b/test/code/parser/stmt/function/builtinTypeDeclarations.test
@@ -117,4 +117,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/byRef.test b/test/code/parser/stmt/function/byRef.test
index b4e4514b..ae01214c 100644
--- a/test/code/parser/stmt/function/byRef.test
+++ b/test/code/parser/stmt/function/byRef.test
@@ -56,4 +56,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/conditional.test b/test/code/parser/stmt/function/conditional.test
index 42f5fa20..50861ed5 100644
--- a/test/code/parser/stmt/function/conditional.test
+++ b/test/code/parser/stmt/function/conditional.test
@@ -10,9 +10,7 @@ array(
     0: Stmt_If(
         cond: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: true
-                )
+                name: true
             )
         )
         stmts: array(
@@ -34,4 +32,4 @@ array(
         )
         else: null
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/defaultValues.test b/test/code/parser/stmt/function/defaultValues.test
index a87057c9..952b64c4 100644
--- a/test/code/parser/stmt/function/defaultValues.test
+++ b/test/code/parser/stmt/function/defaultValues.test
@@ -35,9 +35,7 @@ array(
                 )
                 default: Expr_ConstFetch(
                     name: Name(
-                        parts: array(
-                            0: null
-                        )
+                        name: null
                     )
                 )
             )
@@ -67,9 +65,7 @@ array(
                 )
                 default: Expr_ClassConstFetch(
                     class: Name(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                     name: Identifier(
                         name: B
@@ -199,4 +195,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/disjointNormalFormTypes.test b/test/code/parser/stmt/function/disjointNormalFormTypes.test
index 39dc2613..3ad9503e 100644
--- a/test/code/parser/stmt/function/disjointNormalFormTypes.test
+++ b/test/code/parser/stmt/function/disjointNormalFormTypes.test
@@ -30,28 +30,20 @@ array(
                         0: IntersectionType(
                             types: array(
                                 0: Name(
-                                    parts: array(
-                                        0: A
-                                    )
+                                    name: A
                                 )
                                 1: Name(
-                                    parts: array(
-                                        0: B
-                                    )
+                                    name: B
                                 )
                             )
                         )
                         1: IntersectionType(
                             types: array(
                                 0: Name(
-                                    parts: array(
-                                        0: X
-                                    )
+                                    name: X
                                 )
                                 1: Name(
-                                    parts: array(
-                                        0: Y
-                                    )
+                                    name: Y
                                 )
                             )
                         )
@@ -75,21 +67,15 @@ array(
                         0: IntersectionType(
                             types: array(
                                 0: Name(
-                                    parts: array(
-                                        0: A
-                                    )
+                                    name: A
                                 )
                                 1: Name(
-                                    parts: array(
-                                        0: B
-                                    )
+                                    name: B
                                 )
                             )
                         )
                         1: Name(
-                            parts: array(
-                                0: C
-                            )
+                            name: C
                         )
                     )
                 )
@@ -121,28 +107,20 @@ array(
                         0: IntersectionType(
                             types: array(
                                 0: Name(
-                                    parts: array(
-                                        0: A
-                                    )
+                                    name: A
                                 )
                                 1: Name(
-                                    parts: array(
-                                        0: B
-                                    )
+                                    name: B
                                 )
                             )
                         )
                         1: IntersectionType(
                             types: array(
                                 0: Name(
-                                    parts: array(
-                                        0: X
-                                    )
+                                    name: X
                                 )
                                 1: Name(
-                                    parts: array(
-                                        0: Y
-                                    )
+                                    name: Y
                                 )
                             )
                         )
@@ -161,28 +139,20 @@ array(
                 0: IntersectionType(
                     types: array(
                         0: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         1: Name(
-                            parts: array(
-                                0: B
-                            )
+                            name: B
                         )
                     )
                 )
                 1: IntersectionType(
                     types: array(
                         0: Name(
-                            parts: array(
-                                0: X
-                            )
+                            name: X
                         )
                         1: Name(
-                            parts: array(
-                                0: Y
-                            )
+                            name: Y
                         )
                     )
                 )
diff --git a/test/code/parser/stmt/function/intersectionTypes.test b/test/code/parser/stmt/function/intersectionTypes.test
index 4a7c8fd2..c7a01f3b 100644
--- a/test/code/parser/stmt/function/intersectionTypes.test
+++ b/test/code/parser/stmt/function/intersectionTypes.test
@@ -27,14 +27,10 @@ array(
                 type: IntersectionType(
                     types: array(
                         0: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         1: Name(
-                            parts: array(
-                                0: B
-                            )
+                            name: B
                         )
                     )
                 )
@@ -64,14 +60,10 @@ array(
                 type: IntersectionType(
                     types: array(
                         0: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         1: Name(
-                            parts: array(
-                                0: B
-                            )
+                            name: B
                         )
                     )
                 )
@@ -86,14 +78,10 @@ array(
         returnType: IntersectionType(
             types: array(
                 0: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 1: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
             )
         )
diff --git a/test/code/parser/stmt/function/neverType.test b/test/code/parser/stmt/function/neverType.test
index a504b89b..e23bcdbd 100644
--- a/test/code/parser/stmt/function/neverType.test
+++ b/test/code/parser/stmt/function/neverType.test
@@ -19,4 +19,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/nullFalseTrueTypes.test b/test/code/parser/stmt/function/nullFalseTrueTypes.test
index 45e18ec6..eba3e769 100644
--- a/test/code/parser/stmt/function/nullFalseTrueTypes.test
+++ b/test/code/parser/stmt/function/nullFalseTrueTypes.test
@@ -48,9 +48,7 @@ array(
         params: array(
         )
         returnType: Name(
-            parts: array(
-                0: true
-            )
+            name: true
         )
         stmts: array(
         )
@@ -110,4 +108,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/nullableTypes.test b/test/code/parser/stmt/function/nullableTypes.test
index 4f4f6b41..a2c2e9aa 100644
--- a/test/code/parser/stmt/function/nullableTypes.test
+++ b/test/code/parser/stmt/function/nullableTypes.test
@@ -20,9 +20,7 @@ array(
                 flags: 0
                 type: NullableType(
                     type: Name(
-                        parts: array(
-                            0: Foo
-                        )
+                        name: Foo
                     )
                 )
                 byRef: false
@@ -51,12 +49,10 @@ array(
         )
         returnType: NullableType(
             type: Name(
-                parts: array(
-                    0: Baz
-                )
+                name: Baz
             )
         )
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/parameters_trailing_comma.test b/test/code/parser/stmt/function/parameters_trailing_comma.test
index dce1878b..f80ba1f4 100644
--- a/test/code/parser/stmt/function/parameters_trailing_comma.test
+++ b/test/code/parser/stmt/function/parameters_trailing_comma.test
@@ -126,4 +126,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/readonlyFunction.test b/test/code/parser/stmt/function/readonlyFunction.test
index c96d4835..0ce05d74 100644
--- a/test/code/parser/stmt/function/readonlyFunction.test
+++ b/test/code/parser/stmt/function/readonlyFunction.test
@@ -21,9 +21,7 @@ array(
     1: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: readonly
-                )
+                name: readonly
             )
             args: array(
             )
diff --git a/test/code/parser/stmt/function/returnTypes.test b/test/code/parser/stmt/function/returnTypes.test
index 96e43a2a..ae1c9d9c 100644
--- a/test/code/parser/stmt/function/returnTypes.test
+++ b/test/code/parser/stmt/function/returnTypes.test
@@ -61,12 +61,9 @@ array(
         params: array(
         )
         returnType: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
+            name: Foo\Bar
         )
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/specialVars.test b/test/code/parser/stmt/function/specialVars.test
index 79b204c5..462e0652 100644
--- a/test/code/parser/stmt/function/specialVars.test
+++ b/test/code/parser/stmt/function/specialVars.test
@@ -56,4 +56,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/typeDeclarations.test b/test/code/parser/stmt/function/typeDeclarations.test
index b3102a13..07ce52e4 100644
--- a/test/code/parser/stmt/function/typeDeclarations.test
+++ b/test/code/parser/stmt/function/typeDeclarations.test
@@ -58,9 +58,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: E
-                    )
+                    name: E
                 )
                 byRef: false
                 variadic: false
@@ -74,4 +72,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/typeVersions.test b/test/code/parser/stmt/function/typeVersions.test
index 6f8b4b47..54d21b0e 100644
--- a/test/code/parser/stmt/function/typeVersions.test
+++ b/test/code/parser/stmt/function/typeVersions.test
@@ -26,9 +26,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: bool
-                    )
+                    name: bool
                 )
                 byRef: false
                 variadic: false
@@ -42,9 +40,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: int
-                    )
+                    name: int
                 )
                 byRef: false
                 variadic: false
@@ -58,9 +54,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: float
-                    )
+                    name: float
                 )
                 byRef: false
                 variadic: false
@@ -74,9 +68,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: string
-                    )
+                    name: string
                 )
                 byRef: false
                 variadic: false
@@ -90,9 +82,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: iterable
-                    )
+                    name: iterable
                     comments: array(
                         0: // PHP 7.0
                     )
@@ -112,9 +102,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: object
-                    )
+                    name: object
                     comments: array(
                         0: // PHP 7.1
                     )
@@ -134,9 +122,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: mixed
-                    )
+                    name: mixed
                     comments: array(
                         0: // PHP 7.2
                     )
@@ -156,9 +142,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: null
-                    )
+                    name: null
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -178,9 +162,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: false
-                    )
+                    name: false
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -197,9 +179,7 @@ array(
             )
         )
         returnType: Name(
-            parts: array(
-                0: void
-            )
+            name: void
         )
         stmts: array(
         )
@@ -214,9 +194,7 @@ array(
         params: array(
         )
         returnType: Name(
-            parts: array(
-                0: never
-            )
+            name: never
         )
         stmts: array(
         )
@@ -313,9 +291,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: iterable
-                    )
+                    name: iterable
                     comments: array(
                         0: // PHP 7.0
                     )
@@ -335,9 +311,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: object
-                    )
+                    name: object
                     comments: array(
                         0: // PHP 7.1
                     )
@@ -357,9 +331,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: mixed
-                    )
+                    name: mixed
                     comments: array(
                         0: // PHP 7.2
                     )
@@ -379,9 +351,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: null
-                    )
+                    name: null
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -401,9 +371,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: false
-                    )
+                    name: false
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -420,9 +388,7 @@ array(
             )
         )
         returnType: Name(
-            parts: array(
-                0: void
-            )
+            name: void
         )
         stmts: array(
         )
@@ -437,9 +403,7 @@ array(
         params: array(
         )
         returnType: Name(
-            parts: array(
-                0: never
-            )
+            name: never
         )
         stmts: array(
         )
@@ -556,9 +520,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: object
-                    )
+                    name: object
                     comments: array(
                         0: // PHP 7.1
                     )
@@ -578,9 +540,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: mixed
-                    )
+                    name: mixed
                     comments: array(
                         0: // PHP 7.2
                     )
@@ -600,9 +560,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: null
-                    )
+                    name: null
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -622,9 +580,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: false
-                    )
+                    name: false
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -656,9 +612,7 @@ array(
         params: array(
         )
         returnType: Name(
-            parts: array(
-                0: never
-            )
+            name: never
         )
         stmts: array(
         )
@@ -795,9 +749,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: mixed
-                    )
+                    name: mixed
                     comments: array(
                         0: // PHP 7.2
                     )
@@ -817,9 +769,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: null
-                    )
+                    name: null
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -839,9 +789,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: false
-                    )
+                    name: false
                     comments: array(
                         0: // PHP 8.0
                     )
@@ -873,9 +821,7 @@ array(
         params: array(
         )
         returnType: Name(
-            parts: array(
-                0: never
-            )
+            name: never
         )
         stmts: array(
         )
@@ -1084,9 +1030,7 @@ array(
         params: array(
         )
         returnType: Name(
-            parts: array(
-                0: never
-            )
+            name: never
         )
         stmts: array(
         )
@@ -1308,4 +1252,4 @@ array(
             0: // PHP 8.1
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/unionTypes.test b/test/code/parser/stmt/function/unionTypes.test
index f82724ed..5be08e24 100644
--- a/test/code/parser/stmt/function/unionTypes.test
+++ b/test/code/parser/stmt/function/unionTypes.test
@@ -27,9 +27,7 @@ array(
                 type: UnionType(
                     types: array(
                         0: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         1: Identifier(
                             name: iterable
@@ -65,14 +63,10 @@ array(
                 type: UnionType(
                     types: array(
                         0: Name(
-                            parts: array(
-                                0: A
-                            )
+                            name: A
                         )
                         1: Name(
-                            parts: array(
-                                0: B
-                            )
+                            name: B
                         )
                     )
                 )
diff --git a/test/code/parser/stmt/function/variadic.test b/test/code/parser/stmt/function/variadic.test
index 245c0876..76cbb862 100644
--- a/test/code/parser/stmt/function/variadic.test
+++ b/test/code/parser/stmt/function/variadic.test
@@ -106,9 +106,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: Type
-                    )
+                    name: Type
                 )
                 byRef: false
                 variadic: true
@@ -147,9 +145,7 @@ array(
                 )
                 flags: 0
                 type: Name(
-                    parts: array(
-                        0: Type
-                    )
+                    name: Type
                 )
                 byRef: true
                 variadic: true
@@ -163,4 +159,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/function/variadicDefaultValue.test b/test/code/parser/stmt/function/variadicDefaultValue.test
index 1bd85401..45b7df69 100644
--- a/test/code/parser/stmt/function/variadicDefaultValue.test
+++ b/test/code/parser/stmt/function/variadicDefaultValue.test
@@ -33,4 +33,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/generator/basic.test b/test/code/parser/stmt/generator/basic.test
index 57fc3a4b..098e2259 100644
--- a/test/code/parser/stmt/generator/basic.test
+++ b/test/code/parser/stmt/generator/basic.test
@@ -213,9 +213,7 @@ array(
             12: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: func
-                        )
+                        name: func
                         comments: array(
                             0: // yield in function calls
                         )
@@ -267,9 +265,7 @@ array(
             14: Stmt_Expression(
                 expr: Expr_New(
                     class: Name(
-                        parts: array(
-                            0: Foo
-                        )
+                        name: Foo
                     )
                     args: array(
                         0: Arg(
@@ -321,4 +317,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/generator/yieldPrecedence.test b/test/code/parser/stmt/generator/yieldPrecedence.test
index 8d8746d4..04593983 100644
--- a/test/code/parser/stmt/generator/yieldPrecedence.test
+++ b/test/code/parser/stmt/generator/yieldPrecedence.test
@@ -85,9 +85,7 @@ array(
             4: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
+                        name: var_dump
                     )
                     args: array(
                         0: Arg(
@@ -169,9 +167,7 @@ array(
             7: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
+                        name: var_dump
                     )
                     args: array(
                         0: Arg(
@@ -212,9 +208,7 @@ array(
             8: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: var_dump
-                        )
+                        name: var_dump
                     )
                     args: array(
                         0: Arg(
@@ -254,4 +248,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/generator/yieldUnaryPrecedence.test b/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
index e4759abe..172984f3 100644
--- a/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
+++ b/test/code/parser/stmt/generator/yieldUnaryPrecedence.test
@@ -55,4 +55,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/haltCompiler.test b/test/code/parser/stmt/haltCompiler.test
index 112946ea..995e7605 100644
--- a/test/code/parser/stmt/haltCompiler.test
+++ b/test/code/parser/stmt/haltCompiler.test
@@ -43,9 +43,7 @@ __halt_compiler();
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
             0: Stmt_Expression(
@@ -58,4 +56,4 @@ array(
     1: Stmt_HaltCompiler(
         remaining:
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/haltCompilerInvalidSyntax.test b/test/code/parser/stmt/haltCompilerInvalidSyntax.test
index 2884737d..9b121ecb 100644
--- a/test/code/parser/stmt/haltCompilerInvalidSyntax.test
+++ b/test/code/parser/stmt/haltCompilerInvalidSyntax.test
@@ -5,4 +5,4 @@ __halt_compiler()
 -----
 Syntax error, unexpected EOF, expecting ';' from 2:18 to 2:18
 array(
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/haltCompilerOffset.test b/test/code/parser/stmt/haltCompilerOffset.test
index b713dbcd..fc8b58da 100644
--- a/test/code/parser/stmt/haltCompilerOffset.test
+++ b/test/code/parser/stmt/haltCompilerOffset.test
@@ -10,18 +10,14 @@ array(
     0: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: var_dump
-                )
+                name: var_dump
             )
             args: array(
                 0: Arg(
                     name: null
                     value: Expr_ConstFetch(
                         name: Name(
-                            parts: array(
-                                0: __HALT_COMPILER_OFFSET__
-                            )
+                            name: __HALT_COMPILER_OFFSET__
                         )
                     )
                     byRef: false
@@ -34,4 +30,4 @@ array(
         remaining:
     Foo
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/haltCompilerOutermostScope.test b/test/code/parser/stmt/haltCompilerOutermostScope.test
index fddb6191..2f8a3f19 100644
--- a/test/code/parser/stmt/haltCompilerOutermostScope.test
+++ b/test/code/parser/stmt/haltCompilerOutermostScope.test
@@ -5,4 +5,4 @@ if (true) {
     __halt_compiler();
 }
 -----
-__HALT_COMPILER() can only be used from the outermost scope from 3:5 to 3:19
\ No newline at end of file
+__HALT_COMPILER() can only be used from the outermost scope from 3:5 to 3:19
diff --git a/test/code/parser/stmt/hashbang.test b/test/code/parser/stmt/hashbang.test
index 60eff652..11c45da6 100644
--- a/test/code/parser/stmt/hashbang.test
+++ b/test/code/parser/stmt/hashbang.test
@@ -23,4 +23,4 @@ array(
     2: Stmt_InlineHTML(
         value: #!/usr/bin/env php
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/if.test b/test/code/parser/stmt/if.test
index e054c897..53d2c830 100644
--- a/test/code/parser/stmt/if.test
+++ b/test/code/parser/stmt/if.test
@@ -100,4 +100,4 @@ array(
             0: // without else
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/inlineHTML.test b/test/code/parser/stmt/inlineHTML.test
index a7e543cf..6f23b666 100644
--- a/test/code/parser/stmt/inlineHTML.test
+++ b/test/code/parser/stmt/inlineHTML.test
@@ -30,4 +30,4 @@ array(
             name: d
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/loop/do.test b/test/code/parser/stmt/loop/do.test
index 76c80810..ca5bdf45 100644
--- a/test/code/parser/stmt/loop/do.test
+++ b/test/code/parser/stmt/loop/do.test
@@ -14,4 +14,4 @@ array(
             name: a
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/loop/for.test b/test/code/parser/stmt/loop/for.test
index 5d5edc26..a1214771 100644
--- a/test/code/parser/stmt/loop/for.test
+++ b/test/code/parser/stmt/loop/for.test
@@ -107,4 +107,4 @@ array(
             0: // alternative syntax
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/loop/foreach.test b/test/code/parser/stmt/loop/foreach.test
index 50400252..6bca655e 100644
--- a/test/code/parser/stmt/loop/foreach.test
+++ b/test/code/parser/stmt/loop/foreach.test
@@ -165,4 +165,4 @@ array(
             0: // alternative syntax
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/loop/while.test b/test/code/parser/stmt/loop/while.test
index 65f6b233..e8540fa7 100644
--- a/test/code/parser/stmt/loop/while.test
+++ b/test/code/parser/stmt/loop/while.test
@@ -22,4 +22,4 @@ array(
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/multiCatch.test b/test/code/parser/stmt/multiCatch.test
index 4d8fcabd..b420cb49 100644
--- a/test/code/parser/stmt/multiCatch.test
+++ b/test/code/parser/stmt/multiCatch.test
@@ -22,14 +22,10 @@ array(
             0: Stmt_Catch(
                 types: array(
                     0: Name(
-                        parts: array(
-                            0: X
-                        )
+                        name: X
                     )
                     1: Name(
-                        parts: array(
-                            0: Y
-                        )
+                        name: Y
                     )
                 )
                 var: Expr_Variable(
@@ -46,15 +42,10 @@ array(
             1: Stmt_Catch(
                 types: array(
                     0: Name_FullyQualified(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                     1: Name(
-                        parts: array(
-                            0: B
-                            1: C
-                        )
+                        name: B\C
                     )
                 )
                 var: Expr_Variable(
@@ -71,4 +62,4 @@ array(
         )
         finally: null
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/namespace/alias.test b/test/code/parser/stmt/namespace/alias.test
index cc158f13..572b9b30 100644
--- a/test/code/parser/stmt/namespace/alias.test
+++ b/test/code/parser/stmt/namespace/alias.test
@@ -23,10 +23,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: A
-                        1: B
-                    )
+                    name: A\B
                 )
                 alias: null
             )
@@ -38,10 +35,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
+                    name: C\D
                 )
                 alias: Identifier(
                     name: E
@@ -55,10 +49,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: F
-                        1: G
-                    )
+                    name: F\G
                 )
                 alias: Identifier(
                     name: H
@@ -67,9 +58,7 @@ array(
             1: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: J
-                    )
+                    name: J
                 )
                 alias: null
             )
@@ -81,9 +70,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 alias: null
             )
@@ -98,9 +85,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 alias: Identifier(
                     name: B
@@ -114,10 +99,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: foo
-                        1: bar
-                    )
+                    name: foo\bar
                 )
                 alias: null
             )
@@ -132,10 +114,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: foo
-                        1: bar
-                    )
+                    name: foo\bar
                 )
                 alias: Identifier(
                     name: baz
@@ -149,10 +128,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: foo
-                        1: BAR
-                    )
+                    name: foo\BAR
                 )
                 alias: null
             )
@@ -164,10 +140,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: foo
-                        1: BAR
-                    )
+                    name: foo\BAR
                 )
                 alias: Identifier(
                     name: BAZ
diff --git a/test/code/parser/stmt/namespace/braced.test b/test/code/parser/stmt/namespace/braced.test
index a057352f..9520b28a 100644
--- a/test/code/parser/stmt/namespace/braced.test
+++ b/test/code/parser/stmt/namespace/braced.test
@@ -12,18 +12,13 @@ namespace {
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
+            name: Foo\Bar
         )
         stmts: array(
             0: Stmt_Expression(
                 expr: Expr_ConstFetch(
                     name: Name(
-                        parts: array(
-                            0: foo
-                        )
+                        name: foo
                     )
                 )
             )
@@ -35,12 +30,10 @@ array(
             0: Stmt_Expression(
                 expr: Expr_ConstFetch(
                     name: Name(
-                        parts: array(
-                            0: bar
-                        )
+                        name: bar
                     )
                 )
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/namespace/commentAfterNamespace.test b/test/code/parser/stmt/namespace/commentAfterNamespace.test
index 3f379b73..30a07e73 100644
--- a/test/code/parser/stmt/namespace/commentAfterNamespace.test
+++ b/test/code/parser/stmt/namespace/commentAfterNamespace.test
@@ -7,9 +7,7 @@ namespace Foo {}
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: Foo
-            )
+            name: Foo
         )
         stmts: array(
         )
@@ -19,4 +17,4 @@ array(
             0: // Comment
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/namespace/groupUse.test b/test/code/parser/stmt/namespace/groupUse.test
index 17c8632d..0f0d67dd 100644
--- a/test/code/parser/stmt/namespace/groupUse.test
+++ b/test/code/parser/stmt/namespace/groupUse.test
@@ -12,17 +12,13 @@ array(
     0: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 alias: null
             )
@@ -31,27 +27,20 @@ array(
     1: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: B
-                        1: C
-                    )
+                    name: B\C
                 )
                 alias: null
             )
             1: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: D
-                    )
+                    name: D
                 )
                 alias: null
             )
@@ -60,28 +49,20 @@ array(
     2: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: A
-                1: B
-            )
+            name: A\B
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
+                    name: C\D
                 )
                 alias: null
             )
             1: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: E
-                    )
+                    name: E
                 )
                 alias: null
             )
@@ -90,27 +71,20 @@ array(
     3: Stmt_GroupUse(
         type: TYPE_FUNCTION (2)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: b
-                        1: c
-                    )
+                    name: b\c
                 )
                 alias: null
             )
             1: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: d
-                    )
+                    name: d
                 )
                 alias: null
             )
@@ -119,27 +93,20 @@ array(
     4: Stmt_GroupUse(
         type: TYPE_CONSTANT (3)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: B
-                        1: C
-                    )
+                    name: B\C
                 )
                 alias: null
             )
             1: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: D
-                    )
+                    name: D
                 )
                 alias: null
             )
@@ -148,38 +115,27 @@ array(
     5: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: A
-                1: B
-            )
+            name: A\B
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: C
-                        1: D
-                    )
+                    name: C\D
                 )
                 alias: null
             )
             1: UseItem(
                 type: TYPE_FUNCTION (2)
                 name: Name(
-                    parts: array(
-                        0: b
-                        1: c
-                    )
+                    name: b\c
                 )
                 alias: null
             )
             2: UseItem(
                 type: TYPE_CONSTANT (3)
                 name: Name(
-                    parts: array(
-                        0: D
-                    )
+                    name: D
                 )
                 alias: null
             )
diff --git a/test/code/parser/stmt/namespace/groupUseErrors.test b/test/code/parser/stmt/namespace/groupUseErrors.test
index 7c7f5c53..514c32cc 100644
--- a/test/code/parser/stmt/namespace/groupUseErrors.test
+++ b/test/code/parser/stmt/namespace/groupUseErrors.test
@@ -10,17 +10,13 @@ array(
     0: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: Foo
-            )
+            name: Foo
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: Bar
-                    )
+                    name: Bar
                 )
                 alias: null
             )
@@ -32,17 +28,13 @@ array(
     1: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: Bar
-            )
+            name: Bar
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: Foo
-                    )
+                    name: Foo
                 )
                 alias: null
             )
@@ -62,9 +54,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: Foo
-                    )
+                    name: Foo
                 )
                 alias: null
             )
@@ -76,18 +66,14 @@ array(
     1: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: Bar
-                )
+                name: Bar
             )
         )
     )
     2: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: Baz
-                )
+                name: Baz
             )
         )
     )
@@ -102,9 +88,7 @@ array(
     0: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name_FullyQualified(
-                parts: array(
-                    0: Bar
-                )
+                name: Bar
             )
         )
     )
diff --git a/test/code/parser/stmt/namespace/groupUsePositions.test b/test/code/parser/stmt/namespace/groupUsePositions.test
index 7e415b4c..7e072184 100644
--- a/test/code/parser/stmt/namespace/groupUsePositions.test
+++ b/test/code/parser/stmt/namespace/groupUsePositions.test
@@ -8,18 +8,13 @@ array(
     0: Stmt_GroupUse[2:1 - 2:17](
         type: TYPE_UNKNOWN (0)
         prefix: Name[2:5 - 2:11](
-            parts: array(
-                0: Foo
-                1: Bar
-            )
+            name: Foo\Bar
         )
         uses: array(
             0: UseItem[2:14 - 2:16](
                 type: TYPE_NORMAL (1)
                 name: Name[2:14 - 2:16](
-                    parts: array(
-                        0: Baz
-                    )
+                    name: Baz
                 )
                 alias: null
             )
diff --git a/test/code/parser/stmt/namespace/groupUseTrailingComma.test b/test/code/parser/stmt/namespace/groupUseTrailingComma.test
index 1b9032b0..03152a21 100644
--- a/test/code/parser/stmt/namespace/groupUseTrailingComma.test
+++ b/test/code/parser/stmt/namespace/groupUseTrailingComma.test
@@ -8,17 +8,13 @@ array(
     0: Stmt_GroupUse(
         type: TYPE_UNKNOWN (0)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_NORMAL (1)
                 name: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 alias: null
             )
@@ -27,17 +23,13 @@ array(
     1: Stmt_GroupUse(
         type: TYPE_FUNCTION (2)
         prefix: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         uses: array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: b
-                    )
+                    name: b
                 )
                 alias: null
             )
diff --git a/test/code/parser/stmt/namespace/invalidName.test b/test/code/parser/stmt/namespace/invalidName.test
index 6f132b3f..c457dd66 100644
--- a/test/code/parser/stmt/namespace/invalidName.test
+++ b/test/code/parser/stmt/namespace/invalidName.test
@@ -10,9 +10,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: A
-                    )
+                    name: A
                 )
                 alias: Identifier(
                     name: self
@@ -32,9 +30,7 @@ array(
             0: UseItem(
                 type: TYPE_UNKNOWN (0)
                 name: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 alias: Identifier(
                     name: PARENT
diff --git a/test/code/parser/stmt/namespace/mix.test b/test/code/parser/stmt/namespace/mix.test
index 4c557d45..ac89d0c9 100644
--- a/test/code/parser/stmt/namespace/mix.test
+++ b/test/code/parser/stmt/namespace/mix.test
@@ -12,9 +12,7 @@ Cannot mix bracketed namespace declarations with unbracketed namespace declarati
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
             0: Stmt_Echo(
@@ -28,9 +26,7 @@ array(
     )
     1: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: B
-            )
+            name: B
         )
         stmts: array(
             0: Stmt_Echo(
@@ -63,9 +59,7 @@ Cannot mix bracketed namespace declarations with unbracketed namespace declarati
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
             0: Stmt_Echo(
@@ -86,9 +80,7 @@ array(
     )
     2: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: B
-            )
+            name: B
         )
         stmts: array(
             0: Stmt_Echo(
diff --git a/test/code/parser/stmt/namespace/name.test b/test/code/parser/stmt/namespace/name.test
index 9a5babb3..b539f41a 100644
--- a/test/code/parser/stmt/namespace/name.test
+++ b/test/code/parser/stmt/namespace/name.test
@@ -11,40 +11,29 @@ array(
     0: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: A
-                )
+                name: A
             )
         )
     )
     1: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name(
-                parts: array(
-                    0: A
-                    1: B
-                )
+                name: A\B
             )
         )
     )
     2: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name_FullyQualified(
-                parts: array(
-                    0: A
-                    1: B
-                )
+                name: A\B
             )
         )
     )
     3: Stmt_Expression(
         expr: Expr_ConstFetch(
             name: Name_Relative(
-                parts: array(
-                    0: A
-                    1: B
-                )
+                name: A\B
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/namespace/nested.test b/test/code/parser/stmt/namespace/nested.test
index 840daffe..5efc67b5 100644
--- a/test/code/parser/stmt/namespace/nested.test
+++ b/test/code/parser/stmt/namespace/nested.test
@@ -11,20 +11,16 @@ Namespace declarations cannot be nested from 3:5 to 5:5
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
             0: Stmt_Namespace(
                 name: Name(
-                    parts: array(
-                        0: B
-                    )
+                    name: B
                 )
                 stmts: array(
                 )
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/namespace/notBraced.test b/test/code/parser/stmt/namespace/notBraced.test
index aa34fc5c..f31f9156 100644
--- a/test/code/parser/stmt/namespace/notBraced.test
+++ b/test/code/parser/stmt/namespace/notBraced.test
@@ -11,18 +11,13 @@ bar;
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: Foo
-                1: Bar
-            )
+            name: Foo\Bar
         )
         stmts: array(
             0: Stmt_Expression(
                 expr: Expr_ConstFetch(
                     name: Name(
-                        parts: array(
-                            0: foo
-                        )
+                        name: foo
                     )
                 )
             )
@@ -30,20 +25,16 @@ array(
     )
     1: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: Bar
-            )
+            name: Bar
         )
         stmts: array(
             0: Stmt_Expression(
                 expr: Expr_ConstFetch(
                     name: Name(
-                        parts: array(
-                            0: bar
-                        )
+                        name: bar
                     )
                 )
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/namespace/nsAfterHashbang.test b/test/code/parser/stmt/namespace/nsAfterHashbang.test
index 6d452538..9d392f17 100644
--- a/test/code/parser/stmt/namespace/nsAfterHashbang.test
+++ b/test/code/parser/stmt/namespace/nsAfterHashbang.test
@@ -12,11 +12,9 @@ array(
     )
     1: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/namespace/outsideStmt.test b/test/code/parser/stmt/namespace/outsideStmt.test
index bfd5aa16..4f3303d5 100644
--- a/test/code/parser/stmt/namespace/outsideStmt.test
+++ b/test/code/parser/stmt/namespace/outsideStmt.test
@@ -25,9 +25,7 @@ array(
     )
     1: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: B
-            )
+            name: B
         )
         stmts: array(
         )
@@ -50,9 +48,7 @@ array(
     )
     1: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: Foo
-            )
+            name: Foo
         )
         stmts: array(
         )
diff --git a/test/code/parser/stmt/namespace/outsideStmtInvalid.test b/test/code/parser/stmt/namespace/outsideStmtInvalid.test
index 79a9c21e..77b8f5c1 100644
--- a/test/code/parser/stmt/namespace/outsideStmtInvalid.test
+++ b/test/code/parser/stmt/namespace/outsideStmtInvalid.test
@@ -23,9 +23,7 @@ array(
     )
     2: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
         )
@@ -40,9 +38,7 @@ No code may exist outside of namespace {} from 3:1 to 3:7
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
         )
@@ -66,9 +62,7 @@ No code may exist outside of namespace {} from 3:1 to 3:17
 array(
     0: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: A
-            )
+            name: A
         )
         stmts: array(
         )
@@ -89,9 +83,7 @@ array(
     2: Stmt_Expression(
         expr: Expr_FuncCall(
             name: Name(
-                parts: array(
-                    0: foo
-                )
+                name: foo
             )
             args: array(
             )
@@ -99,9 +91,7 @@ array(
     )
     3: Stmt_Namespace(
         name: Name(
-            parts: array(
-                0: B
-            )
+            name: B
         )
         stmts: array(
         )
diff --git a/test/code/parser/stmt/newInInitializer.test b/test/code/parser/stmt/newInInitializer.test
index 7ee1574b..74b43fd1 100644
--- a/test/code/parser/stmt/newInInitializer.test
+++ b/test/code/parser/stmt/newInInitializer.test
@@ -23,9 +23,7 @@ array(
                 )
                 value: Expr_New(
                     class: Name(
-                        parts: array(
-                            0: Foo
-                        )
+                        name: Foo
                     )
                     args: array(
                     )
@@ -53,9 +51,7 @@ array(
                 )
                 default: Expr_New(
                     class: Name(
-                        parts: array(
-                            0: Foo
-                        )
+                        name: Foo
                     )
                     args: array(
                     )
@@ -72,9 +68,7 @@ array(
                         )
                         default: Expr_New(
                             class: Name(
-                                parts: array(
-                                    0: Foo
-                                )
+                                name: Foo
                             )
                             args: array(
                             )
@@ -90,18 +84,14 @@ array(
                 attrs: array(
                     0: Attribute(
                         name: Name(
-                            parts: array(
-                                0: Attr
-                            )
+                            name: Attr
                         )
                         args: array(
                             0: Arg(
                                 name: null
                                 value: Expr_New(
                                     class: Name(
-                                        parts: array(
-                                            0: Foo
-                                        )
+                                        name: Foo
                                     )
                                     args: array(
                                     )
@@ -126,6 +116,7 @@ array(
                 attrGroups: array(
                 )
                 flags: 0
+                type: null
                 consts: array(
                     0: Const(
                         name: Identifier(
@@ -133,9 +124,7 @@ array(
                         )
                         value: Expr_New(
                             class: Name(
-                                parts: array(
-                                    0: Foo
-                                )
+                                name: Foo
                             )
                             args: array(
                             )
@@ -155,9 +144,7 @@ array(
                         )
                         default: Expr_New(
                             class: Name(
-                                parts: array(
-                                    0: Foo
-                                )
+                                name: Foo
                             )
                             args: array(
                             )
diff --git a/test/code/parser/stmt/switch.test b/test/code/parser/stmt/switch.test
index 8316b52c..8be9c7f4 100644
--- a/test/code/parser/stmt/switch.test
+++ b/test/code/parser/stmt/switch.test
@@ -78,4 +78,4 @@ array(
         cases: array(
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/tryCatch.test b/test/code/parser/stmt/tryCatch.test
index 8f88f4a3..20b3672f 100644
--- a/test/code/parser/stmt/tryCatch.test
+++ b/test/code/parser/stmt/tryCatch.test
@@ -27,9 +27,7 @@ array(
             0: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: doTry
-                        )
+                        name: doTry
                     )
                     args: array(
                     )
@@ -40,9 +38,7 @@ array(
             0: Stmt_Catch(
                 types: array(
                     0: Name(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                 )
                 var: Expr_Variable(
@@ -52,9 +48,7 @@ array(
                     0: Stmt_Expression(
                         expr: Expr_FuncCall(
                             name: Name(
-                                parts: array(
-                                    0: doCatchA
-                                )
+                                name: doCatchA
                             )
                             args: array(
                             )
@@ -65,9 +59,7 @@ array(
             1: Stmt_Catch(
                 types: array(
                     0: Name(
-                        parts: array(
-                            0: B
-                        )
+                        name: B
                     )
                 )
                 var: Expr_Variable(
@@ -77,9 +69,7 @@ array(
                     0: Stmt_Expression(
                         expr: Expr_FuncCall(
                             name: Name(
-                                parts: array(
-                                    0: doCatchB
-                                )
+                                name: doCatchB
                             )
                             args: array(
                             )
@@ -93,9 +83,7 @@ array(
                 0: Stmt_Expression(
                     expr: Expr_FuncCall(
                         name: Name(
-                            parts: array(
-                                0: doFinally
-                            )
+                            name: doFinally
                         )
                         args: array(
                         )
@@ -111,9 +99,7 @@ array(
             0: Stmt_Catch(
                 types: array(
                     0: Name(
-                        parts: array(
-                            0: A
-                        )
+                        name: A
                     )
                 )
                 var: Expr_Variable(
@@ -141,4 +127,4 @@ array(
             0: // no catch
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/tryCatch_without_variable.test b/test/code/parser/stmt/tryCatch_without_variable.test
index 2efd8e1a..6a030b1f 100644
--- a/test/code/parser/stmt/tryCatch_without_variable.test
+++ b/test/code/parser/stmt/tryCatch_without_variable.test
@@ -16,9 +16,7 @@ array(
             0: Stmt_Catch(
                 types: array(
                     0: Name(
-                        parts: array(
-                            0: Exception
-                        )
+                        name: Exception
                     )
                 )
                 var: null
@@ -28,4 +26,4 @@ array(
         )
         finally: null
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/tryWithoutCatch.test b/test/code/parser/stmt/tryWithoutCatch.test
index 5650d80a..76f92cc3 100644
--- a/test/code/parser/stmt/tryWithoutCatch.test
+++ b/test/code/parser/stmt/tryWithoutCatch.test
@@ -13,9 +13,7 @@ array(
             0: Stmt_Expression(
                 expr: Expr_FuncCall(
                     name: Name(
-                        parts: array(
-                            0: foo
-                        )
+                        name: foo
                     )
                     args: array(
                     )
@@ -26,4 +24,4 @@ array(
         )
         finally: null
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/parser/stmt/unset.test b/test/code/parser/stmt/unset.test
index c69679ef..412e6d65 100644
--- a/test/code/parser/stmt/unset.test
+++ b/test/code/parser/stmt/unset.test
@@ -23,4 +23,4 @@ array(
             )
         )
     )
-)
\ No newline at end of file
+)
diff --git a/test/code/prettyPrinter/expr/anonymousClass.test b/test/code/prettyPrinter/expr/anonymousClass.test
index 1f245171..c011179a 100644
--- a/test/code/prettyPrinter/expr/anonymousClass.test
+++ b/test/code/prettyPrinter/expr/anonymousClass.test
@@ -10,6 +10,7 @@ new class($a) extends A {
         $this->a = $a;
     }
 };
+new readonly class {};
 -----
 new class
 {
@@ -25,3 +26,6 @@ new class($a) extends A
         $this->a = $a;
     }
 };
+new readonly class
+{
+};
diff --git a/test/code/prettyPrinter/stmt/class_const.test b/test/code/prettyPrinter/stmt/class_const.test
index c14ed9ef..db72f323 100644
--- a/test/code/prettyPrinter/stmt/class_const.test
+++ b/test/code/prettyPrinter/stmt/class_const.test
@@ -7,7 +7,7 @@ class Foo
     const A = 1, B = 2;
     public const C = 3, D = 4;
     protected const E = 5, F = 6;
-    private const G = 7, H = 8;
+    private const int G = 7, H = 8;
 }
 -----
 class Foo
@@ -15,5 +15,5 @@ class Foo
     const A = 1, B = 2;
     public const C = 3, D = 4;
     protected const E = 5, F = 6;
-    private const G = 7, H = 8;
-}
\ No newline at end of file
+    private const int G = 7, H = 8;
+}
diff --git a/test/code/prettyPrinter/stmt/if.test b/test/code/prettyPrinter/stmt/if.test
index 8debb2ec..ed850e6d 100644
--- a/test/code/prettyPrinter/stmt/if.test
+++ b/test/code/prettyPrinter/stmt/if.test
@@ -6,11 +6,13 @@ if ($expr) {
 
 } elseif ($expr2) {
 
-} else {
+} else if ($expr3) {
 
+} else {
 }
 -----
 if ($expr) {
 } elseif ($expr2) {
+} else if ($expr3) {
 } else {
-}
\ No newline at end of file
+}
diff --git a/test_old/run.php b/test_old/run.php
index 7eb95662..e76c350b 100644
--- a/test_old/run.php
+++ b/test_old/run.php
@@ -107,6 +107,8 @@ switch ($testType) {
 # whitespace in namespaced name
 | Zend.tests.bug55086
 | Zend.tests.grammar.regression_010
+# not worth emulating on old PHP versions
+| Zend.tests.type_declarations.intersection_types.parsing_comment
 )\.phpt$~x', $file)) {
                 return null;
             }
diff --git a/tools/fuzzing/target.php b/tools/fuzzing/target.php
index 1057a493..f876727a 100644
--- a/tools/fuzzing/target.php
+++ b/tools/fuzzing/target.php
@@ -5,6 +5,7 @@
 use PhpParser\Node\Expr;
 use PhpParser\Node\Scalar;
 use PhpParser\Node\Stmt;
+use PhpParser\NodeVisitor;
 
 if (class_exists(PhpParser\Parser\Php7::class)) {
     echo "The PHP-Parser target can only be used with php-fuzzer.phar,\n";
@@ -51,7 +52,7 @@ $visitor = new class extends PhpParser\NodeVisitorAbstract {
     public function leaveNode(PhpParser\Node $node) {
         // We don't precisely preserve nop statements.
         if ($node instanceof Stmt\Nop) {
-            return PhpParser\NodeTraverser::REMOVE_NODE;
+            return NodeVisitor::REMOVE_NODE;
         }
 
         // We don't precisely preserve redundant trailing commas in array destructuring.

More details

Full run details

Historical runs