From 23d9c17770b5f8822315e21041c5aa834e2d612c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 2 Aug 2020 10:30:44 +0200 Subject: [PATCH] Add support for nullsafe operator --- grammar/php7.y | 6 + grammar/tokens.y | 1 + lib/PhpParser/Lexer.php | 4 + lib/PhpParser/Lexer/Emulative.php | 2 + .../TokenEmulator/NullsafeTokenEmulator.php | 47 + .../Node/Expr/NullsafeMethodCall.php | 40 + .../Node/Expr/NullsafePropertyFetch.php | 35 + lib/PhpParser/Parser/Php5.php | 66 +- lib/PhpParser/Parser/Php7.php | 1225 +++++++++-------- lib/PhpParser/Parser/Tokens.php | 45 +- lib/PhpParser/PrettyPrinter/Standard.php | 9 + lib/PhpParser/PrettyPrinterAbstract.php | 13 + test/PhpParser/Lexer/EmulativeTest.php | 15 + test/code/parser/expr/nullsafe.test | 82 ++ test/code/prettyPrinter/expr/nullsafe.test | 22 + 15 files changed, 953 insertions(+), 659 deletions(-) create mode 100644 lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php create mode 100644 lib/PhpParser/Node/Expr/NullsafeMethodCall.php create mode 100644 lib/PhpParser/Node/Expr/NullsafePropertyFetch.php create mode 100644 test/code/parser/expr/nullsafe.test create mode 100644 test/code/prettyPrinter/expr/nullsafe.test diff --git a/grammar/php7.y b/grammar/php7.y index 36b7cf7a..2a512d54 100644 --- a/grammar/php7.y +++ b/grammar/php7.y @@ -943,6 +943,8 @@ callable_variable: | function_call { $$ = $1; } | array_object_dereferencable T_OBJECT_OPERATOR property_name argument_list { $$ = Expr\MethodCall[$1, $3, $4]; } + | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name argument_list + { $$ = Expr\NullsafeMethodCall[$1, $3, $4]; } ; optional_plain_variable: @@ -955,6 +957,8 @@ variable: | static_member { $$ = $1; } | array_object_dereferencable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; } + | array_object_dereferencable T_NULLSAFE_OBJECT_OPERATOR property_name + { $$ = Expr\NullsafePropertyFetch[$1, $3]; } ; simple_variable: @@ -979,6 +983,7 @@ new_variable: | new_variable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | new_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } | new_variable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; } + | new_variable T_NULLSAFE_OBJECT_OPERATOR property_name { $$ = Expr\NullsafePropertyFetch[$1, $3]; } | class_name T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name { $$ = Expr\StaticPropertyFetch[$1, $3]; } | new_variable T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name @@ -1048,6 +1053,7 @@ encaps_var: plain_variable { $$ = $1; } | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; } + | plain_variable T_NULLSAFE_OBJECT_OPERATOR identifier { $$ = Expr\NullsafePropertyFetch[$1, $3]; } | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; } | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}' diff --git a/grammar/tokens.y b/grammar/tokens.y index cbf68bf6..560cdd41 100644 --- a/grammar/tokens.y +++ b/grammar/tokens.y @@ -85,6 +85,7 @@ %token T_EXTENDS %token T_IMPLEMENTS %token T_OBJECT_OPERATOR +%token T_NULLSAFE_OBJECT_OPERATOR %token T_DOUBLE_ARROW %token T_LIST %token T_ARRAY diff --git a/lib/PhpParser/Lexer.php b/lib/PhpParser/Lexer.php index eaaa6b65..11181130 100644 --- a/lib/PhpParser/Lexer.php +++ b/lib/PhpParser/Lexer.php @@ -428,6 +428,9 @@ class Lexer if (!defined('T_MATCH')) { \define('T_MATCH', -7); } + if (!defined('T_NULLSAFE_OBJECT_OPERATOR')) { + \define('T_NULLSAFE_OBJECT_OPERATOR', -8); + } } /** @@ -481,6 +484,7 @@ class Lexer $tokenMap[\T_NAME_FULLY_QUALIFIED] = Tokens::T_NAME_FULLY_QUALIFIED; $tokenMap[\T_NAME_RELATIVE] = Tokens::T_NAME_RELATIVE; $tokenMap[\T_MATCH] = Tokens::T_MATCH; + $tokenMap[\T_NULLSAFE_OBJECT_OPERATOR] = Tokens::T_NULLSAFE_OBJECT_OPERATOR; return $tokenMap; } diff --git a/lib/PhpParser/Lexer/Emulative.php b/lib/PhpParser/Lexer/Emulative.php index bc5560ad..4b92a67a 100644 --- a/lib/PhpParser/Lexer/Emulative.php +++ b/lib/PhpParser/Lexer/Emulative.php @@ -8,6 +8,7 @@ use PhpParser\Lexer; use PhpParser\Lexer\TokenEmulator\CoaleseEqualTokenEmulator; use PhpParser\Lexer\TokenEmulator\FnTokenEmulator; use PhpParser\Lexer\TokenEmulator\MatchTokenEmulator; +use PhpParser\Lexer\TokenEmulator\NullsafeTokenEmulator; use PhpParser\Lexer\TokenEmulator\NumericLiteralSeparatorEmulator; use PhpParser\Lexer\TokenEmulator\TokenEmulatorInterface; use PhpParser\Parser\Tokens; @@ -49,6 +50,7 @@ REGEX; $this->tokenEmulators[] = new MatchTokenEmulator(); $this->tokenEmulators[] = new CoaleseEqualTokenEmulator(); $this->tokenEmulators[] = new NumericLiteralSeparatorEmulator(); + $this->tokenEmulators[] = new NullsafeTokenEmulator(); } public function startLexing(string $code, ErrorHandler $errorHandler = null) { diff --git a/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php b/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php new file mode 100644 index 00000000..4a7fcb72 --- /dev/null +++ b/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php @@ -0,0 +1,47 @@ +') !== false; + } + + public function emulate(string $code, array $tokens): array + { + // We need to manually iterate and manage a count because we'll change + // the tokens array on the way + $line = 1; + for ($i = 0, $c = count($tokens); $i < $c; ++$i) { + if (isset($tokens[$i + 1])) { + if ($tokens[$i] === '?' && $tokens[$i + 1][0] === \T_OBJECT_OPERATOR) { + array_splice($tokens, $i, 2, [ + [\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line] + ]); + $c--; + continue; + } + } + if (\is_array($tokens[$i])) { + $line += substr_count($tokens[$i][1], "\n"); + } + } + + return $tokens; + } + + public function reverseEmulate(string $code, array $tokens): array + { + // ?-> was not valid code previously, don't bother. + return $tokens; + } +} diff --git a/lib/PhpParser/Node/Expr/NullsafeMethodCall.php b/lib/PhpParser/Node/Expr/NullsafeMethodCall.php new file mode 100644 index 00000000..361e4462 --- /dev/null +++ b/lib/PhpParser/Node/Expr/NullsafeMethodCall.php @@ -0,0 +1,40 @@ +attributes = $attributes; + $this->var = $var; + $this->name = \is_string($name) ? new Identifier($name) : $name; + $this->args = $args; + } + + public function getSubNodeNames() : array { + return ['var', 'name', 'args']; + } + + public function getType() : string { + return 'Expr_NullsafeMethodCall'; + } +} diff --git a/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php b/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php new file mode 100644 index 00000000..9317eb3b --- /dev/null +++ b/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php @@ -0,0 +1,35 @@ +attributes = $attributes; + $this->var = $var; + $this->name = \is_string($name) ? new Identifier($name) : $name; + } + + public function getSubNodeNames() : array { + return ['var', 'name']; + } + + public function getType() : string { + return 'Expr_NullsafePropertyFetch'; + } +} diff --git a/lib/PhpParser/Parser/Php5.php b/lib/PhpParser/Parser/Php5.php index 5457edcd..02c748f7 100644 --- a/lib/PhpParser/Parser/Php5.php +++ b/lib/PhpParser/Parser/Php5.php @@ -17,11 +17,11 @@ use PhpParser\Node\Stmt; */ class Php5 extends \PhpParser\ParserAbstract { - protected $tokenToSymbolMapSize = 390; + protected $tokenToSymbolMapSize = 391; protected $actionTableSize = 1061; protected $gotoTableSize = 580; - protected $invalidSymbol = 163; + protected $invalidSymbol = 164; protected $errorSymbol = 1; protected $defaultAction = -32766; protected $unexpectedTokenRule = 32767; @@ -192,36 +192,37 @@ class Php5 extends \PhpParser\ParserAbstract "'$'", "'`'", "']'", - "'\"'" + "'\"'", + "T_NULLSAFE_OBJECT_OPERATOR" ); protected $tokenToSymbol = array( - 0, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 54, 162, 163, 159, 53, 36, 163, - 157, 158, 51, 48, 7, 49, 50, 52, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 30, 154, - 42, 15, 44, 29, 66, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 68, 163, 161, 35, 163, 160, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 155, 34, 156, 56, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 1, 2, 3, 4, + 0, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 54, 162, 164, 159, 53, 36, 164, + 157, 158, 51, 48, 7, 49, 50, 52, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 30, 154, + 42, 15, 44, 29, 66, 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, 68, 164, 161, 35, 164, 160, 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, 155, 34, 156, 56, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33, 37, 38, 39, 40, 41, @@ -232,9 +233,10 @@ class Php5 extends \PhpParser\ParserAbstract 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, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153 + 124, 125, 126, 127, 128, 129, 130, 131, 163, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153 ); protected $action = array( diff --git a/lib/PhpParser/Parser/Php7.php b/lib/PhpParser/Parser/Php7.php index 6c723e54..8b5e3fc4 100644 --- a/lib/PhpParser/Parser/Php7.php +++ b/lib/PhpParser/Parser/Php7.php @@ -17,17 +17,17 @@ use PhpParser\Node\Stmt; */ class Php7 extends \PhpParser\ParserAbstract { - protected $tokenToSymbolMapSize = 390; - protected $actionTableSize = 1009; - protected $gotoTableSize = 527; + protected $tokenToSymbolMapSize = 391; + protected $actionTableSize = 1006; + protected $gotoTableSize = 528; - protected $invalidSymbol = 163; + protected $invalidSymbol = 164; protected $errorSymbol = 1; protected $defaultAction = -32766; protected $unexpectedTokenRule = 32767; - protected $YY2TBLSTATE = 354; - protected $numNonLeafStates = 599; + protected $YY2TBLSTATE = 356; + protected $numNonLeafStates = 603; protected $symbolToName = array( "EOF", @@ -162,6 +162,7 @@ class Php7 extends \PhpParser\ParserAbstract "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", + "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", @@ -196,32 +197,32 @@ class Php7 extends \PhpParser\ParserAbstract ); protected $tokenToSymbol = array( - 0, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 54, 161, 163, 162, 53, 36, 163, - 157, 158, 51, 48, 7, 49, 50, 52, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 30, 154, - 42, 15, 44, 29, 66, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 68, 163, 160, 35, 163, 159, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 155, 34, 156, 56, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, - 163, 163, 163, 163, 163, 163, 1, 2, 3, 4, + 0, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 54, 162, 164, 163, 53, 36, 164, + 158, 159, 51, 48, 7, 49, 50, 52, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 30, 155, + 42, 15, 44, 29, 66, 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, 68, 164, 161, 35, 164, 160, 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, 156, 34, 157, 56, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, + 164, 164, 164, 164, 164, 164, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 31, 32, 33, 37, 38, 39, 40, 41, @@ -234,111 +235,112 @@ class Php7 extends \PhpParser\ParserAbstract 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153 + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154 ); protected $action = array( - 604, 605, 606, 607, 608, 1111, 609, 610, 611, 647, - 648,-32766,-32766,-32766,-32767,-32767,-32767,-32767, 97, 98, - 99, 100, 101, 683,-32766,-32766,-32766, 0,-32766,-32766, - -32766, 867,-32766, 122,-32766,-32766,-32766,-32766,-32766,-32766, - -32767,-32767,-32767,-32767,-32767,-32766, 854,-32766,-32766,-32766, - -32766,-32766,-32766, 612,-32766,-32766,-32766, 1096, 9, 254, - 915, 916, 917, 914, 913, 912, 819, 613, 614, 615, - 616, 617, 618, 619, 691,-32766, 681,-32766,-32766,-32766, - -32766,-32766, 683, 620, 621, 622, 623, 624, 625, 626, - 627, 628, 629, 630, 650, 673, 651, 652, 653, 654, - 642, 643, 644, 672, 645, 646, 631, 632, 633, 634, - 635, 636, 637, 675, 676, 677, 678, 679, 680, 638, - 639, 640, 641, 671, 662, 660, 661, 657, 658, 28, - 649, 655, 656, 663, 664, 666, 665, 667, 668, 46, - 47, 422, 48, 49, 659, 670, 669, 228, 50, 51, - 495, 52, 915, 916, 917, 914, 913, 912, 254, 130, - 30, -274, 559, 859, 860, 685, 465, 33, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 707, -178, 708, 783, 53, 54, 285, 124, 1031, - 820, 55, -177, 56, 224, 225, 57, 58, 59, 60, - 61, 62, 63, 64, 220, 24, 246, 65, 368, 951, - 953, 78, 1038, 1064, 1065, 424, 1058, 1093,-32766, -480, - -475, 1062,-32766,-32766,-32766, 1070, 345, 690, 688, 765, - -32766,-32766,-32766, 133, 430, 1033, 1032, 1034, 127, 686, - 893, 376, 371,-32766, 219,-32766,-32766,-32766,-32766, 399, - 391,-32766, 299,-32766,-32766,-32766, 1031, 484, 891, 1093, - 435, 436, 859, 860, 102, 103, 104, 1038, 247, 437, - 438, -477, 1052, 1053, 1054, 1055, 1049, 1050, 258, 502, - 105, 1115, -480, -475, 1056, 1051, 1031, 1114, 1033, 1032, - 1034, 1093, 231, 345, 67, 1093, 275, -475, 276, 288, - 423, -137, -137, -137, -4, 765, -480, -475, 1139, 44, - 754, 1140, -274, 38, 20, 425, -137, 426, -137, 427, - -137, 428, -137, 345, 429, 229, 1029, 268, 1031, 40, - 41, 369, 370, -178, -477, 42, 431, 362, 586, 66, - 282, 288, 312, -177, 432, 433, 1093, 286, -477, -241, - 434,-32766,-32766, 740, 788, 372, 373, 1031, -477, -476, - -483, -309, 1031, -309,-32766,-32766,-32766, 1031, 71, 261, - 129, 300, 265, 288, 400, 226, 423, 288, 907, 405, - 765, 1029, 767, 573, -137,-32766, 754,-32766,-32766, 38, - 20, 425, 316, 426, 345, 427, 121, 428, 321, 345, - 429, 1033, 1032, 1034, 345, 40, 41, 369, 370, 323, - 358, 42, 431, -287, 364, 66, 257, 1031, 312, 365, - 432, 433, -476, 71, 366, -478, 434, 367, 288, 699, - 788, 372, 373, 695, 229, 689, -476, -475, 1130, 128, - 45,-32766,-32766,-32766, 136, 340, -476, 868, -482, 230, - 303, 423, 381, 382, 345, 765, 533, 21, 767, 573, - -4, 754,-32766, 137, 38, 20, 425, -310, 426, -310, - 427, 414, 428, 8, 138, 429, 1031, -219, -219, -219, - 40, 41, 369, 370, 547, 548, 42, 431, -478, 70, - 66, 1031, 707, 312, 708, 432, 433, 140, 31, 227, - -475, 434, -478, 266, 740, 788, 372, 373,-32766,-32766, - -32766, 141, -478, 345, -475, 527, 528, 315, 99, 100, - 101, 851, 850, 849, -475, 34, 423, 123, 345, -514, - 119, -514, 120, 767, 573, -219, 754, 859, 860, 38, - 20, 425, 125, 426, 126, 427, 132, 428, 128, 142, - 429, 143, -218, -218, -218, 40, 41, 369, 370, 892, - 596, 42, 431, 145, 255, 66, 256, 765, 312, -84, - 432, 433, 248, 587, 590, 764, 434, 135, 247, 740, - 788, 372, 373, 290, 134, 105, 779, 683, 556, 1141, - 79, 80, 81,-32766, 689, 534, 579, 550, 471, 921, - 539, 540, 551, 467, 525, 1029, 262, 789, 767, 573, - -218, 32, 765, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 567, 247, 423, 1069, - -441, 580, 688, 1071, -431, 477, 765, -82, 754, 105, - 10, 38, 20, 425, 388, 426, 410, 427, 260, 428, - -244, 790, 429, 0, 0, 0, 259, 40, 41, 369, - 267, 6, 781, 42, 431, 581, 29, 66, 12, 36, - 312, -508, 0, 423, 0, 314, 0, 499, 434, 0, - 0, 0, 0, 754, 0, 0, 38, 20, 425, 0, - 426, 0, 427, 0, 428, 37, 765, 429, 594, 591, - 595, 745, 40, 41, 369, 274, 829, 423, 42, 431, - 767, 573, 66, 806, 813, 312, 887, 754, 888, 803, - 38, 20, 425, 434, 426, 584, 427, 814, 428, 743, - 765, 429, 801, 896, 899, 900, 40, 41, 369, 897, - 898, 904, 42, 431, 313, 574, 66, 576, 578, 312, - 582, 583, 585, 589, 575, 767, 573, 434, 577, 588, - 741, 1136, 1138, 702, 787, 701, 710, 423, 786, 821, - 709, 1137, 785, 1017, 774, 765, 782, 754, 772, 811, - 38, 20, 425, 812, 426, 1135, 427, 1094, 428, 805, - 573, 429, 1085, 1101, 1106, 1109, 40, 41, 369, -506, - -483, 423, 42, 431, -482, -481, 66, 23, 25, 312, - 26, 754, 35, 39, 38, 20, 425, 434, 426, 43, - 427, 68, 428, 72, 73, 429, 74, 75, 76, 77, - 40, 41, 369, 131, 139, 144, 42, 431, 223, 277, - 66, 278, 232, 312, 279, 280, 423, 281, 283, 767, - 573, 434, -242, 287, 359, 361, 754, -241, 14, 38, - 20, 425, 15, 426, 16, 427, 17, 428, 19, 338, - 429, 401, 403, 409, 24, 40, 41, 369, 412, 413, - 420, 42, 431, 767, 573, 66, 1093, -445, 312, 564, - 1062, 1042, 990, 1060, 869, 1021, 434, -246, -96, 13, - 18, 22, 270, 337, 24, 492, 496, 519, 566, 994, - 1037, 991, 1112, 0, 1007, 0, 1093, 1059, 1084, 1100, - 1062, 1029, 1133, 530, 0, 1063, 0, 0, 767, 573, - 0, 0, 0, 0, 0, 0, 0, 0, 437, 438, - 0, 1052, 1053, 1054, 1055, 1049, 1050, 0, 0, 0, - 0, 1029, 0, 1056, 1051, 0, 0, 0, 0, 0, - 0, 0, 0, 69, 0, 0, 0, 276, 288, 438, - 0, 1052, 1053, 1054, 1055, 1049, 1050, 0, 0, 0, - 0, 0, 0, 1056, 1051, 0, 0, 0, 0, 0, - 0, 0, 0, 69, 0, 0, 0, 276, 288 + 608, 609, 610, 611, 612, 1118, 613, 614, 615, 651, + 652,-32766,-32766,-32766,-32767,-32767,-32767,-32767, 97, 98, + 99, 100, 101, 687,-32766,-32766,-32766, 0,-32766,-32766, + -32766, 871,-32766, 122,-32766,-32766,-32766,-32766,-32766,-32766, + -32767,-32767,-32767,-32767,-32767,-32766, 858,-32766,-32766,-32766, + -32766,-32766,-32766, 616,-32766,-32766,-32766, 1102, 787, 254, + 919, 920, 921, 918, 917, 916, 695, 617, 618, 619, + 620, 621, 622, 623, 9,-32766, 685,-32766,-32766,-32766, + -32766,-32766, 687, 624, 625, 626, 627, 628, 629, 630, + 631, 632, 633, 634, 654, 677, 655, 656, 657, 658, + 646, 647, 648, 676, 649, 650, 635, 636, 637, 638, + 639, 640, 641, 679, 680, 681, 682, 683, 684, 642, + 643, 644, 645, 675, 666, 664, 665, 661, 662, 1035, + 488, 653, 659, 660, 667, 668, 670, 669, 671, 672, + 46, 47, 426, 48, 49, 663, 674, 673, 220, 50, + 51, 1042, 52, 919, 920, 921, 918, 917, 916, 469, + 130, 499, 28, -478, 863, 864, 348,-32766, 33, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, -526,-32766,-32766,-32766, 53, 54, -526, 689, + 1099, 711, 55, 712, 56, 225, 226, 57, 58, 59, + 60, 61, 62, 63, 64, -477, 24, 246, 65, 370, + 955, 957, 78, 590, 1068, 1069, 428, 137, 1099, 1074, + 694, -475, 1066,-32766,-32766,-32766, -478, -478, 230, 823, + 1099, 769, 99, 100, 101, 434,-32766,-32766,-32766, 692, + 403, -478, 378, 373,-32766, 1035,-32766,-32766,-32766,-32766, + 30, -478, 1122, 303, 1035, 219, 254,-32766, 1121,-32766, + -32766, 439, 440, 127, 690, 1033, 1062, 409, -477, -477, + 1035, 441, 442, 295, 1056, 1057, 1058, 1059, 1053, 1054, + 260, -274, 348, -477, -475, -475, 1060, 1055, -4, 769, + 1037, 1036, 1038, -477, -241, -483, 67, 1042, 282, -475, + 283, 295, 427, -137, -137, -137, 124, 348, 71, -475, + 133, 1035, 758, 295, 895, 38, 20, 429, -137, 430, + -137, 431, -137, 432, -137, -178, 433, -177, 1037, 1036, + 1038, 40, 41, 371, 372,-32766,-32766, 42, 435, 232, + -526, 66, -526, 128, 315, 1099, 436, 437, 348, 537, + 21, 872, 438, 138, 824, 744, 792, 374, 375, 119, + 427, 863, 864, 563, 1035, 769, 404, 102, 103, 104, + 758, 247, -523, 38, 20, 429, 1099, 430, -523, 431, + 272, 432, 227, 105, 433, 771, 577, -137, 289, 40, + 41, 371, 372, 293, 360, 42, 435, 551, 552, 66, + 259, 348, 315, 304, 436, 437,-32766,-32766,-32766, 693, + 438, 1033, 1137, 703, 792, 374, 375, -309, 319, -309, + -476, 129, 364, 324, 1035, 263, 326,-32766, 295,-32766, + -32766,-32766, 120, -274, 911, 307, 427, 1037, 1036, 1038, + -475, 769, 897, 771, 577, -4, 758, 136, 343, 38, + 20, 429, 292, 430, 71, 431, 506, 432, 230, 295, + 433, 348, -219, -219, -219, 40, 41, 371, 372, 140, + -287, 42, 435, 31, 228, 66, 366, -178, 315, -177, + 436, 437, 45, -476, -476, 1147, 438, 367, 1148, 744, + 792, 374, 375,-32766,-32766,-32766, 368, 70, -476, -310, + 1035, -310, 125, -475, -475, 383, 384, 229, -476, 369, + -482, -480, 427, 231,-32766, 393, 394, 699, -475, 771, + 577, -219, 758, 863, 864, 38, 20, 429, -475, 430, + -523, 431, -523, 432, 531, 532, 433, 348, -218, -218, + -218, 40, 41, 371, 372, 269, 270, 42, 435, 1035, + 418, 66, 8, 141, 315, 1035, 436, 437, 769, 711, + 318, 712, 438, 44, 34, 744, 792, 374, 375, -517, + 123, -517, -84, 128, -480, -480, 126, 79, 80, 81, + 855, 854, 853, 896, 600, 132, 348, 583, 142, 143, + 145, 783, 348, 248, 591, 771, 577, -218, 32, -480, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 594, 247, 768, 267, 268, 135, 427, + 255, 256, 247, 769, 297, 105, 105, 560, 687, 758, + 134,-32766, 38, 20, 429, 693, 430, 925, 431, 471, + 432, 121, 1149, 433, -82, 529, 1033, 264, 40, 41, + 371, 793, 584, 475, 42, 435, 538, 261, 66, 571, + 1073, 315, 554, 794, 271, 543, 769, 10, 390, 438, + 414, 481, 544, 262, 555, -441, 503, 36, 785, 1075, + 29, -511, 1067, 0, -431, 6, 12, 0, 317, 0, + 0, 0, 0, 0, 427, 585, 692, 0, 0, 0, + 0, 37, 771, 577, 758, 0, 0, 38, 20, 429, + 0, 430, 769, 431, 0, 432, 0, 0, 433, 0, + 0, 0, 0, 40, 41, 371, 0, 0, 0, 42, + 435, 0, 598, 66, 599, 749, 315, 427, 281, 833, + -244, 588, 0, 0, 438, 316, 810, 758, 817, 891, + 38, 20, 429, 892, 430, 769, 431, 807, 432, 818, + 747, 433, 805, 900, 903, 904, 40, 41, 371, 901, + 902, 908, 42, 435, 578, 580, 66, 771, 577, 315, + 582, 586, 587, 427, 592, 589, 593, 438, 579, 581, + -242, 595, 745, 758, 1144, 1146, 38, 20, 429, 706, + 430, 769, 431, 791, 432, 705, 714, 433, 790, 825, + 713, 1145, 40, 41, 371, 789, 1021, 778, 42, 435, + 809, 577, 66, 786, 776, 315, 427, 233, 815, 816, + 1143, 1100, 1089, 438, 1107, 1113, 758, 1116, -241, 38, + 20, 429, -509, 430, -483, 431, -482, 432, -481, 23, + 433, 25, 26, 35, 39, 40, 41, 371, 43, 24, + 68, 42, 435, 72, 73, 66, 771, 577, 315, 14, + 74, 1099, 427, 75, 76, 1066, 438, 77, 131, 139, + 144, 224, 758, 284, 285, 38, 20, 429, 286, 430, + 287, 431, 288, 432, 290, 294, 433, 361, 363, 1063, + 24, 40, 41, 371, 15, 16, 1033, 42, 435, 771, + 577, 66, 1099, -445, 315, 17, 1066, 19, 341, 405, + 407, 413, 438, 416, 441, 442, 417, 1056, 1057, 1058, + 1059, 1053, 1054, 424, 568, 1046, 994, 1064, 873, 1060, + 1055, 1025, -246, -96, 13, 18, 22, 1033, 258, 69, + 1011, 340, 496, 283, 295, 771, 577, 500, 523, 0, + 570, 998, 1041, 995, 1119, 0, 442, 1088, 1056, 1057, + 1058, 1059, 1053, 1054, 1106, 1140, 534, 0, 0, 0, + 1060, 1055, 0, 0, 0, 0, 0, 0, 0, 0, + 69, 0, 0, 0, 283, 295 ); protected $actionCheck = array( @@ -347,207 +349,207 @@ class Php7 extends \PhpParser\ParserAbstract 48, 49, 50, 78, 8, 9, 10, 0, 8, 9, 10, 1, 29, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 29, 1, 31, 32, 33, - 34, 35, 36, 55, 8, 9, 10, 1, 7, 29, - 115, 116, 117, 118, 119, 120, 30, 69, 70, 71, - 72, 73, 74, 75, 1, 29, 78, 31, 32, 33, + 34, 35, 36, 55, 8, 9, 10, 1, 1, 29, + 115, 116, 117, 118, 119, 120, 1, 69, 70, 71, + 72, 73, 74, 75, 7, 29, 78, 31, 32, 33, 34, 35, 78, 85, 86, 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, 7, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 2, - 3, 4, 5, 6, 146, 147, 148, 36, 11, 12, - 1, 14, 115, 116, 117, 118, 119, 120, 29, 155, - 7, 7, 78, 133, 134, 78, 83, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 104, 7, 106, 1, 48, 49, 68, 7, 78, - 154, 54, 7, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 13, 68, 69, 70, 71, 57, - 58, 155, 1, 76, 77, 78, 1, 80, 8, 68, - 68, 84, 8, 9, 10, 142, 115, 154, 151, 1, - 8, 9, 10, 7, 97, 151, 152, 153, 30, 152, - 156, 104, 105, 29, 95, 31, 32, 33, 34, 30, - 131, 29, 115, 31, 32, 33, 78, 79, 1, 80, - 123, 124, 133, 134, 51, 52, 53, 1, 55, 132, - 133, 68, 135, 136, 137, 138, 139, 140, 141, 49, - 67, 1, 131, 131, 147, 148, 78, 7, 151, 152, - 153, 80, 7, 115, 157, 80, 159, 145, 161, 162, - 72, 73, 74, 75, 0, 1, 155, 155, 78, 68, - 82, 81, 158, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 115, 96, 36, 115, 7, 78, 101, - 102, 103, 104, 158, 131, 107, 108, 126, 155, 111, - 7, 162, 114, 158, 116, 117, 80, 7, 145, 158, - 122, 8, 9, 125, 126, 127, 128, 78, 155, 68, - 157, 104, 78, 106, 8, 9, 10, 78, 157, 112, - 155, 7, 131, 162, 155, 36, 72, 162, 121, 100, - 1, 115, 154, 155, 156, 29, 82, 31, 32, 85, - 86, 87, 7, 89, 115, 91, 155, 93, 7, 115, - 96, 151, 152, 153, 115, 101, 102, 103, 104, 7, - 106, 107, 108, 156, 7, 111, 112, 78, 114, 7, - 116, 117, 131, 157, 7, 68, 122, 7, 162, 125, - 126, 127, 128, 7, 36, 80, 145, 68, 83, 150, - 68, 8, 9, 10, 99, 100, 155, 158, 157, 36, - 146, 72, 104, 105, 115, 1, 73, 74, 154, 155, - 156, 82, 29, 13, 85, 86, 87, 104, 89, 106, - 91, 104, 93, 106, 13, 96, 78, 98, 99, 100, - 101, 102, 103, 104, 73, 74, 107, 108, 131, 150, - 111, 78, 104, 114, 106, 116, 117, 13, 143, 144, - 131, 122, 145, 131, 125, 126, 127, 128, 8, 9, - 10, 13, 155, 115, 145, 109, 110, 145, 48, 49, - 50, 118, 119, 120, 155, 13, 72, 155, 115, 158, - 15, 160, 15, 154, 155, 156, 82, 133, 134, 85, - 86, 87, 15, 89, 15, 91, 15, 93, 150, 15, - 96, 15, 98, 99, 100, 101, 102, 103, 104, 154, - 155, 107, 108, 15, 34, 111, 34, 1, 114, 30, - 116, 117, 30, 30, 30, 30, 122, 30, 55, 125, - 126, 127, 128, 34, 68, 67, 36, 78, 75, 81, - 8, 9, 10, 83, 80, 88, 30, 92, 87, 80, - 94, 98, 98, 83, 112, 115, 113, 126, 154, 155, - 156, 29, 1, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 90, 55, 72, 142, - 145, 30, 151, 142, 145, 149, 1, 95, 82, 67, - 95, 85, 86, 87, 95, 89, 95, 91, 130, 93, - 158, 126, 96, -1, -1, -1, 129, 101, 102, 103, - 129, 145, 150, 107, 108, 30, 155, 111, 145, 154, - 114, 157, -1, 72, -1, 145, -1, 149, 122, -1, - -1, -1, -1, 82, -1, -1, 85, 86, 87, -1, - 89, -1, 91, -1, 93, 154, 1, 96, 154, 156, - 154, 154, 101, 102, 103, 155, 154, 72, 107, 108, - 154, 155, 111, 154, 154, 114, 154, 82, 154, 154, - 85, 86, 87, 122, 89, 30, 91, 154, 93, 154, - 1, 96, 154, 154, 154, 154, 101, 102, 103, 154, - 154, 154, 107, 108, 155, 155, 111, 155, 155, 114, - 155, 155, 155, 155, 155, 154, 155, 122, 155, 30, - 156, 156, 156, 156, 156, 156, 156, 72, 156, 156, - 156, 156, 156, 156, 156, 1, 156, 82, 156, 156, - 85, 86, 87, 156, 89, 156, 91, 156, 93, 154, - 155, 96, 156, 156, 156, 156, 101, 102, 103, 157, - 157, 72, 107, 108, 157, 157, 111, 157, 157, 114, - 157, 82, 157, 157, 85, 86, 87, 122, 89, 157, - 91, 157, 93, 157, 157, 96, 157, 157, 157, 157, - 101, 102, 103, 157, 157, 157, 107, 108, 157, 157, - 111, 157, 36, 114, 157, 157, 72, 157, 157, 154, - 155, 122, 158, 157, 157, 157, 82, 158, 158, 85, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 78, + 79, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 2, 3, 4, 5, 6, 147, 148, 149, 13, 11, + 12, 1, 14, 115, 116, 117, 118, 119, 120, 83, + 156, 1, 7, 68, 134, 135, 115, 8, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 1, 8, 9, 10, 48, 49, 7, 78, + 80, 104, 54, 106, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 68, 68, 69, 70, 71, + 57, 58, 156, 156, 76, 77, 78, 13, 80, 143, + 155, 68, 84, 8, 9, 10, 131, 132, 36, 30, + 80, 1, 48, 49, 50, 97, 8, 9, 10, 152, + 30, 146, 104, 105, 29, 78, 31, 32, 33, 34, + 7, 156, 1, 115, 78, 95, 29, 29, 7, 31, + 32, 123, 124, 30, 153, 115, 1, 100, 131, 132, + 78, 133, 134, 163, 136, 137, 138, 139, 140, 141, + 142, 7, 115, 146, 131, 132, 148, 149, 0, 1, + 152, 153, 154, 156, 159, 158, 158, 1, 160, 146, + 162, 163, 72, 73, 74, 75, 7, 115, 158, 156, + 7, 78, 82, 163, 1, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 7, 96, 7, 152, 153, + 154, 101, 102, 103, 104, 8, 9, 107, 108, 7, + 159, 111, 161, 151, 114, 80, 116, 117, 115, 73, + 74, 159, 122, 13, 155, 125, 126, 127, 128, 15, + 72, 134, 135, 78, 78, 1, 156, 51, 52, 53, + 82, 55, 1, 85, 86, 87, 80, 89, 7, 91, + 7, 93, 36, 67, 96, 155, 156, 157, 7, 101, + 102, 103, 104, 7, 106, 107, 108, 73, 74, 111, + 112, 115, 114, 7, 116, 117, 8, 9, 10, 80, + 122, 115, 83, 125, 126, 127, 128, 104, 7, 106, + 68, 156, 126, 7, 78, 112, 7, 29, 163, 31, + 32, 33, 15, 159, 121, 147, 72, 152, 153, 154, + 68, 1, 157, 155, 156, 157, 82, 99, 100, 85, + 86, 87, 68, 89, 158, 91, 49, 93, 36, 163, + 96, 115, 98, 99, 100, 101, 102, 103, 104, 13, + 157, 107, 108, 144, 145, 111, 7, 159, 114, 159, + 116, 117, 68, 131, 132, 78, 122, 7, 81, 125, + 126, 127, 128, 8, 9, 10, 7, 151, 146, 104, + 78, 106, 15, 131, 132, 104, 105, 36, 156, 7, + 158, 68, 72, 36, 29, 131, 132, 7, 146, 155, + 156, 157, 82, 134, 135, 85, 86, 87, 156, 89, + 159, 91, 161, 93, 109, 110, 96, 115, 98, 99, + 100, 101, 102, 103, 104, 131, 132, 107, 108, 78, + 104, 111, 106, 13, 114, 78, 116, 117, 1, 104, + 146, 106, 122, 68, 13, 125, 126, 127, 128, 159, + 156, 161, 30, 151, 131, 132, 15, 8, 9, 10, + 118, 119, 120, 155, 156, 15, 115, 30, 15, 15, + 15, 36, 115, 30, 30, 155, 156, 157, 29, 156, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 30, 55, 30, 131, 132, 30, 72, + 34, 34, 55, 1, 34, 67, 67, 75, 78, 82, + 68, 83, 85, 86, 87, 80, 89, 80, 91, 83, + 93, 156, 81, 96, 95, 112, 115, 113, 101, 102, + 103, 126, 30, 87, 107, 108, 88, 129, 111, 90, + 143, 114, 92, 126, 129, 94, 1, 95, 95, 122, + 95, 150, 98, 130, 98, 146, 150, 155, 151, 143, + 156, 158, 162, -1, 146, 146, 146, -1, 146, -1, + -1, -1, -1, -1, 72, 30, 152, -1, -1, -1, + -1, 155, 155, 156, 82, -1, -1, 85, 86, 87, + -1, 89, 1, 91, -1, 93, -1, -1, 96, -1, + -1, -1, -1, 101, 102, 103, -1, -1, -1, 107, + 108, -1, 155, 111, 155, 155, 114, 72, 156, 155, + 159, 30, -1, -1, 122, 156, 155, 82, 155, 155, + 85, 86, 87, 155, 89, 1, 91, 155, 93, 155, + 155, 96, 155, 155, 155, 155, 101, 102, 103, 155, + 155, 155, 107, 108, 156, 156, 111, 155, 156, 114, + 156, 156, 156, 72, 30, 156, 156, 122, 156, 156, + 159, 157, 157, 82, 157, 157, 85, 86, 87, 157, + 89, 1, 91, 157, 93, 157, 157, 96, 157, 157, + 157, 157, 101, 102, 103, 157, 157, 157, 107, 108, + 155, 156, 111, 157, 157, 114, 72, 36, 157, 157, + 157, 157, 157, 122, 157, 157, 82, 157, 159, 85, 86, 87, 158, 89, 158, 91, 158, 93, 158, 158, - 96, 158, 158, 158, 68, 101, 102, 103, 158, 158, - 158, 107, 108, 154, 155, 111, 80, 159, 114, 158, - 84, 158, 158, 158, 158, 158, 122, 158, 158, 158, - 158, 158, 158, 158, 68, 158, 158, 158, 158, 158, - 158, 158, 158, -1, 159, -1, 80, 160, 160, 160, - 84, 115, 160, 160, -1, 161, -1, -1, 154, 155, - -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, - -1, 135, 136, 137, 138, 139, 140, -1, -1, -1, - -1, 115, -1, 147, 148, -1, -1, -1, -1, -1, - -1, -1, -1, 157, -1, -1, -1, 161, 162, 133, - -1, 135, 136, 137, 138, 139, 140, -1, -1, -1, - -1, -1, -1, 147, 148, -1, -1, -1, -1, -1, - -1, -1, -1, 157, -1, -1, -1, 161, 162 + 96, 158, 158, 158, 158, 101, 102, 103, 158, 68, + 158, 107, 108, 158, 158, 111, 155, 156, 114, 159, + 158, 80, 72, 158, 158, 84, 122, 158, 158, 158, + 158, 158, 82, 158, 158, 85, 86, 87, 158, 89, + 158, 91, 158, 93, 158, 158, 96, 158, 158, 161, + 68, 101, 102, 103, 159, 159, 115, 107, 108, 155, + 156, 111, 80, 160, 114, 159, 84, 159, 159, 159, + 159, 159, 122, 159, 133, 134, 159, 136, 137, 138, + 139, 140, 141, 159, 159, 159, 159, 159, 159, 148, + 149, 159, 159, 159, 159, 159, 159, 115, 159, 158, + 160, 159, 159, 162, 163, 155, 156, 159, 159, -1, + 159, 159, 159, 159, 159, -1, 134, 161, 136, 137, + 138, 139, 140, 141, 161, 161, 161, -1, -1, -1, + 148, 149, -1, -1, -1, -1, -1, -1, -1, -1, + 158, -1, -1, -1, 162, 163 ); protected $actionBase = array( - 0, 228, 304, 379, 454, 84, 215, 596, -2, -2, - -55, -2, -2, 611, 705, 705, 739, 705, 566, 645, - 784, 784, 784, 289, 339, 339, 339, 339, 398, 279, - 279, 178, 208, 111, 413, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 73, 73, 36, 149, - 512, 754, 761, 757, 762, 752, 751, 755, 758, 763, - 639, 641, 547, 646, 647, 648, 649, 759, 773, 753, - 760, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 210, 20, 343, 500, 500, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, 433, 433, 433, 356, 816, - 816, 222, 214, 846, 846, 846, 846, 846, 846, 846, - 846, 846, 846, 152, 46, 16, 3, 3, 3, 3, - 3, -28, -28, -28, -28, 257, 211, 266, 30, 363, - 470, 470, 129, 129, 404, 404, 404, 77, 83, 490, - 490, 490, 490, 501, 774, 4, 4, 490, 490, 203, - 291, 213, 213, 213, 388, 520, 355, 749, 749, 749, - 749, 749, 388, 749, 355, 230, 750, 250, 56, 371, - 250, 357, 369, 369, 372, 369, 369, 369, 491, 348, - 491, 510, 597, 609, 613, 764, 503, 633, 504, 637, - 151, 241, 179, 87, 179, 179, 179, 406, 87, 383, - 411, 87, 549, 750, 73, 499, 73, 73, 73, 73, - 692, 73, 73, 73, 73, 73, 73, 219, 73, 405, - 36, 183, 45, 183, 183, 348, 523, 496, 119, 538, - 185, 523, 523, 523, 154, 191, 175, 367, 509, 509, - 519, 550, 660, 660, 509, 514, 509, 519, 672, 509, - 550, 550, 509, 509, 509, 660, 550, 181, 407, 364, - 385, 550, 550, 412, 537, 541, 541, 417, 509, 285, - 226, 509, 122, 528, 660, 660, 528, 340, 320, 554, - 556, 492, 550, 542, 333, 426, 153, 542, 522, 542, - 509, 391, 492, 542, 550, 542, 420, 51, 514, 402, - 542, 27, 674, 676, 539, 677, 665, 679, 707, 680, - 681, 600, 481, 535, 691, 666, 682, 663, 661, 545, - 515, 517, 526, 495, 658, 518, 518, 518, 653, 518, - 518, 518, 518, 518, 518, 518, 518, 515, 767, 540, - 511, 694, 527, 529, 602, 497, 614, 738, 765, 692, - 743, 686, 525, 531, 720, 697, 553, 560, 698, 700, - 721, 744, 603, 745, 615, 516, 616, 617, 518, 652, - 524, 768, 657, 515, 769, 710, 521, 723, 724, 599, - 559, 618, 508, 772, 619, 746, 605, 606, 551, 714, - 502, 530, 532, 725, 561, 620, 730, 731, 622, 557, - 507, 704, 506, 623, 450, 708, 461, 706, 607, 624, - 625, 626, 627, 687, 562, 716, 505, 718, 709, 569, - 570, 484, 498, 572, 534, 536, 574, 688, 543, 513, - 575, 583, 747, 548, 628, 701, 585, 630, 741, 552, - 533, 493, 555, 546, 608, 732, 544, 588, 589, 590, - 591, 632, 595, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 288, 364, 440, 285, 265, 625, -2, -2, + -55, -2, -2, 632, 721, 721, 764, 721, 557, 675, + 810, 810, 810, 192, 346, 346, 346, 346, 422, 167, + 167, 51, 233, 471, 477, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 286, 286, 286, 286, 65, 65, 199, 160, + 551, 799, 812, 803, 813, 796, 795, 802, 808, 814, + 683, 684, 598, 685, 687, 688, 690, 809, 825, 797, + 811, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 159, 20, 327, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 485, 485, 485, 228, 801, + 801, 398, 153, 215, 842, 842, 842, 842, 842, 842, + 842, 842, 842, 842, 46, 16, 3, 3, 3, 3, + 3, -28, -28, -28, -28, 313, 296, 150, 30, 395, + 184, 184, 227, 227, 389, 389, 389, 137, 352, 87, + 76, 541, 541, 541, 541, 546, 530, 4, 4, 4, + 4, 541, 541, 95, 372, 372, 414, 316, 316, 316, + 372, 455, 566, 329, 793, 793, 793, 793, 793, 455, + 793, 329, 407, 794, 176, 56, 410, 176, 443, 495, + 371, 181, 554, 401, 554, 558, 626, 642, 643, 815, + 584, 681, 586, 682, 384, 110, 111, 110, 110, 110, + 425, 111, 276, 324, 111, 600, 794, 65, 548, 65, + 65, 65, 65, 735, 65, 65, 65, 65, 65, 65, + 210, 65, 428, 199, 57, 45, 57, 57, 401, 577, + 531, 536, 320, 577, 577, 577, 274, 135, 318, 446, + 560, 560, 567, 555, 701, 701, 560, 565, 560, 567, + 710, 560, 555, 555, 560, 560, 560, 701, 555, 299, + 469, 396, 411, 555, 555, 480, 538, 545, 545, 489, + 560, 332, 303, 560, 560, 155, 553, 701, 701, 701, + 553, 386, 373, 587, 589, 543, 555, 563, 381, 510, + 243, 563, 537, 563, 560, 416, 543, 563, 555, 563, + 502, 67, 565, 419, 563, 27, 712, 715, 542, 716, + 705, 722, 749, 725, 726, 628, 535, 547, 733, 706, + 729, 704, 703, 595, 344, 417, 549, 539, 700, 568, + 568, 568, 696, 568, 568, 568, 568, 568, 568, 568, + 568, 344, 748, 552, 576, 736, 487, 561, 629, 527, + 645, 763, 800, 735, 786, 730, 532, 570, 768, 740, + 644, 592, 742, 744, 769, 787, 634, 788, 647, 572, + 648, 652, 568, 694, 533, 816, 698, 344, 823, 720, + 534, 770, 771, 599, 583, 656, 571, 824, 658, 789, + 635, 636, 556, 755, 591, 596, 597, 772, 585, 659, + 774, 777, 661, 590, 578, 641, 581, 662, 204, 750, + 340, 747, 639, 663, 664, 668, 669, 731, 594, 756, + 580, 766, 689, 601, 603, 456, 540, 604, 573, 574, + 608, 732, 564, 562, 612, 614, 792, 575, 670, 746, + 615, 676, 785, 559, 550, 544, 582, 579, 640, 784, + 593, 617, 618, 619, 620, 677, 624, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 137, 137, 137, 137, -2, -2, -2, 0, 0, -2, - 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, + 0, 0, 0, 0, 138, 138, 138, 138, -2, -2, + -2, 0, 0, -2, 0, 0, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 569, + 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 569, 569, 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, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 250, 250, - 582, 582, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 0, 582, 582, 582, 582, 582, 582, 582, - 213, 213, 213, 213, 37, 250, 250, 250, 37, 213, - 213, 250, 250, 250, 250, 250, 87, 355, 250, 250, - 250, 250, 355, 355, 179, 179, 250, 250, 0, 0, - 0, 0, 0, 87, 355, 0, 403, 403, 403, 403, - 403, 87, 403, 0, 514, 403, 0, 179, 280, 0, - 0, 0, 0, 0, 0, 0, 0, 87, 514, 87, - 355, 183, 87, 73, 280, 345, 345, 345, 345, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 514, 550, 0, 660, 0, 0, 0, 0, 509, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 514, 0, 0, 0, 518, 559, 0, 559, 0, - 518, 518, 518 + 0, 0, 0, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, + 569, 569, 176, 176, 569, 0, 569, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 569, 569, 569, + 569, 569, 569, 569, 316, 316, 316, 316, 38, 176, + 176, 176, 38, 316, 316, 176, 176, 176, 176, 176, + 0, 0, 111, 329, 176, 176, 176, 176, 329, 329, + 110, 110, 110, 110, 176, 176, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 329, 0, 462, 462, 462, + 462, 462, 111, 462, 0, 565, 462, 0, 110, 251, + 0, 0, 0, 0, 0, 111, 565, 111, 329, 57, + 111, 65, 251, 348, 348, 348, 348, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 565, 555, + 0, 701, 0, 0, 0, 0, 560, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 565, 0, + 0, 0, 568, 583, 583, 0, 568, 568, 568 ); protected $actionDefault = array( 3,32767,32767,32767,32767,32767,32767,32767,32767, 94, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 526, 526, 526, 526, 96, 223, + 32767,32767,32767,32767, 529, 529, 529, 529, 96, 223, 96,32767,32767,32767,32767, 329, 329, 329,32767,32767, 473, 473, 473, 473, 473, 473,32767,32767,32767,32767, 32767, 410,32767,32767,32767,32767,32767,32767,32767,32767, @@ -560,107 +562,108 @@ class Php7 extends \PhpParser\ParserAbstract 32767,32767,32767,32767, 94,32767,32767,32767,32767,32767, 32767,32767,32767, 96,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 519,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 522,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 393, 394, 396, 397, 328, 474, 525, 273, 522, + 32767, 393, 394, 396, 397, 328, 474, 528, 273, 525, 327, 130, 284, 275, 211, 227, 228, 324, 134, 254, 358, 411, 360, 409, 413, 359, 334, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 332, 333, 412, 414, 415, 390, 389, 388, 356,32767, - 32767, 357, 361,32767,32767,32767,32767,32767,32767,32767, - 32767, 96,32767, 331, 363, 362, 379, 380, 377, 378, + 32767, 357, 331, 361,32767,32767,32767,32767,32767,32767, + 32767,32767, 96,32767, 363, 362, 379, 380, 377, 378, 381, 382, 383, 384, 385,32767,32767,32767,32767, 307, - 370, 371, 264, 264,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767, 94, 467, - 387, 365, 366, 364,32767, 444,32767, 249, 249, 249, - 249, 249, 96, 249, 446,32767, 249,32767,32767,32767, - 32767, 469, 353, 355, 437, 520, 335, 523,32767, 430, - 94,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 468,32767,32767,32767,32767,32767, 94, 174,32767, 237, - 239, 96, 489, 179,32767, 449,32767,32767,32767,32767, + 370, 371, 264, 264,32767,32767,32767, 467, 387,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767, 430, 375, 123, 533, 123, - 475, 367, 368, 369, 475, 475, 475,32767,32767,32767, - 32767, 179, 447, 447, 94, 94, 94, 94, 442,32767, - 179, 179,32767,32767,32767,32767, 179, 93, 93, 93, - 93, 179, 179, 93, 194, 192, 192, 93,32767, 95, - 95,32767, 95, 196,32767, 493, 196, 95, 93, 216, - 216, 421, 179, 266, 95, 95, 95, 266, 181, 266, - 32767, 95, 421, 266, 179, 266, 93, 93,32767, 95, - 266,32767,32767,32767, 432,32767,32767,32767,32767,32767, + 32767,32767, 94, 469, 353, 355, 437, 365, 366, 364, + 335,32767, 444,32767, 249, 249, 249, 249, 249, 96, + 249, 446,32767, 249,32767,32767,32767,32767, 468,32767, + 475, 475,32767, 430, 94,32767,32767,32767,32767,32767, + 32767,32767,32767,32767, 536,32767,32767,32767,32767, 94, + 174,32767, 237, 239, 96, 490, 179,32767, 449,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 462,32767, 479, 491, 373, 374, 376, 477, 398, - 399, 400, 401, 402, 403, 404, 406, 521,32767, 436, - 32767,32767,32767, 283,32767, 531,32767, 531,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767, 430, 375, + 123, 123, 475, 367, 368, 369, 475, 475, 475,32767, + 32767,32767,32767, 179, 447, 447, 94, 94, 94, 94, + 442,32767, 179, 179,32767,32767,32767,32767, 179, 93, + 93, 93, 93, 179, 179, 93, 194, 192, 192, 93, + 32767, 95, 95,32767,32767, 95, 196,32767, 494, 495, + 196, 95, 93, 216, 216, 421, 179, 266, 95, 95, + 95, 266, 181, 266,32767, 95, 421, 266, 179, 266, + 93, 93,32767, 95, 266,32767,32767,32767, 432,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 532,32767, 475,32767, 372, 458, - 498,32767, 476, 524,32767,32767,32767,32767,32767,32767, - 123,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 462, 256, 258,32767, 121,32767,32767,32767,32767,32767, - 32767, 475,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767, 475,32767, - 32767,32767,32767,32767, 323,32767,32767,32767,32767,32767, - 32767,32767,32767, 253,32767,32767,32767,32767,32767, 432, - 32767, 303,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767, 136, 136, 3, 286, 3, 286, 136, - 136, 136, 286, 286, 136, 136, 136, 136, 136, 136, - 136, 169, 231, 234, 216, 216, 295, 136, 136 + 32767,32767,32767,32767,32767, 462,32767, 479, 492, 373, + 374, 376, 477, 398, 399, 400, 401, 402, 403, 404, + 406, 524,32767, 436,32767,32767,32767, 283,32767, 534, + 32767, 534,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767, 535,32767, + 475,32767, 372, 458, 500,32767, 476, 527,32767,32767, + 32767,32767,32767,32767, 123,32767,32767,32767,32767,32767, + 32767,32767,32767,32767, 462, 256, 258,32767, 121,32767, + 32767,32767,32767,32767,32767, 475,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, + 32767,32767, 475,32767,32767,32767,32767,32767, 323,32767, + 32767,32767,32767,32767,32767,32767,32767, 253,32767,32767, + 32767,32767,32767, 432,32767, 303,32767,32767,32767,32767, + 32767,32767,32767,32767,32767,32767,32767, 136, 136, 3, + 286, 3, 286, 136, 136, 136, 286, 286, 136, 136, + 136, 136, 136, 136, 136, 169, 231, 234, 216, 216, + 295, 136, 136 ); protected $goto = array( 178, 150, 150, 150, 150, 178, 175, 175, 160, 162, 196, 179, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 171, 172, 173, 174, 193, 191, 194, - 445, 446, 346, 447, 449, 450, 451, 452, 453, 454, - 455, 456, 937, 147, 151, 152, 153, 177, 154, 155, + 449, 450, 349, 451, 453, 454, 455, 456, 457, 458, + 459, 460, 941, 147, 151, 152, 153, 177, 154, 155, 156, 149, 157, 158, 159, 161, 190, 192, 195, 215, - 218, 221, 222, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 250, 251, 271, 272, 273, 351, - 352, 353, 488, 197, 198, 199, 200, 201, 202, 203, + 218, 221, 223, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 250, 251, 277, 278, 279, 353, + 354, 355, 492, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 163, 212, 164, 180, 181, 182, 216, 183, 165, 166, 167, 184, 180, 168, 217, 148, 185, 213, 169, 186, 214, 187, - 188, 170, 189, 560, 697, 762, 569, 355, 538, 307, - 698, 350, 292, 293, 295, 486, 296, 354, 297, 356, - 521, 510, 510, 490, 731, 1061, 1061, 1061, 1061, 1061, - 1061, 1061, 1061, 1061, 1061, 1079, 1079, 508, 535, 1079, - 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1077, - 1077, 284, 264, 1077, 1077, 1077, 1077, 1077, 1077, 1077, - 1077, 1077, 1077, 448, 448, 1103, 1104, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 476, 684, 687, - 1142, 804, 593, 520, 522, 696, 483, 536, 554, 557, - 839, 563, 571, 835, 463, 305, 828, 802, 802, 800, - 802, 592, 1116, 460, 837, 832, 726, 714, 875, 871, - 1015, 879, 784, 1016, 925, 807, 505, 1089, 459, 459, - 687, 844, 687, 910, 825, 304, 797, 911, 717, 541, - 823, 798, 798, 798, 798, 711, 757, 553, 758, 792, - 799, 390, 390, 1022, 918, 730, 457, 457, 457, 457, - 481, 390, 1026, 341, 326, 343, 493, 3, 4, 542, - 463, 344, 700, 330, 461, 985, 302, 1126, 1126, 469, - 903, 489, 572, 537, 478, 479, 555, 901, 498, 513, - 516, 517, 705, 565, 753, 748, 749, 763, 1126, 706, - 750, 703, 751, 752, 704, 408, 756, 328, 332, 470, - 491, 494, 1027, 308, 309, 1129, 713, 11, 1127, 1127, - 866, 725, 518, 1025, 712, 298, 531, 532, 856, 861, - 862, 1028, 1087, 796, 339, 568, 349, 360, 500, 1127, - 487, 1102, 504, 718, 847, 336, 715, 876, 597, 1018, - 1023, 727, 920, 507, 1030, 1030, 858, 880, 396, 809, - 858, 858, 858, 858, 858, 415, 0, 1030, 1030, 1030, - 1030, 1108, 1108, 1099, 1099, 1030, 1030, 0, 0, 0, + 188, 170, 189, 573, 761, 766, 762, 494, 564, 357, + 542, 860, 865, 866, 352, 274, 275, 300, 490, 280, + 356, 301, 358, 525, 514, 514, 800, 342, 572, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1083, + 1083, 311, 512, 539, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1081, 1081, 399, 1108, 1109, 1081, + 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 452, + 452, 351, 701, 504, 452, 452, 452, 452, 452, 452, + 452, 452, 452, 452, 480, 1019, 702, 788, 1020, 597, + 524, 526, 700, 688, 540, 558, 561, 843, 567, 575, + 839, 1030, 735, 832, 806, 806, 804, 806, 596, 1123, + 464, 841, 836, 730, 718, 879, 929, 914, 883, 509, + 808, 915, 811, 291, 266, 848, 461, 461, 461, 461, + 1134, 1134, 721, 545, 827, 801, 497, 3, 4, 715, + 333, 465, 463, 463, 522, 487, 473, 1026, 535, 536, + 1031, 482, 483, 922, 734, 309, 1134, 802, 802, 802, + 802, 1110, 1111, 392, 392, 1150, 704, 796, 803, 875, + 1032, 1091, 1092, 392, 412, 829, 467, 907, 493, 576, + 491, 691, 508, 559, 905, 709, 11, 757, 752, 753, + 767, 329, 710, 754, 707, 755, 756, 708, 1094, 760, + 344, 485, 346, 541, 1133, 1133, 546, 989, 347, 502, + 517, 520, 521, 306, 569, 870, 362, 302, 557, 331, + 335, 474, 495, 498, 691, 722, 691, 851, 339, 308, + 1133, 719, 880, 717, 601, 312, 313, 1027, 729, 813, + 467, 716, 1022, 884, 1136, 731, 511, 1105, 1105, 1034, + 1034, 862, 924, 419, 400, 862, 862, 862, 862, 862, + 1115, 1115, 1115, 1115, 1034, 1034, 1034, 1034, 1117, 1117, + 1117, 1117, 0, 0, 1034, 1034, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1110, 1110, 0, 770, 0, 0, 771, 0, + 0, 0, 0, 0, 0, 1029, 1101, 774, 0, 0, + 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 882, 0, 1103, 1103, + 882, 846, 846, 0, 0, 0, 479, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1095, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 475, 0, 0, 878, - 0, 1097, 1097, 878, 0, 0, 0, 0, 0, 0, - 0, 842, 842, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 462, 473, 0, 0, 0, 0, - 462, 0, 473, 0, 0, 329, 0, 0, 464, 384, - 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 723, 0, 0, 1134, 0, 0, + 0, 0, 0, 466, 477, 0, 0, 0, 0, 466, + 0, 477, 0, 0, 332, 0, 0, 468, 386, 387, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 721 + 0, 0, 0, 727, 0, 0, 1141, 1142, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 725 ); protected $gotoCheck = array( @@ -676,85 +679,85 @@ class Php7 extends \PhpParser\ParserAbstract 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 63, 17, 13, 8, 56, 56, 81, - 18, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 92, 92, 105, 36, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 143, 143, 46, 46, 143, - 143, 143, 143, 143, 143, 143, 143, 143, 143, 144, - 144, 142, 142, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 146, 146, 151, 151, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 39, 5, 10, - 12, 40, 39, 39, 39, 16, 145, 39, 39, 39, - 39, 39, 39, 39, 12, 152, 16, 16, 16, 16, - 16, 16, 154, 16, 16, 16, 14, 14, 14, 102, - 68, 14, 68, 68, 15, 14, 15, 12, 76, 76, - 10, 15, 10, 119, 87, 10, 14, 119, 15, 15, - 15, 76, 76, 76, 76, 15, 55, 12, 55, 76, - 76, 124, 124, 15, 14, 14, 91, 91, 91, 91, - 88, 124, 100, 70, 52, 70, 91, 37, 37, 70, - 12, 70, 13, 66, 66, 126, 70, 155, 155, 66, - 7, 7, 7, 54, 66, 66, 7, 7, 69, 69, - 69, 69, 13, 69, 13, 13, 13, 13, 155, 13, - 13, 13, 13, 13, 13, 66, 13, 49, 49, 49, - 49, 49, 100, 81, 81, 155, 26, 66, 156, 156, - 97, 26, 74, 12, 26, 20, 74, 74, 98, 98, - 98, 100, 100, 77, 77, 77, 11, 96, 11, 156, - 2, 149, 2, 30, 94, 19, 28, 104, 83, 132, - 135, 32, 122, 73, 63, 63, 63, 107, 72, 80, - 63, 63, 63, 63, 63, 130, -1, 63, 63, 63, - 63, 8, 8, 105, 105, 63, 63, -1, -1, -1, + 33, 33, 33, 8, 55, 13, 55, 105, 63, 56, + 56, 98, 98, 98, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 92, 92, 77, 77, 77, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 143, + 143, 81, 46, 46, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 144, 144, 149, 149, 149, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, + 146, 11, 17, 11, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 39, 68, 18, 68, 68, 39, + 39, 39, 16, 5, 39, 39, 39, 39, 39, 39, + 39, 100, 36, 16, 16, 16, 16, 16, 16, 154, + 16, 16, 16, 14, 14, 14, 15, 119, 14, 15, + 40, 119, 14, 142, 142, 15, 91, 91, 91, 91, + 156, 156, 15, 15, 15, 14, 91, 37, 37, 15, + 66, 66, 76, 76, 74, 145, 66, 15, 74, 74, + 100, 66, 66, 14, 14, 152, 156, 76, 76, 76, + 76, 151, 151, 124, 124, 12, 13, 76, 76, 102, + 100, 100, 100, 124, 66, 87, 12, 7, 7, 7, + 2, 10, 2, 7, 7, 13, 66, 13, 13, 13, + 13, 52, 13, 13, 13, 13, 13, 13, 12, 13, + 70, 88, 70, 54, 155, 155, 70, 126, 70, 69, + 69, 69, 69, 70, 69, 97, 96, 20, 12, 49, + 49, 49, 49, 49, 10, 30, 10, 94, 19, 10, + 155, 28, 104, 26, 83, 81, 81, 135, 26, 80, + 12, 26, 132, 107, 155, 32, 73, 105, 105, 63, + 63, 63, 122, 130, 72, 63, 63, 63, 63, 63, + 8, 8, 8, 8, 63, 63, 63, 63, 105, 105, + 105, 105, -1, -1, 63, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 105, 105, -1, 63, -1, -1, 63, -1, + -1, -1, -1, -1, -1, 12, 105, 63, -1, -1, + 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 105, -1, 105, 105, + 105, 91, 91, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 105, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 8, -1, -1, 105, - -1, 105, 105, 105, -1, -1, -1, -1, -1, -1, - -1, 91, 91, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 8, 8, -1, -1, -1, -1, - 8, -1, 8, -1, -1, 8, -1, -1, 8, 8, - 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 8, -1, -1, 8, -1, -1, + -1, -1, -1, 8, 8, -1, -1, -1, -1, 8, + -1, 8, -1, -1, 8, -1, -1, 8, 8, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 8 + -1, -1, -1, 8, -1, -1, 8, 8, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 8 ); protected $gotoBase = array( - 0, 0, -225, 0, 0, 188, 0, 285, 116, 0, - -58, 48, -85, -22, -152, -156, 203, 122, 128, 57, - 78, 0, 0, 0, 0, 0, 13, 0, 56, 0, - 71, 0, -3, -23, 0, 0, 135, -320, 0, -377, - 182, 0, 0, 0, 0, 0, 121, 0, 0, 276, - 0, 0, 236, 0, 73, 241, -92, 0, 0, 0, - 0, 0, 0, 118, 0, 0, -87, 0, -111, 20, - -134, 0, -18, -33, -246, 0, -8, 83, 0, 0, - 3, -271, 0, 18, 0, 0, 0, 214, 231, 0, - 0, 242, -78, 0, 68, 0, 94, 82, 84, 0, - -53, 0, 201, 0, 41, 137, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, - 0, 0, -5, 0, 232, 0, 38, 0, 0, 0, - -37, 0, -4, 0, 0, -1, 0, 0, 0, 0, - 0, 0, -104, -64, -50, 181, -36, 0, 0, 85, - 0, -129, 189, 0, 195, 24, 65, 0, 0 + 0, 0, -279, 0, 0, 203, 0, 292, 113, 0, + 42, -111, -7, -22, -147, -156, 210, 190, 204, 46, + 78, 0, 0, 0, 0, 0, 37, 0, 47, 0, + 56, 0, -1, -23, 0, 0, 213, -344, 0, -374, + 221, 0, 0, 0, 0, 0, 126, 0, 0, 298, + 0, 0, 273, 0, 103, 109, -90, 0, 0, 0, + 0, 0, 0, 123, 0, 0, -112, 0, -139, 44, + -91, 0, -14, -34, -318, 0, 16, -116, 0, 0, + -9, -243, 0, 11, 0, 0, 0, 265, 282, 0, + 0, 222, -75, 0, 54, 0, 83, 87, -123, 0, + -107, 0, 261, 0, 33, 121, 0, -4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, + 0, 0, 3, 0, 254, 0, 80, 0, 0, 0, + -43, 0, -3, 0, 0, -6, 0, 0, 0, 0, + 0, 0, -39, -60, -45, 240, -30, 0, 0, -92, + 0, -36, 249, 0, 202, 59, -15, 0, 0 ); protected $gotoDefault = array( - -32768, 421, 600, 2, 601, 674, 682, 545, 439, 570, - 514, 347, 348, 755, 924, 775, 737, 738, 739, 333, - 318, 324, 331, 529, 515, 411, 724, 379, 716, 404, - 719, 378, 728, 146, 546, 417, 732, 1, 734, 466, - 766, 319, 742, 320, 549, 744, 472, 746, 747, 327, - 334, 335, 929, 480, 509, 759, 233, 474, 760, 317, - 761, 769, 322, 325, 558, 389, 418, 342, 905, 497, - 526, 374, 393, 506, 501, 482, 1039, 794, 398, 387, - 808, 306, 816, 598, 936, 523, 406, 824, 524, 831, - 834, 440, 441, 397, 846, 252, 402, 864, 511, 512, - 1047, 392, 870, 380, 877, 1083, 383, 881, 245, 884, - 253, 543, 357, 889, 890, 5, 895, 561, 562, 7, - 249, 416, 919, 544, 377, 935, 363, 1004, 1006, 468, - 407, 1019, 386, 552, 419, 1024, 1086, 375, 442, 394, - 294, 443, 263, 310, 291, 458, 269, 311, 444, 395, - 1091, 1098, 289, 27, 1117, 1128, 301, 485, 503 + -32768, 425, 604, 2, 605, 678, 686, 549, 443, 574, + 518, 350, 314, 759, 928, 779, 741, 742, 743, 336, + 321, 327, 334, 533, 519, 415, 728, 381, 720, 408, + 723, 380, 732, 146, 550, 421, 736, 1, 738, 470, + 770, 322, 746, 323, 553, 748, 476, 750, 751, 330, + 337, 338, 933, 484, 513, 763, 222, 478, 764, 320, + 765, 773, 325, 328, 562, 391, 422, 345, 909, 501, + 530, 376, 396, 510, 505, 486, 1043, 798, 402, 389, + 812, 310, 820, 602, 940, 527, 410, 828, 528, 835, + 838, 444, 445, 401, 850, 252, 406, 868, 515, 516, + 1051, 395, 874, 382, 881, 1087, 385, 885, 245, 888, + 253, 547, 359, 893, 894, 5, 899, 565, 566, 7, + 249, 420, 923, 548, 379, 939, 365, 1008, 1010, 472, + 411, 1023, 388, 556, 423, 1028, 1090, 377, 446, 397, + 276, 447, 265, 298, 273, 462, 257, 299, 448, 398, + 1096, 1104, 296, 27, 1124, 1135, 305, 489, 507 ); protected $ruleToNonTerminal = array( @@ -806,13 +809,13 @@ class Php7 extends \PhpParser\ParserAbstract 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 92, 146, 146, 146, 146, 128, 128, 128, 128, 128, 128, 128, 128, 49, 49, 141, 141, 141, 141, 147, - 147, 137, 137, 137, 148, 148, 148, 148, 148, 64, - 64, 56, 56, 56, 105, 105, 105, 105, 151, 150, - 140, 140, 140, 140, 140, 140, 139, 139, 139, 149, - 149, 149, 149, 91, 145, 153, 153, 152, 152, 154, - 154, 154, 154, 154, 154, 154, 154, 142, 142, 142, - 142, 156, 157, 155, 155, 155, 155, 155, 155, 155, - 158, 158, 158, 158 + 147, 137, 137, 137, 148, 148, 148, 148, 148, 148, + 64, 64, 56, 56, 56, 56, 105, 105, 105, 105, + 151, 150, 140, 140, 140, 140, 140, 140, 140, 139, + 139, 139, 149, 149, 149, 149, 91, 145, 153, 153, + 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, + 142, 142, 142, 142, 156, 157, 155, 155, 155, 155, + 155, 155, 155, 155, 158, 158, 158, 158 ); protected $ruleToLength = array( @@ -864,13 +867,13 @@ class Php7 extends \PhpParser\ParserAbstract 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, 0, - 1, 1, 1, 3, 1, 4, 2, 2, 1, 3, - 1, 4, 4, 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, 6, 3, - 1, 1, 2, 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() { @@ -2375,10 +2378,10 @@ class Php7 extends \PhpParser\ParserAbstract $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); }, 489 => 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); }, 490 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; + $this->semValue = null; }, 491 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; @@ -2387,52 +2390,52 @@ class Php7 extends \PhpParser\ParserAbstract $this->semValue = $this->semStack[$stackPos-(1-1)]; }, 493 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 494 => function ($stackPos) { - $this->semValue = substr($this->semStack[$stackPos-(1-1)], 1); - }, - 495 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(4-3)]; - }, - 496 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); - }, - 497 => function ($stackPos) { - $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2; - }, - 498 => function ($stackPos) { - $var = $this->semStack[$stackPos-(1-1)]; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var; - }, - 499 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 500 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); - }, - 501 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); - }, - 502 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); - }, - 503 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 504 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 505 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 506 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, + 494 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 495 => function ($stackPos) { + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 496 => function ($stackPos) { + $this->semValue = substr($this->semStack[$stackPos-(1-1)], 1); + }, + 497 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(4-3)]; + }, + 498 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 499 => function ($stackPos) { + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); $this->errorState = 2; + }, + 500 => function ($stackPos) { + $var = $this->semStack[$stackPos-(1-1)]; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes) : $var; + }, + 501 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 502 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 503 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 504 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 505 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 506 => function ($stackPos) { + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, 507 => 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); }, 508 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-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); }, 509 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; @@ -2444,99 +2447,111 @@ class Php7 extends \PhpParser\ParserAbstract $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); }, 512 => function ($stackPos) { - $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; - }, - 513 => function ($stackPos) { - $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); - }, - 514 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue); - }, - 515 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, - 516 => function ($stackPos) { - /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ - }, - 517 => function ($stackPos) { - $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; - }, - 518 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); - }, - 519 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); - }, - 520 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); - }, - 521 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); - }, - 522 => 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); - }, - 523 => 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); - }, - 524 => 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); - }, - 525 => 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); - }, - 526 => function ($stackPos) { - $this->semValue = null; - }, - 527 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; - }, - 528 => function ($stackPos) { - $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; - }, - 529 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(1-1)]); - }, - 530 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); - }, - 531 => function ($stackPos) { - $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); - }, - 532 => function ($stackPos) { - $this->semValue = new Expr\Variable($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 = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); - }, - 535 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 536 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 537 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); - }, - 538 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(6-2)], $this->semStack[$stackPos-(6-4)], $this->startAttributeStack[$stackPos-(6-1)] + $this->endAttributes); - }, - 539 => function ($stackPos) { + 513 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(3-2)]; }, + 514 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 515 => function ($stackPos) { + $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); $this->errorState = 2; + }, + 516 => function ($stackPos) { + $this->semValue = new Expr\List_($this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 517 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; $end = count($this->semValue)-1; if ($this->semValue[$end] === null) array_pop($this->semValue); + }, + 518 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos]; + }, + 519 => function ($stackPos) { + /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ + }, + 520 => function ($stackPos) { + $this->semStack[$stackPos-(3-1)][] = $this->semStack[$stackPos-(3-3)]; $this->semValue = $this->semStack[$stackPos-(3-1)]; + }, + 521 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 522 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 523 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(2-2)], null, true, $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 524 => function ($stackPos) { + $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos-(1-1)], null, false, $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 525 => 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); + }, + 526 => 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); + }, + 527 => 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); + }, + 528 => 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); + }, + 529 => function ($stackPos) { + $this->semValue = null; + }, + 530 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 531 => function ($stackPos) { + $this->semStack[$stackPos-(2-1)][] = $this->semStack[$stackPos-(2-2)]; $this->semValue = $this->semStack[$stackPos-(2-1)]; + }, + 532 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(1-1)]); + }, + 533 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos-(2-1)], $this->semStack[$stackPos-(2-2)]); + }, + 534 => function ($stackPos) { + $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 535 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 536 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(1-1)]; + }, + 537 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos-(4-1)], $this->semStack[$stackPos-(4-3)], $this->startAttributeStack[$stackPos-(4-1)] + $this->endAttributes); + }, + 538 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, + 539 => function ($stackPos) { + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos-(3-1)], $this->semStack[$stackPos-(3-3)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); + }, 540 => function ($stackPos) { - $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 541 => function ($stackPos) { - $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos-(3-2)], $this->startAttributeStack[$stackPos-(3-1)] + $this->endAttributes); }, 542 => function ($stackPos) { - $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-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); }, 543 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos-(3-2)]; + }, + 544 => function ($stackPos) { + $this->semValue = new Scalar\String_($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 545 => function ($stackPos) { + $this->semValue = $this->parseNumString($this->semStack[$stackPos-(1-1)], $this->startAttributeStack[$stackPos-(1-1)] + $this->endAttributes); + }, + 546 => function ($stackPos) { + $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos-(2-2)], $this->startAttributeStack[$stackPos-(2-1)] + $this->endAttributes); + }, + 547 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos-(1-1)]; }, ]; diff --git a/lib/PhpParser/Parser/Tokens.php b/lib/PhpParser/Parser/Tokens.php index e2adbb43..1c792d76 100644 --- a/lib/PhpParser/Parser/Tokens.php +++ b/lib/PhpParser/Parser/Tokens.php @@ -117,26 +117,27 @@ final class Tokens const T_EXTENDS = 365; const T_IMPLEMENTS = 366; const T_OBJECT_OPERATOR = 367; - const T_LIST = 368; - const T_ARRAY = 369; - const T_CALLABLE = 370; - const T_CLASS_C = 371; - const T_TRAIT_C = 372; - const T_METHOD_C = 373; - const T_FUNC_C = 374; - const T_LINE = 375; - const T_FILE = 376; - const T_START_HEREDOC = 377; - const T_END_HEREDOC = 378; - const T_DOLLAR_OPEN_CURLY_BRACES = 379; - const T_CURLY_OPEN = 380; - const T_PAAMAYIM_NEKUDOTAYIM = 381; - const T_NAMESPACE = 382; - const T_NS_C = 383; - const T_DIR = 384; - const T_NS_SEPARATOR = 385; - const T_ELLIPSIS = 386; - const T_NAME_FULLY_QUALIFIED = 387; - const T_NAME_QUALIFIED = 388; - const T_NAME_RELATIVE = 389; + const T_NULLSAFE_OBJECT_OPERATOR = 368; + const T_LIST = 369; + const T_ARRAY = 370; + const T_CALLABLE = 371; + const T_CLASS_C = 372; + const T_TRAIT_C = 373; + const T_METHOD_C = 374; + const T_FUNC_C = 375; + const T_LINE = 376; + const T_FILE = 377; + const T_START_HEREDOC = 378; + const T_END_HEREDOC = 379; + const T_DOLLAR_OPEN_CURLY_BRACES = 380; + const T_CURLY_OPEN = 381; + const T_PAAMAYIM_NEKUDOTAYIM = 382; + const T_NAMESPACE = 383; + const T_NS_C = 384; + const T_DIR = 385; + const T_NS_SEPARATOR = 386; + const T_ELLIPSIS = 387; + const T_NAME_FULLY_QUALIFIED = 388; + const T_NAME_QUALIFIED = 389; + const T_NAME_RELATIVE = 390; } diff --git a/lib/PhpParser/PrettyPrinter/Standard.php b/lib/PhpParser/PrettyPrinter/Standard.php index 1739c800..bfa735db 100644 --- a/lib/PhpParser/PrettyPrinter/Standard.php +++ b/lib/PhpParser/PrettyPrinter/Standard.php @@ -492,6 +492,11 @@ class Standard extends PrettyPrinterAbstract . '(' . $this->pMaybeMultiline($node->args) . ')'; } + protected function pExpr_NullsafeMethodCall(Expr\NUllsafeMethodCall $node) { + return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name) + . '(' . $this->pMaybeMultiline($node->args) . ')'; + } + protected function pExpr_StaticCall(Expr\StaticCall $node) { return $this->pDereferenceLhs($node->class) . '::' . ($node->name instanceof Expr @@ -577,6 +582,10 @@ class Standard extends PrettyPrinterAbstract return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name); } + protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node) { + return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name); + } + protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) { return $this->pDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); } diff --git a/lib/PhpParser/PrettyPrinterAbstract.php b/lib/PhpParser/PrettyPrinterAbstract.php index 2572429d..1dce3991 100644 --- a/lib/PhpParser/PrettyPrinterAbstract.php +++ b/lib/PhpParser/PrettyPrinterAbstract.php @@ -999,6 +999,7 @@ abstract class PrettyPrinterAbstract || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall + || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_); } @@ -1015,9 +1016,11 @@ abstract class PrettyPrinterAbstract || $node instanceof Node\Name || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch + || $node instanceof Expr\NullsafePropertyFetch || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall + || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_ || $node instanceof Scalar\String_ @@ -1138,6 +1141,10 @@ abstract class PrettyPrinterAbstract 'var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME, ], + Expr\NullsafeMethodCall::class => [ + 'var' => self::FIXUP_DEREF_LHS, + 'name' => self::FIXUP_BRACED_NAME, + ], Expr\StaticPropertyFetch::class => [ 'class' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_VAR_BRACED_NAME, @@ -1146,6 +1153,10 @@ abstract class PrettyPrinterAbstract 'var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME, ], + Expr\NullsafePropertyFetch::class => [ + 'var' => self::FIXUP_DEREF_LHS, + 'name' => self::FIXUP_BRACED_NAME, + ], Scalar\Encapsed::class => [ 'parts' => self::FIXUP_ENCAPSED, ], @@ -1303,6 +1314,7 @@ abstract class PrettyPrinterAbstract 'Expr_Isset->vars' => ', ', 'Expr_List->items' => ', ', 'Expr_MethodCall->args' => ', ', + 'Expr_NullsafeMethodCall->args' => ', ', 'Expr_New->args' => ', ', 'Expr_PrintableNewAnonClass->args' => ', ', 'Expr_StaticCall->args' => ', ', @@ -1370,6 +1382,7 @@ abstract class PrettyPrinterAbstract 'Expr_Closure->params' => ['(', '', ''], 'Expr_FuncCall->args' => ['(', '', ''], 'Expr_MethodCall->args' => ['(', '', ''], + 'Expr_NullsafeMethodCall->args' => ['(', '', ''], 'Expr_New->args' => ['(', '', ''], 'Expr_PrintableNewAnonClass->args' => ['(', '', ''], 'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''], diff --git a/test/PhpParser/Lexer/EmulativeTest.php b/test/PhpParser/Lexer/EmulativeTest.php index 1ebcf6bf..f3ae8cab 100644 --- a/test/PhpParser/Lexer/EmulativeTest.php +++ b/test/PhpParser/Lexer/EmulativeTest.php @@ -48,6 +48,18 @@ class EmulativeTest extends LexerTest $this->assertSame(0, $lexer->getNextToken()); } + /** + * @dataProvider provideTestReplaceKeywords + */ + public function testNoReplaceKeywordsAfterNullsafeObjectOperator(string $keyword) { + $lexer = $this->getLexer(); + $lexer->startLexing('' . $keyword); + + $this->assertSame(Tokens::T_NULLSAFE_OBJECT_OPERATOR, $lexer->getNextToken()); + $this->assertSame(Tokens::T_STRING, $lexer->getNextToken()); + $this->assertSame(0, $lexer->getNextToken()); + } + public function provideTestReplaceKeywords() { return [ // PHP 8.0 @@ -260,6 +272,9 @@ class EmulativeTest extends LexerTest [Tokens::T_LNUMBER, '1_0'], [Tokens::T_STRING, 'abc'], ]], + ['?->', [ + [Tokens::T_NULLSAFE_OBJECT_OPERATOR, '?->'], + ]], ]; } diff --git a/test/code/parser/expr/nullsafe.test b/test/code/parser/expr/nullsafe.test new file mode 100644 index 00000000..9dd36a83 --- /dev/null +++ b/test/code/parser/expr/nullsafe.test @@ -0,0 +1,82 @@ +Nullsafe operator +----- +b; +$a?->b($c); +new $a?->b; +"{$a?->b}"; +"$a?->b"; +----- +!!php7 +array( + 0: Stmt_Expression( + expr: Expr_NullsafePropertyFetch( + var: Expr_Variable( + name: a + ) + name: Identifier( + name: b + ) + ) + ) + 1: Stmt_Expression( + expr: Expr_NullsafeMethodCall( + var: Expr_Variable( + name: a + ) + name: Identifier( + name: b + ) + args: array( + 0: Arg( + value: Expr_Variable( + name: c + ) + byRef: false + unpack: false + ) + ) + ) + ) + 2: Stmt_Expression( + expr: Expr_New( + class: Expr_NullsafePropertyFetch( + var: Expr_Variable( + name: a + ) + name: Identifier( + name: b + ) + ) + args: array( + ) + ) + ) + 3: Stmt_Expression( + expr: Scalar_Encapsed( + parts: array( + 0: Expr_NullsafePropertyFetch( + var: Expr_Variable( + name: a + ) + name: Identifier( + name: b + ) + ) + ) + ) + ) + 4: Stmt_Expression( + expr: Scalar_Encapsed( + parts: array( + 0: Expr_Variable( + name: a + ) + 1: Scalar_EncapsedStringPart( + value: ?->b + ) + ) + ) + ) +) \ No newline at end of file diff --git a/test/code/prettyPrinter/expr/nullsafe.test b/test/code/prettyPrinter/expr/nullsafe.test new file mode 100644 index 00000000..6f5ec329 --- /dev/null +++ b/test/code/prettyPrinter/expr/nullsafe.test @@ -0,0 +1,22 @@ +Nullsafe operator +----- +b; +$a?->b($c); +$a?->b?->c; +$a?->b($c)?->d; +$a?->b($c)(); +new $a?->b; +"{$a?->b}"; +"$a?->b"; +----- +!!php7 +$a?->b; +$a?->b($c); +$a?->b?->c; +$a?->b($c)?->d; +$a?->b($c)(); +new $a?->b(); +"{$a?->b}"; +"{$a}?->b"; \ No newline at end of file