From 11e2dcd96c830ee934fa7b0243f4d67d8a8821ab Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 19 May 2023 22:17:09 +0200 Subject: [PATCH 01/29] Add makeReadonly() to param builder --- lib/PhpParser/Builder/Param.php | 17 ++++++++++++++--- test/PhpParser/Builder/ParamTest.php | 12 ++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/PhpParser/Builder/Param.php b/lib/PhpParser/Builder/Param.php index f86d2ac06b..69f353326a 100644 --- a/lib/PhpParser/Builder/Param.php +++ b/lib/PhpParser/Builder/Param.php @@ -98,7 +98,7 @@ public function makeVariadic() { } /** - * Makes the parameter public. + * Makes the (promoted) parameter public. * * @return $this The builder instance (for fluid interface) */ @@ -109,7 +109,7 @@ public function makePublic() { } /** - * Makes the parameter protected. + * Makes the (promoted) parameter protected. * * @return $this The builder instance (for fluid interface) */ @@ -120,7 +120,7 @@ public function makeProtected() { } /** - * Makes the parameter private. + * Makes the (promoted) parameter private. * * @return $this The builder instance (for fluid interface) */ @@ -130,6 +130,17 @@ public function makePrivate() { return $this; } + /** + * Makes the (promoted) parameter readonly. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeReadonly() { + $this->flags = BuilderHelpers::addModifier($this->flags, Node\Stmt\Class_::MODIFIER_READONLY); + + return $this; + } + /** * Adds an attribute group. * diff --git a/test/PhpParser/Builder/ParamTest.php b/test/PhpParser/Builder/ParamTest.php index bbee164d32..7c6ca4f180 100644 --- a/test/PhpParser/Builder/ParamTest.php +++ b/test/PhpParser/Builder/ParamTest.php @@ -241,6 +241,18 @@ public function testMakePrivate() { ); } + public function testMakeReadonly() { + $node = $this->createParamBuilder('test') + ->makeReadonly() + ->getNode() + ; + + $this->assertEquals( + new Node\Param(new Expr\Variable('test'), null, null, false, false, [], Node\Stmt\Class_::MODIFIER_READONLY), + $node + ); + } + public function testAddAttribute() { $attribute = new Attribute( new Name('Attr'), From 11e2663a5bc9db5d714eedb4277ee300403b4a9e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 19 May 2023 22:19:25 +0200 Subject: [PATCH 02/29] Release PHP-Parser 4.15.5 --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0543121c6..e01233dca0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +Version 4.15.5 (2023-05-19) +--------------------------- + +### Added + +* Added `makePrivate()`, `makeProtected()`, `makePublic()` and `makeReadonly()` methods to + `Builder\Param` to allow the creation of promoted parameters. + Version 4.15.4 (2023-03-05) --------------------------- From ba788aa98b9f20ebe2bfdbaec152eca69636943d Mon Sep 17 00:00:00 2001 From: PavelSPN <33983132+PavelSPN@users.noreply.github.com> Date: Fri, 19 May 2023 22:26:12 +0200 Subject: [PATCH 03/29] Remove redundant parameter Closes #920. --- grammar/php5.y | 2 +- grammar/php7.y | 2 +- lib/PhpParser/Parser/Php5.php | 2 +- lib/PhpParser/Parser/Php7.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/grammar/php5.y b/grammar/php5.y index 2920deadd1..77e4fb7ede 100644 --- a/grammar/php5.y +++ b/grammar/php5.y @@ -1008,7 +1008,7 @@ array_pair: | expr { $$ = Expr\ArrayItem[$1, null, false]; } | expr T_DOUBLE_ARROW ampersand variable { $$ = Expr\ArrayItem[$4, $1, true]; } | ampersand variable { $$ = Expr\ArrayItem[$2, null, true]; } - | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; } + | T_ELLIPSIS expr { $$ = new Expr\ArrayItem($2, null, false, attributes(), true); } ; encaps_list: diff --git a/grammar/php7.y b/grammar/php7.y index fc7862c375..2d65d484d0 100644 --- a/grammar/php7.y +++ b/grammar/php7.y @@ -1194,7 +1194,7 @@ array_pair: | expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; } | expr T_DOUBLE_ARROW ampersand variable { $$ = Expr\ArrayItem[$4, $1, true]; } | expr T_DOUBLE_ARROW list_expr { $$ = Expr\ArrayItem[$3, $1, false]; } - | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; } + | T_ELLIPSIS expr { $$ = new Expr\ArrayItem($2, null, false, attributes(), true); } | /* empty */ { $$ = null; } ; diff --git a/lib/PhpParser/Parser/Php5.php b/lib/PhpParser/Parser/Php5.php index 351db9ed08..a43067108b 100644 --- a/lib/PhpParser/Parser/Php5.php +++ b/lib/PhpParser/Parser/Php5.php @@ -2627,7 +2627,7 @@ protected function initReduceCallbacks() { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 552 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true); }, 553 => function ($stackPos) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php index c6b9abd022..cede4419db 100644 --- a/lib/PhpParser/Parser/Php7.php +++ b/lib/PhpParser/Parser/Php7.php @@ -2818,7 +2818,7 @@ protected function initReduceCallbacks() { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 592 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true); }, 593 => function ($stackPos) { $this->semValue = null; From c9e5a13d68486e9fd75f9be1b4639644e54e7f4f Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 21 May 2023 21:22:47 +0200 Subject: [PATCH 04/29] Add Name::getParts(), deprecate Name::$parts In preparation for switching this to a plain string in PHP-Parser 5, deprecate direct access to the property and provide an API that will work on both versions. --- lib/PhpParser/Node/Name.php | 14 +++++++++++++- test/PhpParser/Node/NameTest.php | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/PhpParser/Node/Name.php b/lib/PhpParser/Node/Name.php index 17bd1c0f7e..f0a564ff0b 100644 --- a/lib/PhpParser/Node/Name.php +++ b/lib/PhpParser/Node/Name.php @@ -6,7 +6,10 @@ class Name extends NodeAbstract { - /** @var string[] Parts of the name */ + /** + * @var string[] Parts of the name + * @deprecated Use getParts() instead + */ public $parts; private static $specialClassNames = [ @@ -30,6 +33,15 @@ public function getSubNodeNames() : array { return ['parts']; } + /** + * Get parts of name (split by the namespace separator). + * + * @return string[] Parts of name + */ + public function getParts(): array { + return $this->parts; + } + /** * Gets the first part of the name, i.e. everything before the first namespace separator. * diff --git a/test/PhpParser/Node/NameTest.php b/test/PhpParser/Node/NameTest.php index 5329e2fb1a..cf52edbe11 100644 --- a/test/PhpParser/Node/NameTest.php +++ b/test/PhpParser/Node/NameTest.php @@ -19,10 +19,12 @@ 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() { From 1d0748ad35201d483816634dd4bfe55a6f26d857 Mon Sep 17 00:00:00 2001 From: Danny van der Sluijs Date: Tue, 13 Jun 2023 13:37:22 +0200 Subject: [PATCH 05/29] Update main.yml to use GitHub Actions V3 Updates the GitHub Actions from V2 to V3 --- .github/workflows/main.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ee5ea9188b..23ed339bcd 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: name: "PHP 7.0 Unit Tests" steps: - name: "Checkout" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: @@ -43,7 +43,7 @@ jobs: - "8.2" steps: - name: "Checkout" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: @@ -59,7 +59,7 @@ jobs: name: "PHP 7.3 Code on PHP 8.0 Integration Tests" steps: - name: "Checkout" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: @@ -75,7 +75,7 @@ jobs: name: "PHP 8.1 Code on PHP 7.0 Integration Tests" steps: - name: "Checkout" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: From 19526a33fb561ef417e822e85f08a00db4059c17 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 25 Jun 2023 16:52:30 +0200 Subject: [PATCH 06/29] Release PHP-Parser 4.16.0 --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e01233dca0..d384923240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +Version 4.16.0 (2023-06-25) +--------------------------- + +### Added + +* Added `Name::getParts()` method for forward-compatibility with PHP-Parser 5. + +### Deprecated + +* Deprecated direct access to `Name::$parts`, which will be removed in PHP-Parser 5. + Version 4.15.5 (2023-05-19) --------------------------- From 73ccbabbe74af9a3b539774164247f728f47330d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 20 May 2023 19:14:49 +0200 Subject: [PATCH 07/29] Add support for typed constants RFC: https://wiki.php.net/rfc/typed_class_constants --- grammar/php7.y | 8 +- lib/PhpParser/Builder/ClassConst.php | 18 +- lib/PhpParser/Node/Stmt/ClassConst.php | 19 +- lib/PhpParser/Parser/Php7.php | 2079 +++++++++-------- lib/PhpParser/PrettyPrinter/Standard.php | 4 +- lib/PhpParser/PrettyPrinterAbstract.php | 2 + test/PhpParser/Builder/ClassConstTest.php | 12 + .../insertionOfNullable.test | 9 + .../formatPreservation/removalViaNull.test | 10 + test/code/parser/errorHandling/recovery.test | 2 + test/code/parser/semiReserved.test | 2 + test/code/parser/stmt/class/anonymous.test | 1 + .../stmt/class/constModifierErrors.test | 6 +- .../parser/stmt/class/constModifiers.test | 7 +- test/code/parser/stmt/class/simple.test | 1 + .../parser/stmt/class/typedConstants.test | 125 + test/code/parser/stmt/newInInitializer.test | 1 + test/code/prettyPrinter/stmt/class_const.test | 6 +- 18 files changed, 1263 insertions(+), 1049 deletions(-) create mode 100644 test/code/parser/stmt/class/typedConstants.test diff --git a/grammar/php7.y b/grammar/php7.y index 2d65d484d0..494d36012f 100644 --- a/grammar/php7.y +++ b/grammar/php7.y @@ -221,7 +221,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: @@ -722,6 +725,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]]; diff --git a/lib/PhpParser/Builder/ClassConst.php b/lib/PhpParser/Builder/ClassConst.php index f616c62701..a7fe129b0b 100644 --- a/lib/PhpParser/Builder/ClassConst.php +++ b/lib/PhpParser/Builder/ClassConst.php @@ -19,6 +19,8 @@ class ClassConst implements PhpParser\Builder /** @var Node\AttributeGroup[] */ protected $attributeGroups = []; + /** @var Identifier|Node\Name|Node\ComplexType */ + protected $type; /** * Creates a class constant builder @@ -116,6 +118,19 @@ public function addAttribute($attribute) { 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. * @@ -126,7 +141,8 @@ public function getNode(): PhpParser\Node { $this->constants, $this->flags, $this->attributes, - $this->attributeGroups + $this->attributeGroups, + $this->type ); } } diff --git a/lib/PhpParser/Node/Stmt/ClassConst.php b/lib/PhpParser/Node/Stmt/ClassConst.php index 1fc7f3362a..52b804c447 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 Type declaration */ + public $type; /** * Constructs a class const list node. * - * @param Node\Const_[] $consts Constant declarations - * @param int $flags Modifiers - * @param array $attributes Additional attributes - * @param Node\AttributeGroup[] $attrGroups PHP attribute groups + * @param Node\Const_[] $consts Constant declarations + * @param int $flags Modifiers + * @param array $attributes Additional attributes + * @param Node\AttributeGroup[] $attrGroups PHP attribute groups + * @param null|string|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration */ public function __construct( array $consts, int $flags = 0, array $attributes = [], - array $attrGroups = [] + array $attrGroups = [], + $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/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php index cede4419db..c2304b2e93 100644 --- a/lib/PhpParser/Parser/Php7.php +++ b/lib/PhpParser/Parser/Php7.php @@ -18,16 +18,16 @@ class Php7 extends \PhpParser\ParserAbstract { protected $tokenToSymbolMapSize = 396; - protected $actionTableSize = 1223; - protected $gotoTableSize = 626; + protected $actionTableSize = 1234; + protected $gotoTableSize = 625; protected $invalidSymbol = 168; protected $errorSymbol = 1; protected $defaultAction = -32766; protected $unexpectedTokenRule = 32767; - protected $YY2TBLSTATE = 429; - protected $numNonLeafStates = 726; + protected $YY2TBLSTATE = 433; + protected $numNonLeafStates = 735; protected $symbolToName = array( "EOF", @@ -244,262 +244,264 @@ class Php7 extends \PhpParser\ParserAbstract ); protected $action = array( - 132, 133, 134, 575, 135, 136, 0, 738, 739, 740, - 137, 37, 850, 825, 851, 476,-32766,-32766,-32766,-32767, - -32767,-32767,-32767, 101, 102, 103, 104, 105, 1097, 1098, - 1099, 1096, 1095, 1094, 1100, 732, 731,-32766, 1289,-32766, + 133, 134, 135, 579, 136, 137, 0, 747, 748, 749, + 138, 38, 326,-32766,-32766,-32766,-32766,-32766,-32766,-32767, + -32767,-32767,-32767, 102, 103, 104, 105, 106, 1108, 1109, + 1110, 1107, 1106, 1105, 1111, 741, 740,-32766, 834,-32766, -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767, - -32767, 1022, 377, 376, 2, 741,-32766,-32766,-32766,-32766, - -32766, 822, 417,-32766,-32766,-32766,-32766,-32766,-32766, 267, - 138, 399, 745, 746, 747, 748, 287,-32766, 423,-32766, - -32766,-32766,-32766,-32766,-32766, 749, 750, 751, 752, 753, - 754, 755, 756, 757, 758, 759, 779, 576, 780, 781, - 782, 783, 771, 772, 340, 341, 774, 775, 760, 761, - 762, 764, 765, 766, 351, 806, 807, 808, 809, 810, - 577, 767, 768, 578, 579, 800, 791, 789, 790, 803, - 786, 787, -327, 423, 580, 581, 785, 582, 583, 584, - 585, 586, 587, 605, -590, 477, -86, 814, 788, 588, - 589, -590, 139,-32766,-32766,-32766, 132, 133, 134, 575, - 135, 136, 1046, 738, 739, 740, 137, 37, 323, 1013, - 823, 824, 1334, 1324,-32766, 1335,-32766,-32766,-32766,-32766, - -32766,-32766,-32766, 1097, 1098, 1099, 1096, 1095, 1094, 1100, - -587, 732, 731,-32766,-32766,-32766, 12, -587, 81,-32766, - -32766,-32766, 945, 946, 322, 927, 34, 947, 1224, 1223, - 1225, 741, -86, 942,-32766, 1075,-32766,-32766,-32766,-32766, - -32766, 239,-32766,-32766,-32766, 267, 138, 399, 745, 746, - 747, 748, 461, 462, 423, 35, 247, 103, 104, 105, - 128, 749, 750, 751, 752, 753, 754, 755, 756, 757, - 758, 759, 779, 576, 780, 781, 782, 783, 771, 772, - 340, 341, 774, 775, 760, 761, 762, 764, 765, 766, - 351, 806, 807, 808, 809, 810, 577, 767, 768, 578, - 579, 800, 791, 789, 790, 803, 786, 787, -327, 144, - 580, 581, 785, 582, 583, 584, 585, 586, 587, 1222, - 82, 83, 84, -590, 788, 588, 589, -590, 148, 763, - 733, 734, 735, 736, 737, 1309, 738, 739, 740, 776, - 777, 36, 1308, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 288, 271, -587, - -193, 375, 376, -587, 976,-32766, 1021, 453, 454, 455, - 109, 417, 945, 946, 741, 712, 819, 947,-32766,-32766, - -32766, -271, 1073, 941, 1224, 1223, 1225, 288, 742, 743, - 744, 745, 746, 747, 748, -192, -365, 812, -365,-32766, - 599,-32766,-32766, 549, 749, 750, 751, 752, 753, 754, - 755, 756, 757, 758, 759, 779, 802, 780, 781, 782, - 783, 771, 772, 773, 801, 774, 775, 760, 761, 762, - 764, 765, 766, 805, 806, 807, 808, 809, 810, 811, - 767, 768, 769, 770, 800, 791, 789, 790, 803, 786, - 787, 251, 820, 778, 784, 785, 792, 793, 795, 794, - 796, 797, 732, 731, 1261, 1022, 1019, 788, 799, 798, - 49, 50, 51, 507, 52, 53, 1009, 1008, 1007, 1010, - 54, 55, -111, 56, 816, 1045, 14, -111, 1022, -111, - 287, 1305, 977, 306, 302, 1022, 238, -111, -111, -111, - -111, -111, -111, -111, -111, 106, 107, 108, 1089, 271, - -32766,-32766,-32766, 280, 284, 126, -193, 929, 57, 58, - 287, 109, 1019, -541, 59, 308, 60, 244, 245, 61, - 62, 63, 64, 65, 66, 67, 68, 1229, 27, 269, - 69, 439, 508, -341, 1022, 929, 1255, 1256, 509, 907, - 823, -192, 150, 907, 1253, 41, 24, 510, 352, 511, - 818, 512, 386, 513, 11, 699, 514, 515, 648, 25, - 814, 43, 44, 440, 372, 371, 907, 45, 516, 702, - 1220, 667, 668, 363, 334, -540, 357, -541, -541, 320, - 1215, 1249, 518, 519, 520, -581, 1074, 335, 724, -581, - 1019,-32766, -541, 336, 521, 522, 703, 1243, 1244, 1245, - 1246, 1240, 1241, 294, -541, 850, -547, 851, 823, 1247, - 1242, 365, 1022, 1224, 1223, 1225, 295, -153, -153, -153, - 369, 70, 897, 318, 319, 322, 897, 384, 149, 402, - 373, 374, -153, 435, -153, 436, -153, 280, -153, -540, - -540, 141, 1220, 378, 379, 639, 640, 322, 370, 897, - 907, 437, 438, 829, -540, -88, 151, 732, 731, 945, - 946, 153, 823,-32766, 517, -51, -540, 154, -546, 883, - 941, -111, -111, -111, 31, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 155, 74, - 27, 157, 32, 322, -85, 123, 124, 909, 129, 697, - 130, 909, 823, 697, -153, 143, 1253, 158,-32766, -544, - 1229, -542, 159, 160, 1222, 161, -79, 1134, 1136, -75, - 285,-32766,-32766,-32766, 909,-32766, 697,-32766, -539,-32766, - -301, -73,-32766, 897, -72, -71, 1220,-32766,-32766,-32766, - -16, 140, 1215,-32766,-32766, 732, 731, 322, -70,-32766, - 414, -69, -4, 907, -68, -67, 521, 522,-32766, 1243, - 1244, 1245, 1246, 1240, 1241, -66, -47, -18, 147, 270, - 281, 1247, 1242, -544, -544, -542, -542, 732, 731, 713, - 716, 906,-32766, 72, 146, 907, 319, 322, 1222, -297, - -542, 823, -539, -539, 276,-32766,-32766,-32766, 277,-32766, - -544,-32766, -542,-32766, 282, 283,-32766, -539, 909, 328, - 697,-32766,-32766,-32766,-32766, 704, 286,-32766,-32766, -539, - 1222, 923, 289,-32766, 414, 1220, 290,-32766,-32766,-32766, - 271,-32766,-32766,-32766, 47,-32766, 897, -111,-32766, 677, - 109, 814, 145,-32766,-32766,-32766,-32766, 823, 131,-32766, - -32766, 1336,-32766, 654, 670,-32766, 414, 1104, 370, 637, - 430, 551, 73, 13,-32766, 293, 555, 295, 897, 945, - 946, 649, 74, 434, 517, 458, 322, 487, 690, 842, - 941, -111, -111, -111, 301, 1022, 561, 655, 671, 1260, - 300,-32766, -539,-32766, 907, 603, 303, 1222, 296, 297, - 39, 1262, 9, 40,-32766,-32766,-32766, 0,-32766, 907, - -32766, 909,-32766, 697, -4,-32766, 0, 1229, 907, 0, - -32766,-32766,-32766,-32766, 307, 125,-32766,-32766, 0, 1222, - 907, 0,-32766, 414, 0, 0,-32766,-32766,-32766, 707, - -32766,-32766,-32766, 962,-32766, 697, -505,-32766, 714, -495, - 7, 482,-32766,-32766,-32766,-32766, -539, -539,-32766,-32766, - 16, 1222, 567, 367,-32766, 414, 925, 295,-32766,-32766, - -32766, -539,-32766,-32766,-32766, 822,-32766, 897, 721,-32766, - 722, -575, 888, -539,-32766,-32766,-32766, 986, 963, 970, - -32766,-32766, 897, -249, -249, -249,-32766, 414, 823, 370, - 960, 897, 971, 886, 958,-32766, 1078, 1081, 718, 1082, - 945, 946, 1079, 897, 1080, 517, 1086, 33, 1250, 834, - 883, 941, -111, -111, -111, 27, 1275, 1293, 1327, -248, - -248, -248, 1220, 642, 884, 370, 317, 823, 366, 698, - 701, 1253, 1331, 705, -111, 706, 945, 946, 708, 709, - 710, 517, 909,-32766, 697, -249, 883, 941, -111, -111, - -111, 711, 715, 700, -509, 1333, 845, 909, 48, 697, - -573, 1220, 844, 853, 295, 935, 909, 1215, 697, 74, - 978, 852, 1332, 322, 934, 932, 933, 936, 909, 1206, - 697, -248, 522, 916, 1243, 1244, 1245, 1246, 1240, 1241, - 926, 914, 968, 969, 1330, 1287, 1247, 1242, 1276, 1294, - -32766, 1300, 1303, 1191, -547, -546, 1222, -545, 72, -489, - 1, 319, 322,-32766,-32766,-32766, 28,-32766, 29,-32766, - 38,-32766, 298, 299,-32766, 42, 46, 71, 75,-32766, - -32766,-32766, 76, 77, 78,-32766,-32766, 368, 79, 80, - 142,-32766, 414, 152, 156, 243, 324, 352, 353, 127, - -32766, -274, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 364, 431, 0, -272, -271, 18, 19, 20, 21, - 23, 401, 478, 479, 486, 489, 490, 491, 492, 496, - 497, 498, 505, 684, 1233, 1174, 1251, 1048, 1047, 1028, - 0, 1210, 1024, -276, -103, 17, 22, 26, 292, 400, - 596, 600, 628, 689, 1178, 1228, 1175, 1306, 0, 0, - 1254, 0, 322 + -32767, 2, 107, 108, 109, 750, 274, 380, 379, 986, + -32766,-32766,-32766, 104, 105, 106, 1023, 421, 110, 270, + 139, 402, 754, 755, 756, 757, 465, 466, 427, 937, + 291,-32766, 287,-32766,-32766, 758, 759, 760, 761, 762, + 763, 764, 765, 766, 767, 768, 788, 580, 789, 790, + 791, 792, 780, 781, 343, 344, 783, 784, 769, 770, + 771, 773, 774, 775, 354, 815, 816, 817, 818, 819, + 581, 776, 777, 582, 583, 809, 800, 798, 799, 812, + 795, 796, 686, -544, 584, 585, 794, 586, 587, 588, + 589, 590, 591, -328, -592, 939, 1233, 16, 797, 592, + 593, -592, 140,-32766,-32766,-32766, 133, 134, 135, 579, + 136, 137, 1056, 747, 748, 749, 138, 38, 687, 1019, + 1018, 1017, 1020, -367,-32766, -367,-32766,-32766,-32766,-32766, + -32766,-32766,-32766,-32766,-32766,-32766, 355, 987, 1032, 688, + 689, 741, 740,-32766,-32766,-32766, 833, -544, -544, -589, + -32766,-32766,-32766, 1031,-32766, 127, -589, 1235, 1234, 1236, + 1316, 750, -544, 290,-32766, 283,-32766,-32766,-32766,-32766, + -32766, 1235, 1234, 1236, -544, 270, 139, 402, 754, 755, + 756, 757, 35, 480, 427, 457, 458, 459, 389, 721, + 7, 758, 759, 760, 761, 762, 763, 764, 765, 766, + 767, 768, 788, 580, 789, 790, 791, 792, 780, 781, + 343, 344, 783, 784, 769, 770, 771, 773, 774, 775, + 354, 815, 816, 817, 818, 819, 581, 776, 777, 582, + 583, 809, 800, 798, 799, 812, 795, 796, 553, 823, + 584, 585, 794, 586, 587, 588, 589, 590, 591, -328, + 83, 84, 85, -592, 797, 592, 593, -592, 149, 772, + 742, 743, 744, 745, 746, 823, 747, 748, 749, 785, + 786, 37, -194, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 291, 274, 1272, + 242, 1108, 1109, 1110, 1107, 1106, 1105, 1111, -589, 859, + 110, 860, -589, 481, 750,-32766,-32766,-32766, 1032, 129, + 142, 603, 1084, -583, 145, 1260, 325, -583, 751, 752, + 753, 754, 755, 756, 757, 254,-32766, 821,-32766,-32766, + -32766,-32766, 828, 290, 758, 759, 760, 761, 762, 763, + 764, 765, 766, 767, 768, 788, 811, 789, 790, 791, + 792, 780, 781, 782, 810, 783, 784, 769, 770, 771, + 773, 774, 775, 814, 815, 816, 817, 818, 819, 820, + 776, 777, 778, 779, 809, 800, 798, 799, 812, 795, + 796,-32766,-32766, 787, 793, 794, 801, 802, 804, 803, + 805, 806, 1085, 609, 733, 1032, 832, 797, 808, 807, + 50, 51, 52, 511, 53, 54,-32766, 241, 829, 917, + 55, 56, -111, 57,-32766,-32766,-32766, -111, -194, -111, + 290, 14, 1345, 1300, 305, 1346, 309, -111, -111, -111, + -111, -111, -111, -111, -111,-32766, -193,-32766,-32766,-32766, + -272, 955, 956, 1100, 311, 859, 957, 860, 58, 59, + 323, 427, 952, -543, 60, 825, 61, 247, 248, 62, + 63, 64, 65, 66, 67, 68, 69, 1240, 28, 272, + 70, 443, 512, -342, 1231, 141, 1266, 1267, 513, -86, + 832, 325, 338, 917, 1264, 42, 25, 514, 939, 515, + 1029, 516, 907, 517, 831,-32766, 518, 519, 339, 378, + 379, 44, 45, 444, 375, 374, 368, 46, 520, 421, + 955, 956, 1032, 366, 337, 957, -541, -543, -543, 151, + 1226, 951, 522, 523, 524, 372, 1235, 1234, 1236, 360, + 1029, 827, -543, 1086, 525, 526, 708, 1254, 1255, 1256, + 1257, 1251, 1252, 297, -543, -86, -549, 387, 832, 1258, + 1253, 439, 1032, 1235, 1234, 1236, 298, -154, -154, -154, + 440, 71, 441, 321, 322, 325, 907, 919, 1320, 706, + 741, 740, -154, -542, -154, 1319, -154, 283, -154, 442, + -541, -541, 1231, 82, 652, 26, 671, 672, 373, 325, + 832, 838, -193, 1335, 152, -541, 154, 741, 740, 955, + 956, 150, 405,-32766, 521, -51, 155, -541, 156, 893, + 951, -111, -111, -111, 32, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 158, 75, + 28, 376, 377, 325, 381, 382, 33, -542, -542, -79, + -59, 919, 832, 706, -154, -58, 1264, 124,-32766, -546, + 1240, 49, -542, 125, 1233, 36, 250, 1145, 1147, 643, + 644,-32766,-32766,-32766, -542,-32766, -548,-32766, -541,-32766, + 130, 131,-32766, 144, 159, 160, 1231,-32766,-32766,-32766, + -16, 161, 1226,-32766,-32766, 741, 740, 162, 163,-32766, + 418, 48, -4, 917, -88, -85, 525, 526,-32766, 1254, + 1255, 1256, 1257, 1251, 1252, -79, -75, -73, -72, -71, + -70, 1258, 1253, -546, -546, 301, 302, 741, 740, -69, + -68, 1055,-32766, 73, -67, -66, 322, 325, 1233, -47, + 371, 832, -541, -541, -18,-32766,-32766,-32766, 148,-32766, + -546,-32766, 128,-32766, 273, 284,-32766, -541, 722, 725, + 287,-32766,-32766,-32766,-32766, 299, 300,-32766,-32766, -541, + 1233, 916, 147,-32766, 418, 1231, 288,-32766,-32766,-32766, + -302,-32766,-32766,-32766, -298,-32766, 907, -111,-32766, 279, + 280, 285, 126,-32766,-32766,-32766,-32766, 286, 132,-32766, + -32766, 331, 289, 274, 110,-32766, 418, 292, 373, 293, + 434, 933, 74, 146,-32766, 296, 823, 298, 697, 955, + 956, 681, 75, 559, 521, 1347, 325, 653, 658, 851, + 951, -111, -111, -111, 832, 1115,-32766, 438, 641, 699, + 306,-32766, 555, 303, 917, 13, 1029, 1233, 310,-32766, + 659, 304, 10, 674,-32766,-32766,-32766, 462,-32766, 917, + -32766, 919,-32766, 706, -4,-32766, 491, 1240, 1032, 1032, + -32766,-32766,-32766,-32766, 675, 1271,-32766,-32766, 298, 1233, + 917, 40,-32766, 418, -577, 1265,-32766,-32766,-32766, 711, + -32766,-32766,-32766, 283,-32766, 917, -575,-32766, 0, 0, + 0, 486,-32766,-32766,-32766,-32766, 0, 917,-32766,-32766, + 1273, 1233, 571, 831,-32766, 418, 565, -507,-32766,-32766, + -32766, 1261,-32766,-32766,-32766, 712,-32766, 907, 917,-32766, + -497, 8, 17, 370,-32766,-32766,-32766, 713, 607, 917, + -32766,-32766, 907, -250, -250, -250,-32766, 418, 832, 373, + 935, 41, 730, 731, 898,-32766, 996, 973, 716, 980, + 955, 956, 970, 907, 981, 521, 896, 968, 1089, 723, + 893, 951, -111, -111, -111, 28, 1092, 1093, 907, -249, + -249, -249, 1231, 1090, 1091, 373, 1097, 832, 843, 1286, + 907, 1264, 1304, 1338, -111, 646, 955, 956, 34, 320, + 369, 521, 919,-32766, 706, -250, 893, 951, -111, -111, + -111, 907, 707, 710, 714, 715, 717, 919, 718, 706, + 719, 1231, 907, 720, 298, 724, 709, 1226, -511, 75, + 727, 894, 1342, 325, 1344, 854, 853, 862, 919, 945, + 706, -249, 526, 988, 1254, 1255, 1256, 1257, 1251, 1252, + 861, 1343, 944, 919, 942, 706, 1258, 1253, 943, 946, + -32766, 1217, 926, 936, 924, 972, 1233, 706, 73, 978, + 979, 322, 325,-32766,-32766,-32766, 1341,-32766, 1298,-32766, + 1287,-32766, 1305, 1311,-32766, 1314, 919, -549, 706,-32766, + -32766,-32766, -548, -547, -491,-32766,-32766, 919, 1, 706, + 29,-32766, 418, 30, 39, 43, 47, 72, 76, 77, + -32766, 78, 79, 80, 81, 143, 153, 157, 246, 327, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 367, 435, 0, -275, -273, -272, 19, 20, 21, + 22, 24, 404, 482, 483, 490, 493, 494, 495, 496, + 0, 500, 501, 502, 509, 692, 1244, 1185, 1262, 1058, + 1057, 1038, 1221, 1034, -277, -103, 18, 23, 27, 295, + 403, 600, 604, 632, 698, 1189, 1239, 1186, 1317, 0, + 1202, 0, 0, 325 ); protected $actionCheck = array( 2, 3, 4, 5, 6, 7, 0, 9, 10, 11, - 12, 13, 106, 1, 108, 31, 9, 10, 11, 44, + 12, 13, 70, 9, 10, 11, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 51, 52, 116, 117, 118, 119, 120, 121, 122, 37, 38, 30, 1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 138, 106, 107, 8, 57, 9, 10, 11, 9, - 10, 155, 116, 9, 10, 11, 9, 10, 11, 71, - 72, 73, 74, 75, 76, 77, 163, 30, 80, 32, - 33, 34, 35, 36, 30, 87, 88, 89, 90, 91, + 43, 8, 53, 54, 55, 57, 57, 106, 107, 31, + 9, 10, 11, 50, 51, 52, 1, 116, 69, 71, + 72, 73, 74, 75, 76, 77, 134, 135, 80, 1, + 30, 30, 30, 32, 33, 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, 127, 128, 129, 130, 131, - 132, 133, 8, 80, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 51, 1, 161, 31, 80, 150, 151, + 132, 133, 80, 70, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 8, 1, 122, 80, 8, 150, 151, 152, 8, 154, 9, 10, 11, 2, 3, 4, 5, - 6, 7, 164, 9, 10, 11, 12, 13, 70, 1, - 82, 159, 80, 85, 30, 83, 32, 33, 34, 35, - 36, 37, 38, 116, 117, 118, 119, 120, 121, 122, - 1, 37, 38, 9, 10, 11, 8, 8, 161, 9, - 10, 11, 117, 118, 167, 1, 8, 122, 155, 156, - 157, 57, 97, 128, 30, 162, 32, 33, 34, 35, - 30, 14, 32, 33, 34, 71, 72, 73, 74, 75, - 76, 77, 134, 135, 80, 147, 148, 50, 51, 52, - 8, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 6, 7, 164, 9, 10, 11, 12, 13, 116, 119, + 120, 121, 122, 106, 30, 108, 32, 33, 34, 35, + 36, 37, 38, 9, 10, 11, 163, 159, 138, 137, + 138, 37, 38, 9, 10, 11, 159, 134, 135, 1, + 9, 10, 11, 137, 30, 14, 8, 155, 156, 157, + 1, 57, 149, 163, 30, 163, 32, 33, 34, 35, + 36, 155, 156, 157, 161, 71, 72, 73, 74, 75, + 76, 77, 8, 31, 80, 129, 130, 131, 106, 161, + 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, 127, 128, 129, 130, 131, 132, 133, 164, 8, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 80, + 126, 127, 128, 129, 130, 131, 132, 133, 85, 80, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 164, 9, 10, 11, 160, 150, 151, 152, 164, 154, 2, - 3, 4, 5, 6, 7, 1, 9, 10, 11, 12, + 3, 4, 5, 6, 7, 80, 9, 10, 11, 12, 13, 30, 8, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 30, 57, 160, - 8, 106, 107, 164, 31, 9, 137, 129, 130, 131, - 69, 116, 117, 118, 57, 161, 80, 122, 9, 10, - 11, 164, 1, 128, 155, 156, 157, 30, 71, 72, - 73, 74, 75, 76, 77, 8, 106, 80, 108, 30, - 1, 32, 33, 85, 87, 88, 89, 90, 91, 92, + 49, 50, 51, 52, 53, 54, 55, 30, 57, 146, + 14, 116, 117, 118, 119, 120, 121, 122, 160, 106, + 69, 108, 164, 161, 57, 9, 10, 11, 138, 8, + 161, 1, 1, 160, 8, 1, 167, 164, 71, 72, + 73, 74, 75, 76, 77, 8, 30, 80, 32, 33, + 34, 35, 80, 163, 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, 127, 128, 129, 130, 131, 132, - 133, 8, 156, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 37, 38, 146, 138, 116, 150, 151, 152, - 2, 3, 4, 5, 6, 7, 119, 120, 121, 122, - 12, 13, 101, 15, 80, 1, 101, 106, 138, 108, - 163, 1, 159, 8, 113, 138, 97, 116, 117, 118, - 119, 120, 121, 122, 123, 53, 54, 55, 123, 57, - 9, 10, 11, 163, 30, 14, 164, 122, 50, 51, - 163, 69, 116, 70, 56, 8, 58, 59, 60, 61, + 133, 9, 10, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 159, 51, 161, 138, 82, 150, 151, 152, + 2, 3, 4, 5, 6, 7, 9, 97, 156, 1, + 12, 13, 101, 15, 9, 10, 11, 106, 164, 108, + 163, 101, 80, 1, 113, 83, 8, 116, 117, 118, + 119, 120, 121, 122, 123, 30, 8, 32, 33, 34, + 164, 117, 118, 123, 8, 106, 122, 108, 50, 51, + 8, 80, 128, 70, 56, 80, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, - 72, 73, 74, 162, 138, 122, 78, 79, 80, 1, - 82, 164, 14, 1, 86, 87, 88, 89, 163, 91, - 156, 93, 106, 95, 108, 161, 98, 99, 75, 76, - 80, 103, 104, 105, 106, 107, 1, 109, 110, 31, - 116, 75, 76, 115, 116, 70, 163, 134, 135, 8, - 122, 1, 124, 125, 126, 160, 159, 8, 161, 164, - 116, 137, 149, 8, 136, 137, 31, 139, 140, 141, - 142, 143, 144, 145, 161, 106, 163, 108, 82, 151, + 72, 73, 74, 162, 116, 161, 78, 79, 80, 31, + 82, 167, 8, 1, 86, 87, 88, 89, 122, 91, + 116, 93, 84, 95, 155, 137, 98, 99, 8, 106, + 107, 103, 104, 105, 106, 107, 8, 109, 110, 116, + 117, 118, 138, 115, 116, 122, 70, 134, 135, 14, + 122, 128, 124, 125, 126, 8, 155, 156, 157, 163, + 116, 156, 149, 162, 136, 137, 161, 139, 140, 141, + 142, 143, 144, 145, 161, 97, 163, 8, 82, 151, 152, 8, 138, 155, 156, 157, 158, 75, 76, 77, - 8, 163, 84, 165, 166, 167, 84, 8, 101, 102, - 106, 107, 90, 8, 92, 8, 94, 163, 96, 134, - 135, 161, 116, 106, 107, 111, 112, 167, 106, 84, - 1, 8, 8, 8, 149, 31, 14, 37, 38, 117, - 118, 14, 82, 137, 122, 31, 161, 14, 163, 127, + 8, 163, 8, 165, 166, 167, 84, 159, 1, 161, + 37, 38, 90, 70, 92, 8, 94, 163, 96, 8, + 134, 135, 116, 161, 75, 76, 75, 76, 106, 167, + 82, 8, 164, 85, 14, 149, 14, 37, 38, 117, + 118, 101, 102, 137, 122, 31, 14, 161, 14, 127, 128, 129, 130, 131, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 14, 163, - 70, 14, 14, 167, 31, 16, 16, 159, 16, 161, + 70, 106, 107, 167, 106, 107, 14, 134, 135, 16, 16, 159, 82, 161, 162, 16, 86, 16, 74, 70, - 1, 70, 16, 16, 80, 16, 31, 59, 60, 31, - 37, 87, 88, 89, 159, 91, 161, 93, 70, 95, - 35, 31, 98, 84, 31, 31, 116, 103, 104, 105, - 31, 161, 122, 109, 110, 37, 38, 167, 31, 115, - 116, 31, 0, 1, 31, 31, 136, 137, 124, 139, + 1, 70, 149, 16, 80, 147, 148, 59, 60, 111, + 112, 87, 88, 89, 161, 91, 163, 93, 70, 95, + 16, 16, 98, 16, 16, 16, 116, 103, 104, 105, + 31, 16, 122, 109, 110, 37, 38, 16, 16, 115, + 116, 70, 0, 1, 31, 31, 136, 137, 124, 139, 140, 141, 142, 143, 144, 31, 31, 31, 31, 31, 31, 151, 152, 134, 135, 134, 135, 37, 38, 31, - 31, 31, 74, 163, 31, 1, 166, 167, 80, 35, - 149, 82, 134, 135, 35, 87, 88, 89, 35, 91, - 161, 93, 161, 95, 35, 35, 98, 149, 159, 35, - 161, 103, 104, 105, 74, 31, 37, 109, 110, 161, - 80, 38, 37, 115, 116, 116, 37, 87, 88, 89, - 57, 91, 124, 93, 70, 95, 84, 128, 98, 77, - 69, 80, 70, 103, 104, 105, 137, 82, 31, 109, - 110, 83, 85, 96, 94, 115, 116, 82, 106, 113, - 108, 85, 154, 97, 124, 113, 89, 158, 84, 117, - 118, 90, 163, 128, 122, 97, 167, 97, 92, 127, - 128, 129, 130, 131, 133, 138, 153, 100, 100, 146, - 132, 74, 70, 137, 1, 153, 114, 80, 134, 135, - 159, 146, 150, 159, 87, 88, 89, -1, 91, 1, - 93, 159, 95, 161, 162, 98, -1, 1, 1, -1, - 103, 104, 105, 74, 132, 161, 109, 110, -1, 80, - 1, -1, 115, 116, -1, -1, 87, 88, 89, 31, - 91, 124, 93, 159, 95, 161, 149, 98, 31, 149, - 149, 102, 103, 104, 105, 74, 134, 135, 109, 110, - 149, 80, 81, 149, 115, 116, 154, 158, 87, 88, - 89, 149, 91, 124, 93, 155, 95, 84, 159, 98, - 159, 163, 159, 161, 103, 104, 105, 159, 159, 159, + 31, 1, 74, 163, 31, 31, 166, 167, 80, 31, + 149, 82, 134, 135, 31, 87, 88, 89, 31, 91, + 161, 93, 161, 95, 31, 31, 98, 149, 31, 31, + 30, 103, 104, 105, 74, 134, 135, 109, 110, 161, + 80, 31, 31, 115, 116, 116, 37, 87, 88, 89, + 35, 91, 124, 93, 35, 95, 84, 128, 98, 35, + 35, 35, 161, 103, 104, 105, 137, 35, 31, 109, + 110, 35, 37, 57, 69, 115, 116, 37, 106, 37, + 108, 38, 154, 70, 124, 113, 80, 158, 80, 117, + 118, 77, 163, 89, 122, 83, 167, 90, 96, 127, + 128, 129, 130, 131, 82, 82, 85, 128, 113, 92, + 114, 74, 85, 132, 1, 97, 116, 80, 132, 137, + 100, 133, 150, 94, 87, 88, 89, 97, 91, 1, + 93, 159, 95, 161, 162, 98, 97, 1, 138, 138, + 103, 104, 105, 74, 100, 146, 109, 110, 158, 80, + 1, 159, 115, 116, 163, 166, 87, 88, 89, 31, + 91, 124, 93, 163, 95, 1, 163, 98, -1, -1, + -1, 102, 103, 104, 105, 74, -1, 1, 109, 110, + 146, 80, 81, 155, 115, 116, 153, 149, 87, 88, + 89, 160, 91, 124, 93, 31, 95, 84, 1, 98, + 149, 149, 149, 149, 103, 104, 105, 31, 153, 1, 109, 110, 84, 100, 101, 102, 115, 116, 82, 106, - 159, 84, 159, 159, 159, 124, 159, 159, 162, 159, - 117, 118, 159, 84, 159, 122, 159, 161, 160, 160, - 127, 128, 129, 130, 131, 70, 160, 160, 160, 100, - 101, 102, 116, 160, 162, 106, 161, 82, 161, 161, - 161, 86, 162, 161, 128, 161, 117, 118, 161, 161, + 154, 159, 159, 159, 159, 124, 159, 159, 31, 159, + 117, 118, 159, 84, 159, 122, 159, 159, 159, 31, + 127, 128, 129, 130, 131, 70, 159, 159, 84, 100, + 101, 102, 116, 159, 159, 106, 159, 82, 160, 160, + 84, 86, 160, 160, 128, 160, 117, 118, 161, 161, 161, 122, 159, 137, 161, 162, 127, 128, 129, 130, - 131, 161, 161, 161, 165, 162, 162, 159, 70, 161, - 163, 116, 162, 162, 158, 162, 159, 122, 161, 163, + 131, 84, 161, 161, 161, 161, 161, 159, 161, 161, + 161, 116, 84, 161, 158, 161, 161, 122, 165, 163, 162, 162, 162, 167, 162, 162, 162, 162, 159, 162, 161, 162, 137, 162, 139, 140, 141, 142, 143, 144, - 162, 162, 162, 162, 162, 162, 151, 152, 162, 162, - 74, 162, 162, 165, 163, 163, 80, 163, 163, 163, - 163, 166, 167, 87, 88, 89, 163, 91, 163, 93, - 163, 95, 134, 135, 98, 163, 163, 163, 163, 103, - 104, 105, 163, 163, 163, 109, 110, 149, 163, 163, - 163, 115, 116, 163, 163, 163, 163, 163, 163, 161, - 124, 164, 163, 163, 163, 163, 163, 163, 163, 163, + 162, 162, 162, 159, 162, 161, 151, 152, 162, 162, + 74, 162, 162, 162, 162, 159, 80, 161, 163, 162, + 162, 166, 167, 87, 88, 89, 162, 91, 162, 93, + 162, 95, 162, 162, 98, 162, 159, 163, 161, 103, + 104, 105, 163, 163, 163, 109, 110, 159, 163, 161, + 163, 115, 116, 163, 163, 163, 163, 163, 163, 163, + 124, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 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, -1, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, 164, 164, -1, -1, - 166, -1, 167 + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, -1, + 165, -1, -1, 167 ); protected $actionBase = array( - 0, -2, 154, 542, 752, 893, 929, 580, 53, 394, - 855, 307, 307, 67, 307, 307, 307, 565, 908, 908, - 917, 908, 538, 784, 649, 649, 649, 708, 708, 708, - 708, 740, 740, 849, 849, 881, 817, 634, 1036, 1036, + 0, -2, 154, 542, 752, 893, 929, 52, 374, 431, + 435, 875, 788, 235, 307, 307, 788, 307, 944, 977, + 977, 988, 977, 908, 956, 468, 468, 468, 708, 708, + 708, 708, 740, 740, 849, 849, 881, 817, 634, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, @@ -512,65 +514,66 @@ class Php7 extends \PhpParser\ParserAbstract 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, - 1036, 1036, 12, 323, 389, 678, 1044, 1050, 1046, 1051, - 1042, 1041, 1045, 1047, 1052, 942, 943, 753, 946, 947, - 949, 950, 1048, 873, 1043, 1049, 291, 291, 291, 291, + 1036, 1036, 1036, 1036, 37, 28, 370, 682, 1055, 1061, + 1057, 1062, 1053, 1052, 1056, 1058, 1063, 964, 966, 791, + 968, 970, 971, 973, 1059, 885, 1054, 1060, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 346, 491, 50, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 54, 54, 54, 620, 620, - 359, 190, 184, 955, 955, 955, 955, 955, 955, 955, - 955, 955, 955, 658, 47, 144, 144, 7, 7, 7, - 7, 7, 371, -25, -25, -25, -25, 709, 347, 916, - 474, 526, 375, 280, 317, 245, 340, 340, 187, 187, - 396, 396, -87, -87, 396, 396, 396, 747, 747, 747, - 747, 443, 505, -94, 308, 454, 480, 480, 480, 480, - 454, 454, 454, 454, 755, 1054, 454, 454, 454, 641, - 822, 822, 998, 442, 442, 442, 822, 499, 776, 88, - 499, 88, 37, 92, 756, 85, -54, 425, 756, 639, - 764, 189, 143, 820, 524, 820, 1040, 385, 767, 413, - 735, 688, 857, 902, 1053, 787, 940, 788, 941, 228, - 98, 685, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, - 1039, 1039, 1039, 1055, 415, 1040, 286, 1055, 1055, 1055, - 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, - 534, 286, 483, 496, 286, 774, 415, 12, 800, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 736, - -16, 12, 323, 204, 204, 427, 168, 204, 204, 204, - 204, 12, 12, 12, 524, 773, 733, 537, 742, 377, - 773, 773, 773, 115, 124, 207, 342, 695, 754, 446, - 761, 761, 775, 957, 957, 761, 765, 761, 775, 973, - 761, 761, 957, 957, 809, 232, 625, 579, 612, 627, - 957, 475, 761, 761, 761, 761, 792, 643, 761, 433, - 281, 761, 761, 792, 758, 739, 46, 751, 957, 957, - 957, 792, 603, 751, 751, 751, 819, 821, 746, 738, - 571, 507, 645, 198, 783, 738, 738, 761, 619, 746, - 738, 746, 738, 812, 738, 738, 738, 746, 738, 765, - 585, 738, 691, 644, 188, 738, 6, 974, 975, 624, - 979, 967, 980, 1009, 981, 985, 878, 956, 992, 972, - 986, 965, 963, 750, 679, 680, 801, 797, 954, 771, - 771, 771, 951, 771, 771, 771, 771, 771, 771, 771, - 771, 679, 858, 814, 745, 777, 995, 682, 684, 743, - 872, 899, 948, 994, 1030, 987, 741, 689, 1016, 999, - 846, 875, 1000, 1001, 1017, 1031, 1032, 880, 772, 903, - 904, 859, 1003, 879, 771, 974, 985, 663, 972, 986, - 965, 963, 734, 724, 720, 723, 717, 704, 700, 703, - 737, 1033, 907, 818, 866, 1002, 952, 679, 867, 1012, - 856, 1018, 1019, 877, 778, 768, 868, 910, 1004, 1005, - 1006, 882, 1034, 884, 744, 1013, 997, 1020, 780, 911, - 1021, 1022, 1023, 1024, 887, 913, 888, 889, 823, 781, - 1010, 757, 918, 528, 769, 770, 789, 1008, 642, 993, - 900, 919, 920, 1025, 1026, 1027, 922, 923, 990, 828, - 1014, 760, 1015, 1011, 829, 830, 647, 785, 1035, 759, - 763, 779, 653, 674, 924, 925, 927, 991, 748, 762, - 841, 843, 1037, 683, 1038, 931, 677, 844, 696, 938, - 1029, 697, 699, 786, 901, 811, 782, 766, 1007, 749, - 845, 939, 847, 848, 850, 1028, 853, 0, 0, 0, + 291, 291, 291, 291, 291, 457, 191, 432, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 174, 174, + 174, 620, 620, 51, 465, 356, 955, 955, 955, 955, + 955, 955, 955, 955, 955, 955, 658, 184, 144, 144, + 7, 7, 7, 7, 7, 371, -25, -25, -25, -25, + 709, 50, 916, 780, 526, 380, 67, 317, 453, 474, + 474, 13, 13, 434, 434, 230, 230, 434, 434, 434, + 781, 781, 781, 781, 443, 563, 399, 203, 418, 209, + 209, 209, 209, 418, 418, 418, 418, 814, 769, 418, + 418, 418, 63, 506, 506, 641, -1, -1, -1, 506, + 253, 807, 568, 253, 568, 482, 402, 762, 384, -49, + 213, 762, 639, 681, 198, 143, 808, 585, 808, 1051, + 23, 801, 426, 758, 735, 877, 915, 1064, 800, 957, + 824, 958, 106, -58, 734, 1050, 1050, 1050, 1050, 1050, + 1050, 1050, 1050, 1050, 1050, 1050, 1066, 593, 1051, 312, + 1066, 1066, 1066, 593, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 608, 312, 569, 571, 312, 816, 593, + 37, 831, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 763, 202, 37, 28, 78, 78, 293, 65, + 78, 78, 78, 78, 37, 37, 37, 37, 585, 796, + 813, 588, 835, 488, 796, 796, 796, 508, 135, 336, + 314, 795, 799, 132, 786, 786, 803, 985, 985, 786, + 802, 786, 803, 993, 786, 786, 985, 985, 770, 361, + 603, 534, 577, 612, 985, 478, 786, 786, 786, 786, + 766, 614, 786, 377, 366, 786, 786, 766, 761, 774, + 43, 768, 985, 985, 985, 766, 558, 768, 768, 768, + 843, 844, 775, 773, 502, 496, 643, 224, 823, 773, + 773, 786, 599, 775, 773, 775, 773, 846, 773, 773, + 773, 775, 773, 802, 550, 773, 718, 631, 139, 773, + 6, 994, 995, 723, 996, 991, 998, 1019, 999, 1000, + 901, 981, 1005, 992, 1001, 990, 987, 790, 691, 697, + 832, 818, 980, 785, 785, 785, 974, 785, 785, 785, + 785, 785, 785, 785, 785, 691, 811, 834, 759, 784, + 1008, 714, 715, 779, 919, 913, 1065, 1007, 1042, 1002, + 772, 717, 1027, 1009, 918, 888, 1010, 1011, 1028, 1043, + 1044, 920, 793, 922, 923, 878, 1013, 902, 785, 994, + 1000, 724, 992, 1001, 990, 987, 754, 753, 748, 749, + 739, 738, 736, 737, 767, 1045, 783, 771, 879, 1012, + 979, 691, 882, 1023, 887, 1029, 1030, 889, 810, 792, + 883, 924, 1014, 1015, 1016, 903, 1046, 904, 842, 1024, + 1020, 1031, 819, 925, 1032, 1033, 1034, 1035, 905, 927, + 907, 909, 845, 787, 1021, 782, 931, 565, 806, 812, + 822, 1018, 640, 1006, 912, 938, 939, 1037, 1038, 1039, + 940, 942, 1003, 847, 1025, 809, 1026, 1022, 848, 850, + 642, 820, 1047, 804, 805, 815, 652, 654, 946, 947, + 949, 1004, 777, 794, 853, 855, 1048, 789, 1049, 950, + 674, 857, 719, 951, 1041, 725, 731, 683, 689, 684, + 732, 797, 914, 833, 776, 798, 1017, 731, 778, 858, + 952, 859, 867, 868, 1040, 874, 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, 458, 458, 458, - 458, 458, 458, 307, 307, 307, 307, 0, 0, 307, - 0, 0, 0, 458, 458, 458, 458, 458, 458, 458, + 0, 0, 0, 0, 0, 0, 458, 458, 458, 458, + 458, 458, 307, 307, 307, 307, 307, 307, 307, 0, + 0, 307, 0, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, @@ -584,182 +587,183 @@ class Php7 extends \PhpParser\ParserAbstract 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 458, 458, 458, 458, 291, 291, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 0, 0, 0, 0, 0, 0, 0, 0, + 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 219, 219, 291, 291, 291, 219, - 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, - 291, 291, 291, 291, 291, 291, 291, 291, 809, 442, - 442, 442, 442, 219, 219, 219, 219, 219, -88, -88, - 219, 809, 219, 219, 442, 442, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 0, 0, 286, - 88, 219, 765, 765, 765, 765, 219, 219, 219, 219, - 88, 88, 219, 219, 219, 0, 0, 0, 0, 0, - 0, 0, 0, 286, 88, 0, 286, 0, 765, 765, - 219, 0, 809, 314, 219, 0, 0, 0, 0, 286, - 765, 286, 415, 761, 88, 761, 415, 415, 204, 12, - 314, 527, 527, 527, 527, 0, 0, 524, 809, 809, - 809, 809, 809, 809, 809, 809, 809, 809, 809, 765, - 0, 809, 0, 765, 765, 765, 0, 0, 0, 0, + 291, 291, 291, 291, 291, 291, 66, 66, 291, 291, + 291, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 0, 291, 291, 291, 291, 291, 291, 291, 291, + 770, -1, -1, -1, -1, 66, 66, 66, 66, 66, + -88, -88, 66, 770, 66, 66, -1, -1, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, + 0, 312, 568, 66, 802, 802, 802, 802, 66, 66, + 66, 66, 568, 568, 66, 66, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 312, 568, 0, 312, 0, + 802, 802, 66, 0, 770, 627, 66, 0, 0, 0, + 0, 312, 802, 312, 593, 786, 568, 786, 593, 593, + 78, 37, 627, 560, 560, 560, 560, 0, 0, 585, + 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, + 770, 802, 0, 770, 0, 802, 802, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 765, 0, 0, 957, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 973, 0, 0, 0, 0, - 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, - 0, 771, 778, 0, 778, 0, 771, 771, 771, 0, - 0, 0, 0, 785, 683 + 0, 0, 0, 802, 0, 0, 985, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 993, 0, 0, + 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 785, 810, 0, 810, 0, 785, + 785, 785, 0, 0, 0, 0, 820, 789 ); protected $actionDefault = array( 3,32767, 103,32767,32767,32767,32767,32767,32767,32767, - 32767,32767, 101,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767, 593, 593, 593, - 593,32767,32767, 253, 103,32767,32767, 467, 385, 385, - 385,32767,32767, 537, 537, 537, 537, 537, 537,32767, - 32767,32767,32767,32767,32767, 467,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767, 101,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767, 595, 595, + 595, 595,32767,32767, 254, 103,32767,32767, 469, 387, + 387, 387,32767,32767, 539, 539, 539, 539, 539, 539, + 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, 101,32767, - 32767,32767, 37, 7, 8, 10, 11, 50, 17, 323, - 32767,32767,32767,32767, 103,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767, 586,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767, 101, + 32767,32767,32767, 37, 7, 8, 10, 11, 50, 17, + 324,32767,32767,32767,32767, 103,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 471, 450, 451, 453, - 454, 384, 538, 592, 326, 589, 383, 146, 338, 328, - 241, 329, 257, 472, 258, 473, 476, 477, 214, 286, - 380, 150, 414, 468, 416, 466, 470, 415, 390, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 388, 389, 469, 447, 446, 445,32767,32767, - 412, 413, 417,32767,32767,32767,32767,32767,32767,32767, - 32767, 103,32767, 387, 420, 418, 419, 436, 437, 434, - 435, 438,32767, 439, 440, 441, 442,32767, 315,32767, - 32767,32767, 364, 362, 315, 112,32767,32767, 427, 428, + 32767,32767,32767,32767,32767,32767,32767, 588,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 531, 444,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 103,32767, 101, 533, - 409, 411, 501, 422, 423, 421, 391,32767, 508,32767, - 103, 510,32767,32767,32767,32767,32767,32767,32767, 532, - 32767, 539, 539,32767, 494, 101, 194,32767,32767,32767, - 194, 194,32767,32767,32767,32767,32767,32767,32767,32767, - 600, 494, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 111,32767, 194, 111,32767,32767,32767, 101, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 189,32767, 267, 269, 103, 554, 194,32767, 513,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767, 506, + 32767,32767,32767,32767,32767,32767,32767,32767, 473, 452, + 453, 455, 456, 386, 540, 594, 327, 591, 385, 146, + 339, 329, 242, 330, 258, 474, 259, 475, 478, 479, + 215, 287, 382, 150, 151, 416, 470, 418, 468, 472, + 417, 392, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 390, 391, 471, 449, 448, + 447,32767,32767, 414, 415, 419,32767,32767,32767,32767, + 32767,32767,32767,32767, 103,32767, 389, 422, 420, 421, + 438, 439, 436, 437, 440,32767, 441, 442, 443, 444, + 32767, 316,32767,32767,32767, 366, 364, 316, 112,32767, + 32767, 429, 430,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767, 533, 446,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767, 103, + 32767, 101, 535, 411, 413, 503, 424, 425, 423, 393, + 32767, 510,32767, 103, 512,32767,32767,32767,32767,32767, + 32767,32767, 534,32767, 541, 541,32767, 496, 101, 195, + 32767,32767,32767, 195, 195,32767,32767,32767,32767,32767, + 32767,32767,32767, 602, 496, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111,32767, 195, 111,32767, + 32767,32767, 101, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 190,32767, 268, 270, 103, 556, 195, + 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, + 139,32767, 139, 541, 426, 427, 428, 498, 541, 541, + 541, 312, 289,32767,32767,32767,32767, 513, 513, 101, + 101, 101, 101, 508,32767,32767,32767,32767, 112, 100, + 100, 100, 100, 100, 104, 102,32767,32767,32767,32767, + 223, 100,32767, 102, 102,32767,32767, 223, 225, 212, + 102, 227,32767, 560, 561, 223, 102, 227, 227, 227, + 247, 247, 485, 318, 102, 100, 102, 102, 197, 318, + 318,32767, 102, 485, 318, 485, 318, 199, 318, 318, + 318, 485, 318,32767, 102, 318, 214, 100, 100, 318, + 32767,32767,32767, 498,32767,32767,32767,32767,32767,32767, + 32767, 222,32767,32767,32767,32767,32767,32767,32767, 528, + 32767, 545, 558, 432, 433, 435, 543, 457, 458, 459, + 460, 461, 462, 463, 465, 590,32767, 502,32767,32767, + 32767,32767, 338, 600,32767, 600,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 494, 432, 139,32767, 139, 539, - 424, 425, 426, 496, 539, 539, 539, 311, 288,32767, - 32767,32767,32767, 511, 511, 101, 101, 101, 101, 506, - 32767,32767,32767,32767, 112, 100, 100, 100, 100, 100, - 104, 102,32767,32767,32767,32767, 222, 100,32767, 102, - 102,32767,32767, 222, 224, 211, 102, 226,32767, 558, - 559, 222, 102, 226, 226, 226, 246, 246, 483, 317, - 102, 100, 102, 102, 196, 317, 317,32767, 102, 483, - 317, 483, 317, 198, 317, 317, 317, 483, 317,32767, - 102, 317, 213, 100, 100, 317,32767,32767,32767, 496, - 32767,32767,32767,32767,32767,32767,32767, 221,32767,32767, - 32767,32767,32767,32767,32767, 526,32767, 543, 556, 430, - 431, 433, 541, 455, 456, 457, 458, 459, 460, 461, - 463, 588,32767, 500,32767,32767,32767,32767, 337, 598, - 32767, 598,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767, 599,32767, 539, - 32767,32767,32767,32767, 429, 9, 76, 489, 43, 44, - 52, 58, 517, 518, 519, 520, 514, 515, 521, 516, - 32767,32767, 522, 564,32767,32767, 540, 591,32767,32767, - 32767,32767,32767,32767, 139,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 526,32767, 137,32767, + 32767, 601,32767, 541,32767,32767,32767,32767, 431, 9, + 76, 491, 43, 44, 52, 58, 519, 520, 521, 522, + 516, 517, 523, 518,32767,32767, 524, 566,32767,32767, + 542, 593,32767,32767,32767,32767,32767,32767, 139,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 539,32767,32767,32767,32767, 313, 310,32767,32767,32767, + 528,32767, 137,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767, 541,32767,32767,32767,32767, 314, + 311,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767, 541,32767,32767, + 32767,32767,32767, 291,32767, 308,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767, 539,32767,32767,32767,32767,32767, 290, - 32767, 307,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767, 285,32767, - 32767, 379,32767,32767,32767,32767, 358,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767, 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, 350, 152 + 32767,32767, 286,32767,32767, 381, 498, 294, 296, 297, + 32767,32767,32767,32767, 360,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767, 153, 153, 3, 3, + 341, 153, 153, 153, 341, 341, 153, 341, 341, 341, + 153, 153, 153, 153, 153, 153, 280, 185, 262, 265, + 247, 247, 153, 352, 153 ); protected $goto = array( - 194, 194, 685, 425, 653, 346, 614, 650, 419, 310, - 311, 331, 569, 316, 424, 332, 426, 630, 1200, 930, - 693, 1051, 1201, 1204, 931, 1205, 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, 529, 530, 415, 531, - 533, 534, 535, 536, 537, 538, 539, 540, 1120, 166, - 167, 168, 193, 169, 170, 171, 164, 172, 173, 174, - 176, 212, 214, 217, 235, 240, 241, 242, 254, 255, - 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, - 278, 279, 313, 314, 315, 420, 421, 422, 574, 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, 1120, 199, 180, - 181, 182, 200, 196, 183, 237, 201, 199, 163, 202, - 203, 184, 204, 205, 206, 185, 207, 208, 209, 210, - 211, 275, 275, 275, 275, 843, 593, 646, 647, 560, - 664, 665, 666, 720, 629, 631, 840, 418, 651, 604, - 841, 350, 675, 679, 996, 683, 691, 992, 616, 616, - 817, 350, 350, 1252, 1252, 1252, 1252, 1252, 1252, 1252, - 1252, 1252, 1252, 1092, 1093, 350, 350, 874, 350, 848, - 1337, 896, 891, 892, 905, 849, 893, 846, 894, 895, - 847, 548, 900, 899, 901, 350, 391, 394, 554, 594, - 598, 1270, 1270, 1072, 1068, 1069, 1270, 1270, 1270, 1270, - 1270, 1270, 1270, 1270, 1270, 1270, 1268, 1268, 815, 347, - 348, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, - 1268, 1221, 1020, 1221, 1020, 1221, 836, 5, 1020, 6, - 1020, 1020, 1281, 961, 1020, 1020, 1020, 1020, 1020, 1020, - 1020, 1020, 1020, 1020, 1020, 349, 349, 349, 349, 1221, - 460, 460, 566, 678, 1221, 1221, 1221, 1221, 344, 460, - 1221, 1221, 1221, 1302, 1302, 1302, 1302, 602, 617, 620, - 621, 622, 623, 643, 644, 645, 695, 836, 912, 553, - 546, 1310, 913, 548, 532, 532, 821, 856, 982, 532, - 532, 532, 532, 532, 532, 532, 532, 532, 532, 543, - 473, 543, 868, 543, 928, 855, 928, 389, 475, 337, - 546, 553, 562, 563, 339, 572, 595, 609, 610, 1320, - 1320, 249, 249, 1026, 1025, 15, 821, 450, 821, 494, - 565, 495, 955, 955, 955, 955, 1320, 501, 450, 949, - 956, 839, 652, 1321, 1321, 1169, 1214, 246, 246, 246, - 246, 248, 250, 1323, 985, 959, 959, 957, 959, 719, - 1321, 545, 994, 989, 470, 1295, 1296, 953, 405, 692, - 917, 1108, 432, 541, 541, 541, 541, 612, 597, 452, - 444, 1029, 1030, 1001, 658, 444, 1292, 444, 1292, 674, - 1292, 860, 833, 656, 980, 836, 861, 547, 557, 854, - 321, 305, 547, 333, 557, 1297, 1298, 392, 456, 570, - 607, 1211, 944, 398, 858, 1304, 1304, 1304, 1304, 463, - 573, 464, 465, 608, 1004, 866, 403, 404, 1328, 1329, - 1057, 662, 1212, 663, 471, 407, 408, 409, 723, 676, - 870, 1288, 410, 624, 626, 627, 342, 427, 1216, 869, - 857, 1056, 1060, 427, 864, 1061, 1103, 966, 0, 0, - 964, 1027, 1027, 0, 0, 0, 657, 1038, 1034, 1035, - 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, - 444, 0, 1059, 444, 954, 0, 1290, 1290, 1059, 592, - 1085, 0, 696, 682, 682, 0, 502, 688, 1083, 0, - 0, 0, 1217, 1218, 272, 428, 1101, 873, 0, 544, - 831, 544, 0, 0, 0, 673, 938, 0, 0, 1015, - 1031, 1032, 0, 0, 0, 0, 0, 0, 1219, 1278, - 1279, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 196, 196, 1030, 702, 693, 429, 657, 474, 1306, 1307, + 423, 313, 314, 334, 573, 319, 428, 335, 430, 634, + 650, 651, 1061, 668, 669, 670, 849, 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, 533, 534, 419, + 535, 537, 538, 539, 540, 541, 542, 543, 544, 1131, + 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, + 176, 178, 215, 217, 220, 238, 243, 244, 245, 257, + 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, + 269, 281, 282, 316, 317, 318, 424, 425, 426, 578, + 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, 1131, 201, + 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, + 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, + 212, 213, 214, 852, 353, 865, 878, 866, 1066, 1070, + 278, 278, 278, 278, 353, 353, 597, 974, 618, 654, + 877, 564, 850, 864, 477, 729, 633, 635, 353, 353, + 655, 353, 479, 1348, 679, 683, 1006, 691, 700, 1002, + 910, 964, 911, 824, 552, 557, 550, 857, 353, 906, + 901, 902, 915, 858, 903, 855, 904, 905, 856, 596, + 1096, 909, 705, 1112, 882, 506, 696, 417, 1094, 1332, + 1332, 1083, 1078, 1079, 1080, 340, 550, 557, 566, 567, + 342, 576, 599, 613, 614, 422, 1332, 608, 1033, 1033, + 883, 15, 677, 948, 971, 1292, 1025, 1041, 1042, 394, + 397, 558, 598, 602, 570, 1232, 1030, 1232, 1030, 1232, + 349, 5, 1030, 6, 1030, 1030, 682, 347, 1030, 1030, + 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1313, + 1313, 1313, 1313, 1232, 848, 498, 845, 499, 1232, 1232, + 1232, 1232, 1321, 505, 1232, 1232, 1232, 552, 995, 969, + 969, 967, 969, 728, 992, 549, 1004, 999, 352, 352, + 352, 352, 922, 963, 408, 701, 923, 392, 620, 620, + 938, 569, 938, 1263, 1263, 1263, 1263, 1263, 1263, 1263, + 1263, 1263, 1263, 1281, 1281, 1103, 1104, 845, 1281, 1281, + 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 545, 545, + 545, 545, 656, 601, 1036, 1035, 1279, 1279, 1039, 1040, + 1225, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 536, 536, 252, 252, 1054, 536, 536, 536, 536, + 536, 536, 536, 536, 536, 536, 606, 621, 624, 625, + 626, 627, 647, 648, 649, 704, 628, 630, 631, 1180, + 249, 249, 249, 249, 251, 253, 1211, 940, 324, 308, + 1212, 1215, 941, 1216, 551, 561, 1331, 1331, 436, 551, + 456, 561, 448, 678, 395, 460, 662, 448, 1303, 448, + 1303, 336, 1303, 1331, 830, 842, 467, 577, 468, 469, + 464, 464, 875, 574, 611, 1339, 1340, 870, 431, 464, + 1334, 547, 401, 547, 431, 547, 845, 1315, 1315, 1315, + 1315, 954, 1037, 1037, 1308, 1309, 1223, 661, 1048, 1044, + 1045, 873, 690, 612, 830, 826, 830, 690, 1067, 454, + 1014, 690, 1227, 1299, 965, 965, 965, 965, 406, 407, + 454, 959, 966, 666, 867, 667, 475, 410, 411, 412, + 732, 680, 1071, 879, 413, 0, 976, 0, 345, 350, + 351, 1114, 448, 448, 448, 448, 448, 448, 448, 448, + 448, 448, 448, 0, 1069, 448, 927, 1119, 1301, 1301, + 1069, 0, 0, 616, 0, 0, 0, 1228, 1229, 1011, + 0, 0, 0, 0, 0, 840, 0, 869, 0, 660, + 990, 0, 0, 0, 0, 863, 0, 0, 0, 0, + 0, 1009, 1009, 1230, 1289, 1290, 0, 1222, 0, 0, + 275, 0, 0, 0, 0, 548, 0, 548, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 999, 999 + 0, 0, 0, 255, 255 ); protected $gotoCheck = array( - 42, 42, 72, 65, 65, 96, 55, 55, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 78, 78, - 9, 126, 78, 78, 78, 78, 42, 42, 42, 42, + 42, 42, 72, 9, 72, 65, 65, 174, 174, 174, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 85, 85, 126, 85, 85, 85, 26, 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, @@ -773,97 +777,97 @@ 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, 23, 23, 23, 23, 15, 129, 85, 85, 48, - 85, 85, 85, 48, 48, 48, 26, 13, 48, 13, - 27, 14, 48, 48, 48, 48, 48, 48, 107, 107, - 7, 14, 14, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 143, 143, 14, 14, 45, 14, 15, - 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 14, 64, 15, 64, 14, 58, 58, 58, 58, - 58, 168, 168, 15, 15, 15, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 169, 169, 6, 96, - 96, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 72, 72, 72, 72, 72, 22, 46, 72, 46, - 72, 72, 14, 49, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 24, 24, 24, 24, 72, - 148, 148, 170, 14, 72, 72, 72, 72, 177, 148, - 72, 72, 72, 9, 9, 9, 9, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 22, 72, 75, - 75, 179, 72, 14, 171, 171, 12, 35, 102, 171, - 171, 171, 171, 171, 171, 171, 171, 171, 171, 19, - 83, 19, 35, 19, 9, 35, 9, 61, 83, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 180, - 180, 5, 5, 117, 117, 75, 12, 19, 12, 154, - 103, 154, 19, 19, 19, 19, 180, 154, 19, 19, - 19, 25, 63, 181, 181, 150, 14, 5, 5, 5, - 5, 5, 5, 180, 25, 25, 25, 25, 25, 25, - 181, 25, 25, 25, 174, 174, 174, 92, 92, 92, - 17, 17, 112, 106, 106, 106, 106, 17, 106, 82, - 23, 118, 118, 17, 119, 23, 129, 23, 129, 115, - 129, 17, 18, 17, 17, 22, 39, 9, 9, 17, - 167, 167, 9, 29, 9, 176, 176, 9, 9, 2, - 2, 17, 91, 28, 37, 129, 129, 129, 129, 9, - 9, 9, 9, 79, 109, 9, 81, 81, 9, 9, - 128, 81, 159, 81, 156, 81, 81, 81, 98, 81, - 41, 129, 81, 84, 84, 84, 81, 116, 20, 16, - 16, 16, 16, 116, 9, 131, 146, 95, -1, -1, - 16, 116, 116, -1, -1, -1, 116, 116, 116, 116, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, -1, 129, 23, 16, -1, 129, 129, 129, 8, - 8, -1, 8, 8, 8, -1, 8, 8, 8, -1, - -1, -1, 20, 20, 24, 88, 16, 16, -1, 24, - 20, 24, -1, -1, -1, 88, 88, -1, -1, 88, - 88, 88, -1, -1, -1, -1, -1, -1, 20, 20, - 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 42, 42, 42, 15, 14, 35, 16, 16, 16, 16, + 23, 23, 23, 23, 14, 14, 129, 16, 55, 55, + 35, 48, 27, 35, 83, 48, 48, 48, 14, 14, + 48, 14, 83, 14, 48, 48, 48, 48, 48, 48, + 64, 16, 64, 6, 14, 75, 75, 15, 14, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 8, + 8, 15, 8, 16, 16, 8, 8, 43, 8, 181, + 181, 15, 15, 15, 15, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 13, 181, 13, 88, 88, + 45, 75, 88, 88, 49, 14, 88, 88, 88, 58, + 58, 58, 58, 58, 170, 72, 72, 72, 72, 72, + 96, 46, 72, 46, 72, 72, 14, 177, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 9, + 9, 9, 9, 72, 25, 154, 22, 154, 72, 72, + 72, 72, 179, 154, 72, 72, 72, 14, 25, 25, + 25, 25, 25, 25, 102, 25, 25, 25, 24, 24, + 24, 24, 72, 92, 92, 92, 72, 61, 107, 107, + 9, 103, 9, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 168, 168, 143, 143, 22, 168, 168, + 168, 168, 168, 168, 168, 168, 168, 168, 106, 106, + 106, 106, 63, 106, 117, 117, 169, 169, 118, 118, + 14, 169, 169, 169, 169, 169, 169, 169, 169, 169, + 169, 171, 171, 5, 5, 113, 171, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 84, 84, 84, 150, + 5, 5, 5, 5, 5, 5, 78, 78, 167, 167, + 78, 78, 78, 78, 9, 9, 180, 180, 112, 9, + 82, 9, 23, 115, 9, 9, 119, 23, 129, 23, + 129, 29, 129, 180, 12, 18, 9, 9, 9, 9, + 148, 148, 9, 2, 2, 9, 9, 39, 116, 148, + 180, 19, 28, 19, 116, 19, 22, 129, 129, 129, + 129, 91, 116, 116, 176, 176, 159, 116, 116, 116, + 116, 9, 7, 79, 12, 7, 12, 7, 128, 19, + 109, 7, 20, 129, 19, 19, 19, 19, 81, 81, + 19, 19, 19, 81, 37, 81, 156, 81, 81, 81, + 98, 81, 131, 41, 81, -1, 95, -1, 81, 96, + 96, 146, 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, 20, 20, 17, + -1, -1, -1, -1, -1, 20, -1, 17, -1, 17, + 17, -1, -1, -1, -1, 17, -1, -1, -1, -1, + -1, 106, 106, 20, 20, 20, -1, 17, -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, 5, 5, -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, 5, 5 ); protected $gotoBase = array( - 0, 0, -250, 0, 0, 360, 235, 181, 522, 7, - 0, 0, 33, -156, -113, -178, 43, -49, 126, 72, - 100, 0, -9, 158, 282, 377, 172, 176, 120, 150, - 0, 0, 0, 0, 0, -39, 0, 119, 0, 116, - 0, 45, -1, 0, 0, 195, -456, 0, -529, 250, - 0, 0, 0, 0, 0, -33, 0, 0, 182, 0, - 0, 306, 0, 143, 203, -235, 0, 0, 0, 0, - 0, 0, -6, 0, 0, -21, 0, 0, -385, 124, - -46, -19, 144, -123, 10, -538, 0, 0, 275, 0, - 0, 127, 106, 0, 0, 60, -472, 0, 76, 0, - 0, 0, 294, 328, 0, 0, 386, -50, 0, 99, - 0, 0, 138, 0, 0, 149, 219, 87, 139, 137, - 0, 0, 0, 0, 0, 0, 19, 0, 101, 159, - 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -69, 0, 0, 58, 0, 257, 0, - 114, 0, 0, 0, -120, 0, 40, 0, 0, 108, - 0, 0, 0, 0, 0, 0, 0, 122, -7, 8, - 264, 86, 0, 0, 107, 0, 78, 269, 0, 291, - 55, 79, 0, 0 + 0, 0, -255, 0, 0, 382, 190, 475, 211, -10, + 0, 0, 148, -91, -133, -183, -284, 73, 136, 191, + 101, 0, 18, 167, 315, 290, 22, 178, 126, 145, + 0, 0, 0, 0, 0, -204, 0, 166, 0, 134, + 0, 74, -1, 215, 0, 234, -461, 0, -526, 230, + 0, 0, 0, 0, 0, 138, 0, 0, 214, 0, + 0, 285, 0, 120, 180, -236, 0, 0, 0, 0, + 0, 0, -5, 0, 0, -138, 0, 0, 10, 141, + 40, 9, 152, -283, -71, -694, 0, 0, -31, 0, + 0, 143, 19, 0, 0, 75, -211, 0, 105, 0, + 0, 0, 279, 288, 0, 0, 330, 87, 0, 122, + 0, 0, 151, 112, 0, 150, 187, 85, 83, 146, + 0, 0, 0, 0, 0, 0, 20, 0, 116, 168, + 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 70, 0, 0, 79, 0, 416, 0, + 135, 0, 0, 0, -198, 0, 68, 0, 0, 109, + 0, 0, 0, 0, 0, 0, 0, 97, 102, 125, + 235, 140, 0, 0, -293, 0, 104, 247, 0, 271, + 119, -78, 0, 0 ); protected $gotoDefault = array( - -32768, 506, 727, 4, 728, 921, 804, 813, 590, 523, - 694, 343, 618, 416, 1286, 898, 1107, 571, 832, 1230, - 1238, 451, 835, 326, 717, 880, 881, 882, 395, 381, - 387, 393, 641, 619, 488, 867, 447, 859, 480, 862, - 446, 871, 162, 413, 504, 875, 3, 877, 550, 908, - 382, 885, 383, 669, 887, 556, 889, 890, 390, 396, - 397, 1112, 564, 615, 902, 253, 558, 903, 380, 904, - 911, 385, 388, 680, 459, 499, 493, 406, 1087, 559, - 601, 638, 441, 467, 613, 625, 611, 474, 1023, 411, - 325, 943, 951, 481, 457, 965, 345, 973, 725, 1119, - 632, 483, 981, 633, 988, 991, 524, 525, 472, 1003, - 268, 1006, 484, 1044, 659, 1017, 1018, 660, 634, 1040, - 635, 661, 636, 1042, 466, 591, 1050, 448, 1058, 1274, - 449, 1062, 262, 1065, 274, 412, 429, 1070, 1071, 8, - 1077, 686, 687, 10, 273, 503, 1102, 681, 445, 1118, - 433, 1188, 1190, 552, 485, 1208, 1207, 672, 500, 1213, - 442, 1277, 443, 526, 468, 312, 527, 304, 329, 309, - 542, 291, 330, 528, 469, 1283, 1291, 327, 30, 1311, - 1322, 338, 568, 606 + -32768, 510, 736, 4, 737, 931, 813, 822, 594, 527, + 703, 346, 622, 420, 1297, 908, 1118, 575, 841, 1241, + 1249, 455, 844, 329, 726, 890, 891, 892, 398, 384, + 390, 396, 645, 623, 492, 876, 451, 868, 484, 871, + 450, 880, 164, 416, 508, 884, 3, 887, 554, 918, + 385, 895, 386, 673, 897, 560, 899, 900, 393, 399, + 400, 1123, 568, 619, 912, 256, 562, 913, 383, 914, + 921, 388, 391, 684, 463, 503, 497, 409, 1098, 563, + 605, 642, 445, 471, 617, 629, 615, 478, 432, 414, + 328, 953, 961, 485, 461, 975, 348, 983, 734, 1130, + 636, 487, 991, 637, 998, 1001, 528, 529, 476, 1013, + 271, 1016, 488, 12, 663, 1027, 1028, 664, 638, 1050, + 639, 665, 640, 1052, 470, 595, 1060, 452, 1068, 1285, + 453, 1072, 265, 1075, 277, 415, 433, 1081, 1082, 9, + 1088, 694, 695, 11, 276, 507, 1113, 685, 449, 1129, + 437, 1199, 1201, 556, 489, 1219, 1218, 676, 504, 1224, + 446, 1288, 447, 530, 472, 315, 531, 307, 332, 312, + 546, 294, 333, 532, 473, 1294, 1302, 330, 31, 1322, + 1333, 341, 572, 610 ); protected $ruleToNonTerminal = array( @@ -882,30 +886,30 @@ class Php7 extends \PhpParser\ParserAbstract 4, 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, + 45, 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, + 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, 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, @@ -915,20 +919,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, 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, 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( @@ -947,53 +951,53 @@ class Php7 extends \PhpParser\ParserAbstract 3, 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, 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, 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, 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, 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, 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() { @@ -1456,20 +1460,20 @@ protected function initReduceCallbacks() { $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 150 => 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); }, 151 => 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); }, 152 => 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)]; }; }, 153 => 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(); }, 154 => 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)]; }, 155 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; @@ -1478,9 +1482,12 @@ protected function initReduceCallbacks() { $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); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 158 => function ($stackPos) { + throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 159 => 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', []))); }; @@ -1490,46 +1497,46 @@ protected function initReduceCallbacks() { } }, - 159 => function ($stackPos) { + 160 => 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); }, - 160 => function ($stackPos) { + 161 => 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); }, - 161 => function ($stackPos) { + 162 => function ($stackPos) { $this->semValue = new Stmt\While_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); }, - 162 => function ($stackPos) { + 163 => 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); }, - 163 => function ($stackPos) { + 164 => 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); }, - 164 => function ($stackPos) { + 165 => function ($stackPos) { $this->semValue = new Stmt\Switch_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); }, - 165 => function ($stackPos) { + 166 => function ($stackPos) { $this->semValue = new Stmt\Break_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 166 => function ($stackPos) { + 167 => function ($stackPos) { $this->semValue = new Stmt\Continue_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 167 => function ($stackPos) { + 168 => function ($stackPos) { $this->semValue = new Stmt\Return_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 168 => function ($stackPos) { + 169 => function ($stackPos) { $this->semValue = new Stmt\Global_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 169 => function ($stackPos) { + 170 => function ($stackPos) { $this->semValue = new Stmt\Static_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 170 => function ($stackPos) { + 171 => function ($stackPos) { $this->semValue = new Stmt\Echo_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 171 => function ($stackPos) { + 172 => function ($stackPos) { $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 172 => function ($stackPos) { + 173 => function ($stackPos) { $e = $this->semStack[$stackPos-(2-1)]; if ($e instanceof Expr\Throw_) { @@ -1541,1134 +1548,1132 @@ protected function initReduceCallbacks() { } }, - 173 => function ($stackPos) { + 174 => function ($stackPos) { $this->semValue = new Stmt\Unset_($this->semStack[$stackPos-(5-3)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); }, - 174 => function ($stackPos) { + 175 => 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); }, - 175 => function ($stackPos) { + 176 => 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); }, - 176 => function ($stackPos) { + 177 => 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); }, - 177 => function ($stackPos) { + 178 => function ($stackPos) { $this->semValue = new Stmt\Declare_($this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); }, - 178 => function ($stackPos) { + 179 => 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); }, - 179 => function ($stackPos) { + 180 => function ($stackPos) { $this->semValue = new Stmt\Goto_($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 180 => function ($stackPos) { + 181 => function ($stackPos) { $this->semValue = new Stmt\Label($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 181 => function ($stackPos) { + 182 => function ($stackPos) { $this->semValue = array(); /* means: no statement */ }, - 182 => function ($stackPos) { + 183 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 183 => function ($stackPos) { + 184 => 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 */ }, - 184 => function ($stackPos) { + 185 => function ($stackPos) { $this->semValue = array(); }, - 185 => function ($stackPos) { + 186 => function ($stackPos) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }, - 186 => function ($stackPos) { + 187 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, - 187 => function ($stackPos) { + 188 => function ($stackPos) { $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; }, - 188 => function ($stackPos) { + 189 => 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); }, - 189 => function ($stackPos) { + 190 => function ($stackPos) { $this->semValue = null; }, - 190 => function ($stackPos) { + 191 => function ($stackPos) { $this->semValue = new Stmt\Finally_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, - 191 => function ($stackPos) { + 192 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(2-1)]; }, - 192 => function ($stackPos) { + 193 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, - 193 => function ($stackPos) { + 194 => function ($stackPos) { $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; }, - 194 => function ($stackPos) { + 195 => function ($stackPos) { $this->semValue = false; }, - 195 => function ($stackPos) { + 196 => function ($stackPos) { $this->semValue = true; }, - 196 => function ($stackPos) { + 197 => function ($stackPos) { $this->semValue = false; }, - 197 => function ($stackPos) { + 198 => function ($stackPos) { $this->semValue = true; }, - 198 => function ($stackPos) { + 199 => function ($stackPos) { $this->semValue = false; }, - 199 => function ($stackPos) { + 200 => function ($stackPos) { $this->semValue = true; }, - 200 => function ($stackPos) { + 201 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(3-2)]; }, - 201 => function ($stackPos) { + 202 => function ($stackPos) { $this->semValue = []; }, - 202 => function ($stackPos) { + 203 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 203 => function ($stackPos) { + 204 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 204 => function ($stackPos) { + 205 => 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); }, - 205 => function ($stackPos) { + 206 => 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); }, - 206 => function ($stackPos) { + 207 => 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)); }, - 207 => function ($stackPos) { + 208 => 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)); }, - 208 => function ($stackPos) { + 209 => 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)); }, - 209 => function ($stackPos) { + 210 => 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); }, - 210 => function ($stackPos) { + 211 => 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)); }, - 211 => function ($stackPos) { - $this->semValue = null; - }, 212 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-2)]; + $this->semValue = null; }, 213 => function ($stackPos) { - $this->semValue = null; + $this->semValue = $this->semStack[$stackPos-(2-2)]; }, 214 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-2)]; + $this->semValue = null; }, 215 => function ($stackPos) { - $this->semValue = 0; + $this->semValue = $this->semStack[$stackPos-(2-2)]; }, 216 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = 0; }, 217 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 218 => 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)]; }, 219 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_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)]; }, 220 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_FINAL; + $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; }, 221 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_READONLY; + $this->semValue = Stmt\Class_::MODIFIER_FINAL; }, 222 => function ($stackPos) { - $this->semValue = null; + $this->semValue = Stmt\Class_::MODIFIER_READONLY; }, 223 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-2)]; + $this->semValue = null; }, 224 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = $this->semStack[$stackPos-(2-2)]; }, 225 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-2)]; + $this->semValue = array(); }, 226 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = $this->semStack[$stackPos-(2-2)]; }, 227 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-2)]; + $this->semValue = array(); }, 228 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = $this->semStack[$stackPos-(2-2)]; }, 229 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 230 => 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)]); }, 231 => 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)]; }, 232 => 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)]); }, 233 => 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)]; }, 234 => 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)]); }, 235 => 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)]; }, 236 => 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)]); }, 237 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(4-2)]; + $this->semValue = null; }, 238 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = $this->semStack[$stackPos-(4-2)]; }, 239 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 240 => 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)]); }, 241 => function ($stackPos) { - $this->semValue = new Stmt\DeclareDeclare($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)]; }, 242 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 243 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(4-3)]; + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 244 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(4-2)]; + $this->semValue = $this->semStack[$stackPos-(4-3)]; }, 245 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(5-3)]; + $this->semValue = $this->semStack[$stackPos-(4-2)]; }, 246 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = $this->semStack[$stackPos-(5-3)]; }, 247 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = array(); }, 248 => 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)]; }, 249 => 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); }, 250 => 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); }, 251 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 252 => 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]; }, 253 => 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); }, 254 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = []; }, 255 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 256 => 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)]); }, 257 => 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)]; }, 258 => 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); }, 259 => 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); }, 260 => 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)]); }, 261 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = $this->semStack[$stackPos-(4-2)]; }, 262 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = array(); }, 263 => 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)]; }, 264 => 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); }, 265 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = array(); }, 266 => 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)]; }, 267 => 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); }, 268 => 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; }, 269 => 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); }, 270 => 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; }, 271 => 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); }, 272 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(2-2)], true); + $this->semValue = array($this->semStack[$stackPos-(1-1)], false); }, 273 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)], false); + $this->semValue = array($this->semStack[$stackPos-(2-2)], true); }, 274 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos-(1-1)], false); }, 275 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = array($this->semStack[$stackPos-(1-1)], false); }, 276 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 277 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semValue = array(); }, 278 => 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)]); }, 279 => function ($stackPos) { - $this->semValue = 0; + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; }, 280 => 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; }, 281 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_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)]; }, 282 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; + $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; }, 283 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; + $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; }, 284 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_READONLY; + $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; }, 285 => 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 = Stmt\Class_::MODIFIER_READONLY; }, 286 => 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); }, 287 => 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); }, 288 => 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)]); }, 289 => 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)]; }, 290 => 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); }, 291 => 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); }, 292 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 293 => function ($stackPos) { - $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 294 => function ($stackPos) { - $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]); + $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 295 => function ($stackPos) { - $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos-(1-1)]); }, 296 => 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); }, 297 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 298 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 299 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]); + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 300 => 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)]); }, 301 => 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)]; }, 302 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 303 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]); + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 304 => 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)]); }, 305 => 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)]; }, 306 => 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)]); }, 307 => 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)]; }, 308 => 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); }, 309 => 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)]); }, 310 => 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)]; }, 311 => 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); }, 312 => 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)]; }, 313 => 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); }, 314 => 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); }, 315 => function ($stackPos) { - $this->semValue = null; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 316 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = null; }, 317 => function ($stackPos) { - $this->semValue = null; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 318 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-2)]; + $this->semValue = null; }, 319 => function ($stackPos) { - $this->semValue = null; + $this->semValue = $this->semStack[$stackPos-(2-2)]; }, 320 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = null; }, 321 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(4-2)]; + $this->semValue = array(); }, 322 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(3-2)]); + $this->semValue = $this->semStack[$stackPos-(4-2)]; }, 323 => function ($stackPos) { - $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos-(3-2)]); }, 324 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 325 => 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)]); }, 326 => 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)]; }, 327 => 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); }, 328 => 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); }, 329 => 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); }, 330 => 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)]); }, 331 => 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)]; }, 332 => 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)]; }, 333 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 334 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 335 => 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)]; }, 336 => 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)]; }, 337 => function ($stackPos) { - $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 338 => function ($stackPos) { - $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 339 => 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 Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 340 => 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)]; } }, 341 => function ($stackPos) { + $this->semValue = array(); + }, + 342 => 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)]; }, - 342 => function ($stackPos) { + 343 => 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)); }, - 343 => function ($stackPos) { + 344 => 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)); }, - 344 => 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)); - }, 345 => 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)); }, 346 => 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)); }, 347 => 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); }, 348 => 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); }, 349 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = null; /* will be skipped */ }, 350 => function ($stackPos) { $this->semValue = array(); }, 351 => 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)]; }, 352 => 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(); }, 353 => 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)]; }, 354 => 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); }, 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-(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); }, 356 => 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); }, 357 => 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); }, 358 => 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); }, 359 => function ($stackPos) { - $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]); + $this->semValue = array($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)]); }, 360 => function ($stackPos) { - $this->semValue = null; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 361 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = array(null, $this->semStack[$stackPos-(1-1)]); }, 362 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = null; }, 363 => function ($stackPos) { - $this->semValue = 0; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 364 => function ($stackPos) { - $this->semValue = 0; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 365 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = 0; }, 366 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = 0; }, 367 => 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)]; }, 368 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 369 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_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)]; }, 370 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; + $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; }, 371 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_STATIC; + $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; }, 372 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; }, 373 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_FINAL; + $this->semValue = Stmt\Class_::MODIFIER_STATIC; }, 374 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_READONLY; + $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; }, 375 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = Stmt\Class_::MODIFIER_FINAL; }, 376 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semValue = Stmt\Class_::MODIFIER_READONLY; }, 377 => 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)]; }, 378 => 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)]); }, 379 => function ($stackPos) { - $this->semValue = new Stmt\PropertyProperty($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)]; }, 380 => function ($stackPos) { - $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Node\VarLikeIdentifier(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 381 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(1-1)], null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 382 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 383 => 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)]; }, 384 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 385 => function ($stackPos) { - $this->semValue = array(); + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; }, 386 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 387 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = array(); }, 388 => 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)]; }, 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); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 390 => function ($stackPos) { $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 391 => 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->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 392 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = new Expr\Assign($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 393 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 394 => function ($stackPos) { - $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 395 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 396 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\Clone_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 397 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 398 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 399 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 400 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 401 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 402 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 403 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 404 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 405 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 406 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 407 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 408 => function ($stackPos) { - $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 409 => function ($stackPos) { - $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 410 => function ($stackPos) { - $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\PostInc($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 411 => function ($stackPos) { - $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\PreInc($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 412 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\PostDec($this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 413 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\PreDec($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 414 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 415 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 416 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 417 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 418 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 419 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 420 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 421 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 422 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 423 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 424 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 425 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 426 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 427 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 428 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 429 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 430 => function ($stackPos) { - $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 431 => function ($stackPos) { - $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 432 => function ($stackPos) { - $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 433 => function ($stackPos) { - $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 434 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 435 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 436 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 437 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 438 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 439 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 440 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 441 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 442 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 443 => function ($stackPos) { - $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 444 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 445 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); + $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 446 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 447 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(5-1)], $this->semStack[$stackPos-(5-3)], $this->semStack[$stackPos-(5-5)], $this->startAttributeStack[$stackPos-(5-1)] + $this->endAttributes); }, 448 => function ($stackPos) { - $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = new Expr\Ternary($this->semStack[$stackPos-(4-1)], null, $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 449 => function ($stackPos) { - $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 450 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\Isset_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 451 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\Empty_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 452 => function ($stackPos) { - $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 453 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 454 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\Eval_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 455 => function ($stackPos) { - $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 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); + }, + 457 => function ($stackPos) { + $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 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) { + 465 => function ($stackPos) { $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 464 => function ($stackPos) { + 466 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 465 => function ($stackPos) { + 467 => function ($stackPos) { $this->semValue = new Expr\ShellExec($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 466 => function ($stackPos) { + 468 => function ($stackPos) { $this->semValue = new Expr\Print_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 467 => function ($stackPos) { + 469 => function ($stackPos) { $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 468 => function ($stackPos) { + 470 => function ($stackPos) { $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(2-2)], null, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 469 => function ($stackPos) { + 471 => function ($stackPos) { $this->semValue = new Expr\Yield_($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-2)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, - 470 => function ($stackPos) { + 472 => function ($stackPos) { $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 471 => function ($stackPos) { + 473 => function ($stackPos) { $this->semValue = new Expr\Throw_($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 472 => function ($stackPos) { + 474 => 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); }, - 473 => function ($stackPos) { + 475 => 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); }, - 474 => function ($stackPos) { + 476 => 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); }, - 475 => function ($stackPos) { + 477 => 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); }, - 476 => function ($stackPos) { + 478 => 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); }, - 477 => function ($stackPos) { + 479 => 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); }, - 478 => function ($stackPos) { + 480 => 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); }, - 479 => function ($stackPos) { + 481 => 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); }, - 480 => function ($stackPos) { + 482 => 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); }, - 481 => function ($stackPos) { + 483 => function ($stackPos) { $this->semValue = new Expr\New_($this->semStack[$stackPos-(3-2)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 482 => function ($stackPos) { + 484 => function ($stackPos) { list($class, $ctorArgs) = $this->semStack[$stackPos-(2-2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 483 => function ($stackPos) { + 485 => function ($stackPos) { $this->semValue = array(); }, - 484 => function ($stackPos) { + 486 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(4-3)]; }, - 485 => function ($stackPos) { + 487 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(2-1)]; }, - 486 => function ($stackPos) { + 488 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, - 487 => function ($stackPos) { + 489 => function ($stackPos) { $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; }, - 488 => function ($stackPos) { + 490 => function ($stackPos) { $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos-(2-2)], $this->semStack[$stackPos-(2-1)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 489 => function ($stackPos) { + 491 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 490 => function ($stackPos) { + 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); }, - 491 => function ($stackPos) { + 493 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, - 492 => function ($stackPos) { + 494 => 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) { + 495 => 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); }, - 494 => function ($stackPos) { + 496 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 495 => function ($stackPos) { + 497 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 496 => function ($stackPos) { + 498 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 497 => function ($stackPos) { + 499 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 498 => function ($stackPos) { + 500 => function ($stackPos) { $this->semValue = new Name\FullyQualified(substr($this->semStack[$stackPos-(1-1)], 1), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 499 => function ($stackPos) { + 501 => function ($stackPos) { $this->semValue = new Name\Relative(substr($this->semStack[$stackPos-(1-1)], 10), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 500 => function ($stackPos) { + 502 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 501 => function ($stackPos) { + 503 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 502 => function ($stackPos) { + 504 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(3-2)]; }, - 503 => function ($stackPos) { + 505 => function ($stackPos) { $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; }, - 504 => function ($stackPos) { + 506 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 505 => function ($stackPos) { + 507 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 506 => function ($stackPos) { + 508 => function ($stackPos) { $this->semValue = null; }, - 507 => function ($stackPos) { + 509 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(3-2)]; }, - 508 => function ($stackPos) { + 510 => function ($stackPos) { $this->semValue = array(); }, - 509 => function ($stackPos) { + 511 => function ($stackPos) { $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos-(1-1)], '`'), $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes)); }, - 510 => function ($stackPos) { + 512 => function ($stackPos) { foreach ($this->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', true); } }; $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 511 => function ($stackPos) { + 513 => function ($stackPos) { $this->semValue = array(); }, - 512 => function ($stackPos) { + 514 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 513 => function ($stackPos) { + 515 => function ($stackPos) { $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 514 => function ($stackPos) { + 516 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 515 => function ($stackPos) { + 517 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 516 => function ($stackPos) { + 518 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 517 => function ($stackPos) { + 519 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 518 => function ($stackPos) { + 520 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 519 => function ($stackPos) { + 521 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 520 => function ($stackPos) { + 522 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 521 => function ($stackPos) { + 523 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 522 => function ($stackPos) { + 524 => function ($stackPos) { $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, - 523 => function ($stackPos) { + 525 => 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; }, - 524 => function ($stackPos) { + 526 => 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); }, - 525 => function ($stackPos) { + 527 => 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); }, - 526 => function ($stackPos) { + 528 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 527 => function ($stackPos) { + 529 => function ($stackPos) { $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 528 => function ($stackPos) { + 530 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; foreach ($this->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs); }, - 529 => function ($stackPos) { - $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); - }, - 530 => function ($stackPos) { - $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); - }, 531 => 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); }, 532 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 533 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 534 => 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)]; }, 535 => 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)]; }, 536 => 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); }, 537 => 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); }, 538 => 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); }, 539 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = null; }, 540 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 541 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 542 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 543 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; @@ -2680,201 +2685,207 @@ protected function initReduceCallbacks() { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 546 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 547 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 548 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 549 => 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)]; }, 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 = $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); }, 552 => 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); }, 553 => 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)]; }, 554 => 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); }, 555 => 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); }, 556 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = null; }, 557 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 558 => 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)]; }, 559 => 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)]; }, 560 => 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); }, 561 => 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); }, 562 => 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)]; }, 563 => 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); }, 564 => 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); }, 565 => 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; }, 566 => 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; }, 567 => 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); }, 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 = $this->semStack[$stackPos-(1-1)]; }, 569 => 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); }, 570 => 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); }, 571 => 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); }, 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\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 573 => 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); }, 574 => 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); }, 575 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 576 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 577 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 578 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 579 => function ($stackPos) { - $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 580 => function ($stackPos) { - $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 581 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue); + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; }, 582 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; + $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 583 => 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] === null) array_pop($this->semValue); }, 584 => function ($stackPos) { - $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + $this->semValue = $this->semStack[$stackPos]; }, 585 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ }, 586 => function ($stackPos) { - $this->semValue = new Expr\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)]; }, 587 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 588 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 589 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 590 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 591 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 592 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 593 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 594 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true); }, 595 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = null; }, 596 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 597 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 598 => function ($stackPos) { - $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 599 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); }, 600 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 601 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 602 => 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)]; }, 603 => 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); }, 604 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $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); }, 605 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $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); }, 606 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 607 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 608 => function ($stackPos) { - $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); }, 609 => function ($stackPos) { - $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 610 => function ($stackPos) { - $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 611 => function ($stackPos) { + $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 612 => function ($stackPos) { + $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 613 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, ]; diff --git a/lib/PhpParser/PrettyPrinter/Standard.php b/lib/PhpParser/PrettyPrinter/Standard.php index c256e89785..9d30e4f036 100644 --- a/lib/PhpParser/PrettyPrinter/Standard.php +++ b/lib/PhpParser/PrettyPrinter/Standard.php @@ -814,7 +814,9 @@ protected function pStmt_ClassMethod(Stmt\ClassMethod $node) { protected function pStmt_ClassConst(Stmt\ClassConst $node) { 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) { diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index 6ed936fedd..4ac736f0f1 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -1278,6 +1278,7 @@ protected function initializeRemovalMap() { '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, @@ -1319,6 +1320,7 @@ protected function initializeInsertionMap() { '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], diff --git a/test/PhpParser/Builder/ClassConstTest.php b/test/PhpParser/Builder/ClassConstTest.php index ba3edcd40e..e11a834abe 100644 --- a/test/PhpParser/Builder/ClassConstTest.php +++ b/test/PhpParser/Builder/ClassConstTest.php @@ -142,6 +142,18 @@ public function testAddAttribute() { ); } + public function testType() { + $node = $this->createClassConstBuilder('TYPE', 1) + ->setType('int') + ->getNode(); + $this->assertEquals( + new Stmt\ClassConst( + [new Const_('TYPE', new LNumber(1))], + 0, [], [], new Identifier('int')), + $node + ); + } + /** * @dataProvider provideTestDefaultValues */ diff --git a/test/code/formatPreservation/insertionOfNullable.test b/test/code/formatPreservation/insertionOfNullable.test index 8d768a3a28..10231607fb 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/removalViaNull.test b/test/code/formatPreservation/removalViaNull.test index 35c40c81b8..2d76497301 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/errorHandling/recovery.test b/test/code/parser/errorHandling/recovery.test index 7754f8c3fc..c86d269f62 100644 --- a/test/code/parser/errorHandling/recovery.test +++ b/test/code/parser/errorHandling/recovery.test @@ -745,6 +745,7 @@ array( attrGroups: array( ) flags: 0 + type: null consts: array( 0: Const( name: Identifier( @@ -1508,6 +1509,7 @@ array( attrGroups: array( ) flags: 0 + type: null consts: array( 0: Const( name: Identifier( diff --git a/test/code/parser/semiReserved.test b/test/code/parser/semiReserved.test index 1d82e4309b..48c0b48869 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( diff --git a/test/code/parser/stmt/class/anonymous.test b/test/code/parser/stmt/class/anonymous.test index 923fce8400..3d9350f3c5 100644 --- a/test/code/parser/stmt/class/anonymous.test +++ b/test/code/parser/stmt/class/anonymous.test @@ -205,6 +205,7 @@ array( attrGroups: array( ) flags: 0 + type: null consts: array( 0: Const( name: Identifier( diff --git a/test/code/parser/stmt/class/constModifierErrors.test b/test/code/parser/stmt/class/constModifierErrors.test index 09e5404821..89bd943ee7 100644 --- a/test/code/parser/stmt/class/constModifierErrors.test +++ b/test/code/parser/stmt/class/constModifierErrors.test @@ -23,6 +23,7 @@ array( attrGroups: array( ) flags: MODIFIER_STATIC (8) + type: null consts: array( 0: Const( name: Identifier( @@ -61,6 +62,7 @@ array( attrGroups: array( ) flags: MODIFIER_ABSTRACT (16) + type: null consts: array( 0: Const( name: Identifier( @@ -99,6 +101,7 @@ array( attrGroups: array( ) flags: MODIFIER_READONLY (64) + type: null consts: array( 0: Const( name: Identifier( @@ -137,6 +140,7 @@ array( attrGroups: array( ) flags: MODIFIER_PUBLIC (1) + type: null consts: array( 0: Const( name: Identifier( @@ -150,4 +154,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 33d3d5ba6f..2bccd8ad31 100644 --- a/test/code/parser/stmt/class/constModifiers.test +++ b/test/code/parser/stmt/class/constModifiers.test @@ -27,6 +27,7 @@ array( attrGroups: array( ) flags: 0 + type: null consts: array( 0: Const( name: Identifier( @@ -42,6 +43,7 @@ array( attrGroups: array( ) flags: MODIFIER_PUBLIC (1) + type: null consts: array( 0: Const( name: Identifier( @@ -57,6 +59,7 @@ array( attrGroups: array( ) flags: MODIFIER_PROTECTED (2) + type: null consts: array( 0: Const( name: Identifier( @@ -72,6 +75,7 @@ array( attrGroups: array( ) flags: MODIFIER_PRIVATE (4) + type: null consts: array( 0: Const( name: Identifier( @@ -87,6 +91,7 @@ array( attrGroups: array( ) flags: MODIFIER_FINAL (32) + type: null consts: array( 0: Const( name: Identifier( @@ -100,4 +105,4 @@ array( ) ) ) -) \ No newline at end of file +) diff --git a/test/code/parser/stmt/class/simple.test b/test/code/parser/stmt/class/simple.test index 3beaccada3..894ab8d278 100644 --- a/test/code/parser/stmt/class/simple.test +++ b/test/code/parser/stmt/class/simple.test @@ -46,6 +46,7 @@ array( attrGroups: array( ) flags: 0 + type: null consts: array( 0: Const( name: Identifier( diff --git a/test/code/parser/stmt/class/typedConstants.test b/test/code/parser/stmt/class/typedConstants.test new file mode 100644 index 0000000000..4208fedcd1 --- /dev/null +++ b/test/code/parser/stmt/class/typedConstants.test @@ -0,0 +1,125 @@ +Typed constants +----- + Date: Sat, 20 May 2023 21:17:44 +0200 Subject: [PATCH 08/29] Support readonly anonymous classes --- grammar/php7.y | 4 +- .../Internal/PrintableNewAnonClassNode.php | 9 +- lib/PhpParser/Parser/Php7.php | 830 +++++++++--------- lib/PhpParser/PrettyPrinterAbstract.php | 1 + .../formatPreservation/modifierChange.test | 13 +- .../parser/stmt/class/readonlyAnonyous.test | 26 + .../prettyPrinter/expr/anonymousClass.test | 5 + 7 files changed, 467 insertions(+), 421 deletions(-) create mode 100644 test/code/parser/stmt/class/readonlyAnonyous.test diff --git a/grammar/php7.y b/grammar/php7.y index 494d36012f..97c16b65fd 100644 --- a/grammar/php7.y +++ b/grammar/php7.y @@ -949,8 +949,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/Internal/PrintableNewAnonClassNode.php b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php index 3eeac04a41..6763227014 100644 --- a/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +++ b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php @@ -19,6 +19,8 @@ class PrintableNewAnonClassNode extends Expr { /** @var Node\AttributeGroup[] PHP attribute groups */ public $attrGroups; + /** @var int Modifiers */ + public $flags; /** @var Node\Arg[] Arguments */ public $args; /** @var null|Node\Name Name of extended class */ @@ -29,11 +31,12 @@ class PrintableNewAnonClassNode extends Expr public $stmts; public function __construct( - array $attrGroups, array $args, Node\Name $extends = null, array $implements, + array $attrGroups, int $flags, array $args, Node\Name $extends = null, array $implements, array $stmts, array $attributes ) { parent::__construct($attributes); $this->attrGroups = $attrGroups; + $this->flags = $flags; $this->args = $args; $this->extends = $extends; $this->implements = $implements; @@ -46,7 +49,7 @@ public static function fromNewNode(Expr\New_ $newNode) { // 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() ); } @@ -56,6 +59,6 @@ public function getType() : string { } public function getSubNodeNames() : array { - return ['attrGroups', 'args', 'extends', 'implements', 'stmts']; + return ['attrGroups', 'flags', 'args', 'extends', 'implements', 'stmts']; } } diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php index c2304b2e93..3c0e336993 100644 --- a/lib/PhpParser/Parser/Php7.php +++ b/lib/PhpParser/Parser/Php7.php @@ -18,15 +18,15 @@ class Php7 extends \PhpParser\ParserAbstract { protected $tokenToSymbolMapSize = 396; - protected $actionTableSize = 1234; - protected $gotoTableSize = 625; + protected $actionTableSize = 1240; + protected $gotoTableSize = 629; protected $invalidSymbol = 168; protected $errorSymbol = 1; protected $defaultAction = -32766; protected $unexpectedTokenRule = 32767; - protected $YY2TBLSTATE = 433; + protected $YY2TBLSTATE = 434; protected $numNonLeafStates = 735; protected $symbolToName = array( @@ -245,138 +245,138 @@ class Php7 extends \PhpParser\ParserAbstract protected $action = array( 133, 134, 135, 579, 136, 137, 0, 747, 748, 749, - 138, 38, 326,-32766,-32766,-32766,-32766,-32766,-32766,-32767, + 138, 38, 327,-32766,-32766,-32766,-32766,-32766,-32766,-32767, -32767,-32767,-32767, 102, 103, 104, 105, 106, 1108, 1109, - 1110, 1107, 1106, 1105, 1111, 741, 740,-32766, 834,-32766, + 1110, 1107, 1106, 1105, 1111, 741, 740,-32766, 1231,-32766, -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767, - -32767, 2, 107, 108, 109, 750, 274, 380, 379, 986, - -32766,-32766,-32766, 104, 105, 106, 1023, 421, 110, 270, - 139, 402, 754, 755, 756, 757, 465, 466, 427, 937, + -32767, 2, 107, 108, 109, 750, 274, 381, 380,-32766, + -32766,-32766,-32766, 104, 105, 106, 1023, 422, 110, 265, + 139, 403, 754, 755, 756, 757, 466, 467, 428, 937, 291,-32766, 287,-32766,-32766, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 788, 580, 789, 790, - 791, 792, 780, 781, 343, 344, 783, 784, 769, 770, - 771, 773, 774, 775, 354, 815, 816, 817, 818, 819, + 791, 792, 780, 781, 344, 345, 783, 784, 769, 770, + 771, 773, 774, 775, 355, 815, 816, 817, 818, 819, 581, 776, 777, 582, 583, 809, 800, 798, 799, 812, 795, 796, 686, -544, 584, 585, 794, 586, 587, 588, - 589, 590, 591, -328, -592, 939, 1233, 16, 797, 592, + 589, 590, 591, -328, -592, -367, 1233, -367, 797, 592, 593, -592, 140,-32766,-32766,-32766, 133, 134, 135, 579, 136, 137, 1056, 747, 748, 749, 138, 38, 687, 1019, - 1018, 1017, 1020, -367,-32766, -367,-32766,-32766,-32766,-32766, - -32766,-32766,-32766,-32766,-32766,-32766, 355, 987, 1032, 688, - 689, 741, 740,-32766,-32766,-32766, 833, -544, -544, -589, + 1018, 1017, 1020, 390,-32766, 7,-32766,-32766,-32766,-32766, + -32766,-32766,-32766,-32766,-32766,-32766, 379, 380, 1032, 688, + 689, 741, 740,-32766,-32766,-32766, 422, -544, -544, -589, -32766,-32766,-32766, 1031,-32766, 127, -589, 1235, 1234, 1236, 1316, 750, -544, 290,-32766, 283,-32766,-32766,-32766,-32766, - -32766, 1235, 1234, 1236, -544, 270, 139, 402, 754, 755, - 756, 757, 35, 480, 427, 457, 458, 459, 389, 721, - 7, 758, 759, 760, 761, 762, 763, 764, 765, 766, + -32766, 1235, 1234, 1236, -544, 265, 139, 403, 754, 755, + 756, 757, 16, 481, 428, 458, 459, 460, 298, 721, + 35, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 788, 580, 789, 790, 791, 792, 780, 781, - 343, 344, 783, 784, 769, 770, 771, 773, 774, 775, - 354, 815, 816, 817, 818, 819, 581, 776, 777, 582, - 583, 809, 800, 798, 799, 812, 795, 796, 553, 823, + 344, 345, 783, 784, 769, 770, 771, 773, 774, 775, + 355, 815, 816, 817, 818, 819, 581, 776, 777, 582, + 583, 809, 800, 798, 799, 812, 795, 796, 129, 823, 584, 585, 794, 586, 587, 588, 589, 590, 591, -328, 83, 84, 85, -592, 797, 592, 593, -592, 149, 772, 742, 743, 744, 745, 746, 823, 747, 748, 749, 785, - 786, 37, -194, 86, 87, 88, 89, 90, 91, 92, + 786, 37, 145, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 291, 274, 1272, - 242, 1108, 1109, 1110, 1107, 1106, 1105, 1111, -589, 859, - 110, 860, -589, 481, 750,-32766,-32766,-32766, 1032, 129, - 142, 603, 1084, -583, 145, 1260, 325, -583, 751, 752, - 753, 754, 755, 756, 757, 254,-32766, 821,-32766,-32766, - -32766,-32766, 828, 290, 758, 759, 760, 761, 762, 763, + 103, 104, 105, 106, 107, 108, 109, 291, 274, 834, + 254, 1108, 1109, 1110, 1107, 1106, 1105, 1111, -589, 859, + 110, 860, -589, 482, 750,-32766,-32766,-32766,-32766,-32766, + 142, 603, 1084, 741, 740, 1260, 326, 986, 751, 752, + 753, 754, 755, 756, 757, 309,-32766, 821,-32766,-32766, + -32766,-32766, 242, 553, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 788, 811, 789, 790, 791, 792, 780, 781, 782, 810, 783, 784, 769, 770, 771, 773, 774, 775, 814, 815, 816, 817, 818, 819, 820, 776, 777, 778, 779, 809, 800, 798, 799, 812, 795, - 796,-32766,-32766, 787, 793, 794, 801, 802, 804, 803, - 805, 806, 1085, 609, 733, 1032, 832, 797, 808, 807, - 50, 51, 52, 511, 53, 54,-32766, 241, 829, 917, - 55, 56, -111, 57,-32766,-32766,-32766, -111, -194, -111, - 290, 14, 1345, 1300, 305, 1346, 309, -111, -111, -111, - -111, -111, -111, -111, -111,-32766, -193,-32766,-32766,-32766, - -272, 955, 956, 1100, 311, 859, 957, 860, 58, 59, - 323, 427, 952, -543, 60, 825, 61, 247, 248, 62, - 63, 64, 65, 66, 67, 68, 69, 1240, 28, 272, - 70, 443, 512, -342, 1231, 141, 1266, 1267, 513, -86, - 832, 325, 338, 917, 1264, 42, 25, 514, 939, 515, - 1029, 516, 907, 517, 831,-32766, 518, 519, 339, 378, - 379, 44, 45, 444, 375, 374, 368, 46, 520, 421, - 955, 956, 1032, 366, 337, 957, -541, -543, -543, 151, - 1226, 951, 522, 523, 524, 372, 1235, 1234, 1236, 360, - 1029, 827, -543, 1086, 525, 526, 708, 1254, 1255, 1256, - 1257, 1251, 1252, 297, -543, -86, -549, 387, 832, 1258, - 1253, 439, 1032, 1235, 1234, 1236, 298, -154, -154, -154, - 440, 71, 441, 321, 322, 325, 907, 919, 1320, 706, - 741, 740, -154, -542, -154, 1319, -154, 283, -154, 442, - -541, -541, 1231, 82, 652, 26, 671, 672, 373, 325, - 832, 838, -193, 1335, 152, -541, 154, 741, 740, 955, - 956, 150, 405,-32766, 521, -51, 155, -541, 156, 893, + 796, 311, 939, 787, 793, 794, 801, 802, 804, 803, + 805, 806, 323, 609, 1272, 1032, 832, 797, 808, 807, + 50, 51, 52, 512, 53, 54, 859, 241, 860, 917, + 55, 56, -111, 57,-32766,-32766,-32766, -111, 825, -111, + 290, 1300, 1345, 356, 305, 1346, 339, -111, -111, -111, + -111, -111, -111, -111, -111,-32766, -194,-32766,-32766,-32766, + -193, 955, 956, 828, -86, 987, 957, 833, 58, 59, + 340, 428, 951, -543, 60, 831, 61, 247, 248, 62, + 63, 64, 65, 66, 67, 68, 69, 1240, 28, 267, + 70, 444, 513, -342,-32766, 141, 1266, 1267, 514, 917, + 832, 326, -272, 917, 1264, 42, 25, 515, 939, 516, + 14, 517, 907, 518, 827, 369, 519, 520, 373, 708, + 1032, 44, 45, 445, 376, 375, 388, 46, 521, 711, + -86, 440, 1100, 367, 338, -542, 441, -543, -543, 829, + 1226, 442, 523, 524, 525, 290, 1235, 1234, 1236, 361, + 1029, 443, -543, 1086, 526, 527, 838, 1254, 1255, 1256, + 1257, 1251, 1252, 297, -543, 151, -549, -583, 832, 1258, + 1253, -583, 1032, 1235, 1234, 1236, 298, -154, -154, -154, + 152, 71, 907, 321, 322, 326, 907, 919, 1029, 706, + 832, 154, -154, 1335, -154, 155, -154, 283, -154, -542, + -542, 82, 1231, 1085, 1320, 733, 156, 326, 374, 158, + 1032, 1319, -194, -79, -542, -88, -193, 741, 740, 955, + 956, 652, 26,-32766, 522, -51, -542, 33, -548, 893, 951, -111, -111, -111, 32, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 158, 75, - 28, 376, 377, 325, 381, 382, 33, -542, -542, -79, - -59, 919, 832, 706, -154, -58, 1264, 124,-32766, -546, - 1240, 49, -542, 125, 1233, 36, 250, 1145, 1147, 643, - 644,-32766,-32766,-32766, -542,-32766, -548,-32766, -541,-32766, - 130, 131,-32766, 144, 159, 160, 1231,-32766,-32766,-32766, - -16, 161, 1226,-32766,-32766, 741, 740, 162, 163,-32766, - 418, 48, -4, 917, -88, -85, 525, 526,-32766, 1254, - 1255, 1256, 1257, 1251, 1252, -79, -75, -73, -72, -71, - -70, 1258, 1253, -546, -546, 301, 302, 741, 740, -69, - -68, 1055,-32766, 73, -67, -66, 322, 325, 1233, -47, - 371, 832, -541, -541, -18,-32766,-32766,-32766, 148,-32766, - -546,-32766, 128,-32766, 273, 284,-32766, -541, 722, 725, - 287,-32766,-32766,-32766,-32766, 299, 300,-32766,-32766, -541, - 1233, 916, 147,-32766, 418, 1231, 288,-32766,-32766,-32766, - -302,-32766,-32766,-32766, -298,-32766, 907, -111,-32766, 279, - 280, 285, 126,-32766,-32766,-32766,-32766, 286, 132,-32766, - -32766, 331, 289, 274, 110,-32766, 418, 292, 373, 293, - 434, 933, 74, 146,-32766, 296, 823, 298, 697, 955, - 956, 681, 75, 559, 521, 1347, 325, 653, 658, 851, - 951, -111, -111, -111, 832, 1115,-32766, 438, 641, 699, - 306,-32766, 555, 303, 917, 13, 1029, 1233, 310,-32766, - 659, 304, 10, 674,-32766,-32766,-32766, 462,-32766, 917, - -32766, 919,-32766, 706, -4,-32766, 491, 1240, 1032, 1032, - -32766,-32766,-32766,-32766, 675, 1271,-32766,-32766, 298, 1233, - 917, 40,-32766, 418, -577, 1265,-32766,-32766,-32766, 711, - -32766,-32766,-32766, 283,-32766, 917, -575,-32766, 0, 0, - 0, 486,-32766,-32766,-32766,-32766, 0, 917,-32766,-32766, - 1273, 1233, 571, 831,-32766, 418, 565, -507,-32766,-32766, - -32766, 1261,-32766,-32766,-32766, 712,-32766, 907, 917,-32766, - -497, 8, 17, 370,-32766,-32766,-32766, 713, 607, 917, - -32766,-32766, 907, -250, -250, -250,-32766, 418, 832, 373, - 935, 41, 730, 731, 898,-32766, 996, 973, 716, 980, - 955, 956, 970, 907, 981, 521, 896, 968, 1089, 723, - 893, 951, -111, -111, -111, 28, 1092, 1093, 907, -249, - -249, -249, 1231, 1090, 1091, 373, 1097, 832, 843, 1286, - 907, 1264, 1304, 1338, -111, 646, 955, 956, 34, 320, - 369, 521, 919,-32766, 706, -250, 893, 951, -111, -111, - -111, 907, 707, 710, 714, 715, 717, 919, 718, 706, - 719, 1231, 907, 720, 298, 724, 709, 1226, -511, 75, - 727, 894, 1342, 325, 1344, 854, 853, 862, 919, 945, - 706, -249, 526, 988, 1254, 1255, 1256, 1257, 1251, 1252, - 861, 1343, 944, 919, 942, 706, 1258, 1253, 943, 946, - -32766, 1217, 926, 936, 924, 972, 1233, 706, 73, 978, - 979, 322, 325,-32766,-32766,-32766, 1341,-32766, 1298,-32766, - 1287,-32766, 1305, 1311,-32766, 1314, 919, -549, 706,-32766, - -32766,-32766, -548, -547, -491,-32766,-32766, 919, 1, 706, - 29,-32766, 418, 30, 39, 43, 47, 72, 76, 77, - -32766, 78, 79, 80, 81, 143, 153, 157, 246, 327, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 367, 435, 0, -275, -273, -272, 19, 20, 21, - 22, 24, 404, 482, 483, 490, 493, 494, 495, 496, - 0, 500, 501, 502, 509, 692, 1244, 1185, 1262, 1058, - 1057, 1038, 1221, 1034, -277, -103, 18, 23, 27, 295, - 403, 600, 604, 632, 698, 1189, 1239, 1186, 1317, 0, - 1202, 0, 0, 325 + 116, 117, 118, 119, 120, 121, 122, 123, -59, 75, + 28, 671, 672, 326, -58, 36, 250, 919, 124, 706, + 125, 919, 832, 706, -154, 130, 1264, 131,-32766, -546, + 144, -541, 150, 406, 1233, 377, 378, 1145, 1147, 382, + 383,-32766,-32766,-32766, -85,-32766, 1055,-32766, -541,-32766, + 643, 644,-32766, 159, 160, 161, 1231,-32766,-32766,-32766, + 162, -79, 1226,-32766,-32766, 741, 740, 163, -302,-32766, + 419, -75, -4, 917, -73, 287, 526, 527,-32766, 1254, + 1255, 1256, 1257, 1251, 1252, -72, -71, -70, -69, -68, + -67, 1258, 1253, -546, -546, -541, -541, 741, 740, -66, + -47, -18,-32766, 73, 148, 917, 322, 326, 1233, 273, + -541, 284, -541, -541, 722,-32766,-32766,-32766, 725,-32766, + -546,-32766, -541,-32766, 916, 147,-32766, -541, 288, 289, + -298,-32766,-32766,-32766,-32766, 712, 279,-32766,-32766, -541, + 1233, 280, 285,-32766, 419, 48, 286,-32766,-32766,-32766, + 332,-32766,-32766,-32766, 292,-32766, 907, 293,-32766, 933, + 274, 1029, 917,-32766,-32766,-32766, 110, 681, 132,-32766, + -32766, 832, 146,-32766, 559,-32766, 419, 658, 374, 823, + 435, 1347, 74, 1032,-32766, 296, 653, 1115, 907, 955, + 956, 306, 713, 697, 522, 555, 303, 13, 310, 851, + 951, -111, -111, -111, 699, 463, 492, 952, 283, 299, + 300,-32766, 49, 674, 917, 304, 659, 1233, 675, 935, + 1271,-32766, 10, 1261,-32766,-32766,-32766, 641,-32766, 917, + -32766, 919,-32766, 706, -4,-32766, 126, 34, 917, 565, + -32766,-32766,-32766,-32766, 0, 907,-32766,-32766, 0, 1233, + 917, 0,-32766, 419, 0, 0,-32766,-32766,-32766, 716, + -32766,-32766,-32766, 919,-32766, 706, 1032,-32766, 723, 1273, + 0, 487,-32766,-32766,-32766,-32766, 301, 302,-32766,-32766, + -507, 1233, 571, -497,-32766, 419, 607, 8,-32766,-32766, + -32766, 372,-32766,-32766,-32766, 17,-32766, 907, 371,-32766, + 831, 298, 320, 128,-32766,-32766,-32766, 40, 370, 41, + -32766,-32766, 907, -250, -250, -250,-32766, 419, 730, 374, + 972, 907, 706, 731, 898,-32766, 996, 973, 727, 980, + 955, 956, 970, 907, 981, 522, 896, 968, 1089, 1092, + 893, 951, -111, -111, -111, 28, 1093, 1090, 1091, -249, + -249, -249, 1240, 1097, 707, 374, 843, 832, 1286, 1304, + 1338, 1264, 646, 1265, 710, 714, 955, 956, 715, 1240, + 717, 522, 919, 718, 706, -250, 893, 951, -111, -111, + -111, 719, -16, 720, 724, 709, -511, 919, 894, 706, + -577, 1231, 1342, 1344, 854, 853, 919, 1226, 706, -575, + 862, 945, 988, 861, 1343, 944, 942, 943, 919, 946, + 706, -249, 527, 1217, 1254, 1255, 1256, 1257, 1251, 1252, + 926, 936, 924, 978, 979, 1341, 1258, 1253, 1298, 1287, + -32766, 1305, 1311, 832, 1314, -275, 1233, -549, 73, -548, + -547, 322, 326,-32766,-32766,-32766, -491,-32766, 1,-32766, + 832,-32766, 29, 30,-32766, 39, 43, 47, 72,-32766, + -32766,-32766, 76, 77, 78,-32766,-32766, 1231, -111, -111, + 79,-32766, 419, -111, 80, 81, 143, 153, 157, -111, + -32766, 246, 328, 356, 1231, -111, -111, 357,-32766, 358, + -111, 359, 360, 361, 362, 363, -111, 364, 365, 366, + 368, 436, 0, -273, -272,-32766, 19, 20, 21, 298, + 22, 24, 405, 483, 75, 1202, 484, 491, 326, 494, + 0, 495, 496, 497, 501, 502, 298, 503, 510, 692, + 1244, 75, 0, 1185, 1262, 326, 1058, 1057, 1038, 1221, + 1034, -277, -103, 18, 23, 27, 295, 404, 600, 604, + 632, 698, 1189, 1239, 1186, 1317, 0, 0, 0, 326 ); protected $actionCheck = array( 2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 70, 9, 10, 11, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 51, 52, 116, 117, - 118, 119, 120, 121, 122, 37, 38, 30, 1, 32, + 118, 119, 120, 121, 122, 37, 38, 30, 116, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 8, 53, 54, 55, 57, 57, 106, 107, 31, + 43, 8, 53, 54, 55, 57, 57, 106, 107, 137, 9, 10, 11, 50, 51, 52, 1, 116, 69, 71, 72, 73, 74, 75, 76, 77, 134, 135, 80, 1, 30, 30, 30, 32, 33, 87, 88, 89, 90, 91, @@ -385,122 +385,122 @@ class Php7 extends \PhpParser\ParserAbstract 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 80, 70, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 8, 1, 122, 80, 8, 150, 151, + 142, 143, 144, 8, 1, 106, 80, 108, 150, 151, 152, 8, 154, 9, 10, 11, 2, 3, 4, 5, 6, 7, 164, 9, 10, 11, 12, 13, 116, 119, 120, 121, 122, 106, 30, 108, 32, 33, 34, 35, - 36, 37, 38, 9, 10, 11, 163, 159, 138, 137, - 138, 37, 38, 9, 10, 11, 159, 134, 135, 1, + 36, 37, 38, 9, 10, 11, 106, 107, 138, 137, + 138, 37, 38, 9, 10, 11, 116, 134, 135, 1, 9, 10, 11, 137, 30, 14, 8, 155, 156, 157, 1, 57, 149, 163, 30, 163, 32, 33, 34, 35, 36, 155, 156, 157, 161, 71, 72, 73, 74, 75, - 76, 77, 8, 31, 80, 129, 130, 131, 106, 161, - 108, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 76, 77, 8, 31, 80, 129, 130, 131, 158, 161, + 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, 127, 128, 129, 130, 131, 132, 133, 85, 80, + 126, 127, 128, 129, 130, 131, 132, 133, 8, 80, 136, 137, 138, 139, 140, 141, 142, 143, 144, 164, 9, 10, 11, 160, 150, 151, 152, 164, 154, 2, 3, 4, 5, 6, 7, 80, 9, 10, 11, 12, 13, 30, 8, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 30, 57, 146, - 14, 116, 117, 118, 119, 120, 121, 122, 160, 106, - 69, 108, 164, 161, 57, 9, 10, 11, 138, 8, - 161, 1, 1, 160, 8, 1, 167, 164, 71, 72, + 49, 50, 51, 52, 53, 54, 55, 30, 57, 1, + 8, 116, 117, 118, 119, 120, 121, 122, 160, 106, + 69, 108, 164, 161, 57, 9, 10, 11, 9, 10, + 161, 1, 1, 37, 38, 1, 167, 31, 71, 72, 73, 74, 75, 76, 77, 8, 30, 80, 32, 33, - 34, 35, 80, 163, 87, 88, 89, 90, 91, 92, + 34, 35, 14, 85, 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, 127, 128, 129, 130, 131, 132, - 133, 9, 10, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 159, 51, 161, 138, 82, 150, 151, 152, - 2, 3, 4, 5, 6, 7, 9, 97, 156, 1, - 12, 13, 101, 15, 9, 10, 11, 106, 164, 108, - 163, 101, 80, 1, 113, 83, 8, 116, 117, 118, + 133, 8, 122, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 8, 51, 146, 138, 82, 150, 151, 152, + 2, 3, 4, 5, 6, 7, 106, 97, 108, 1, + 12, 13, 101, 15, 9, 10, 11, 106, 80, 108, + 163, 1, 80, 163, 113, 83, 8, 116, 117, 118, 119, 120, 121, 122, 123, 30, 8, 32, 33, 34, - 164, 117, 118, 123, 8, 106, 122, 108, 50, 51, - 8, 80, 128, 70, 56, 80, 58, 59, 60, 61, + 8, 117, 118, 80, 31, 159, 122, 159, 50, 51, + 8, 80, 128, 70, 56, 155, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, - 72, 73, 74, 162, 116, 161, 78, 79, 80, 31, - 82, 167, 8, 1, 86, 87, 88, 89, 122, 91, - 116, 93, 84, 95, 155, 137, 98, 99, 8, 106, - 107, 103, 104, 105, 106, 107, 8, 109, 110, 116, - 117, 118, 138, 115, 116, 122, 70, 134, 135, 14, - 122, 128, 124, 125, 126, 8, 155, 156, 157, 163, - 116, 156, 149, 162, 136, 137, 161, 139, 140, 141, - 142, 143, 144, 145, 161, 97, 163, 8, 82, 151, - 152, 8, 138, 155, 156, 157, 158, 75, 76, 77, - 8, 163, 8, 165, 166, 167, 84, 159, 1, 161, - 37, 38, 90, 70, 92, 8, 94, 163, 96, 8, - 134, 135, 116, 161, 75, 76, 75, 76, 106, 167, - 82, 8, 164, 85, 14, 149, 14, 37, 38, 117, - 118, 101, 102, 137, 122, 31, 14, 161, 14, 127, + 72, 73, 74, 162, 9, 161, 78, 79, 80, 1, + 82, 167, 164, 1, 86, 87, 88, 89, 122, 91, + 101, 93, 84, 95, 156, 8, 98, 99, 8, 161, + 138, 103, 104, 105, 106, 107, 8, 109, 110, 31, + 97, 8, 123, 115, 116, 70, 8, 134, 135, 156, + 122, 8, 124, 125, 126, 163, 155, 156, 157, 163, + 116, 8, 149, 162, 136, 137, 8, 139, 140, 141, + 142, 143, 144, 145, 161, 14, 163, 160, 82, 151, + 152, 164, 138, 155, 156, 157, 158, 75, 76, 77, + 14, 163, 84, 165, 166, 167, 84, 159, 116, 161, + 82, 14, 90, 85, 92, 14, 94, 163, 96, 134, + 135, 161, 116, 159, 1, 161, 14, 167, 106, 14, + 138, 8, 164, 16, 149, 31, 164, 37, 38, 117, + 118, 75, 76, 137, 122, 31, 161, 14, 163, 127, 128, 129, 130, 131, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 14, 163, - 70, 106, 107, 167, 106, 107, 14, 134, 135, 16, + 22, 23, 24, 25, 26, 27, 28, 29, 16, 163, + 70, 75, 76, 167, 16, 147, 148, 159, 16, 161, 16, 159, 82, 161, 162, 16, 86, 16, 74, 70, - 1, 70, 149, 16, 80, 147, 148, 59, 60, 111, - 112, 87, 88, 89, 161, 91, 163, 93, 70, 95, - 16, 16, 98, 16, 16, 16, 116, 103, 104, 105, - 31, 16, 122, 109, 110, 37, 38, 16, 16, 115, - 116, 70, 0, 1, 31, 31, 136, 137, 124, 139, + 16, 70, 101, 102, 80, 106, 107, 59, 60, 106, + 107, 87, 88, 89, 31, 91, 1, 93, 70, 95, + 111, 112, 98, 16, 16, 16, 116, 103, 104, 105, + 16, 31, 122, 109, 110, 37, 38, 16, 35, 115, + 116, 31, 0, 1, 31, 30, 136, 137, 124, 139, 140, 141, 142, 143, 144, 31, 31, 31, 31, 31, 31, 151, 152, 134, 135, 134, 135, 37, 38, 31, - 31, 1, 74, 163, 31, 31, 166, 167, 80, 31, - 149, 82, 134, 135, 31, 87, 88, 89, 31, 91, - 161, 93, 161, 95, 31, 31, 98, 149, 31, 31, - 30, 103, 104, 105, 74, 134, 135, 109, 110, 161, - 80, 31, 31, 115, 116, 116, 37, 87, 88, 89, - 35, 91, 124, 93, 35, 95, 84, 128, 98, 35, - 35, 35, 161, 103, 104, 105, 137, 35, 31, 109, - 110, 35, 37, 57, 69, 115, 116, 37, 106, 37, - 108, 38, 154, 70, 124, 113, 80, 158, 80, 117, - 118, 77, 163, 89, 122, 83, 167, 90, 96, 127, - 128, 129, 130, 131, 82, 82, 85, 128, 113, 92, - 114, 74, 85, 132, 1, 97, 116, 80, 132, 137, - 100, 133, 150, 94, 87, 88, 89, 97, 91, 1, - 93, 159, 95, 161, 162, 98, 97, 1, 138, 138, - 103, 104, 105, 74, 100, 146, 109, 110, 158, 80, - 1, 159, 115, 116, 163, 166, 87, 88, 89, 31, - 91, 124, 93, 163, 95, 1, 163, 98, -1, -1, - -1, 102, 103, 104, 105, 74, -1, 1, 109, 110, - 146, 80, 81, 155, 115, 116, 153, 149, 87, 88, - 89, 160, 91, 124, 93, 31, 95, 84, 1, 98, - 149, 149, 149, 149, 103, 104, 105, 31, 153, 1, - 109, 110, 84, 100, 101, 102, 115, 116, 82, 106, - 154, 159, 159, 159, 159, 124, 159, 159, 31, 159, - 117, 118, 159, 84, 159, 122, 159, 159, 159, 31, - 127, 128, 129, 130, 131, 70, 159, 159, 84, 100, - 101, 102, 116, 159, 159, 106, 159, 82, 160, 160, - 84, 86, 160, 160, 128, 160, 117, 118, 161, 161, - 161, 122, 159, 137, 161, 162, 127, 128, 129, 130, - 131, 84, 161, 161, 161, 161, 161, 159, 161, 161, - 161, 116, 84, 161, 158, 161, 161, 122, 165, 163, - 162, 162, 162, 167, 162, 162, 162, 162, 159, 162, + 31, 31, 74, 163, 31, 1, 166, 167, 80, 31, + 149, 31, 134, 135, 31, 87, 88, 89, 31, 91, + 161, 93, 161, 95, 31, 31, 98, 149, 37, 37, + 35, 103, 104, 105, 74, 31, 35, 109, 110, 161, + 80, 35, 35, 115, 116, 70, 35, 87, 88, 89, + 35, 91, 124, 93, 37, 95, 84, 37, 98, 38, + 57, 116, 1, 103, 104, 105, 69, 77, 31, 109, + 110, 82, 70, 85, 89, 115, 116, 96, 106, 80, + 108, 83, 154, 138, 124, 113, 90, 82, 84, 117, + 118, 114, 31, 80, 122, 85, 132, 97, 132, 127, + 128, 129, 130, 131, 92, 97, 97, 128, 163, 134, + 135, 74, 70, 94, 1, 133, 100, 80, 100, 154, + 146, 137, 150, 160, 87, 88, 89, 113, 91, 1, + 93, 159, 95, 161, 162, 98, 161, 161, 1, 153, + 103, 104, 105, 74, -1, 84, 109, 110, -1, 80, + 1, -1, 115, 116, -1, -1, 87, 88, 89, 31, + 91, 124, 93, 159, 95, 161, 138, 98, 31, 146, + -1, 102, 103, 104, 105, 74, 134, 135, 109, 110, + 149, 80, 81, 149, 115, 116, 153, 149, 87, 88, + 89, 149, 91, 124, 93, 149, 95, 84, 149, 98, + 155, 158, 161, 161, 103, 104, 105, 159, 161, 159, + 109, 110, 84, 100, 101, 102, 115, 116, 159, 106, + 159, 84, 161, 159, 159, 124, 159, 159, 162, 159, + 117, 118, 159, 84, 159, 122, 159, 159, 159, 159, + 127, 128, 129, 130, 131, 70, 159, 159, 159, 100, + 101, 102, 1, 159, 161, 106, 160, 82, 160, 160, + 160, 86, 160, 166, 161, 161, 117, 118, 161, 1, + 161, 122, 159, 161, 161, 162, 127, 128, 129, 130, + 131, 161, 31, 161, 161, 161, 165, 159, 162, 161, + 163, 116, 162, 162, 162, 162, 159, 122, 161, 163, + 162, 162, 162, 162, 162, 162, 162, 162, 159, 162, 161, 162, 137, 162, 139, 140, 141, 142, 143, 144, - 162, 162, 162, 159, 162, 161, 151, 152, 162, 162, - 74, 162, 162, 162, 162, 159, 80, 161, 163, 162, - 162, 166, 167, 87, 88, 89, 162, 91, 162, 93, - 162, 95, 162, 162, 98, 162, 159, 163, 161, 103, - 104, 105, 163, 163, 163, 109, 110, 159, 163, 161, - 163, 115, 116, 163, 163, 163, 163, 163, 163, 163, - 124, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, -1, 164, 164, 164, 164, 164, 164, + 162, 162, 162, 162, 162, 162, 151, 152, 162, 162, + 74, 162, 162, 82, 162, 164, 80, 163, 163, 163, + 163, 166, 167, 87, 88, 89, 163, 91, 163, 93, + 82, 95, 163, 163, 98, 163, 163, 163, 163, 103, + 104, 105, 163, 163, 163, 109, 110, 116, 117, 118, + 163, 115, 116, 122, 163, 163, 163, 163, 163, 128, + 124, 163, 163, 163, 116, 117, 118, 163, 137, 163, + 122, 163, 163, 163, 163, 163, 128, 163, 163, 163, + 163, 163, -1, 164, 164, 137, 164, 164, 164, 158, + 164, 164, 164, 164, 163, 165, 164, 164, 167, 164, + -1, 164, 164, 164, 164, 164, 158, 164, 164, 164, + 164, 163, -1, 164, 164, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - -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, -1, - 165, -1, -1, 167 + 164, 164, 164, 164, 164, 164, -1, -1, -1, 167 ); protected $actionBase = array( 0, -2, 154, 542, 752, 893, 929, 52, 374, 431, - 435, 875, 788, 235, 307, 307, 788, 307, 944, 977, - 977, 988, 977, 908, 956, 468, 468, 468, 708, 708, + 398, 869, 793, 235, 307, 307, 793, 307, 784, 908, + 908, 917, 908, 538, 841, 468, 468, 468, 708, 708, 708, 708, 740, 740, 849, 849, 881, 817, 634, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, @@ -514,61 +514,61 @@ class Php7 extends \PhpParser\ParserAbstract 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, - 1036, 1036, 1036, 1036, 37, 28, 370, 682, 1055, 1061, - 1057, 1062, 1053, 1052, 1056, 1058, 1063, 964, 966, 791, - 968, 970, 971, 973, 1059, 885, 1054, 1060, 291, 291, + 1036, 1036, 1036, 1036, 348, 346, 370, 653, 1062, 1068, + 1064, 1069, 1060, 1059, 1063, 1065, 1070, 943, 946, 774, + 947, 949, 950, 952, 1066, 882, 1061, 1067, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 457, 191, 432, 4, 4, + 291, 291, 291, 291, 291, 525, 191, 359, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 174, 174, 174, 620, 620, 51, 465, 356, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 658, 184, 144, 144, - 7, 7, 7, 7, 7, 371, -25, -25, -25, -25, - 709, 50, 916, 780, 526, 380, 67, 317, 453, 474, - 474, 13, 13, 434, 434, 230, 230, 434, 434, 434, - 781, 781, 781, 781, 443, 563, 399, 203, 418, 209, - 209, 209, 209, 418, 418, 418, 418, 814, 769, 418, - 418, 418, 63, 506, 506, 641, -1, -1, -1, 506, - 253, 807, 568, 253, 568, 482, 402, 762, 384, -49, - 213, 762, 639, 681, 198, 143, 808, 585, 808, 1051, - 23, 801, 426, 758, 735, 877, 915, 1064, 800, 957, - 824, 958, 106, -58, 734, 1050, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, 1066, 593, 1051, 312, - 1066, 1066, 1066, 593, 593, 593, 593, 593, 593, 593, - 593, 593, 593, 608, 312, 569, 571, 312, 816, 593, - 37, 831, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 763, 202, 37, 28, 78, 78, 293, 65, - 78, 78, 78, 78, 37, 37, 37, 37, 585, 796, - 813, 588, 835, 488, 796, 796, 796, 508, 135, 336, - 314, 795, 799, 132, 786, 786, 803, 985, 985, 786, - 802, 786, 803, 993, 786, 786, 985, 985, 770, 361, - 603, 534, 577, 612, 985, 478, 786, 786, 786, 786, - 766, 614, 786, 377, 366, 786, 786, 766, 761, 774, - 43, 768, 985, 985, 985, 766, 558, 768, 768, 768, - 843, 844, 775, 773, 502, 496, 643, 224, 823, 773, - 773, 786, 599, 775, 773, 775, 773, 846, 773, 773, - 773, 775, 773, 802, 550, 773, 718, 631, 139, 773, - 6, 994, 995, 723, 996, 991, 998, 1019, 999, 1000, - 901, 981, 1005, 992, 1001, 990, 987, 790, 691, 697, - 832, 818, 980, 785, 785, 785, 974, 785, 785, 785, - 785, 785, 785, 785, 785, 691, 811, 834, 759, 784, - 1008, 714, 715, 779, 919, 913, 1065, 1007, 1042, 1002, - 772, 717, 1027, 1009, 918, 888, 1010, 1011, 1028, 1043, - 1044, 920, 793, 922, 923, 878, 1013, 902, 785, 994, - 1000, 724, 992, 1001, 990, 987, 754, 753, 748, 749, - 739, 738, 736, 737, 767, 1045, 783, 771, 879, 1012, - 979, 691, 882, 1023, 887, 1029, 1030, 889, 810, 792, - 883, 924, 1014, 1015, 1016, 903, 1046, 904, 842, 1024, - 1020, 1031, 819, 925, 1032, 1033, 1034, 1035, 905, 927, - 907, 909, 845, 787, 1021, 782, 931, 565, 806, 812, - 822, 1018, 640, 1006, 912, 938, 939, 1037, 1038, 1039, - 940, 942, 1003, 847, 1025, 809, 1026, 1022, 848, 850, - 642, 820, 1047, 804, 805, 815, 652, 654, 946, 947, - 949, 1004, 777, 794, 853, 855, 1048, 789, 1049, 950, - 674, 857, 719, 951, 1041, 725, 731, 683, 689, 684, - 732, 797, 914, 833, 776, 798, 1017, 731, 778, 858, - 952, 859, 867, 868, 1040, 874, 0, 0, 0, 0, + 7, 7, 7, 7, 7, 1031, 371, 1048, -25, -25, + -25, -25, 50, 725, 526, 449, 39, 317, 80, 474, + 474, 13, 13, 512, 512, 422, 422, 512, 512, 512, + 808, 808, 808, 808, 443, 505, 360, 308, -78, 209, + 209, 209, 209, -78, -78, -78, -78, 803, 877, -78, + -78, -78, 63, 641, 641, 822, -1, -1, -1, 641, + 253, 790, 548, 253, 384, 548, 480, 402, 764, 759, + -49, 447, 764, 639, 755, 198, 143, 825, 609, 825, + 1058, 320, 768, 426, 749, 720, 874, 904, 1071, 796, + 941, 798, 942, 106, -58, 710, 1057, 1057, 1057, 1057, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1072, 336, 1058, + 423, 1072, 1072, 1072, 336, 336, 336, 336, 336, 336, + 336, 336, 336, 336, 619, 423, 586, 616, 423, 795, + 336, 348, 814, 348, 348, 348, 348, 348, 348, 348, + 348, 348, 348, 750, 202, 348, 346, 78, 78, 484, + 65, 78, 78, 78, 78, 348, 348, 348, 348, 609, + 783, 766, 613, 813, 492, 783, 783, 783, 473, 135, + 378, 488, 713, 775, 67, 779, 779, 785, 965, 965, + 779, 769, 779, 785, 974, 779, 779, 965, 965, 823, + 280, 563, 478, 550, 568, 965, 377, 779, 779, 779, + 779, 746, 573, 779, 342, 314, 779, 779, 746, 744, + 760, 43, 762, 965, 965, 965, 746, 547, 762, 762, + 762, 839, 844, 794, 758, 444, 433, 588, 232, 801, + 758, 758, 779, 558, 794, 758, 794, 758, 745, 758, + 758, 758, 794, 758, 769, 502, 758, 717, 583, 224, + 758, 6, 975, 979, 624, 980, 972, 981, 1018, 987, + 991, 873, 963, 998, 973, 992, 970, 969, 773, 682, + 684, 818, 811, 957, 777, 777, 777, 954, 777, 777, + 777, 777, 777, 777, 777, 777, 682, 743, 829, 765, + 1004, 689, 691, 754, 906, 901, 1030, 1000, 1046, 993, + 828, 694, 1027, 1006, 846, 821, 1008, 1009, 1028, 1049, + 1050, 910, 782, 911, 912, 876, 1011, 883, 777, 975, + 991, 693, 973, 992, 970, 969, 748, 739, 737, 738, + 736, 735, 723, 734, 753, 1052, 916, 907, 878, 1010, + 956, 682, 879, 1022, 756, 1029, 1032, 827, 788, 778, + 880, 913, 1012, 1014, 1015, 884, 1053, 887, 830, 1023, + 951, 1033, 789, 918, 1035, 1037, 1038, 1039, 889, 919, + 892, 900, 845, 776, 1019, 761, 920, 591, 787, 791, + 800, 1017, 606, 999, 902, 921, 922, 1040, 1041, 1043, + 923, 924, 994, 847, 1024, 799, 1026, 1020, 848, 850, + 617, 797, 1054, 781, 786, 772, 621, 632, 925, 927, + 931, 995, 763, 770, 853, 855, 1055, 771, 1056, 938, + 635, 857, 718, 939, 1045, 719, 724, 637, 678, 672, + 731, 792, 903, 826, 757, 780, 1016, 724, 767, 858, + 940, 859, 860, 867, 1044, 868, 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, 458, 458, 458, 458, @@ -598,23 +598,23 @@ class Php7 extends \PhpParser\ParserAbstract 291, 291, 291, 291, 291, 291, 66, 66, 291, 291, 291, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 291, 291, 291, 291, 291, 291, 291, 291, - 770, -1, -1, -1, -1, 66, 66, 66, 66, 66, - -88, -88, 66, 770, 66, 66, -1, -1, 66, 66, + 66, 823, 66, -1, -1, -1, -1, 66, 66, 66, + -88, -88, 66, 384, 66, 66, -1, -1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, - 0, 312, 568, 66, 802, 802, 802, 802, 66, 66, - 66, 66, 568, 568, 66, 66, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 312, 568, 0, 312, 0, - 802, 802, 66, 0, 770, 627, 66, 0, 0, 0, - 0, 312, 802, 312, 593, 786, 568, 786, 593, 593, - 78, 37, 627, 560, 560, 560, 560, 0, 0, 585, - 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, - 770, 802, 0, 770, 0, 802, 802, 802, 0, 0, + 0, 423, 548, 66, 769, 769, 769, 769, 66, 66, + 66, 66, 548, 548, 66, 66, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 423, 548, 0, 423, 0, + 0, 769, 769, 66, 384, 823, 643, 66, 0, 0, + 0, 0, 423, 769, 423, 336, 779, 548, 779, 336, + 336, 78, 348, 643, 611, 611, 611, 611, 0, 0, + 609, 823, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 769, 0, 823, 0, 769, 769, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 802, 0, 0, 985, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 993, 0, 0, - 0, 0, 0, 0, 802, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 785, 810, 0, 810, 0, 785, - 785, 785, 0, 0, 0, 0, 820, 789 + 0, 0, 0, 0, 769, 0, 0, 965, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 974, 0, + 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 777, 788, 0, 788, 0, + 777, 777, 777, 0, 0, 0, 0, 797, 771 ); protected $actionDefault = array( @@ -644,35 +644,35 @@ class Php7 extends \PhpParser\ParserAbstract 405, 406, 407, 408, 409, 390, 391, 471, 449, 448, 447,32767,32767, 414, 415, 419,32767,32767,32767,32767, 32767,32767,32767,32767, 103,32767, 389, 422, 420, 421, - 438, 439, 436, 437, 440,32767, 441, 442, 443, 444, - 32767, 316,32767,32767,32767, 366, 364, 316, 112,32767, + 438, 439, 436, 437, 440,32767,32767,32767, 441, 442, + 443, 444, 316,32767,32767, 366, 364, 316, 112,32767, 32767, 429, 430,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767, 533, 446,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767, 103, 32767, 101, 535, 411, 413, 503, 424, 425, 423, 393, - 32767, 510,32767, 103, 512,32767,32767,32767,32767,32767, - 32767,32767, 534,32767, 541, 541,32767, 496, 101, 195, - 32767,32767,32767, 195, 195,32767,32767,32767,32767,32767, - 32767,32767,32767, 602, 496, 111, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111,32767, 195, 111,32767, - 32767,32767, 101, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 190,32767, 268, 270, 103, 556, 195, - 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, - 139,32767, 139, 541, 426, 427, 428, 498, 541, 541, - 541, 312, 289,32767,32767,32767,32767, 513, 513, 101, - 101, 101, 101, 508,32767,32767,32767,32767, 112, 100, - 100, 100, 100, 100, 104, 102,32767,32767,32767,32767, - 223, 100,32767, 102, 102,32767,32767, 223, 225, 212, - 102, 227,32767, 560, 561, 223, 102, 227, 227, 227, - 247, 247, 485, 318, 102, 100, 102, 102, 197, 318, - 318,32767, 102, 485, 318, 485, 318, 199, 318, 318, - 318, 485, 318,32767, 102, 318, 214, 100, 100, 318, - 32767,32767,32767, 498,32767,32767,32767,32767,32767,32767, - 32767, 222,32767,32767,32767,32767,32767,32767,32767, 528, - 32767, 545, 558, 432, 433, 435, 543, 457, 458, 459, - 460, 461, 462, 463, 465, 590,32767, 502,32767,32767, + 32767, 510,32767, 103,32767, 512,32767,32767,32767,32767, + 32767,32767,32767, 534,32767, 541, 541,32767, 496, 101, + 195,32767,32767,32767, 195, 195,32767,32767,32767,32767, + 32767,32767,32767,32767, 602, 496, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111,32767, 195, 111, + 32767,32767,32767, 101, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 190,32767, 268, 270, 103, 556, + 195,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, 139,32767, 139, 541, 426, 427, 428, 498, 541, + 541, 541, 312, 289,32767,32767,32767,32767, 513, 513, + 101, 101, 101, 101, 508,32767,32767,32767,32767, 112, + 100, 100, 100, 100, 100, 104, 102,32767,32767,32767, + 32767, 223, 100,32767, 102, 102,32767,32767, 223, 225, + 212, 102, 227,32767, 560, 561, 223, 102, 227, 227, + 227, 247, 247, 485, 318, 102, 100, 102, 102, 197, + 318, 318,32767, 102, 485, 318, 485, 318, 199, 318, + 318, 318, 485, 318,32767, 102, 318, 214, 100, 100, + 318,32767,32767,32767, 498,32767,32767,32767,32767,32767, + 32767,32767, 222,32767,32767,32767,32767,32767,32767,32767, + 528,32767, 545, 558, 432, 433, 435, 543, 457, 458, + 459, 460, 461, 462, 463, 465, 590,32767, 502,32767, 32767,32767, 338, 600,32767, 600,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767, 601,32767, 541,32767,32767,32767,32767, 431, 9, @@ -695,75 +695,75 @@ class Php7 extends \PhpParser\ParserAbstract ); protected $goto = array( - 196, 196, 1030, 702, 693, 429, 657, 474, 1306, 1307, - 423, 313, 314, 334, 573, 319, 428, 335, 430, 634, - 650, 651, 1061, 668, 669, 670, 849, 167, 167, 167, + 196, 196, 1030, 702, 693, 430, 657, 1061, 1332, 1332, + 424, 313, 314, 335, 573, 319, 429, 336, 431, 634, + 650, 651, 350, 668, 669, 670, 1332, 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, 533, 534, 419, - 535, 537, 538, 539, 540, 541, 542, 543, 544, 1131, + 189, 190, 191, 192, 218, 216, 219, 534, 535, 420, + 536, 538, 539, 540, 541, 542, 543, 544, 545, 1131, 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, 176, 178, 215, 217, 220, 238, 243, 244, 245, 257, - 258, 259, 260, 261, 262, 263, 264, 266, 267, 268, - 269, 281, 282, 316, 317, 318, 424, 425, 426, 578, + 258, 259, 260, 261, 262, 263, 264, 268, 269, 270, + 271, 281, 282, 316, 317, 318, 425, 426, 427, 578, 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, 1131, 201, 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, - 212, 213, 214, 852, 353, 865, 878, 866, 1066, 1070, - 278, 278, 278, 278, 353, 353, 597, 974, 618, 654, - 877, 564, 850, 864, 477, 729, 633, 635, 353, 353, - 655, 353, 479, 1348, 679, 683, 1006, 691, 700, 1002, - 910, 964, 911, 824, 552, 557, 550, 857, 353, 906, - 901, 902, 915, 858, 903, 855, 904, 905, 856, 596, - 1096, 909, 705, 1112, 882, 506, 696, 417, 1094, 1332, - 1332, 1083, 1078, 1079, 1080, 340, 550, 557, 566, 567, - 342, 576, 599, 613, 614, 422, 1332, 608, 1033, 1033, - 883, 15, 677, 948, 971, 1292, 1025, 1041, 1042, 394, - 397, 558, 598, 602, 570, 1232, 1030, 1232, 1030, 1232, - 349, 5, 1030, 6, 1030, 1030, 682, 347, 1030, 1030, + 212, 213, 214, 852, 478, 278, 278, 278, 278, 849, + 620, 620, 480, 850, 597, 1263, 1263, 1263, 1263, 1263, + 1263, 1263, 1263, 1263, 1263, 1281, 1281, 830, 618, 654, + 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, + 353, 353, 353, 353, 865, 557, 550, 857, 824, 906, + 901, 902, 915, 858, 903, 855, 904, 905, 856, 877, + 457, 909, 864, 418, 546, 546, 546, 546, 830, 601, + 830, 1083, 1078, 1079, 1080, 341, 550, 557, 566, 567, + 343, 576, 599, 613, 614, 407, 408, 883, 465, 465, + 666, 15, 667, 971, 411, 412, 413, 465, 680, 570, + 1232, 414, 1232, 1036, 1035, 346, 439, 1030, 1030, 1232, + 351, 352, 1030, 348, 1030, 1030, 1103, 1104, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1313, - 1313, 1313, 1313, 1232, 848, 498, 845, 499, 1232, 1232, - 1232, 1232, 1321, 505, 1232, 1232, 1232, 552, 995, 969, - 969, 967, 969, 728, 992, 549, 1004, 999, 352, 352, - 352, 352, 922, 963, 408, 701, 923, 392, 620, 620, - 938, 569, 938, 1263, 1263, 1263, 1263, 1263, 1263, 1263, - 1263, 1263, 1263, 1281, 1281, 1103, 1104, 845, 1281, 1281, - 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 545, 545, - 545, 545, 656, 601, 1036, 1035, 1279, 1279, 1039, 1040, - 1225, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, - 1279, 536, 536, 252, 252, 1054, 536, 536, 536, 536, - 536, 536, 536, 536, 536, 536, 606, 621, 624, 625, - 626, 627, 647, 648, 649, 704, 628, 630, 631, 1180, - 249, 249, 249, 249, 251, 253, 1211, 940, 324, 308, - 1212, 1215, 941, 1216, 551, 561, 1331, 1331, 436, 551, - 456, 561, 448, 678, 395, 460, 662, 448, 1303, 448, - 1303, 336, 1303, 1331, 830, 842, 467, 577, 468, 469, - 464, 464, 875, 574, 611, 1339, 1340, 870, 431, 464, - 1334, 547, 401, 547, 431, 547, 845, 1315, 1315, 1315, - 1315, 954, 1037, 1037, 1308, 1309, 1223, 661, 1048, 1044, - 1045, 873, 690, 612, 830, 826, 830, 690, 1067, 454, - 1014, 690, 1227, 1299, 965, 965, 965, 965, 406, 407, - 454, 959, 966, 666, 867, 667, 475, 410, 411, 412, - 732, 680, 1071, 879, 413, 0, 976, 0, 345, 350, - 351, 1114, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 0, 1069, 448, 927, 1119, 1301, 1301, - 1069, 0, 0, 616, 0, 0, 0, 1228, 1229, 1011, - 0, 0, 0, 0, 0, 840, 0, 869, 0, 660, - 990, 0, 0, 0, 0, 863, 0, 0, 0, 0, - 0, 1009, 1009, 1230, 1289, 1290, 0, 1222, 0, 0, - 275, 0, 0, 0, 0, 548, 0, 548, 0, 0, + 1313, 1313, 1313, 1232, 1321, 1331, 1331, 992, 1232, 1232, + 1232, 1232, 1039, 1040, 1232, 1232, 1232, 1033, 1033, 393, + 354, 677, 948, 1331, 569, 1025, 1041, 1042, 656, 690, + 354, 354, 826, 922, 690, 325, 308, 923, 690, 1054, + 1334, 938, 1180, 938, 354, 354, 1279, 1279, 354, 337, + 1348, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, + 1279, 552, 537, 537, 910, 354, 911, 537, 537, 537, + 537, 537, 537, 537, 537, 537, 537, 548, 564, 548, + 574, 611, 729, 633, 635, 848, 548, 655, 475, 1306, + 1307, 679, 683, 1006, 691, 700, 1002, 252, 252, 995, + 969, 969, 967, 969, 728, 437, 549, 1004, 999, 423, + 455, 608, 1292, 845, 678, 965, 965, 965, 965, 1308, + 1309, 455, 959, 966, 249, 249, 249, 249, 251, 253, + 963, 409, 701, 682, 662, 551, 561, 449, 449, 449, + 551, 1303, 561, 1303, 954, 396, 461, 1009, 1009, 842, + 1303, 395, 398, 558, 598, 602, 870, 468, 577, 469, + 470, 402, 867, 875, 552, 845, 1339, 1340, 628, 630, + 631, 1014, 324, 275, 324, 1315, 1315, 1315, 1315, 606, + 621, 624, 625, 626, 627, 647, 648, 649, 704, 612, + 596, 1096, 873, 705, 476, 1227, 507, 696, 5, 1094, + 6, 432, 1299, 1067, 1223, 732, 432, 878, 866, 1066, + 1070, 879, 976, 0, 1037, 1037, 1114, 1071, 974, 661, + 1048, 1044, 1045, 0, 0, 0, 0, 1225, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 927, + 1119, 449, 964, 1069, 0, 0, 616, 1301, 1301, 1069, + 1228, 1229, 1011, 499, 0, 500, 0, 0, 840, 0, + 869, 506, 660, 990, 1112, 882, 1211, 940, 863, 0, + 1212, 1215, 941, 1216, 0, 0, 1230, 1289, 1290, 0, + 1222, 0, 0, 0, 845, 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, 255, 255 + 0, 0, 0, 0, 0, 0, 0, 255, 255 ); protected $gotoCheck = array( - 42, 42, 72, 9, 72, 65, 65, 174, 174, 174, + 42, 42, 72, 9, 72, 65, 65, 126, 181, 181, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 85, 85, 126, 85, 85, 85, 26, 42, 42, 42, + 85, 85, 96, 85, 85, 85, 181, 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, @@ -777,97 +777,97 @@ class Php7 extends \PhpParser\ParserAbstract 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 15, 14, 35, 16, 16, 16, 16, - 23, 23, 23, 23, 14, 14, 129, 16, 55, 55, - 35, 48, 27, 35, 83, 48, 48, 48, 14, 14, - 48, 14, 83, 14, 48, 48, 48, 48, 48, 48, - 64, 16, 64, 6, 14, 75, 75, 15, 14, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 8, - 8, 15, 8, 16, 16, 8, 8, 43, 8, 181, - 181, 15, 15, 15, 15, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 13, 181, 13, 88, 88, - 45, 75, 88, 88, 49, 14, 88, 88, 88, 58, - 58, 58, 58, 58, 170, 72, 72, 72, 72, 72, - 96, 46, 72, 46, 72, 72, 14, 177, 72, 72, + 42, 42, 42, 15, 83, 23, 23, 23, 23, 26, + 107, 107, 83, 27, 129, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 168, 168, 12, 55, 55, + 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, + 24, 24, 24, 24, 35, 75, 75, 15, 6, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 35, + 82, 15, 35, 43, 106, 106, 106, 106, 12, 106, + 12, 15, 15, 15, 15, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 81, 81, 45, 148, 148, + 81, 75, 81, 49, 81, 81, 81, 148, 81, 170, + 72, 81, 72, 117, 117, 81, 82, 72, 72, 72, + 96, 96, 72, 177, 72, 72, 143, 143, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 9, - 9, 9, 9, 72, 25, 154, 22, 154, 72, 72, - 72, 72, 179, 154, 72, 72, 72, 14, 25, 25, - 25, 25, 25, 25, 102, 25, 25, 25, 24, 24, - 24, 24, 72, 92, 92, 92, 72, 61, 107, 107, - 9, 103, 9, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 168, 168, 143, 143, 22, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, 106, 106, - 106, 106, 63, 106, 117, 117, 169, 169, 118, 118, + 9, 9, 9, 72, 179, 180, 180, 102, 72, 72, + 72, 72, 118, 118, 72, 72, 72, 88, 88, 61, + 14, 88, 88, 180, 103, 88, 88, 88, 63, 7, + 14, 14, 7, 72, 7, 167, 167, 72, 7, 113, + 180, 9, 150, 9, 14, 14, 169, 169, 14, 29, 14, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 171, 171, 5, 5, 113, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 80, 84, 84, 84, 150, - 5, 5, 5, 5, 5, 5, 78, 78, 167, 167, - 78, 78, 78, 78, 9, 9, 180, 180, 112, 9, - 82, 9, 23, 115, 9, 9, 119, 23, 129, 23, - 129, 29, 129, 180, 12, 18, 9, 9, 9, 9, - 148, 148, 9, 2, 2, 9, 9, 39, 116, 148, - 180, 19, 28, 19, 116, 19, 22, 129, 129, 129, - 129, 91, 116, 116, 176, 176, 159, 116, 116, 116, - 116, 9, 7, 79, 12, 7, 12, 7, 128, 19, - 109, 7, 20, 129, 19, 19, 19, 19, 81, 81, - 19, 19, 19, 81, 37, 81, 156, 81, 81, 81, - 98, 81, 131, 41, 81, -1, 95, -1, 81, 96, - 96, 146, 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, 20, 20, 17, - -1, -1, -1, -1, -1, 20, -1, 17, -1, 17, - 17, -1, -1, -1, -1, 17, -1, -1, -1, -1, - -1, 106, 106, 20, 20, 20, -1, 17, -1, -1, - 24, -1, -1, -1, -1, 24, -1, 24, -1, -1, + 169, 14, 171, 171, 64, 14, 64, 171, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 19, 48, 19, + 2, 2, 48, 48, 48, 25, 19, 48, 174, 174, + 174, 48, 48, 48, 48, 48, 48, 5, 5, 25, + 25, 25, 25, 25, 25, 112, 25, 25, 25, 13, + 19, 13, 14, 22, 115, 19, 19, 19, 19, 176, + 176, 19, 19, 19, 5, 5, 5, 5, 5, 5, + 92, 92, 92, 14, 119, 9, 9, 23, 23, 23, + 9, 129, 9, 129, 91, 9, 9, 106, 106, 18, + 129, 58, 58, 58, 58, 58, 39, 9, 9, 9, + 9, 28, 37, 9, 14, 22, 9, 9, 84, 84, + 84, 109, 24, 24, 24, 129, 129, 129, 129, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, + 8, 8, 9, 8, 156, 20, 8, 8, 46, 8, + 46, 116, 129, 128, 159, 98, 116, 16, 16, 16, + 16, 41, 95, -1, 116, 116, 146, 131, 16, 116, + 116, 116, 116, -1, -1, -1, -1, 14, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 17, + 17, 23, 16, 129, -1, -1, 17, 129, 129, 129, + 20, 20, 17, 154, -1, 154, -1, -1, 20, -1, + 17, 154, 17, 17, 16, 16, 78, 78, 17, -1, + 78, 78, 78, 78, -1, -1, 20, 20, 20, -1, + 17, -1, -1, -1, 22, -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, 5, 5 ); protected $gotoBase = array( - 0, 0, -255, 0, 0, 382, 190, 475, 211, -10, - 0, 0, 148, -91, -133, -183, -284, 73, 136, 191, - 101, 0, 18, 167, 315, 290, 22, 178, 126, 145, - 0, 0, 0, 0, 0, -204, 0, 166, 0, 134, - 0, 74, -1, 215, 0, 234, -461, 0, -526, 230, - 0, 0, 0, 0, 0, 138, 0, 0, 214, 0, - 0, 285, 0, 120, 180, -236, 0, 0, 0, 0, - 0, 0, -5, 0, 0, -138, 0, 0, 10, 141, - 40, 9, 152, -283, -71, -694, 0, 0, -31, 0, - 0, 143, 19, 0, 0, 75, -211, 0, 105, 0, - 0, 0, 279, 288, 0, 0, 330, 87, 0, 122, - 0, 0, 151, 112, 0, 150, 187, 85, 83, 146, - 0, 0, 0, 0, 0, 0, 20, 0, 116, 168, - 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 70, 0, 0, 79, 0, 416, 0, - 135, 0, 0, 0, -198, 0, 68, 0, 0, 109, - 0, 0, 0, 0, 0, 0, 0, 97, 102, 125, - 235, 140, 0, 0, -293, 0, 104, 247, 0, 271, - 119, -78, 0, 0 + 0, 0, -338, 0, 0, 386, 195, 312, 472, -10, + 0, 0, -109, 62, 13, -184, 46, 65, 130, 102, + 93, 0, 125, 162, 197, 371, 165, 169, 114, 43, + 0, 0, 0, 0, 0, -166, 0, 113, 0, 123, + 0, 61, -1, 211, 0, 231, -244, 0, -339, 229, + 0, 0, 0, 0, 0, 148, 0, 0, 396, 0, + 0, 267, 0, 76, 334, -236, 0, 0, 0, 0, + 0, 0, -5, 0, 0, -139, 0, 0, 149, 136, + 112, -245, -58, -304, -20, -694, 0, 0, 28, 0, + 0, 105, 116, 0, 0, 60, -460, 0, 89, 0, + 0, 0, 262, 271, 0, 0, 196, -71, 0, 92, + 0, 0, 118, 56, 0, 121, 219, -16, 17, 134, + 0, 0, 0, 0, 0, 0, 5, 0, 120, 166, + 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 63, 0, 214, 0, + 58, 0, 0, 0, 49, 0, 45, 0, 0, 126, + 0, 0, 0, 0, 0, 0, 0, 4, -56, 95, + 230, 111, 0, 0, 78, 0, 38, 243, 0, 263, + -12, -299, 0, 0 ); protected $gotoDefault = array( - -32768, 510, 736, 4, 737, 931, 813, 822, 594, 527, - 703, 346, 622, 420, 1297, 908, 1118, 575, 841, 1241, - 1249, 455, 844, 329, 726, 890, 891, 892, 398, 384, - 390, 396, 645, 623, 492, 876, 451, 868, 484, 871, - 450, 880, 164, 416, 508, 884, 3, 887, 554, 918, - 385, 895, 386, 673, 897, 560, 899, 900, 393, 399, - 400, 1123, 568, 619, 912, 256, 562, 913, 383, 914, - 921, 388, 391, 684, 463, 503, 497, 409, 1098, 563, - 605, 642, 445, 471, 617, 629, 615, 478, 432, 414, - 328, 953, 961, 485, 461, 975, 348, 983, 734, 1130, - 636, 487, 991, 637, 998, 1001, 528, 529, 476, 1013, - 271, 1016, 488, 12, 663, 1027, 1028, 664, 638, 1050, - 639, 665, 640, 1052, 470, 595, 1060, 452, 1068, 1285, - 453, 1072, 265, 1075, 277, 415, 433, 1081, 1082, 9, - 1088, 694, 695, 11, 276, 507, 1113, 685, 449, 1129, - 437, 1199, 1201, 556, 489, 1219, 1218, 676, 504, 1224, - 446, 1288, 447, 530, 472, 315, 531, 307, 332, 312, - 546, 294, 333, 532, 473, 1294, 1302, 330, 31, 1322, - 1333, 341, 572, 610 + -32768, 511, 736, 4, 737, 931, 813, 822, 594, 528, + 703, 347, 622, 421, 1297, 908, 1118, 575, 841, 1241, + 1249, 456, 844, 330, 726, 890, 891, 892, 399, 385, + 391, 397, 645, 623, 493, 876, 452, 868, 485, 871, + 451, 880, 164, 417, 509, 884, 3, 887, 554, 918, + 386, 895, 387, 673, 897, 560, 899, 900, 394, 400, + 401, 1123, 568, 619, 912, 256, 562, 913, 384, 914, + 921, 389, 392, 684, 464, 504, 498, 410, 1098, 563, + 605, 642, 446, 472, 617, 629, 615, 479, 433, 415, + 329, 953, 961, 486, 462, 975, 349, 983, 734, 1130, + 636, 488, 991, 637, 998, 1001, 529, 530, 477, 1013, + 272, 1016, 489, 12, 663, 1027, 1028, 664, 638, 1050, + 639, 665, 640, 1052, 471, 595, 1060, 453, 1068, 1285, + 454, 1072, 266, 1075, 277, 416, 434, 1081, 1082, 9, + 1088, 694, 695, 11, 276, 508, 1113, 685, 450, 1129, + 438, 1199, 1201, 556, 490, 1219, 1218, 676, 505, 1224, + 447, 1288, 448, 531, 473, 315, 532, 307, 333, 312, + 547, 294, 334, 533, 474, 1294, 1302, 331, 31, 1322, + 1333, 342, 572, 610 ); protected $ruleToNonTerminal = array( @@ -2489,7 +2489,7 @@ protected function initReduceCallbacks() { $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) { - $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->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) { diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index 4ac736f0f1..f9cbed2a2a 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -1510,6 +1510,7 @@ protected function initializeModifierChangeMap() { 'Stmt_ClassMethod->flags' => \T_FUNCTION, 'Stmt_Class->flags' => \T_CLASS, 'Stmt_Property->flags' => \T_VARIABLE, + 'Expr_PrintableNewAnonClass->flags' => \T_CLASS, 'Param->flags' => \T_VARIABLE, //'Stmt_TraitUseAdaptation_Alias->newModifier' => 0, // TODO ]; diff --git a/test/code/formatPreservation/modifierChange.test b/test/code/formatPreservation/modifierChange.test index 08005bc738..2938ef4de7 100644 --- a/test/code/formatPreservation/modifierChange.test +++ b/test/code/formatPreservation/modifierChange.test @@ -54,4 +54,15 @@ function test( = 'z', public T3 $z = 'x', -) {} \ No newline at end of file +) {} +----- +expr->class->flags = Stmt\Class_::MODIFIER_READONLY; +$stmts[1]->expr->class->flags = 0; +----- +a = $a; } }; +new readonly class {}; ----- +!!php7 new class { }; @@ -25,3 +27,6 @@ new class($a) extends A $this->a = $a; } }; +new readonly class +{ +}; From cfc54e30a4f5e5af5f9d9ce86697cfcc5f7e7c24 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 29 Jan 2023 20:47:55 +0100 Subject: [PATCH 09/29] [PHP 8.3] Support dynamic class const fetch RFC: https://wiki.php.net/rfc/dynamic_class_constant_fetch --- grammar/php7.y | 2 + lib/PhpParser/BuilderFactory.php | 6 +- lib/PhpParser/Node/Expr/ClassConstFetch.php | 10 +- lib/PhpParser/Parser/Php7.php | 819 +++++++++--------- lib/PhpParser/PrettyPrinter/Standard.php | 2 +- test/PhpParser/BuilderFactoryTest.php | 6 +- test/code/parser/expr/dynamicClassConst.test | 43 + .../expr/dynamicClassConstFetch.test | 9 + 8 files changed, 480 insertions(+), 417 deletions(-) create mode 100644 test/code/parser/expr/dynamicClassConst.test create mode 100644 test/code/prettyPrinter/expr/dynamicClassConstFetch.test diff --git a/grammar/php7.y b/grammar/php7.y index 97c16b65fd..1ef60bfe03 100644 --- a/grammar/php7.y +++ b/grammar/php7.y @@ -1046,6 +1046,8 @@ constant: class_constant: class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_maybe_reserved { $$ = Expr\ClassConstFetch[$1, $3]; } + | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '{' expr '}' + { $$ = Expr\ClassConstFetch[$1, $4]; } /* We interpret an isolated FOO:: as an unfinished class constant fetch. It could also be an unfinished static property fetch or unfinished scoped call. */ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM error diff --git a/lib/PhpParser/BuilderFactory.php b/lib/PhpParser/BuilderFactory.php index fef2579b3e..af010e028a 100644 --- a/lib/PhpParser/BuilderFactory.php +++ b/lib/PhpParser/BuilderFactory.php @@ -349,15 +349,15 @@ public function propertyFetch(Expr $var, $name) : Expr\PropertyFetch { /** * Creates a class constant fetch node. * - * @param string|Name|Expr $class Class name - * @param string|Identifier $name Constant name + * @param string|Name|Expr $class Class name + * @param string|Identifier|Expr $name Constant name * * @return Expr\ClassConstFetch */ public function classConstFetch($class, $name): Expr\ClassConstFetch { return new Expr\ClassConstFetch( BuilderHelpers::normalizeNameOrExpr($class), - BuilderHelpers::normalizeIdentifier($name) + BuilderHelpers::normalizeIdentifierOrExpr($name) ); } diff --git a/lib/PhpParser/Node/Expr/ClassConstFetch.php b/lib/PhpParser/Node/Expr/ClassConstFetch.php index faf832f938..0c45ffb4b1 100644 --- a/lib/PhpParser/Node/Expr/ClassConstFetch.php +++ b/lib/PhpParser/Node/Expr/ClassConstFetch.php @@ -10,15 +10,15 @@ class ClassConstFetch extends Expr { /** @var Name|Expr Class name */ public $class; - /** @var Identifier|Error Constant name */ + /** @var Identifier|Expr|Error Constant name */ public $name; /** * Constructs a class const fetch node. * - * @param Name|Expr $class Class name - * @param string|Identifier|Error $name Constant name - * @param array $attributes Additional attributes + * @param Name|Expr $class Class name + * @param string|Identifier|Expr|Error $name Constant name + * @param array $attributes Additional attributes */ public function __construct($class, $name, array $attributes = []) { $this->attributes = $attributes; @@ -29,7 +29,7 @@ public function __construct($class, $name, array $attributes = []) { public function getSubNodeNames() : array { return ['class', 'name']; } - + public function getType() : string { return 'Expr_ClassConstFetch'; } diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php index 3c0e336993..fc895cb047 100644 --- a/lib/PhpParser/Parser/Php7.php +++ b/lib/PhpParser/Parser/Php7.php @@ -18,7 +18,7 @@ class Php7 extends \PhpParser\ParserAbstract { protected $tokenToSymbolMapSize = 396; - protected $actionTableSize = 1240; + protected $actionTableSize = 1241; protected $gotoTableSize = 629; protected $invalidSymbol = 168; @@ -27,7 +27,7 @@ class Php7 extends \PhpParser\ParserAbstract protected $unexpectedTokenRule = 32767; protected $YY2TBLSTATE = 434; - protected $numNonLeafStates = 735; + protected $numNonLeafStates = 736; protected $symbolToName = array( "EOF", @@ -244,130 +244,131 @@ class Php7 extends \PhpParser\ParserAbstract ); protected $action = array( - 133, 134, 135, 579, 136, 137, 0, 747, 748, 749, + 133, 134, 135, 579, 136, 137, 0, 748, 749, 750, 138, 38, 327,-32766,-32766,-32766,-32766,-32766,-32766,-32767, - -32767,-32767,-32767, 102, 103, 104, 105, 106, 1108, 1109, - 1110, 1107, 1106, 1105, 1111, 741, 740,-32766, 1231,-32766, + -32767,-32767,-32767, 102, 103, 104, 105, 106, 1109, 1110, + 1111, 1108, 1107, 1106, 1112, 742, 741,-32766, 1232,-32766, -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767, - -32767, 2, 107, 108, 109, 750, 274, 381, 380,-32766, - -32766,-32766,-32766, 104, 105, 106, 1023, 422, 110, 265, - 139, 403, 754, 755, 756, 757, 466, 467, 428, 937, - 291,-32766, 287,-32766,-32766, 758, 759, 760, 761, 762, - 763, 764, 765, 766, 767, 768, 788, 580, 789, 790, - 791, 792, 780, 781, 344, 345, 783, 784, 769, 770, - 771, 773, 774, 775, 355, 815, 816, 817, 818, 819, - 581, 776, 777, 582, 583, 809, 800, 798, 799, 812, - 795, 796, 686, -544, 584, 585, 794, 586, 587, 588, - 589, 590, 591, -328, -592, -367, 1233, -367, 797, 592, - 593, -592, 140,-32766,-32766,-32766, 133, 134, 135, 579, - 136, 137, 1056, 747, 748, 749, 138, 38, 687, 1019, - 1018, 1017, 1020, 390,-32766, 7,-32766,-32766,-32766,-32766, - -32766,-32766,-32766,-32766,-32766,-32766, 379, 380, 1032, 688, - 689, 741, 740,-32766,-32766,-32766, 422, -544, -544, -589, - -32766,-32766,-32766, 1031,-32766, 127, -589, 1235, 1234, 1236, - 1316, 750, -544, 290,-32766, 283,-32766,-32766,-32766,-32766, - -32766, 1235, 1234, 1236, -544, 265, 139, 403, 754, 755, - 756, 757, 16, 481, 428, 458, 459, 460, 298, 721, - 35, 758, 759, 760, 761, 762, 763, 764, 765, 766, - 767, 768, 788, 580, 789, 790, 791, 792, 780, 781, - 344, 345, 783, 784, 769, 770, 771, 773, 774, 775, - 355, 815, 816, 817, 818, 819, 581, 776, 777, 582, - 583, 809, 800, 798, 799, 812, 795, 796, 129, 823, - 584, 585, 794, 586, 587, 588, 589, 590, 591, -328, - 83, 84, 85, -592, 797, 592, 593, -592, 149, 772, - 742, 743, 744, 745, 746, 823, 747, 748, 749, 785, - 786, 37, 145, 86, 87, 88, 89, 90, 91, 92, + -32767, 2, 107, 108, 109, 751, 274, 381, 380,-32766, + -32766,-32766,-32766, 104, 105, 106, 1024, 422, 110, 265, + 139, 403, 755, 756, 757, 758, 466, 467, 428, 938, + 291,-32766, 287,-32766,-32766, 759, 760, 761, 762, 763, + 764, 765, 766, 767, 768, 769, 789, 580, 790, 791, + 792, 793, 781, 782, 344, 345, 784, 785, 770, 771, + 772, 774, 775, 776, 355, 816, 817, 818, 819, 820, + 581, 777, 778, 582, 583, 810, 801, 799, 800, 813, + 796, 797, 687, -545, 584, 585, 795, 586, 587, 588, + 589, 590, 591, -328, -593, -367, 1234, -367, 798, 592, + 593, -593, 140,-32766,-32766,-32766, 133, 134, 135, 579, + 136, 137, 1057, 748, 749, 750, 138, 38, 688, 1020, + 1019, 1018, 1021, 390,-32766, 7,-32766,-32766,-32766,-32766, + -32766,-32766,-32766,-32766,-32766,-32766, 379, 380, 1033, 689, + 690, 742, 741,-32766,-32766,-32766, 422, -545, -545, -590, + -32766,-32766,-32766, 1032,-32766, 127, -590, 1236, 1235, 1237, + 1318, 751, -545, 290,-32766, 283,-32766,-32766,-32766,-32766, + -32766, 1236, 1235, 1237, -545, 265, 139, 403, 755, 756, + 757, 758, 16, 481, 428, 458, 459, 460, 298, 722, + 35, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 789, 580, 790, 791, 792, 793, 781, 782, + 344, 345, 784, 785, 770, 771, 772, 774, 775, 776, + 355, 816, 817, 818, 819, 820, 581, 777, 778, 582, + 583, 810, 801, 799, 800, 813, 796, 797, 129, 824, + 584, 585, 795, 586, 587, 588, 589, 590, 591, -328, + 83, 84, 85, -593, 798, 592, 593, -593, 149, 773, + 743, 744, 745, 746, 747, 824, 748, 749, 750, 786, + 787, 37, 145, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 291, 274, 834, - 254, 1108, 1109, 1110, 1107, 1106, 1105, 1111, -589, 859, - 110, 860, -589, 482, 750,-32766,-32766,-32766,-32766,-32766, - 142, 603, 1084, 741, 740, 1260, 326, 986, 751, 752, - 753, 754, 755, 756, 757, 309,-32766, 821,-32766,-32766, - -32766,-32766, 242, 553, 758, 759, 760, 761, 762, 763, - 764, 765, 766, 767, 768, 788, 811, 789, 790, 791, - 792, 780, 781, 782, 810, 783, 784, 769, 770, 771, - 773, 774, 775, 814, 815, 816, 817, 818, 819, 820, - 776, 777, 778, 779, 809, 800, 798, 799, 812, 795, - 796, 311, 939, 787, 793, 794, 801, 802, 804, 803, - 805, 806, 323, 609, 1272, 1032, 832, 797, 808, 807, - 50, 51, 52, 512, 53, 54, 859, 241, 860, 917, - 55, 56, -111, 57,-32766,-32766,-32766, -111, 825, -111, - 290, 1300, 1345, 356, 305, 1346, 339, -111, -111, -111, + 103, 104, 105, 106, 107, 108, 109, 291, 274, 835, + 254, 1109, 1110, 1111, 1108, 1107, 1106, 1112, -590, 860, + 110, 861, -590, 482, 751,-32766,-32766,-32766,-32766,-32766, + 142, 603, 1085, 742, 741, 1262, 326, 987, 752, 753, + 754, 755, 756, 757, 758, 309,-32766, 822,-32766,-32766, + -32766,-32766, 242, 553, 759, 760, 761, 762, 763, 764, + 765, 766, 767, 768, 769, 789, 812, 790, 791, 792, + 793, 781, 782, 783, 811, 784, 785, 770, 771, 772, + 774, 775, 776, 815, 816, 817, 818, 819, 820, 821, + 777, 778, 779, 780, 810, 801, 799, 800, 813, 796, + 797, 311, 940, 788, 794, 795, 802, 803, 805, 804, + 806, 807, 323, 609, 1274, 1033, 833, 798, 809, 808, + 50, 51, 52, 512, 53, 54, 860, 241, 861, 918, + 55, 56, -111, 57,-32766,-32766,-32766, -111, 826, -111, + 290, 1302, 1347, 356, 305, 1348, 339, -111, -111, -111, -111, -111, -111, -111, -111,-32766, -194,-32766,-32766,-32766, - -193, 955, 956, 828, -86, 987, 957, 833, 58, 59, - 340, 428, 951, -543, 60, 831, 61, 247, 248, 62, - 63, 64, 65, 66, 67, 68, 69, 1240, 28, 267, - 70, 444, 513, -342,-32766, 141, 1266, 1267, 514, 917, - 832, 326, -272, 917, 1264, 42, 25, 515, 939, 516, - 14, 517, 907, 518, 827, 369, 519, 520, 373, 708, - 1032, 44, 45, 445, 376, 375, 388, 46, 521, 711, - -86, 440, 1100, 367, 338, -542, 441, -543, -543, 829, - 1226, 442, 523, 524, 525, 290, 1235, 1234, 1236, 361, - 1029, 443, -543, 1086, 526, 527, 838, 1254, 1255, 1256, - 1257, 1251, 1252, 297, -543, 151, -549, -583, 832, 1258, - 1253, -583, 1032, 1235, 1234, 1236, 298, -154, -154, -154, - 152, 71, 907, 321, 322, 326, 907, 919, 1029, 706, - 832, 154, -154, 1335, -154, 155, -154, 283, -154, -542, - -542, 82, 1231, 1085, 1320, 733, 156, 326, 374, 158, - 1032, 1319, -194, -79, -542, -88, -193, 741, 740, 955, - 956, 652, 26,-32766, 522, -51, -542, 33, -548, 893, - 951, -111, -111, -111, 32, 111, 112, 113, 114, 115, + -193, 956, 957, 829, -86, 988, 958, 834, 58, 59, + 340, 428, 952, -544, 60, 832, 61, 247, 248, 62, + 63, 64, 65, 66, 67, 68, 69, 1241, 28, 267, + 70, 444, 513, -342,-32766, 141, 1268, 1269, 514, 918, + 833, 326, -272, 918, 1266, 42, 25, 515, 940, 516, + 14, 517, 908, 518, 828, 369, 519, 520, 373, 709, + 1033, 44, 45, 445, 376, 375, 388, 46, 521, 712, + -86, 440, 1101, 367, 338, -543, 441, -544, -544, 830, + 1227, 442, 523, 524, 525, 290, 1236, 1235, 1237, 361, + 1030, 443, -544, 1087, 526, 527, 839, 1255, 1256, 1257, + 1258, 1252, 1253, 297, -544, 151, -550, -584, 833, 1259, + 1254, -584, 1033, 1236, 1235, 1237, 298, -154, -154, -154, + 152, 71, 908, 321, 322, 326, 908, 920, 1030, 707, + 833, 154, -154, 1337, -154, 155, -154, 283, -154, -543, + -543, 82, 1232, 1086, 1322, 734, 156, 326, 374, 158, + 1033, 1321, -194, -79, -543, -88, -193, 742, 741, 956, + 957, 653, 26,-32766, 522, -51, -543, 33, -549, 894, + 952, -111, -111, -111, 32, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, -59, 75, - 28, 671, 672, 326, -58, 36, 250, 919, 124, 706, - 125, 919, 832, 706, -154, 130, 1264, 131,-32766, -546, - 144, -541, 150, 406, 1233, 377, 378, 1145, 1147, 382, - 383,-32766,-32766,-32766, -85,-32766, 1055,-32766, -541,-32766, - 643, 644,-32766, 159, 160, 161, 1231,-32766,-32766,-32766, - 162, -79, 1226,-32766,-32766, 741, 740, 163, -302,-32766, - 419, -75, -4, 917, -73, 287, 526, 527,-32766, 1254, - 1255, 1256, 1257, 1251, 1252, -72, -71, -70, -69, -68, - -67, 1258, 1253, -546, -546, -541, -541, 741, 740, -66, - -47, -18,-32766, 73, 148, 917, 322, 326, 1233, 273, - -541, 284, -541, -541, 722,-32766,-32766,-32766, 725,-32766, - -546,-32766, -541,-32766, 916, 147,-32766, -541, 288, 289, - -298,-32766,-32766,-32766,-32766, 712, 279,-32766,-32766, -541, - 1233, 280, 285,-32766, 419, 48, 286,-32766,-32766,-32766, - 332,-32766,-32766,-32766, 292,-32766, 907, 293,-32766, 933, - 274, 1029, 917,-32766,-32766,-32766, 110, 681, 132,-32766, - -32766, 832, 146,-32766, 559,-32766, 419, 658, 374, 823, - 435, 1347, 74, 1032,-32766, 296, 653, 1115, 907, 955, - 956, 306, 713, 697, 522, 555, 303, 13, 310, 851, - 951, -111, -111, -111, 699, 463, 492, 952, 283, 299, - 300,-32766, 49, 674, 917, 304, 659, 1233, 675, 935, - 1271,-32766, 10, 1261,-32766,-32766,-32766, 641,-32766, 917, - -32766, 919,-32766, 706, -4,-32766, 126, 34, 917, 565, - -32766,-32766,-32766,-32766, 0, 907,-32766,-32766, 0, 1233, - 917, 0,-32766, 419, 0, 0,-32766,-32766,-32766, 716, - -32766,-32766,-32766, 919,-32766, 706, 1032,-32766, 723, 1273, + 28, 672, 673, 326, -58, 36, 250, 920, 124, 707, + 125, 920, 833, 707, -154, 130, 1266, 131,-32766, -547, + 144, -542, 150, 406, 1234, 377, 378, 1146, 1148, 382, + 383,-32766,-32766,-32766, -85,-32766, 1056,-32766, -542,-32766, + 644, 645,-32766, 159, 160, 161, 1232,-32766,-32766,-32766, + 162, -79, 1227,-32766,-32766, 742, 741, 163, -302,-32766, + 419, -75, -4, 918, -73, 287, 526, 527,-32766, 1255, + 1256, 1257, 1258, 1252, 1253, -72, -71, -70, -69, -68, + -67, 1259, 1254, -547, -547, -542, -542, 742, 741, -66, + -47, -18,-32766, 73, 148, 918, 322, 326, 1234, 273, + -542, 284, -542, -542, 723,-32766,-32766,-32766, 726,-32766, + -547,-32766, -542,-32766, 917, 147,-32766, -542, 288, 289, + -298,-32766,-32766,-32766,-32766, 713, 279,-32766,-32766, -542, + 1234, 280, 285,-32766, 419, 48, 286,-32766,-32766,-32766, + 332,-32766,-32766,-32766, 292,-32766, 908, 293,-32766, 934, + 274, 1030, 918,-32766,-32766,-32766, 110, 682, 132,-32766, + -32766, 833, 146,-32766, 559,-32766, 419, 659, 374, 824, + 435, 1349, 74, 1033,-32766, 296, 654, 1116, 908, 956, + 957, 306, 714, 698, 522, 555, 303, 13, 310, 852, + 952, -111, -111, -111, 700, 463, 492, 953, 283, 299, + 300,-32766, 49, 675, 918, 304, 660, 1234, 676, 936, + 1273,-32766, 10, 1263,-32766,-32766,-32766, 642,-32766, 918, + -32766, 920,-32766, 707, -4,-32766, 126, 34, 918, 565, + -32766,-32766,-32766,-32766, 0, 908,-32766,-32766, 0, 1234, + 918, 0,-32766, 419, 0, 0,-32766,-32766,-32766, 717, + -32766,-32766,-32766, 920,-32766, 707, 1033,-32766, 724, 1275, 0, 487,-32766,-32766,-32766,-32766, 301, 302,-32766,-32766, - -507, 1233, 571, -497,-32766, 419, 607, 8,-32766,-32766, - -32766, 372,-32766,-32766,-32766, 17,-32766, 907, 371,-32766, - 831, 298, 320, 128,-32766,-32766,-32766, 40, 370, 41, - -32766,-32766, 907, -250, -250, -250,-32766, 419, 730, 374, - 972, 907, 706, 731, 898,-32766, 996, 973, 727, 980, - 955, 956, 970, 907, 981, 522, 896, 968, 1089, 1092, - 893, 951, -111, -111, -111, 28, 1093, 1090, 1091, -249, - -249, -249, 1240, 1097, 707, 374, 843, 832, 1286, 1304, - 1338, 1264, 646, 1265, 710, 714, 955, 956, 715, 1240, - 717, 522, 919, 718, 706, -250, 893, 951, -111, -111, - -111, 719, -16, 720, 724, 709, -511, 919, 894, 706, - -577, 1231, 1342, 1344, 854, 853, 919, 1226, 706, -575, - 862, 945, 988, 861, 1343, 944, 942, 943, 919, 946, - 706, -249, 527, 1217, 1254, 1255, 1256, 1257, 1251, 1252, - 926, 936, 924, 978, 979, 1341, 1258, 1253, 1298, 1287, - -32766, 1305, 1311, 832, 1314, -275, 1233, -549, 73, -548, - -547, 322, 326,-32766,-32766,-32766, -491,-32766, 1,-32766, - 832,-32766, 29, 30,-32766, 39, 43, 47, 72,-32766, - -32766,-32766, 76, 77, 78,-32766,-32766, 1231, -111, -111, - 79,-32766, 419, -111, 80, 81, 143, 153, 157, -111, - -32766, 246, 328, 356, 1231, -111, -111, 357,-32766, 358, - -111, 359, 360, 361, 362, 363, -111, 364, 365, 366, - 368, 436, 0, -273, -272,-32766, 19, 20, 21, 298, - 22, 24, 405, 483, 75, 1202, 484, 491, 326, 494, - 0, 495, 496, 497, 501, 502, 298, 503, 510, 692, - 1244, 75, 0, 1185, 1262, 326, 1058, 1057, 1038, 1221, - 1034, -277, -103, 18, 23, 27, 295, 404, 600, 604, - 632, 698, 1189, 1239, 1186, 1317, 0, 0, 0, 326 + -507, 1234, 571, -497,-32766, 419, 607, 8,-32766,-32766, + -32766, 372,-32766,-32766,-32766, 17,-32766, 908, 371,-32766, + 832, 298, 320, 128,-32766,-32766,-32766, 40, 370, 41, + -32766,-32766, 908, -250, -250, -250,-32766, 419, 731, 374, + 973, 908, 707, 732, 899,-32766, 997, 974, 728, 981, + 956, 957, 971, 908, 982, 522, 897, 969, 1090, 1093, + 894, 952, -111, -111, -111, 28, 1094, 1091, 1092, -249, + -249, -249, 1241, 1098, 708, 374, 844, 833, 1288, 1306, + 1340, 1266, 647, 1267, 711, 715, 956, 957, 716, 1241, + 718, 522, 920, 719, 707, -250, 894, 952, -111, -111, + -111, 720, -16, 721, 725, 710, -511, 920, 895, 707, + -578, 1232, 1344, 1346, 855, 854, 920, 1227, 707, -577, + 863, 946, 989, 862, 1345, 945, 943, 944, 920, 947, + 707, -249, 527, 1218, 1255, 1256, 1257, 1258, 1252, 1253, + 927, 937, 925, 979, 980, 631, 1259, 1254, 1343, 1300, + -32766, 1289, 1307, 833, 1316, -275, 1234, -576, 73, -550, + -549, 322, 326,-32766,-32766,-32766, -548,-32766, -491,-32766, + 833,-32766, 1, 29,-32766, 30, 39, 43, 47,-32766, + -32766,-32766, 72, 76, 77,-32766,-32766, 1232, -111, -111, + 78,-32766, 419, -111, 79, 80, 81, 143, 153, -111, + -32766, 157, 246, 328, 1232, -111, -111, 356,-32766, 357, + -111, 358, 359, 360, 361, 362, -111, 363, 364, 365, + 366, 368, 436, 0, -273,-32766, -272, 19, 20, 298, + 21, 22, 24, 405, 75, 1203, 483, 484, 326, 491, + 0, 494, 495, 496, 497, 501, 298, 502, 503, 510, + 693, 75, 0, 1245, 1186, 326, 1264, 1059, 1058, 1039, + 1222, 1035, -277, -103, 18, 23, 27, 295, 404, 600, + 604, 633, 699, 1190, 1240, 1187, 1319, 0, 0, 0, + 326 ); protected $actionCheck = array( @@ -489,12 +490,13 @@ class Php7 extends \PhpParser\ParserAbstract 163, 115, 116, 122, 163, 163, 163, 163, 163, 128, 124, 163, 163, 163, 116, 117, 118, 163, 137, 163, 122, 163, 163, 163, 163, 163, 128, 163, 163, 163, - 163, 163, -1, 164, 164, 137, 164, 164, 164, 158, + 163, 163, 163, -1, 164, 137, 164, 164, 164, 158, 164, 164, 164, 164, 163, 165, 164, 164, 167, 164, -1, 164, 164, 164, 164, 164, 158, 164, 164, 164, 164, 163, -1, 164, 164, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, - 164, 164, 164, 164, 164, 164, -1, -1, -1, 167 + 164, 164, 164, 164, 164, 164, 164, -1, -1, -1, + 167 ); protected $actionBase = array( @@ -514,9 +516,9 @@ class Php7 extends \PhpParser\ParserAbstract 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, - 1036, 1036, 1036, 1036, 348, 346, 370, 653, 1062, 1068, - 1064, 1069, 1060, 1059, 1063, 1065, 1070, 943, 946, 774, - 947, 949, 950, 952, 1066, 882, 1061, 1067, 291, 291, + 1036, 1036, 1036, 1036, 348, 346, 370, 653, 1063, 1069, + 1065, 1070, 1061, 1060, 1064, 1066, 1071, 946, 947, 774, + 949, 950, 943, 952, 1067, 882, 1062, 1068, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 525, 191, 359, 4, 4, @@ -532,48 +534,49 @@ class Php7 extends \PhpParser\ParserAbstract -78, -78, 63, 641, 641, 822, -1, -1, -1, 641, 253, 790, 548, 253, 384, 548, 480, 402, 764, 759, -49, 447, 764, 639, 755, 198, 143, 825, 609, 825, - 1058, 320, 768, 426, 749, 720, 874, 904, 1071, 796, - 941, 798, 942, 106, -58, 710, 1057, 1057, 1057, 1057, - 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1072, 336, 1058, - 423, 1072, 1072, 1072, 336, 336, 336, 336, 336, 336, + 1059, 320, 768, 426, 749, 720, 874, 904, 1072, 796, + 941, 798, 942, 106, -58, 710, 1058, 1058, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1073, 336, 1059, + 423, 1073, 1073, 1073, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 619, 423, 586, 616, 423, 795, 336, 348, 814, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 750, 202, 348, 346, 78, 78, 484, 65, 78, 78, 78, 78, 348, 348, 348, 348, 609, 783, 766, 613, 813, 492, 783, 783, 783, 473, 135, - 378, 488, 713, 775, 67, 779, 779, 785, 965, 965, - 779, 769, 779, 785, 974, 779, 779, 965, 965, 823, - 280, 563, 478, 550, 568, 965, 377, 779, 779, 779, + 378, 488, 713, 775, 67, 779, 779, 785, 969, 969, + 779, 769, 779, 785, 975, 779, 779, 969, 969, 823, + 280, 563, 478, 550, 568, 969, 377, 779, 779, 779, 779, 746, 573, 779, 342, 314, 779, 779, 746, 744, - 760, 43, 762, 965, 965, 965, 746, 547, 762, 762, + 760, 43, 762, 969, 969, 969, 746, 547, 762, 762, 762, 839, 844, 794, 758, 444, 433, 588, 232, 801, 758, 758, 779, 558, 794, 758, 794, 758, 745, 758, 758, 758, 794, 758, 769, 502, 758, 717, 583, 224, - 758, 6, 975, 979, 624, 980, 972, 981, 1018, 987, - 991, 873, 963, 998, 973, 992, 970, 969, 773, 682, - 684, 818, 811, 957, 777, 777, 777, 954, 777, 777, + 758, 6, 979, 980, 624, 981, 973, 987, 1019, 991, + 992, 873, 965, 999, 974, 993, 972, 970, 773, 682, + 684, 818, 811, 963, 777, 777, 777, 956, 777, 777, 777, 777, 777, 777, 777, 777, 682, 743, 829, 765, - 1004, 689, 691, 754, 906, 901, 1030, 1000, 1046, 993, - 828, 694, 1027, 1006, 846, 821, 1008, 1009, 1028, 1049, - 1050, 910, 782, 911, 912, 876, 1011, 883, 777, 975, - 991, 693, 973, 992, 970, 969, 748, 739, 737, 738, - 736, 735, 723, 734, 753, 1052, 916, 907, 878, 1010, - 956, 682, 879, 1022, 756, 1029, 1032, 827, 788, 778, - 880, 913, 1012, 1014, 1015, 884, 1053, 887, 830, 1023, - 951, 1033, 789, 918, 1035, 1037, 1038, 1039, 889, 919, - 892, 900, 845, 776, 1019, 761, 920, 591, 787, 791, - 800, 1017, 606, 999, 902, 921, 922, 1040, 1041, 1043, - 923, 924, 994, 847, 1024, 799, 1026, 1020, 848, 850, - 617, 797, 1054, 781, 786, 772, 621, 632, 925, 927, - 931, 995, 763, 770, 853, 855, 1055, 771, 1056, 938, - 635, 857, 718, 939, 1045, 719, 724, 637, 678, 672, - 731, 792, 903, 826, 757, 780, 1016, 724, 767, 858, - 940, 859, 860, 867, 1044, 868, 0, 0, 0, 0, + 1006, 689, 691, 754, 906, 901, 1030, 1004, 1049, 994, + 828, 694, 1028, 1008, 846, 821, 1009, 1010, 1029, 1050, + 1052, 910, 782, 911, 912, 876, 1012, 883, 777, 979, + 992, 693, 974, 993, 972, 970, 748, 739, 737, 738, + 736, 735, 723, 734, 753, 1053, 954, 907, 878, 1011, + 957, 682, 879, 1023, 756, 1032, 1033, 827, 788, 778, + 880, 913, 1014, 1015, 1016, 884, 1054, 887, 830, 1024, + 951, 1035, 789, 918, 1037, 1038, 1039, 1040, 889, 919, + 892, 916, 900, 845, 776, 1020, 761, 920, 591, 787, + 791, 800, 1018, 606, 1000, 902, 921, 922, 1041, 1043, + 1044, 923, 924, 995, 847, 1026, 799, 1027, 1022, 848, + 850, 617, 797, 1055, 781, 786, 772, 621, 632, 925, + 927, 931, 998, 763, 770, 853, 855, 1056, 771, 1057, + 938, 635, 857, 718, 939, 1046, 719, 724, 637, 678, + 672, 731, 792, 903, 826, 757, 780, 1017, 724, 767, + 858, 940, 859, 860, 867, 1045, 868, 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, 458, 458, 458, 458, - 458, 458, 307, 307, 307, 307, 307, 307, 307, 0, - 0, 307, 0, 458, 458, 458, 458, 458, 458, 458, + 0, 0, 0, 0, 0, 0, 0, 458, 458, 458, + 458, 458, 458, 307, 307, 307, 307, 307, 307, 307, + 0, 0, 307, 0, 458, 458, 458, 458, 458, 458, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, @@ -587,42 +590,41 @@ class Php7 extends \PhpParser\ParserAbstract 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 458, 458, 458, 458, 458, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, + 291, 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, 291, 291, 291, 66, 66, 291, 291, - 291, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 0, 291, 291, 291, 291, 291, 291, 291, 291, - 66, 823, 66, -1, -1, -1, -1, 66, 66, 66, - -88, -88, 66, 384, 66, 66, -1, -1, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, - 0, 423, 548, 66, 769, 769, 769, 769, 66, 66, - 66, 66, 548, 548, 66, 66, 66, 0, 0, 0, - 0, 0, 0, 0, 0, 423, 548, 0, 423, 0, - 0, 769, 769, 66, 384, 823, 643, 66, 0, 0, - 0, 0, 423, 769, 423, 336, 779, 548, 779, 336, - 336, 78, 348, 643, 611, 611, 611, 611, 0, 0, - 609, 823, 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 769, 0, 823, 0, 769, 769, 769, 0, + 291, 291, 291, 291, 291, 291, 291, 66, 66, 291, + 291, 291, 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 0, 291, 291, 291, 291, 291, 291, 291, + 291, 66, 823, 66, -1, -1, -1, -1, 66, 66, + 66, -88, -88, 66, 384, 66, 66, -1, -1, 66, + 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, + 0, 0, 423, 548, 66, 769, 769, 769, 769, 66, + 66, 66, 66, 548, 548, 66, 66, 66, 0, 0, + 0, 0, 0, 0, 0, 0, 423, 548, 0, 423, + 0, 0, 769, 769, 66, 384, 823, 643, 66, 0, + 0, 0, 0, 423, 769, 423, 336, 779, 548, 779, + 336, 336, 78, 348, 643, 611, 611, 611, 611, 0, + 0, 609, 823, 823, 823, 823, 823, 823, 823, 823, + 823, 823, 823, 769, 0, 823, 0, 769, 769, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 769, 0, 0, 965, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 974, 0, - 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 777, 788, 0, 788, 0, - 777, 777, 777, 0, 0, 0, 0, 797, 771 + 0, 0, 0, 0, 0, 769, 0, 0, 969, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 975, + 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 777, 788, 0, 788, + 0, 777, 777, 777, 0, 0, 0, 0, 797, 771 ); protected $actionDefault = array( 3,32767, 103,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767, 101,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767, 595, 595, - 595, 595,32767,32767, 254, 103,32767,32767, 469, 387, - 387, 387,32767,32767, 539, 539, 539, 539, 539, 539, + 32767,32767,32767,32767,32767,32767,32767,32767, 596, 596, + 596, 596,32767,32767, 254, 103,32767,32767, 469, 387, + 387, 387,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, @@ -634,10 +636,10 @@ class Php7 extends \PhpParser\ParserAbstract 32767,32767,32767, 37, 7, 8, 10, 11, 50, 17, 324,32767,32767,32767,32767, 103,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767, 588,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, 473, 452, - 453, 455, 456, 386, 540, 594, 327, 591, 385, 146, + 453, 455, 456, 386, 541, 595, 327, 592, 385, 146, 339, 329, 242, 330, 258, 474, 259, 475, 478, 479, 215, 287, 382, 150, 151, 416, 470, 418, 468, 472, 417, 392, 397, 398, 399, 400, 401, 402, 403, 404, @@ -647,112 +649,112 @@ class Php7 extends \PhpParser\ParserAbstract 438, 439, 436, 437, 440,32767,32767,32767, 441, 442, 443, 444, 316,32767,32767, 366, 364, 316, 112,32767, 32767, 429, 430,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 533, 446,32767,32767,32767,32767, + 32767,32767,32767,32767, 534, 446,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767, 103, - 32767, 101, 535, 411, 413, 503, 424, 425, 423, 393, + 32767, 101, 536, 411, 413, 503, 424, 425, 423, 393, 32767, 510,32767, 103,32767, 512,32767,32767,32767,32767, - 32767,32767,32767, 534,32767, 541, 541,32767, 496, 101, + 32767,32767,32767, 535,32767, 542, 542,32767, 496, 101, 195,32767,32767,32767, 195, 195,32767,32767,32767,32767, - 32767,32767,32767,32767, 602, 496, 111, 111, 111, 111, + 32767,32767,32767,32767, 603, 496, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,32767, 195, 111, 32767,32767,32767, 101, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 190,32767, 268, 270, 103, 556, + 195, 195, 195, 195, 190,32767, 268, 270, 103, 557, 195,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, 139,32767, 139, 541, 426, 427, 428, 498, 541, - 541, 541, 312, 289,32767,32767,32767,32767, 513, 513, + 434, 139,32767, 139, 542, 426, 427, 428, 498, 542, + 542, 542, 312, 289,32767,32767,32767,32767, 513, 513, 101, 101, 101, 101, 508,32767,32767,32767,32767, 112, 100, 100, 100, 100, 100, 104, 102,32767,32767,32767, 32767, 223, 100,32767, 102, 102,32767,32767, 223, 225, - 212, 102, 227,32767, 560, 561, 223, 102, 227, 227, + 212, 102, 227,32767, 561, 562, 223, 102, 227, 227, 227, 247, 247, 485, 318, 102, 100, 102, 102, 197, 318, 318,32767, 102, 485, 318, 485, 318, 199, 318, 318, 318, 485, 318,32767, 102, 318, 214, 100, 100, 318,32767,32767,32767, 498,32767,32767,32767,32767,32767, 32767,32767, 222,32767,32767,32767,32767,32767,32767,32767, - 528,32767, 545, 558, 432, 433, 435, 543, 457, 458, - 459, 460, 461, 462, 463, 465, 590,32767, 502,32767, - 32767,32767, 338, 600,32767, 600,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, 338, 601,32767, 601,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 601,32767, 541,32767,32767,32767,32767, 431, 9, + 32767, 602,32767, 542,32767,32767,32767,32767, 431, 9, 76, 491, 43, 44, 52, 58, 519, 520, 521, 522, - 516, 517, 523, 518,32767,32767, 524, 566,32767,32767, - 542, 593,32767,32767,32767,32767,32767,32767, 139,32767, + 516, 517, 523, 518,32767,32767, 524, 567,32767,32767, + 543, 594,32767,32767,32767,32767,32767,32767, 139,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 528,32767, 137,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 541,32767,32767,32767,32767, 314, - 311,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767, 541,32767,32767, - 32767,32767,32767, 291,32767, 308,32767,32767,32767,32767, + 529,32767, 137,32767,32767,32767,32767,32767,32767,32767, + 32767, 525,32767,32767,32767, 542,32767,32767,32767,32767, + 314, 311,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767, 542,32767, + 32767,32767,32767,32767, 291,32767, 308,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767, 286,32767,32767, 381, 498, 294, 296, 297, - 32767,32767,32767,32767, 360,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 153, 153, 3, 3, - 341, 153, 153, 153, 341, 341, 153, 341, 341, 341, - 153, 153, 153, 153, 153, 153, 280, 185, 262, 265, - 247, 247, 153, 352, 153 + 32767,32767,32767, 286,32767,32767, 381, 498, 294, 296, + 297,32767,32767,32767,32767, 360,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767, 153, 153, 3, + 3, 341, 153, 153, 153, 341, 341, 153, 341, 341, + 341, 153, 153, 153, 153, 153, 153, 280, 185, 262, + 265, 247, 247, 153, 352, 153 ); protected $goto = array( - 196, 196, 1030, 702, 693, 430, 657, 1061, 1332, 1332, - 424, 313, 314, 335, 573, 319, 429, 336, 431, 634, - 650, 651, 350, 668, 669, 670, 1332, 167, 167, 167, + 196, 196, 1031, 703, 694, 430, 658, 1062, 1334, 1334, + 424, 313, 314, 335, 573, 319, 429, 336, 431, 635, + 651, 652, 850, 669, 670, 671, 1334, 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, 534, 535, 420, - 536, 538, 539, 540, 541, 542, 543, 544, 545, 1131, + 536, 538, 539, 540, 541, 542, 543, 544, 545, 1132, 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, 176, 178, 215, 217, 220, 238, 243, 244, 245, 257, 258, 259, 260, 261, 262, 263, 264, 268, 269, 270, 271, 281, 282, 316, 317, 318, 425, 426, 427, 578, 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, 1131, 201, + 200, 239, 188, 189, 190, 191, 192, 218, 1132, 201, 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, - 212, 213, 214, 852, 478, 278, 278, 278, 278, 849, - 620, 620, 480, 850, 597, 1263, 1263, 1263, 1263, 1263, - 1263, 1263, 1263, 1263, 1263, 1281, 1281, 830, 618, 654, - 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, - 353, 353, 353, 353, 865, 557, 550, 857, 824, 906, - 901, 902, 915, 858, 903, 855, 904, 905, 856, 877, - 457, 909, 864, 418, 546, 546, 546, 546, 830, 601, - 830, 1083, 1078, 1079, 1080, 341, 550, 557, 566, 567, - 343, 576, 599, 613, 614, 407, 408, 883, 465, 465, - 666, 15, 667, 971, 411, 412, 413, 465, 680, 570, - 1232, 414, 1232, 1036, 1035, 346, 439, 1030, 1030, 1232, - 351, 352, 1030, 348, 1030, 1030, 1103, 1104, 1030, 1030, - 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1313, - 1313, 1313, 1313, 1232, 1321, 1331, 1331, 992, 1232, 1232, - 1232, 1232, 1039, 1040, 1232, 1232, 1232, 1033, 1033, 393, - 354, 677, 948, 1331, 569, 1025, 1041, 1042, 656, 690, - 354, 354, 826, 922, 690, 325, 308, 923, 690, 1054, - 1334, 938, 1180, 938, 354, 354, 1279, 1279, 354, 337, - 1348, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, - 1279, 552, 537, 537, 910, 354, 911, 537, 537, 537, + 212, 213, 214, 853, 851, 278, 278, 278, 278, 418, + 620, 620, 350, 570, 597, 1265, 1265, 1265, 1265, 1265, + 1265, 1265, 1265, 1265, 1265, 1283, 1283, 831, 618, 655, + 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, + 353, 353, 353, 353, 866, 557, 550, 858, 825, 907, + 902, 903, 916, 859, 904, 856, 905, 906, 857, 878, + 457, 910, 865, 884, 546, 546, 546, 546, 831, 601, + 831, 1084, 1079, 1080, 1081, 341, 550, 557, 566, 567, + 343, 576, 599, 613, 614, 407, 408, 972, 465, 465, + 667, 15, 668, 1323, 411, 412, 413, 465, 681, 348, + 1233, 414, 1233, 478, 569, 346, 439, 1031, 1031, 1233, + 993, 480, 1031, 393, 1031, 1031, 1104, 1105, 1031, 1031, + 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1315, + 1315, 1315, 1315, 1233, 657, 1333, 1333, 1055, 1233, 1233, + 1233, 1233, 1037, 1036, 1233, 1233, 1233, 1034, 1034, 1181, + 354, 678, 949, 1333, 437, 1026, 1042, 1043, 337, 691, + 354, 354, 827, 923, 691, 1040, 1041, 924, 691, 663, + 1336, 939, 871, 939, 354, 354, 1281, 1281, 354, 679, + 1350, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, + 1281, 552, 537, 537, 911, 354, 912, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 548, 564, 548, - 574, 611, 729, 633, 635, 848, 548, 655, 475, 1306, - 1307, 679, 683, 1006, 691, 700, 1002, 252, 252, 995, - 969, 969, 967, 969, 728, 437, 549, 1004, 999, 423, - 455, 608, 1292, 845, 678, 965, 965, 965, 965, 1308, - 1309, 455, 959, 966, 249, 249, 249, 249, 251, 253, - 963, 409, 701, 682, 662, 551, 561, 449, 449, 449, - 551, 1303, 561, 1303, 954, 396, 461, 1009, 1009, 842, - 1303, 395, 398, 558, 598, 602, 870, 468, 577, 469, - 470, 402, 867, 875, 552, 845, 1339, 1340, 628, 630, - 631, 1014, 324, 275, 324, 1315, 1315, 1315, 1315, 606, - 621, 624, 625, 626, 627, 647, 648, 649, 704, 612, - 596, 1096, 873, 705, 476, 1227, 507, 696, 5, 1094, - 6, 432, 1299, 1067, 1223, 732, 432, 878, 866, 1066, - 1070, 879, 976, 0, 1037, 1037, 1114, 1071, 974, 661, - 1048, 1044, 1045, 0, 0, 0, 0, 1225, 449, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 927, - 1119, 449, 964, 1069, 0, 0, 616, 1301, 1301, 1069, - 1228, 1229, 1011, 499, 0, 500, 0, 0, 840, 0, - 869, 506, 660, 990, 1112, 882, 1211, 940, 863, 0, - 1212, 1215, 941, 1216, 0, 0, 1230, 1289, 1290, 0, - 1222, 0, 0, 0, 845, 0, 0, 0, 0, 0, + 574, 611, 730, 634, 636, 849, 548, 656, 475, 1308, + 1309, 680, 684, 1007, 692, 701, 1003, 252, 252, 996, + 970, 970, 968, 970, 729, 843, 549, 1005, 1000, 423, + 455, 608, 1294, 846, 955, 966, 966, 966, 966, 325, + 308, 455, 960, 967, 249, 249, 249, 249, 251, 253, + 402, 351, 352, 683, 868, 551, 561, 449, 449, 449, + 551, 1305, 561, 1305, 612, 396, 461, 1010, 1010, 1224, + 1305, 395, 398, 558, 598, 602, 1015, 468, 577, 469, + 470, 1310, 1311, 876, 552, 846, 1341, 1342, 964, 409, + 702, 733, 324, 275, 324, 1317, 1317, 1317, 1317, 606, + 621, 624, 625, 626, 627, 648, 649, 650, 705, 1068, + 596, 1097, 874, 706, 476, 1228, 507, 697, 880, 1095, + 1115, 432, 1301, 628, 630, 632, 432, 879, 867, 1067, + 1071, 5, 1072, 6, 1038, 1038, 977, 0, 975, 662, + 1049, 1045, 1046, 0, 0, 0, 0, 1226, 449, 449, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 928, + 1120, 449, 965, 1070, 0, 0, 616, 1303, 1303, 1070, + 1229, 1230, 1012, 499, 0, 500, 0, 0, 841, 0, + 870, 506, 661, 991, 1113, 883, 1212, 941, 864, 0, + 1213, 1216, 942, 1217, 0, 0, 1231, 1291, 1292, 0, + 1223, 0, 0, 0, 846, 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, @@ -763,7 +765,7 @@ class Php7 extends \PhpParser\ParserAbstract protected $gotoCheck = array( 42, 42, 72, 9, 72, 65, 65, 126, 181, 181, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 85, 85, 96, 85, 85, 85, 181, 42, 42, 42, + 85, 85, 26, 85, 85, 85, 181, 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, @@ -777,41 +779,41 @@ class Php7 extends \PhpParser\ParserAbstract 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 15, 83, 23, 23, 23, 23, 26, - 107, 107, 83, 27, 129, 107, 107, 107, 107, 107, + 42, 42, 42, 15, 27, 23, 23, 23, 23, 43, + 107, 107, 96, 170, 129, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 168, 168, 12, 55, 55, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 24, 24, 24, 24, 35, 75, 75, 15, 6, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 35, - 82, 15, 35, 43, 106, 106, 106, 106, 12, 106, + 82, 15, 35, 45, 106, 106, 106, 106, 12, 106, 12, 15, 15, 15, 15, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 81, 81, 45, 148, 148, - 81, 75, 81, 49, 81, 81, 81, 148, 81, 170, - 72, 81, 72, 117, 117, 81, 82, 72, 72, 72, - 96, 96, 72, 177, 72, 72, 143, 143, 72, 72, + 75, 75, 75, 75, 75, 81, 81, 49, 148, 148, + 81, 75, 81, 179, 81, 81, 81, 148, 81, 177, + 72, 81, 72, 83, 103, 81, 82, 72, 72, 72, + 102, 83, 72, 61, 72, 72, 143, 143, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 9, - 9, 9, 9, 72, 179, 180, 180, 102, 72, 72, - 72, 72, 118, 118, 72, 72, 72, 88, 88, 61, - 14, 88, 88, 180, 103, 88, 88, 88, 63, 7, - 14, 14, 7, 72, 7, 167, 167, 72, 7, 113, - 180, 9, 150, 9, 14, 14, 169, 169, 14, 29, + 9, 9, 9, 72, 63, 180, 180, 113, 72, 72, + 72, 72, 117, 117, 72, 72, 72, 88, 88, 150, + 14, 88, 88, 180, 112, 88, 88, 88, 29, 7, + 14, 14, 7, 72, 7, 118, 118, 72, 7, 119, + 180, 9, 39, 9, 14, 14, 169, 169, 14, 115, 14, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 14, 171, 171, 64, 14, 64, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 19, 48, 19, 2, 2, 48, 48, 48, 25, 19, 48, 174, 174, 174, 48, 48, 48, 48, 48, 48, 5, 5, 25, - 25, 25, 25, 25, 25, 112, 25, 25, 25, 13, - 19, 13, 14, 22, 115, 19, 19, 19, 19, 176, - 176, 19, 19, 19, 5, 5, 5, 5, 5, 5, - 92, 92, 92, 14, 119, 9, 9, 23, 23, 23, - 9, 129, 9, 129, 91, 9, 9, 106, 106, 18, - 129, 58, 58, 58, 58, 58, 39, 9, 9, 9, - 9, 28, 37, 9, 14, 22, 9, 9, 84, 84, - 84, 109, 24, 24, 24, 129, 129, 129, 129, 80, - 80, 80, 80, 80, 80, 80, 80, 80, 80, 79, - 8, 8, 9, 8, 156, 20, 8, 8, 46, 8, - 46, 116, 129, 128, 159, 98, 116, 16, 16, 16, - 16, 41, 95, -1, 116, 116, 146, 131, 16, 116, + 25, 25, 25, 25, 25, 18, 25, 25, 25, 13, + 19, 13, 14, 22, 91, 19, 19, 19, 19, 167, + 167, 19, 19, 19, 5, 5, 5, 5, 5, 5, + 28, 96, 96, 14, 37, 9, 9, 23, 23, 23, + 9, 129, 9, 129, 79, 9, 9, 106, 106, 159, + 129, 58, 58, 58, 58, 58, 109, 9, 9, 9, + 9, 176, 176, 9, 14, 22, 9, 9, 92, 92, + 92, 98, 24, 24, 24, 129, 129, 129, 129, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 128, + 8, 8, 9, 8, 156, 20, 8, 8, 41, 8, + 146, 116, 129, 84, 84, 84, 116, 16, 16, 16, + 16, 46, 131, 46, 116, 116, 95, -1, 16, 116, 116, 116, 116, -1, -1, -1, -1, 14, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 17, 17, 23, 16, 129, -1, -1, 17, 129, 129, 129, @@ -827,47 +829,47 @@ class Php7 extends \PhpParser\ParserAbstract ); protected $gotoBase = array( - 0, 0, -338, 0, 0, 386, 195, 312, 472, -10, - 0, 0, -109, 62, 13, -184, 46, 65, 130, 102, - 93, 0, 125, 162, 197, 371, 165, 169, 114, 43, - 0, 0, 0, 0, 0, -166, 0, 113, 0, 123, - 0, 61, -1, 211, 0, 231, -244, 0, -339, 229, + 0, 0, -339, 0, 0, 386, 195, 312, 472, -10, + 0, 0, -109, 62, 13, -184, 46, 65, 86, 102, + 93, 0, 125, 162, 197, 371, 18, 160, 83, 22, + 0, 0, 0, 0, 0, -166, 0, 85, 0, 9, + 0, 48, -1, 157, 0, 207, -232, 0, -340, 223, 0, 0, 0, 0, 0, 148, 0, 0, 396, 0, - 0, 267, 0, 76, 334, -236, 0, 0, 0, 0, - 0, 0, -5, 0, 0, -139, 0, 0, 149, 136, - 112, -245, -58, -304, -20, -694, 0, 0, 28, 0, - 0, 105, 116, 0, 0, 60, -460, 0, 89, 0, - 0, 0, 262, 271, 0, 0, 196, -71, 0, 92, - 0, 0, 118, 56, 0, 121, 219, -16, 17, 134, - 0, 0, 0, 0, 0, 0, 5, 0, 120, 166, - 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, 63, 0, 214, 0, - 58, 0, 0, 0, 49, 0, 45, 0, 0, 126, - 0, 0, 0, 0, 0, 0, 0, 4, -56, 95, - 230, 111, 0, 0, 78, 0, 38, 243, 0, 263, + 0, 231, 0, 52, 334, -236, 0, 0, 0, 0, + 0, 0, -5, 0, 0, -139, 0, 0, 149, 91, + 112, -245, -58, -205, 15, -695, 0, 0, 28, 0, + 0, 75, 154, 0, 0, 64, -310, 0, 55, 0, + 0, 0, 235, 221, 0, 0, 196, -71, 0, 77, + 0, 0, 37, 24, 0, 56, 219, 23, 40, 39, + 0, 0, 0, 0, 0, 0, 5, 0, 106, 166, + 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 47, 0, 214, 0, + 35, 0, 0, 0, 49, 0, 45, 0, 0, 71, + 0, 0, 0, 0, 0, 0, 0, 88, -56, 95, + 144, 111, 0, 0, 78, 0, 80, 229, 0, 222, -12, -299, 0, 0 ); protected $gotoDefault = array( - -32768, 511, 736, 4, 737, 931, 813, 822, 594, 528, - 703, 347, 622, 421, 1297, 908, 1118, 575, 841, 1241, - 1249, 456, 844, 330, 726, 890, 891, 892, 399, 385, - 391, 397, 645, 623, 493, 876, 452, 868, 485, 871, - 451, 880, 164, 417, 509, 884, 3, 887, 554, 918, - 386, 895, 387, 673, 897, 560, 899, 900, 394, 400, - 401, 1123, 568, 619, 912, 256, 562, 913, 384, 914, - 921, 389, 392, 684, 464, 504, 498, 410, 1098, 563, - 605, 642, 446, 472, 617, 629, 615, 479, 433, 415, - 329, 953, 961, 486, 462, 975, 349, 983, 734, 1130, - 636, 488, 991, 637, 998, 1001, 529, 530, 477, 1013, - 272, 1016, 489, 12, 663, 1027, 1028, 664, 638, 1050, - 639, 665, 640, 1052, 471, 595, 1060, 453, 1068, 1285, - 454, 1072, 266, 1075, 277, 416, 434, 1081, 1082, 9, - 1088, 694, 695, 11, 276, 508, 1113, 685, 450, 1129, - 438, 1199, 1201, 556, 490, 1219, 1218, 676, 505, 1224, - 447, 1288, 448, 531, 473, 315, 532, 307, 333, 312, - 547, 294, 334, 533, 474, 1294, 1302, 331, 31, 1322, - 1333, 342, 572, 610 + -32768, 511, 737, 4, 738, 932, 814, 823, 594, 528, + 704, 347, 622, 421, 1299, 909, 1119, 575, 842, 1242, + 1250, 456, 845, 330, 727, 891, 892, 893, 399, 385, + 391, 397, 646, 623, 493, 877, 452, 869, 485, 872, + 451, 881, 164, 417, 509, 885, 3, 888, 554, 919, + 386, 896, 387, 674, 898, 560, 900, 901, 394, 400, + 401, 1124, 568, 619, 913, 256, 562, 914, 384, 915, + 922, 389, 392, 685, 464, 504, 498, 410, 1099, 563, + 605, 643, 446, 472, 617, 629, 615, 479, 433, 415, + 329, 954, 962, 486, 462, 976, 349, 984, 735, 1131, + 637, 488, 992, 638, 999, 1002, 529, 530, 477, 1014, + 272, 1017, 489, 12, 664, 1028, 1029, 665, 639, 1051, + 640, 666, 641, 1053, 471, 595, 1061, 453, 1069, 1287, + 454, 1073, 266, 1076, 277, 416, 434, 1082, 1083, 9, + 1089, 695, 696, 11, 276, 508, 1114, 686, 450, 1130, + 438, 1200, 1202, 556, 490, 1220, 1219, 677, 505, 1225, + 447, 1290, 448, 531, 473, 315, 532, 307, 333, 312, + 547, 294, 334, 533, 474, 1296, 1304, 331, 31, 1324, + 1335, 342, 572, 610 ); protected $ruleToNonTerminal = array( @@ -923,16 +925,16 @@ class Php7 extends \PhpParser\ParserAbstract 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, 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 + 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( @@ -988,16 +990,16 @@ class Php7 extends \PhpParser\ParserAbstract 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, 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 + 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() { @@ -2619,34 +2621,34 @@ protected function initReduceCallbacks() { $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-(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-(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); }, - 527 => 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); }, - 528 => function ($stackPos) { + 529 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, - 529 => function ($stackPos) { + 530 => function ($stackPos) { $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, - 530 => 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\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', true); } }; $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos-(3-2)], $attrs); }, - 531 => function ($stackPos) { - $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); - }, 532 => function ($stackPos) { - $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = $this->parseLNumber($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 533 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 534 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; @@ -2655,28 +2657,28 @@ protected function initReduceCallbacks() { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 536 => 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)]; }, 537 => 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->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 = $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->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 = null; + $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-(1-1)]; }, 542 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $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)]; @@ -2691,34 +2693,34 @@ protected function initReduceCallbacks() { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 548 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $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 = $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 = 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 = $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); }, 554 => function ($stackPos) { - $this->semValue = new Expr\MethodCall($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->semStack[$stackPos-(4-4)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 555 => 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 = 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 = null; + $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)]; @@ -2727,165 +2729,168 @@ protected function initReduceCallbacks() { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 560 => 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)]; }, 561 => 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\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 562 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $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-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 564 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 565 => 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-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 566 => 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(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 = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $var = $this->semStack[$stackPos-(1-1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var; }, 568 => 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); }, 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\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\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); }, 572 => 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\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 = 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-(1-1)]; + $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-(3-2)]; + $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-(1-1)]; }, 579 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 580 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 581 => function ($stackPos) { - $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; + $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 582 => function ($stackPos) { - $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; }, 583 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue); + $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); }, 584 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; + $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue); }, 585 => function ($stackPos) { - /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ + $this->semValue = $this->semStack[$stackPos]; }, 586 => function ($stackPos) { - $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ }, 587 => 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)]; }, 588 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 589 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 590 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); }, 591 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 592 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(4-4)], $this->semStack[$stackPos-(4-1)], true, $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + $this->semValue = new Expr\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 Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + $this->semValue = new Expr\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 Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true); + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(3-3)], $this->semStack[$stackPos-(3-1)], false, $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 595 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, false, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes, true); }, 596 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + $this->semValue = null; }, 597 => function ($stackPos) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 598 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; }, 599 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); + $this->semValue = array($this->semStack[$stackPos-(1-1)]); }, 600 => function ($stackPos) { - $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); }, 601 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 602 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 603 => 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)]; }, 604 => 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); }, 605 => 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\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 606 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $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); }, 607 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 608 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 609 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(3-2)]; + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); }, 610 => function ($stackPos) { - $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos-(3-2)]; }, 611 => function ($stackPos) { - $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 612 => function ($stackPos) { - $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 613 => function ($stackPos) { + $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 614 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, ]; diff --git a/lib/PhpParser/PrettyPrinter/Standard.php b/lib/PhpParser/PrettyPrinter/Standard.php index 9d30e4f036..e7e54c2add 100644 --- a/lib/PhpParser/PrettyPrinter/Standard.php +++ b/lib/PhpParser/PrettyPrinter/Standard.php @@ -606,7 +606,7 @@ protected function pExpr_ConstFetch(Expr\ConstFetch $node) { } protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) { - return $this->pDereferenceLhs($node->class) . '::' . $this->p($node->name); + return $this->pDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name); } protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) { diff --git a/test/PhpParser/BuilderFactoryTest.php b/test/PhpParser/BuilderFactoryTest.php index 2748c2853f..ef950bb34c 100644 --- a/test/PhpParser/BuilderFactoryTest.php +++ b/test/PhpParser/BuilderFactoryTest.php @@ -210,6 +210,10 @@ public function testConstFetches() { new Expr\ClassConstFetch(new Expr\Variable('foo'), new Identifier('BAR')), $factory->classConstFetch(new Expr\Variable('foo'), 'BAR') ); + $this->assertEquals( + new Expr\ClassConstFetch(new Name('Foo'), new Expr\Variable('foo')), + $factory->classConstFetch('Foo', $factory->var('foo')) + ); } public function testVar() { @@ -243,7 +247,7 @@ public function testPropertyFetch() { public function testInvalidIdentifier() { $this->expectException(\LogicException::class); $this->expectExceptionMessage('Expected string or instance of Node\Identifier'); - (new BuilderFactory())->classConstFetch('Foo', new Expr\Variable('foo')); + (new BuilderFactory())->classConstFetch('Foo', new Name('foo')); } public function testInvalidIdentifierOrExpr() { diff --git a/test/code/parser/expr/dynamicClassConst.test b/test/code/parser/expr/dynamicClassConst.test new file mode 100644 index 0000000000..43a7b9ed61 --- /dev/null +++ b/test/code/parser/expr/dynamicClassConst.test @@ -0,0 +1,43 @@ +Dynamic class constant fetch +----- + Date: Sun, 26 Feb 2023 15:11:36 +0100 Subject: [PATCH 10/29] Properly handle new/instanceof operand restrictions Fixes #912. (cherry picked from commit 1eb6b5653eb7aeb9e12d2bbbaa8b8f698528e0a2) --- lib/PhpParser/PrettyPrinter/Standard.php | 9 ++++++--- lib/PhpParser/PrettyPrinterAbstract.php | 16 ++++++++++++++++ test/code/prettyPrinter/expr/newVariable.test | 8 +++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/lib/PhpParser/PrettyPrinter/Standard.php b/lib/PhpParser/PrettyPrinter/Standard.php index e7e54c2add..9db5b09953 100644 --- a/lib/PhpParser/PrettyPrinter/Standard.php +++ b/lib/PhpParser/PrettyPrinter/Standard.php @@ -1077,9 +1077,12 @@ protected function pCallLhs(Node $node) { } } - protected function pNewVariable(Node $node) { - // TODO: This is not fully accurate. - return $this->pDereferenceLhs($node); + protected function pNewVariable(Node $node): string { + if (!$this->newOperandRequiresParens($node)) { + return $this->p($node); + } else { + return '(' . $this->p($node) . ')'; + } } /** diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index f9cbed2a2a..7dc12bb109 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -1070,6 +1070,22 @@ protected function dereferenceLhsRequiresParens(Node $node) : bool { || $node instanceof Expr\ClassConstFetch); } + /** + * Determines whether an expression used in "new" or "instanceof" requires parentheses. + * + * @param Node $node New or instanceof operand + * + * @return bool Whether parentheses are required + */ + protected function newOperandRequiresParens(Node $node): bool { + return !($node instanceof Node\Name + || $node instanceof Expr\Variable + || $node instanceof Expr\ArrayDimFetch + || $node instanceof Expr\PropertyFetch + || $node instanceof Expr\NullsafePropertyFetch + || $node instanceof Expr\StaticPropertyFetch); + } + /** * Print modifiers, including trailing whitespace. * diff --git a/test/code/prettyPrinter/expr/newVariable.test b/test/code/prettyPrinter/expr/newVariable.test index d5283b3316..6f7de00ab4 100644 --- a/test/code/prettyPrinter/expr/newVariable.test +++ b/test/code/prettyPrinter/expr/newVariable.test @@ -2,10 +2,16 @@ Parentheses for complex new/instanceof expressions ----- Date: Mon, 27 Feb 2023 19:00:33 +0100 Subject: [PATCH 11/29] Fix logic for new operand parentheses requirement We need to perform this check recursively. (cherry picked from commit cc34c2450c50504b7b3aaa36dfd6276eb9be77d8) --- lib/PhpParser/PrettyPrinterAbstract.php | 18 ++++++++++++------ test/code/prettyPrinter/expr/newVariable.test | 6 ++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index 7dc12bb109..fb065bfe86 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -1078,12 +1078,18 @@ protected function dereferenceLhsRequiresParens(Node $node) : bool { * @return bool Whether parentheses are required */ protected function newOperandRequiresParens(Node $node): bool { - return !($node instanceof Node\Name - || $node instanceof Expr\Variable - || $node instanceof Expr\ArrayDimFetch - || $node instanceof Expr\PropertyFetch - || $node instanceof Expr\NullsafePropertyFetch - || $node instanceof Expr\StaticPropertyFetch); + if ($node instanceof Node\Name || $node instanceof Expr\Variable) { + return false; + } + if ($node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || + $node instanceof Expr\NullsafePropertyFetch + ) { + return $this->newOperandRequiresParens($node->var); + } + if ($node instanceof Expr\StaticPropertyFetch) { + return $this->newOperandRequiresParens($node->class); + } + return true; } /** diff --git a/test/code/prettyPrinter/expr/newVariable.test b/test/code/prettyPrinter/expr/newVariable.test index 6f7de00ab4..499e5aaa00 100644 --- a/test/code/prettyPrinter/expr/newVariable.test +++ b/test/code/prettyPrinter/expr/newVariable.test @@ -5,6 +5,9 @@ new ('a' . 'b'); new (x); new (foo()); new ('foo'); +new (x[0]); +new (x->y); +new ((x)::$y); $x instanceof ('a' . 'b'); $x instanceof ($y++); ----- @@ -13,5 +16,8 @@ new ('a' . 'b')(); new (x)(); new (foo())(); new ('foo')(); +new (x[0])(); +new (x->y)(); +new ((x)::$y)(); $x instanceof ('a' . 'b'); $x instanceof ($y++); From 8f8e47b6c120da61cf219af9ff8fbd371526b65f Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 26 Feb 2023 15:17:07 +0100 Subject: [PATCH 12/29] Support new variables in fixup (cherry picked from commit 6a88bdb05a169fcd38c2ed1e6cf129a5e9d51cf0) --- lib/PhpParser/PrettyPrinterAbstract.php | 11 +++++++++-- test/code/formatPreservation/fixup.test | 8 +++++++- test/code/prettyPrinter/expr/newVariable.test | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index fb065bfe86..3c8af570ea 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -21,6 +21,7 @@ abstract class PrettyPrinterAbstract const FIXUP_BRACED_NAME = 4; // Name operand that may require bracing const FIXUP_VAR_BRACED_NAME = 5; // Name operand that may require ${} bracing const FIXUP_ENCAPSED = 6; // Encapsed string part + const FIXUP_NEW = 7; // New/instanceof operand protected $precedenceMap = [ // [precedence, associativity] @@ -977,6 +978,12 @@ protected function pFixup(int $fixup, Node $subNode, $parentClass, int $subStart return '(' . $this->p($subNode) . ')'; } break; + case self::FIXUP_NEW: + if ($this->newOperandRequiresParens($subNode) + && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { + return '(' . $this->p($subNode) . ')'; + } + break; case self::FIXUP_BRACED_NAME: case self::FIXUP_VAR_BRACED_NAME: if ($subNode instanceof Expr @@ -1193,7 +1200,7 @@ protected function initializeFixupMap() { Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT], Expr\Instanceof_::class => [ 'expr' => self::FIXUP_PREC_LEFT, - 'class' => self::FIXUP_PREC_RIGHT, // TODO: FIXUP_NEW_VARIABLE + 'class' => self::FIXUP_NEW, ], Expr\Ternary::class => [ 'cond' => self::FIXUP_PREC_LEFT, @@ -1204,7 +1211,7 @@ protected function initializeFixupMap() { Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS], Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], Expr\ClassConstFetch::class => ['var' => self::FIXUP_DEREF_LHS], - Expr\New_::class => ['class' => self::FIXUP_DEREF_LHS], // TODO: FIXUP_NEW_VARIABLE + Expr\New_::class => ['class' => self::FIXUP_NEW], Expr\MethodCall::class => [ 'var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME, diff --git a/test/code/formatPreservation/fixup.test b/test/code/formatPreservation/fixup.test index e8870ae56b..de38532721 100644 --- a/test/code/formatPreservation/fixup.test +++ b/test/code/formatPreservation/fixup.test @@ -42,6 +42,8 @@ $foo -> bar; $foo -> bar; self :: $foo; self :: $foo; +new Foo(); +$x instanceof Foo; ----- $stmts[0]->expr->name = new Expr\Variable('a'); $stmts[1]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b')); @@ -54,6 +56,8 @@ $stmts[5]->expr->name = new Expr\Variable('bar'); $stmts[6]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b')); $stmts[7]->expr->name = new Node\VarLikeIdentifier('bar'); $stmts[8]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b')); +$stmts[9]->expr->class = new Scalar\String_('Foo'); +$stmts[10]->expr->class = new Scalar\String_('Foo'); ----- foo; $foo -> {$bar}; $foo -> {$a . $b}; self :: $bar; -self :: ${$a . $b}; \ No newline at end of file +self :: ${$a . $b}; +new ('Foo')(); +$x instanceof ('Foo'); diff --git a/test/code/prettyPrinter/expr/newVariable.test b/test/code/prettyPrinter/expr/newVariable.test index 499e5aaa00..ef010d9d10 100644 --- a/test/code/prettyPrinter/expr/newVariable.test +++ b/test/code/prettyPrinter/expr/newVariable.test @@ -18,6 +18,6 @@ new (foo())(); new ('foo')(); new (x[0])(); new (x->y)(); -new ((x)::$y)(); +new (x::$y)(); $x instanceof ('a' . 'b'); $x instanceof ($y++); From 21a61ece15f60d2c78f1e282de5662d716280ce4 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 26 Feb 2023 15:57:37 +0100 Subject: [PATCH 13/29] Properly handle static deref LHS The rules for static and array/object deref are slightly different: The former does not allow constants. (cherry picked from commit 7b4a8c1ebd09fd6f6ccc33d7193df0f75e7e28d7) --- lib/PhpParser/PrettyPrinter/Standard.php | 14 +++++++-- lib/PhpParser/PrettyPrinterAbstract.php | 30 +++++++++++++++---- test/code/formatPreservation/fixup.test | 9 ++++++ test/code/prettyPrinter/expr/newVariable.test | 2 +- test/code/prettyPrinter/expr/uvs.test | 8 ++++- 5 files changed, 53 insertions(+), 10 deletions(-) diff --git a/lib/PhpParser/PrettyPrinter/Standard.php b/lib/PhpParser/PrettyPrinter/Standard.php index 9db5b09953..7c32e5a3c5 100644 --- a/lib/PhpParser/PrettyPrinter/Standard.php +++ b/lib/PhpParser/PrettyPrinter/Standard.php @@ -529,7 +529,7 @@ protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node) { } protected function pExpr_StaticCall(Expr\StaticCall $node) { - return $this->pDereferenceLhs($node->class) . '::' + return $this->pStaticDereferenceLhs($node->class) . '::' . ($node->name instanceof Expr ? ($node->name instanceof Expr\Variable ? $this->p($node->name) @@ -606,7 +606,7 @@ protected function pExpr_ConstFetch(Expr\ConstFetch $node) { } protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) { - return $this->pDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name); + return $this->pStaticDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name); } protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) { @@ -618,7 +618,7 @@ protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node) } protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) { - return $this->pDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); + return $this->pStaticDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); } protected function pExpr_ShellExec(Expr\ShellExec $node) { @@ -1069,6 +1069,14 @@ protected function pDereferenceLhs(Node $node) { } } + protected function pStaticDereferenceLhs(Node $node) { + if (!$this->staticDereferenceLhsRequiresParens($node)) { + return $this->p($node); + } else { + return '(' . $this->p($node) . ')'; + } + } + protected function pCallLhs(Node $node) { if (!$this->callLhsRequiresParens($node)) { return $this->p($node); diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index 3c8af570ea..8d48cdfb92 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -22,6 +22,7 @@ abstract class PrettyPrinterAbstract const FIXUP_VAR_BRACED_NAME = 5; // Name operand that may require ${} bracing const FIXUP_ENCAPSED = 6; // Encapsed string part const FIXUP_NEW = 7; // New/instanceof operand + const FIXUP_STATIC_DEREF_LHS = 8; // LHS of static dereferencing operation protected $precedenceMap = [ // [precedence, associativity] @@ -978,6 +979,13 @@ protected function pFixup(int $fixup, Node $subNode, $parentClass, int $subStart return '(' . $this->p($subNode) . ')'; } break; + case self::FIXUP_STATIC_DEREF_LHS: + if ($this->staticDereferenceLhsRequiresParens($subNode) + && !$this->origTokens->haveParens($subStartPos, $subEndPos) + ) { + return '(' . $this->p($subNode) . ')'; + } + break; case self::FIXUP_NEW: if ($this->newOperandRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { @@ -1054,13 +1062,26 @@ protected function callLhsRequiresParens(Node $node) : bool { } /** - * Determines whether the LHS of a dereferencing operation must be wrapped in parenthesis. + * Determines whether the LHS of an array/object operation must be wrapped in parentheses. * * @param Node $node LHS of dereferencing operation * * @return bool Whether parentheses are required */ protected function dereferenceLhsRequiresParens(Node $node) : bool { + // A constant can occur on the LHS of an array/object deref, but not a static deref. + return $this->staticDereferenceLhsRequiresParens($node) + && !$node instanceof Expr\ConstFetch; + } + + /** + * Determines whether the LHS of a static operation must be wrapped in parentheses. + * + * @param Node $node LHS of dereferencing operation + * + * @return bool Whether parentheses are required + */ + protected function staticDereferenceLhsRequiresParens(Node $node): bool { return !($node instanceof Expr\Variable || $node instanceof Node\Name || $node instanceof Expr\ArrayDimFetch @@ -1073,7 +1094,6 @@ protected function dereferenceLhsRequiresParens(Node $node) : bool { || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_ || $node instanceof Scalar\String_ - || $node instanceof Expr\ConstFetch || $node instanceof Expr\ClassConstFetch); } @@ -1208,9 +1228,9 @@ protected function initializeFixupMap() { ], Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], - Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS], + Expr\StaticCall::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], - Expr\ClassConstFetch::class => ['var' => self::FIXUP_DEREF_LHS], + Expr\ClassConstFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], Expr\New_::class => ['class' => self::FIXUP_NEW], Expr\MethodCall::class => [ 'var' => self::FIXUP_DEREF_LHS, @@ -1221,7 +1241,7 @@ protected function initializeFixupMap() { 'name' => self::FIXUP_BRACED_NAME, ], Expr\StaticPropertyFetch::class => [ - 'class' => self::FIXUP_DEREF_LHS, + 'class' => self::FIXUP_STATIC_DEREF_LHS, 'name' => self::FIXUP_VAR_BRACED_NAME, ], Expr\PropertyFetch::class => [ diff --git a/test/code/formatPreservation/fixup.test b/test/code/formatPreservation/fixup.test index de38532721..ec3afe61f2 100644 --- a/test/code/formatPreservation/fixup.test +++ b/test/code/formatPreservation/fixup.test @@ -44,6 +44,9 @@ self :: $foo; self :: $foo; new Foo(); $x instanceof Foo; +Foo :: bar; +Foo :: $bar; +Foo :: bar(); ----- $stmts[0]->expr->name = new Expr\Variable('a'); $stmts[1]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b')); @@ -58,6 +61,9 @@ $stmts[7]->expr->name = new Node\VarLikeIdentifier('bar'); $stmts[8]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b')); $stmts[9]->expr->class = new Scalar\String_('Foo'); $stmts[10]->expr->class = new Scalar\String_('Foo'); +$stmts[11]->expr->class = new Expr\ConstFetch(new Node\Name('FOO')); +$stmts[12]->expr->class = new Expr\ConstFetch(new Node\Name('FOO')); +$stmts[13]->expr->class = new Expr\ConstFetch(new Node\Name('FOO')); ----- y)(); -new (x::$y)(); +new ((x)::$y)(); $x instanceof ('a' . 'b'); $x instanceof ($y++); diff --git a/test/code/prettyPrinter/expr/uvs.test b/test/code/prettyPrinter/expr/uvs.test index 087e7129a3..58f852067b 100644 --- a/test/code/prettyPrinter/expr/uvs.test +++ b/test/code/prettyPrinter/expr/uvs.test @@ -11,6 +11,9 @@ A::$$b[$c](); ($a->b)(); (A::$b)(); ('a' . 'b')::X; +(A)::X; +(A)::$x; +(A)::x(); ----- !!php7 (function () { @@ -22,4 +25,7 @@ $A::{$b[$c]}(); A::${$b}[$c](); ($a->b)(); (A::$b)(); -('a' . 'b')::X; \ No newline at end of file +('a' . 'b')::X; +(A)::X; +(A)::$x; +(A)::x(); From 6d2584bdf12a55573d20034f0f8e12ff2b7ede2c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 26 Feb 2023 16:00:35 +0100 Subject: [PATCH 14/29] Support fixup for dynamic class const name This is new in PHP 8.3. (cherry picked from commit e9416a0eaec601df910045a6f63361068cffddbf) --- lib/PhpParser/PrettyPrinterAbstract.php | 5 ++++- test/code/formatPreservation/fixup.test | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index 8d48cdfb92..770d500928 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -1230,7 +1230,10 @@ protected function initializeFixupMap() { Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], Expr\StaticCall::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], - Expr\ClassConstFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], + Expr\ClassConstFetch::class => [ + 'class' => self::FIXUP_STATIC_DEREF_LHS, + 'name' => self::FIXUP_BRACED_NAME, + ], Expr\New_::class => ['class' => self::FIXUP_NEW], Expr\MethodCall::class => [ 'var' => self::FIXUP_DEREF_LHS, diff --git a/test/code/formatPreservation/fixup.test b/test/code/formatPreservation/fixup.test index ec3afe61f2..0fd07f16d1 100644 --- a/test/code/formatPreservation/fixup.test +++ b/test/code/formatPreservation/fixup.test @@ -47,6 +47,7 @@ $x instanceof Foo; Foo :: bar; Foo :: $bar; Foo :: bar(); +Foo :: bar; ----- $stmts[0]->expr->name = new Expr\Variable('a'); $stmts[1]->expr->name = new Expr\BinaryOp\Concat(new Expr\Variable('a'), new Expr\Variable('b')); @@ -64,6 +65,7 @@ $stmts[10]->expr->class = new Scalar\String_('Foo'); $stmts[11]->expr->class = new Expr\ConstFetch(new Node\Name('FOO')); $stmts[12]->expr->class = new Expr\ConstFetch(new Node\Name('FOO')); $stmts[13]->expr->class = new Expr\ConstFetch(new Node\Name('FOO')); +$stmts[14]->expr->name = new Expr\Variable('bar'); ----- Date: Sun, 13 Aug 2023 16:53:08 +0200 Subject: [PATCH 15/29] Release PHP-Parser 4.17.0 --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d384923240..de0b36e832 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +Version 4.17.0 (2023-08-13) +--------------------------- + +### Added + +* [PHP 8.3] Added support for typed class constants. +* [PHP 8.3] Added supprot for dynamic class constant fetch. +* [PHP 8.3] Added support for readonly anonymous classes. + +### Fixed + +* Fixed missing required parentheses when pretty printing new with an expression class name. +* Fixed missing required parentheses when pretty printing `(CONST)::$x` and similar. + Version 4.16.0 (2023-06-25) --------------------------- From 44fc92194b1f66ca181814839f32e2dcd071c68e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 13 Aug 2023 21:49:54 +0200 Subject: [PATCH 16/29] Fix ClassConst::$type phpdoc The property should be nullable, and on 4.x we should convert string to Identifier. Fixes #939. --- lib/PhpParser/Node/Stmt/ClassConst.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/PhpParser/Node/Stmt/ClassConst.php b/lib/PhpParser/Node/Stmt/ClassConst.php index 52b804c447..8abaad6de2 100644 --- a/lib/PhpParser/Node/Stmt/ClassConst.php +++ b/lib/PhpParser/Node/Stmt/ClassConst.php @@ -12,7 +12,7 @@ class ClassConst extends Node\Stmt public $consts; /** @var Node\AttributeGroup[] PHP attribute groups */ public $attrGroups; - /** @var Node\Identifier|Node\Name|Node\ComplexType Type declaration */ + /** @var Node\Identifier|Node\Name|Node\ComplexType|null Type declaration */ public $type; /** @@ -22,7 +22,7 @@ class ClassConst extends Node\Stmt * @param int $flags Modifiers * @param array $attributes Additional attributes * @param Node\AttributeGroup[] $attrGroups PHP attribute groups - * @param null|string|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration + * @param null|string|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration */ public function __construct( array $consts, @@ -35,7 +35,7 @@ public function __construct( $this->flags = $flags; $this->consts = $consts; $this->attrGroups = $attrGroups; - $this->type = $type; + $this->type = \is_string($type) ? new Node\Identifier($type) : $type; } public function getSubNodeNames() : array { From a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 13 Aug 2023 21:53:39 +0200 Subject: [PATCH 17/29] Release PHP-Parser 4.17.1 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index de0b36e832..b7c05b2459 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +Version 4.17.1 (2023-08-13) +--------------------------- + +### Fixed + +* Fixed phpdoc mismatches for `ClassConst::$type` introduced in previous release. + Version 4.17.0 (2023-08-13) --------------------------- From 54103d838734be0499172026525e38cbf6af2711 Mon Sep 17 00:00:00 2001 From: xjaja <5057757+xjaja@users.noreply.github.com> Date: Wed, 4 Oct 2023 05:00:18 +0800 Subject: [PATCH 18/29] Don't drop class statements before error (#952) When encountering a null statement (indicating that an error occurred), retain the preceding statements. These were accidentally dropped previously. --- grammar/php5.y | 2 +- grammar/php7.y | 2 +- lib/PhpParser/Parser/Php5.php | 2 +- lib/PhpParser/Parser/Php7.php | 2 +- test/code/parser/errorHandling/recovery.test | 19 +++++++++++++++++-- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/grammar/php5.y b/grammar/php5.y index 77e4fb7ede..d7d6288782 100644 --- a/grammar/php5.y +++ b/grammar/php5.y @@ -469,7 +469,7 @@ static_var: ; class_statement_list_ex: - class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } } + class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } else { $$ = $1; } } | /* empty */ { init(); } ; diff --git a/grammar/php7.y b/grammar/php7.y index 1ef60bfe03..53d619477e 100644 --- a/grammar/php7.y +++ b/grammar/php7.y @@ -708,7 +708,7 @@ static_var: ; class_statement_list_ex: - class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } } + class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } else { $$ = $1; } } | /* empty */ { init(); } ; diff --git a/lib/PhpParser/Parser/Php5.php b/lib/PhpParser/Parser/Php5.php index a43067108b..59bd1e8cf5 100644 --- a/lib/PhpParser/Parser/Php5.php +++ b/lib/PhpParser/Parser/Php5.php @@ -1738,7 +1738,7 @@ protected function initReduceCallbacks() { $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 259 => 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)]; } + if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; } else { $this->semValue = $this->semStack[$stackPos-(2-1)]; } }, 260 => function ($stackPos) { $this->semValue = array(); diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php index fc895cb047..6d2b4b0f9c 100644 --- a/lib/PhpParser/Parser/Php7.php +++ b/lib/PhpParser/Parser/Php7.php @@ -2056,7 +2056,7 @@ protected function initReduceCallbacks() { $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 340 => 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)]; } + if ($this->semStack[$stackPos-(2-2)] !== null) { $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; } else { $this->semValue = $this->semStack[$stackPos-(2-1)]; } }, 341 => function ($stackPos) { $this->semValue = array(); diff --git a/test/code/parser/errorHandling/recovery.test b/test/code/parser/errorHandling/recovery.test index c86d269f62..f0ef5b4bd0 100644 --- a/test/code/parser/errorHandling/recovery.test +++ b/test/code/parser/errorHandling/recovery.test @@ -900,12 +900,13 @@ array( Date: Wed, 1 Nov 2023 21:07:32 +0100 Subject: [PATCH 19/29] build: Exclude grammar from export git artifact --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index bffa4c6faa..791f85addc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,6 @@ /.github export-ignore /doc export-ignore +/grammar export-ignore /test export-ignore /test_old export-ignore .editorconfig export-ignore From e453389866395e57146efe12077458c2d906687d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 12 Nov 2023 16:49:53 +0100 Subject: [PATCH 20/29] Add forward-compatibility ParserFactory methods Add ParserFactory::createForNewestSupportedVersion() and ParserFactory::createForHostVersion() for forward-compatibility with PHP-Parser 5. These methods do not accept an externally constructed lexer and always enable all attributes. --- lib/PhpParser/ParserFactory.php | 32 ++++++++++++++++++++++++++++ test/PhpParser/ParserFactoryTest.php | 24 +++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/lib/PhpParser/ParserFactory.php b/lib/PhpParser/ParserFactory.php index f041e7ffe3..baba23bdb4 100644 --- a/lib/PhpParser/ParserFactory.php +++ b/lib/PhpParser/ParserFactory.php @@ -2,6 +2,9 @@ namespace PhpParser; +use PhpParser\Lexer\Emulative; +use PhpParser\Parser\Php7; + class ParserFactory { const PREFER_PHP7 = 1; @@ -41,4 +44,33 @@ public function create(int $kind, Lexer $lexer = null, array $parserOptions = [] ); } } + + /** + * Create a parser targeting the newest version supported by this library. Code for older + * versions will be accepted if there have been no relevant backwards-compatibility breaks in + * PHP. + * + * All supported lexer attributes (comments, startLine, endLine, startTokenPos, endTokenPos, + * startFilePos, endFilePos) will be enabled. + */ + public function createForNewestSupportedVersion(): Parser { + return new Php7(new Emulative($this->getLexerOptions())); + } + + /** + * Create a parser targeting the host PHP version, that is the PHP version we're currently + * running on. This parser will not use any token emulation. + * + * All supported lexer attributes (comments, startLine, endLine, startTokenPos, endTokenPos, + * startFilePos, endFilePos) will be enabled. + */ + public function createForHostVersion(): Parser { + return new Php7(new Lexer($this->getLexerOptions())); + } + + private function getLexerOptions(): array { + return ['usedAttributes' => [ + 'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos', 'startFilePos', 'endFilePos', + ]]; + } } diff --git a/test/PhpParser/ParserFactoryTest.php b/test/PhpParser/ParserFactoryTest.php index d50981f2a1..fbdc83ae93 100644 --- a/test/PhpParser/ParserFactoryTest.php +++ b/test/PhpParser/ParserFactoryTest.php @@ -5,6 +5,8 @@ /* This test is very weak, because PHPUnit's assertEquals assertion is way too slow dealing with the * large objects involved here. So we just do some basic instanceof tests instead. */ +use PhpParser\Node\Stmt\Echo_; + class ParserFactoryTest extends \PHPUnit\Framework\TestCase { /** @dataProvider provideTestCreate */ @@ -33,4 +35,26 @@ public function provideTestCreate() { ] ]; } + + /** @dataProvider provideTestLexerAttributes */ + public function testLexerAttributes(Parser $parser) { + $stmts = $parser->parse("assertInstanceOf(Echo_::class, $stmt); + $this->assertCount(1, $stmt->getComments()); + $this->assertSame(1, $stmt->getStartLine()); + $this->assertSame(1, $stmt->getEndLine()); + $this->assertSame(3, $stmt->getStartTokenPos()); + $this->assertSame(6, $stmt->getEndTokenPos()); + $this->assertSame(16, $stmt->getStartFilePos()); + $this->assertSame(26, $stmt->getEndFilePos()); + } + + public function provideTestLexerAttributes() { + $factory = new ParserFactory(); + return [ + [$factory->createForHostVersion()], + [$factory->createForNewestSupportedVersion()], + ]; + } } From 2a5e81f7caae572f096f5cc83d0ef75687127e1c Mon Sep 17 00:00:00 2001 From: Ondrej Mirtes Date: Tue, 28 Nov 2023 14:11:58 +0100 Subject: [PATCH 21/29] Fix NameResolver for class constant native type --- lib/PhpParser/NodeVisitor/NameResolver.php | 3 +++ test/PhpParser/NodeVisitor/NameResolverTest.php | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/PhpParser/NodeVisitor/NameResolver.php b/lib/PhpParser/NodeVisitor/NameResolver.php index d0e7de02f5..83f3ea831c 100644 --- a/lib/PhpParser/NodeVisitor/NameResolver.php +++ b/lib/PhpParser/NodeVisitor/NameResolver.php @@ -118,6 +118,9 @@ public function enterNode(Node $node) { $this->addNamespacedName($const); } } else if ($node instanceof Stmt\ClassConst) { + if (null !== $node->type) { + $node->type = $this->resolveType($node->type); + } $this->resolveAttrGroups($node); } else if ($node instanceof Stmt\EnumCase) { $this->resolveAttrGroups($node); diff --git a/test/PhpParser/NodeVisitor/NameResolverTest.php b/test/PhpParser/NodeVisitor/NameResolverTest.php index b5035ce3fe..3b1e920765 100644 --- a/test/PhpParser/NodeVisitor/NameResolverTest.php +++ b/test/PhpParser/NodeVisitor/NameResolverTest.php @@ -189,7 +189,7 @@ class A extends B implements C, D { E::h as i; E::j insteadof F, G; } - + #[X] public float $php = 7.4; public ?Foo $person; @@ -198,6 +198,10 @@ class A extends B implements C, D { #[X] const C = 1; + + public const X A = X::Bar; + public const X\Foo B = X\Foo::Bar; + public const \X\Foo C = \X\Foo::Bar; } #[X] @@ -263,6 +267,9 @@ class A extends \NS\B implements \NS\C, \NS\D public \NS\A|\NS\B|int $prop; #[\NS\X] const C = 1; + public const \NS\X A = \NS\X::Bar; + public const \NS\X\Foo B = \NS\X\Foo::Bar; + public const \X\Foo C = \X\Foo::Bar; } #[\NS\X] interface A extends \NS\C, \NS\D From 05c01865ea9659574d790d25c48bdb3a9a2f3ba6 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 10 Dec 2023 21:57:42 +0100 Subject: [PATCH 22/29] Add PHP 8.3 to CI --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 23ed339bcd..bab4133cff 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -41,6 +41,7 @@ jobs: - "8.0" - "8.1" - "8.2" + - "8.3" steps: - name: "Checkout" uses: "actions/checkout@v3" From 1bcbb2179f97633e98bbbc87044ee2611c7d7999 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 10 Dec 2023 22:03:43 +0100 Subject: [PATCH 23/29] Release PHP-Parser 4.18.0 --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7c05b2459..5aa1986696 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +Version 4.18.0 (2023-12-10) +--------------------------- + +### Added + +* Added methods `ParserFactory::createForNewestSupportedVersion()` and + `ParserFactory::createForHostVersion()` for forward-compatibility with PHP-Parser 5.0. + +### Fixed + +* Fixed missing name resolution of class constant types. +* Fixed class members being dropped if an error is encountered while parsing a later class member + (when error recovery is enabeld). + +### Changed + +* The `grammar/` directory has been excluded from exported git archives. + Version 4.17.1 (2023-08-13) --------------------------- From 051ad218f849c713fc5df2e1eedf75cfebd3e030 Mon Sep 17 00:00:00 2001 From: Sebastian Bergmann Date: Sat, 2 Mar 2024 18:19:50 +0100 Subject: [PATCH 24/29] Do not use implicitly nullable parameters (#984) Implicitly nullable parameters will be deprecated in PHP 8.4 (see https://wiki.php.net/rfc/deprecate-implicitly-nullable-types). To avoid deprecation warnings, replace all implicitly nullable parameters with explicit ones. Unfortunately, this also means that we have to drop support for PHP 7.0. --- .github/workflows/main.yml | 13 ++++++------- CHANGELOG.md | 8 ++++++++ composer.json | 2 +- lib/PhpParser/ConstExprEvaluator.php | 2 +- .../Internal/PrintableNewAnonClassNode.php | 2 +- lib/PhpParser/Lexer.php | 2 +- lib/PhpParser/Lexer/Emulative.php | 2 +- lib/PhpParser/NameContext.php | 2 +- lib/PhpParser/Node/Arg.php | 2 +- lib/PhpParser/Node/Expr/ArrayDimFetch.php | 2 +- lib/PhpParser/Node/Expr/ArrayItem.php | 2 +- lib/PhpParser/Node/Expr/Exit_.php | 2 +- lib/PhpParser/Node/Expr/Yield_.php | 2 +- lib/PhpParser/Node/Name.php | 2 +- lib/PhpParser/Node/Param.php | 2 +- lib/PhpParser/Node/Stmt/Break_.php | 2 +- lib/PhpParser/Node/Stmt/Catch_.php | 2 +- lib/PhpParser/Node/Stmt/Continue_.php | 2 +- lib/PhpParser/Node/Stmt/Declare_.php | 2 +- lib/PhpParser/Node/Stmt/EnumCase.php | 2 +- lib/PhpParser/Node/Stmt/Namespace_.php | 2 +- lib/PhpParser/Node/Stmt/PropertyProperty.php | 2 +- lib/PhpParser/Node/Stmt/Return_.php | 2 +- lib/PhpParser/Node/Stmt/StaticVar.php | 2 +- lib/PhpParser/Node/Stmt/TryCatch.php | 2 +- lib/PhpParser/NodeDumper.php | 2 +- lib/PhpParser/NodeVisitor/NameResolver.php | 4 ++-- lib/PhpParser/Parser.php | 2 +- lib/PhpParser/Parser/Multiple.php | 2 +- lib/PhpParser/ParserAbstract.php | 2 +- lib/PhpParser/ParserFactory.php | 2 +- 31 files changed, 44 insertions(+), 37 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bab4133cff..9e1062a125 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,9 +5,9 @@ on: pull_request: jobs: - tests_70: + tests_71: runs-on: "ubuntu-latest" - name: "PHP 7.0 Unit Tests" + name: "PHP 7.1 Unit Tests" steps: - name: "Checkout" uses: "actions/checkout@v3" @@ -15,7 +15,7 @@ jobs: uses: "shivammathur/setup-php@v2" with: coverage: "xdebug" - php-version: "7.0" + php-version: "7.1" tools: composer:v2 - name: "Install dependencies" run: | @@ -34,7 +34,6 @@ jobs: strategy: matrix: php-version: - - "7.1" - "7.2" - "7.3" - "7.4" @@ -71,9 +70,9 @@ jobs: run: "composer update --no-progress --prefer-dist" - name: "Tests" run: "test_old/run-php-src.sh 7.3.21" - test_old_80_70: + test_old_80_71: runs-on: "ubuntu-latest" - name: "PHP 8.1 Code on PHP 7.0 Integration Tests" + name: "PHP 8.1 Code on PHP 7.1 Integration Tests" steps: - name: "Checkout" uses: "actions/checkout@v3" @@ -81,7 +80,7 @@ jobs: uses: "shivammathur/setup-php@v2" with: coverage: "none" - php-version: "7.0" + php-version: "7.1" tools: composer:v2 - name: "Install PHP 8 dependencies" run: "composer update --no-progress --prefer-dist" diff --git a/CHANGELOG.md b/CHANGELOG.md index 5aa1986696..b0e2bd3fee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +Version 4.19.0 (2024-MM-DD) +--------------------------- + +### Changed + +* Do not use implicitly nullable parameters +* PHP 7.0 is no longer supported + Version 4.18.0 (2023-12-10) --------------------------- diff --git a/composer.json b/composer.json index 2fd064a212..9a3e1a9761 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ } ], "require": { - "php": ">=7.0", + "php": ">=7.1", "ext-tokenizer": "*" }, "require-dev": { diff --git a/lib/PhpParser/ConstExprEvaluator.php b/lib/PhpParser/ConstExprEvaluator.php index 7131c3d255..ceb3f11f3d 100644 --- a/lib/PhpParser/ConstExprEvaluator.php +++ b/lib/PhpParser/ConstExprEvaluator.php @@ -37,7 +37,7 @@ class ConstExprEvaluator * * @param callable|null $fallbackEvaluator To call if subexpression cannot be evaluated */ - public function __construct(callable $fallbackEvaluator = null) { + public function __construct(?callable $fallbackEvaluator = null) { $this->fallbackEvaluator = $fallbackEvaluator ?? function(Expr $expr) { throw new ConstExprEvaluationException( "Expression of type {$expr->getType()} cannot be evaluated" diff --git a/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php index 6763227014..917ed1e854 100644 --- a/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +++ b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php @@ -31,7 +31,7 @@ class PrintableNewAnonClassNode extends Expr public $stmts; public function __construct( - array $attrGroups, int $flags, array $args, Node\Name $extends = null, array $implements, + array $attrGroups, int $flags, array $args, ?Node\Name $extends = null, array $implements, array $stmts, array $attributes ) { parent::__construct($attributes); diff --git a/lib/PhpParser/Lexer.php b/lib/PhpParser/Lexer.php index e15dd0a5d2..60b809b8b1 100644 --- a/lib/PhpParser/Lexer.php +++ b/lib/PhpParser/Lexer.php @@ -69,7 +69,7 @@ public function __construct(array $options = []) { * @param ErrorHandler|null $errorHandler Error handler to use for lexing errors. Defaults to * ErrorHandler\Throwing */ - public function startLexing(string $code, ErrorHandler $errorHandler = null) { + public function startLexing(string $code, ?ErrorHandler $errorHandler = null) { if (null === $errorHandler) { $errorHandler = new ErrorHandler\Throwing(); } diff --git a/lib/PhpParser/Lexer/Emulative.php b/lib/PhpParser/Lexer/Emulative.php index b0929f3ccb..a0e781d04d 100644 --- a/lib/PhpParser/Lexer/Emulative.php +++ b/lib/PhpParser/Lexer/Emulative.php @@ -74,7 +74,7 @@ public function __construct(array $options = []) } } - public function startLexing(string $code, ErrorHandler $errorHandler = null) { + public function startLexing(string $code, ?ErrorHandler $errorHandler = null) { $emulators = array_filter($this->emulators, function($emulator) use($code) { return $emulator->isEmulationNeeded($code); }); diff --git a/lib/PhpParser/NameContext.php b/lib/PhpParser/NameContext.php index 777a4afdee..82c5acc2c7 100644 --- a/lib/PhpParser/NameContext.php +++ b/lib/PhpParser/NameContext.php @@ -36,7 +36,7 @@ public function __construct(ErrorHandler $errorHandler) { * * @param Name|null $namespace Null is the global namespace */ - public function startNamespace(Name $namespace = null) { + public function startNamespace(?Name $namespace = null) { $this->namespace = $namespace; $this->origAliases = $this->aliases = [ Stmt\Use_::TYPE_NORMAL => [], diff --git a/lib/PhpParser/Node/Arg.php b/lib/PhpParser/Node/Arg.php index bcf130e68c..17e6802607 100644 --- a/lib/PhpParser/Node/Arg.php +++ b/lib/PhpParser/Node/Arg.php @@ -27,7 +27,7 @@ class Arg extends NodeAbstract */ public function __construct( Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = [], - Identifier $name = null + ?Identifier $name = null ) { $this->attributes = $attributes; $this->name = $name; diff --git a/lib/PhpParser/Node/Expr/ArrayDimFetch.php b/lib/PhpParser/Node/Expr/ArrayDimFetch.php index 71694478e9..46db975c4c 100644 --- a/lib/PhpParser/Node/Expr/ArrayDimFetch.php +++ b/lib/PhpParser/Node/Expr/ArrayDimFetch.php @@ -18,7 +18,7 @@ class ArrayDimFetch extends Expr * @param null|Expr $dim Array index / dim * @param array $attributes Additional attributes */ - public function __construct(Expr $var, Expr $dim = null, array $attributes = []) { + public function __construct(Expr $var, ?Expr $dim = null, array $attributes = []) { $this->attributes = $attributes; $this->var = $var; $this->dim = $dim; diff --git a/lib/PhpParser/Node/Expr/ArrayItem.php b/lib/PhpParser/Node/Expr/ArrayItem.php index 1b078f8218..5aaa9867ee 100644 --- a/lib/PhpParser/Node/Expr/ArrayItem.php +++ b/lib/PhpParser/Node/Expr/ArrayItem.php @@ -23,7 +23,7 @@ class ArrayItem extends Expr * @param bool $byRef Whether to assign by reference * @param array $attributes Additional attributes */ - public function __construct(Expr $value, Expr $key = null, bool $byRef = false, array $attributes = [], bool $unpack = false) { + public function __construct(Expr $value, ?Expr $key = null, bool $byRef = false, array $attributes = [], bool $unpack = false) { $this->attributes = $attributes; $this->key = $key; $this->value = $value; diff --git a/lib/PhpParser/Node/Expr/Exit_.php b/lib/PhpParser/Node/Expr/Exit_.php index b88a8f7e6f..5469b8e4ca 100644 --- a/lib/PhpParser/Node/Expr/Exit_.php +++ b/lib/PhpParser/Node/Expr/Exit_.php @@ -19,7 +19,7 @@ class Exit_ extends Expr * @param null|Expr $expr Expression * @param array $attributes Additional attributes */ - public function __construct(Expr $expr = null, array $attributes = []) { + public function __construct(?Expr $expr = null, array $attributes = []) { $this->attributes = $attributes; $this->expr = $expr; } diff --git a/lib/PhpParser/Node/Expr/Yield_.php b/lib/PhpParser/Node/Expr/Yield_.php index aef8fc333d..f15336edeb 100644 --- a/lib/PhpParser/Node/Expr/Yield_.php +++ b/lib/PhpParser/Node/Expr/Yield_.php @@ -18,7 +18,7 @@ class Yield_ extends Expr * @param null|Expr $key Key expression * @param array $attributes Additional attributes */ - public function __construct(Expr $value = null, Expr $key = null, array $attributes = []) { + public function __construct(?Expr $value = null, ?Expr $key = null, array $attributes = []) { $this->attributes = $attributes; $this->key = $key; $this->value = $value; diff --git a/lib/PhpParser/Node/Name.php b/lib/PhpParser/Node/Name.php index f0a564ff0b..0d6e4b1ff5 100644 --- a/lib/PhpParser/Node/Name.php +++ b/lib/PhpParser/Node/Name.php @@ -162,7 +162,7 @@ public function __toString() : string { * * @return static|null Sliced name */ - public function slice(int $offset, int $length = null) { + public function slice(int $offset, ?int $length = null) { $numParts = count($this->parts); $realOffset = $offset < 0 ? $offset + $numParts : $offset; diff --git a/lib/PhpParser/Node/Param.php b/lib/PhpParser/Node/Param.php index 1e90b79441..dfb77f6290 100644 --- a/lib/PhpParser/Node/Param.php +++ b/lib/PhpParser/Node/Param.php @@ -34,7 +34,7 @@ class Param extends NodeAbstract * @param AttributeGroup[] $attrGroups PHP attribute groups */ public function __construct( - $var, Expr $default = null, $type = null, + $var, ?Expr $default = null, $type = null, bool $byRef = false, bool $variadic = false, array $attributes = [], int $flags = 0, diff --git a/lib/PhpParser/Node/Stmt/Break_.php b/lib/PhpParser/Node/Stmt/Break_.php index 6adc5a6c6f..d9464a1ae8 100644 --- a/lib/PhpParser/Node/Stmt/Break_.php +++ b/lib/PhpParser/Node/Stmt/Break_.php @@ -15,7 +15,7 @@ class Break_ extends Node\Stmt * @param null|Node\Expr $num Number of loops to break * @param array $attributes Additional attributes */ - public function __construct(Node\Expr $num = null, array $attributes = []) { + public function __construct(?Node\Expr $num = null, array $attributes = []) { $this->attributes = $attributes; $this->num = $num; } diff --git a/lib/PhpParser/Node/Stmt/Catch_.php b/lib/PhpParser/Node/Stmt/Catch_.php index 9b9c094782..5d7b5c0168 100644 --- a/lib/PhpParser/Node/Stmt/Catch_.php +++ b/lib/PhpParser/Node/Stmt/Catch_.php @@ -23,7 +23,7 @@ class Catch_ extends Node\Stmt * @param array $attributes Additional attributes */ public function __construct( - array $types, Expr\Variable $var = null, array $stmts = [], array $attributes = [] + array $types, ?Expr\Variable $var = null, array $stmts = [], array $attributes = [] ) { $this->attributes = $attributes; $this->types = $types; diff --git a/lib/PhpParser/Node/Stmt/Continue_.php b/lib/PhpParser/Node/Stmt/Continue_.php index 24882683b3..f2b30d79f5 100644 --- a/lib/PhpParser/Node/Stmt/Continue_.php +++ b/lib/PhpParser/Node/Stmt/Continue_.php @@ -15,7 +15,7 @@ class Continue_ extends Node\Stmt * @param null|Node\Expr $num Number of loops to continue * @param array $attributes Additional attributes */ - public function __construct(Node\Expr $num = null, array $attributes = []) { + public function __construct(?Node\Expr $num = null, array $attributes = []) { $this->attributes = $attributes; $this->num = $num; } diff --git a/lib/PhpParser/Node/Stmt/Declare_.php b/lib/PhpParser/Node/Stmt/Declare_.php index f46ff0bafd..a3a5bfaa59 100644 --- a/lib/PhpParser/Node/Stmt/Declare_.php +++ b/lib/PhpParser/Node/Stmt/Declare_.php @@ -18,7 +18,7 @@ class Declare_ extends Node\Stmt * @param Node\Stmt[]|null $stmts Statements * @param array $attributes Additional attributes */ - public function __construct(array $declares, array $stmts = null, array $attributes = []) { + public function __construct(array $declares, ?array $stmts = null, array $attributes = []) { $this->attributes = $attributes; $this->declares = $declares; $this->stmts = $stmts; diff --git a/lib/PhpParser/Node/Stmt/EnumCase.php b/lib/PhpParser/Node/Stmt/EnumCase.php index 5beff8b39f..4b1079bcd7 100644 --- a/lib/PhpParser/Node/Stmt/EnumCase.php +++ b/lib/PhpParser/Node/Stmt/EnumCase.php @@ -20,7 +20,7 @@ class EnumCase extends Node\Stmt * @param AttributeGroup[] $attrGroups PHP attribute groups * @param array $attributes Additional attributes */ - public function __construct($name, Node\Expr $expr = null, array $attrGroups = [], array $attributes = []) { + public function __construct($name, ?Node\Expr $expr = null, array $attrGroups = [], array $attributes = []) { parent::__construct($attributes); $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->expr = $expr; diff --git a/lib/PhpParser/Node/Stmt/Namespace_.php b/lib/PhpParser/Node/Stmt/Namespace_.php index c63204577c..fc249161a9 100644 --- a/lib/PhpParser/Node/Stmt/Namespace_.php +++ b/lib/PhpParser/Node/Stmt/Namespace_.php @@ -22,7 +22,7 @@ class Namespace_ extends Node\Stmt * @param null|Node\Stmt[] $stmts Statements * @param array $attributes Additional attributes */ - public function __construct(Node\Name $name = null, $stmts = [], array $attributes = []) { + public function __construct(?Node\Name $name = null, $stmts = [], array $attributes = []) { $this->attributes = $attributes; $this->name = $name; $this->stmts = $stmts; diff --git a/lib/PhpParser/Node/Stmt/PropertyProperty.php b/lib/PhpParser/Node/Stmt/PropertyProperty.php index 205731e20e..286b42961c 100644 --- a/lib/PhpParser/Node/Stmt/PropertyProperty.php +++ b/lib/PhpParser/Node/Stmt/PropertyProperty.php @@ -18,7 +18,7 @@ class PropertyProperty extends Node\Stmt * @param null|Node\Expr $default Default value * @param array $attributes Additional attributes */ - public function __construct($name, Node\Expr $default = null, array $attributes = []) { + public function __construct($name, ?Node\Expr $default = null, array $attributes = []) { $this->attributes = $attributes; $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; $this->default = $default; diff --git a/lib/PhpParser/Node/Stmt/Return_.php b/lib/PhpParser/Node/Stmt/Return_.php index efc578c58f..53731254c0 100644 --- a/lib/PhpParser/Node/Stmt/Return_.php +++ b/lib/PhpParser/Node/Stmt/Return_.php @@ -15,7 +15,7 @@ class Return_ extends Node\Stmt * @param null|Node\Expr $expr Expression * @param array $attributes Additional attributes */ - public function __construct(Node\Expr $expr = null, array $attributes = []) { + public function __construct(?Node\Expr $expr = null, array $attributes = []) { $this->attributes = $attributes; $this->expr = $expr; } diff --git a/lib/PhpParser/Node/Stmt/StaticVar.php b/lib/PhpParser/Node/Stmt/StaticVar.php index 29584560d3..0cc47b4122 100644 --- a/lib/PhpParser/Node/Stmt/StaticVar.php +++ b/lib/PhpParser/Node/Stmt/StaticVar.php @@ -20,7 +20,7 @@ class StaticVar extends Node\Stmt * @param array $attributes Additional attributes */ public function __construct( - Expr\Variable $var, Node\Expr $default = null, array $attributes = [] + Expr\Variable $var, ?Node\Expr $default = null, array $attributes = [] ) { $this->attributes = $attributes; $this->var = $var; diff --git a/lib/PhpParser/Node/Stmt/TryCatch.php b/lib/PhpParser/Node/Stmt/TryCatch.php index 7fc158c570..74e004380b 100644 --- a/lib/PhpParser/Node/Stmt/TryCatch.php +++ b/lib/PhpParser/Node/Stmt/TryCatch.php @@ -21,7 +21,7 @@ class TryCatch extends Node\Stmt * @param null|Finally_ $finally Optional finally node * @param array $attributes Additional attributes */ - public function __construct(array $stmts, array $catches, Finally_ $finally = null, array $attributes = []) { + public function __construct(array $stmts, array $catches, ?Finally_ $finally = null, array $attributes = []) { $this->attributes = $attributes; $this->stmts = $stmts; $this->catches = $catches; diff --git a/lib/PhpParser/NodeDumper.php b/lib/PhpParser/NodeDumper.php index ba622efd12..e0c7f783ad 100644 --- a/lib/PhpParser/NodeDumper.php +++ b/lib/PhpParser/NodeDumper.php @@ -39,7 +39,7 @@ public function __construct(array $options = []) { * * @return string Dumped value */ - public function dump($node, string $code = null) : string { + public function dump($node, ?string $code = null) : string { $this->code = $code; return $this->dumpRecursive($node); } diff --git a/lib/PhpParser/NodeVisitor/NameResolver.php b/lib/PhpParser/NodeVisitor/NameResolver.php index 83f3ea831c..dd2e9ca766 100644 --- a/lib/PhpParser/NodeVisitor/NameResolver.php +++ b/lib/PhpParser/NodeVisitor/NameResolver.php @@ -35,7 +35,7 @@ class NameResolver extends NodeVisitorAbstract * @param ErrorHandler|null $errorHandler Error handler * @param array $options Options */ - public function __construct(ErrorHandler $errorHandler = null, array $options = []) { + public function __construct(?ErrorHandler $errorHandler = null, array $options = []) { $this->nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing); $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? false; $this->replaceNodes = $options['replaceNodes'] ?? true; @@ -164,7 +164,7 @@ public function enterNode(Node $node) { return null; } - private function addAlias(Stmt\UseUse $use, int $type, Name $prefix = null) { + private function addAlias(Stmt\UseUse $use, int $type, ?Name $prefix = null) { // Add prefix for group uses $name = $prefix ? Name::concat($prefix, $use->name) : $use->name; // Type is determined either by individual element or whole use declaration diff --git a/lib/PhpParser/Parser.php b/lib/PhpParser/Parser.php index 8956c76718..7236c68e2a 100644 --- a/lib/PhpParser/Parser.php +++ b/lib/PhpParser/Parser.php @@ -14,5 +14,5 @@ interface Parser * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and * the parser was unable to recover from an error). */ - public function parse(string $code, ErrorHandler $errorHandler = null); + public function parse(string $code, ?ErrorHandler $errorHandler = null); } diff --git a/lib/PhpParser/Parser/Multiple.php b/lib/PhpParser/Parser/Multiple.php index 77fd1f3fbb..083ff465d3 100644 --- a/lib/PhpParser/Parser/Multiple.php +++ b/lib/PhpParser/Parser/Multiple.php @@ -24,7 +24,7 @@ public function __construct(array $parsers) { $this->parsers = $parsers; } - public function parse(string $code, ErrorHandler $errorHandler = null) { + public function parse(string $code, ?ErrorHandler $errorHandler = null) { if (null === $errorHandler) { $errorHandler = new ErrorHandler\Throwing; } diff --git a/lib/PhpParser/ParserAbstract.php b/lib/PhpParser/ParserAbstract.php index 9f9d00c763..567e09a975 100644 --- a/lib/PhpParser/ParserAbstract.php +++ b/lib/PhpParser/ParserAbstract.php @@ -155,7 +155,7 @@ public function __construct(Lexer $lexer, array $options = []) { * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and * the parser was unable to recover from an error). */ - public function parse(string $code, ErrorHandler $errorHandler = null) { + public function parse(string $code, ?ErrorHandler $errorHandler = null) { $this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing; $this->lexer->startLexing($code, $this->errorHandler); diff --git a/lib/PhpParser/ParserFactory.php b/lib/PhpParser/ParserFactory.php index baba23bdb4..98b0aee343 100644 --- a/lib/PhpParser/ParserFactory.php +++ b/lib/PhpParser/ParserFactory.php @@ -21,7 +21,7 @@ class ParserFactory * * @return Parser The parser instance */ - public function create(int $kind, Lexer $lexer = null, array $parserOptions = []) : Parser { + public function create(int $kind, ?Lexer $lexer = null, array $parserOptions = []) : Parser { if (null === $lexer) { $lexer = new Lexer\Emulative(); } From c2403aa729cff7dade2fea55ff77d262840b2371 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 2 Mar 2024 18:21:59 +0100 Subject: [PATCH 25/29] Update minimum PHP version in docs --- README.md | 2 +- doc/0_Introduction.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 36de23cde1..3bca288b92 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ PHP Parser This is a PHP 5.2 to PHP 8.2 parser written in PHP. Its purpose is to simplify static code analysis and manipulation. -[**Documentation for version 4.x**][doc_4_x] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 8.2). +[**Documentation for version 4.x**][doc_4_x] (stable; for running on PHP >= 7.1; for parsing PHP 5.2 to PHP 8.2). [Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2). diff --git a/doc/0_Introduction.markdown b/doc/0_Introduction.markdown index b300e733bc..0d9500c8f6 100644 --- a/doc/0_Introduction.markdown +++ b/doc/0_Introduction.markdown @@ -34,7 +34,7 @@ The parser supports parsing PHP 5.2-8.0, with the following exceptions: As the parser is based on the tokens returned by `token_get_all` (which is only able to lex the PHP version it runs on), additionally a wrapper for emulating tokens from newer versions is provided. -This allows to parse PHP 7.4 source code running on PHP 7.0, for example. This emulation is somewhat +This allows to parse PHP 7.4 source code running on PHP 7.1, for example. This emulation is somewhat hacky and not perfect, but it should work well on any sane code. What output does it produce? From 32cdab9a034239a8f57ae0e9a15bada4bd9747bf Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 16 Mar 2024 15:49:31 +0100 Subject: [PATCH 26/29] Release PHP-Parser 4.19.0 --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0e2bd3fee..3ecf829146 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,10 @@ -Version 4.19.0 (2024-MM-DD) +Version 4.19.0 (2024-03-16) --------------------------- ### Changed -* Do not use implicitly nullable parameters -* PHP 7.0 is no longer supported +* Do not use implicitly nullable parameters, which are deprecated in PHP 8.4. +* Remove support for running on PHP 7.0, which does not support explicitly nullable parameters. Version 4.18.0 (2023-12-10) --------------------------- From d4d4e3e155048fd96d467e172149fe0cc35ab9f6 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Sun, 17 Mar 2024 15:05:57 +0700 Subject: [PATCH 27/29] Fix deprecated Optional parameter before required parameter on PrintableNewAnonClassNode (#987) Fixes https://github.com/nikic/PHP-Parser/issues/986. --- lib/PhpParser/Internal/PrintableNewAnonClassNode.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php index 917ed1e854..fc276ecb92 100644 --- a/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +++ b/lib/PhpParser/Internal/PrintableNewAnonClassNode.php @@ -31,7 +31,7 @@ class PrintableNewAnonClassNode extends Expr public $stmts; public function __construct( - array $attrGroups, int $flags, array $args, ?Node\Name $extends = null, array $implements, + array $attrGroups, int $flags, array $args, ?Node\Name $extends, array $implements, array $stmts, array $attributes ) { parent::__construct($attributes); From 4e1b88d21c69391150ace211e9eaf05810858d0b Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 17 Mar 2024 09:10:35 +0100 Subject: [PATCH 28/29] Release PHP-Parser 4.19.1 --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ecf829146..c9bbb9ab50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +Version 4.19.1 (2024-03-17) +--------------------------- + +### Fixed + +* Fixed "Optional parameter before required parameter" deprecation warning introduced in + previous version. + Version 4.19.0 (2024-03-16) --------------------------- From 4d36e9c16f4820c2ed9360bc818982f3c02a08f5 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sun, 17 Mar 2024 10:03:35 +0100 Subject: [PATCH 29/29] Make phpunit fail on deprecation warnings (#989) --- .github/workflows/main.yml | 2 ++ phpunit.xml.dist | 1 + 2 files changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9e1062a125..57af1f9710 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,6 +49,7 @@ jobs: with: coverage: "none" php-version: "${{ matrix.php-version }}" + ini-file: "development" tools: composer:v2 - name: "Install dependencies" run: "composer update --no-progress --prefer-dist ${{ matrix.flags }}" @@ -65,6 +66,7 @@ jobs: with: coverage: "none" php-version: "8.0" + ini-file: "development" tools: composer:v2 - name: "Install PHP 8 dependencies" run: "composer update --no-progress --prefer-dist" diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 5271264cbf..c4cbd16656 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -4,6 +4,7 @@ xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" backupGlobals="false" colors="true" + convertDeprecationsToExceptions="true" beStrictAboutTestsThatDoNotTestAnything="false" bootstrap="./test/bootstrap.php">