Add support for throw expression

This commit is contained in:
Nikita Popov 2020-08-09 20:52:55 +02:00
parent 7f398769a0
commit a98350581c
12 changed files with 1357 additions and 1235 deletions

View File

@ -5,6 +5,9 @@ Version 4.8.1-dev
* [PHP 8.0] Added support for named arguments, represented using a new `name` subnode on `Arg`.
* [PHP 8.0] Added support for static return type, represented like a normal class return type.
* [PHP 8.0] Added support for throw expression, represented using a new `Expr\Throw_` node. For
backwards compatibility reasons, throw expressions in statement context continue to be
represented using `Stmt\Throw_`.
Version 4.8.0 (2020-08-09)
--------------------------

View File

@ -18,7 +18,7 @@
},
"require-dev": {
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0",
"ircmaxell/php-yacc": "^0.0.6"
"ircmaxell/php-yacc": "^0.0.7"
},
"extra": {
"branch-alias": {

View File

@ -233,7 +233,16 @@ non_empty_statement:
| T_STATIC static_var_list semi { $$ = Stmt\Static_[$2]; }
| T_ECHO expr_list_forbid_comma semi { $$ = Stmt\Echo_[$2]; }
| T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; }
| expr semi { $$ = Stmt\Expression[$1]; }
| expr semi {
$e = $1;
if ($e instanceof Expr\Throw_) {
// For backwards-compatibility reasons, convert throw in statement position into
// Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_).
$$ = Stmt\Throw_[$e->expr];
} else {
$$ = Stmt\Expression[$e];
}
}
| T_UNSET '(' variables_list ')' semi { $$ = Stmt\Unset_[$3]; }
| T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
{ $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; }
@ -244,7 +253,6 @@ non_empty_statement:
| T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; }
| T_TRY '{' inner_statement_list '}' catches optional_finally
{ $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); }
| T_THROW expr semi { $$ = Stmt\Throw_[$2]; }
| T_GOTO identifier semi { $$ = Stmt\Goto_[$2]; }
| identifier ':' { $$ = Stmt\Label[$1]; }
| error { $$ = array(); /* means: no statement */ }
@ -785,6 +793,7 @@ expr:
| T_YIELD expr { $$ = Expr\Yield_[$2, null]; }
| T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; }
| T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; }
| T_THROW expr { $$ = Expr\Throw_[$2]; }
| T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
{ $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8]]; }

View File

@ -1,6 +1,7 @@
/* We currently rely on the token ID mapping to be the same between PHP 5 and PHP 7 - so the same lexer can be used for
* both. This is enforced by sharing this token file. */
%right T_THROW
%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
%left ','
%left T_LOGICAL_OR

View File

@ -0,0 +1,30 @@
<?php declare(strict_types=1);
namespace PhpParser\Node\Expr;
use PhpParser\Node;
class Throw_ extends Node\Expr
{
/** @var Node\Expr Expression */
public $expr;
/**
* Constructs a throw expression node.
*
* @param Node\Expr $expr Expression
* @param array $attributes Additional attributes
*/
public function __construct(Node\Expr $expr, array $attributes = []) {
$this->attributes = $attributes;
$this->expr = $expr;
}
public function getSubNodeNames() : array {
return ['expr'];
}
public function getType() : string {
return 'Expr_Throw';
}
}

View File

@ -10,7 +10,7 @@ class Throw_ extends Node\Stmt
public $expr;
/**
* Constructs a throw node.
* Constructs a legacy throw statement node.
*
* @param Node\Expr $expr Expression
* @param array $attributes Additional attributes

View File

@ -18,7 +18,7 @@ use PhpParser\Node\Stmt;
class Php5 extends \PhpParser\ParserAbstract
{
protected $tokenToSymbolMapSize = 391;
protected $actionTableSize = 1061;
protected $actionTableSize = 1069;
protected $gotoTableSize = 580;
protected $invalidSymbol = 164;
@ -32,6 +32,7 @@ class Php5 extends \PhpParser\ParserAbstract
protected $symbolToName = array(
"EOF",
"error",
"T_THROW",
"T_INCLUDE",
"T_INCLUDE_ONCE",
"T_EVAL",
@ -141,7 +142,6 @@ class Php5 extends \PhpParser\ParserAbstract
"T_TRY",
"T_CATCH",
"T_FINALLY",
"T_THROW",
"T_USE",
"T_INSTEADOF",
"T_GLOBAL",
@ -200,16 +200,16 @@ class Php5 extends \PhpParser\ParserAbstract
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, 55, 162, 164, 159, 54, 37, 164,
157, 158, 52, 49, 8, 50, 51, 53, 164, 164,
164, 164, 164, 164, 164, 164, 164, 164, 31, 154,
43, 16, 45, 30, 67, 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, 69, 164, 161, 36, 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, 155, 35, 156, 57, 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,
@ -223,11 +223,11 @@ class Php5 extends \PhpParser\ParserAbstract
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,
5, 6, 7, 9, 10, 11, 12, 13, 14, 15,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 31, 32, 33, 37, 38, 39, 40, 41,
43, 45, 46, 47, 55, 57, 58, 59, 60, 61,
62, 63, 64, 65, 67, 69, 70, 71, 72, 73,
27, 28, 29, 32, 33, 34, 38, 39, 40, 41,
42, 44, 46, 47, 48, 56, 58, 59, 60, 61,
62, 63, 64, 65, 66, 68, 70, 71, 72, 73,
74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
@ -240,333 +240,333 @@ class Php5 extends \PhpParser\ParserAbstract
);
protected $action = array(
663, 664, 665, 666, 667, 282, 668, 669, 670, 706,
707, 221, 222, 223, 224, 225, 226, 227, 228, 229,
0, 230, 231, 232, 233, 234, 235, 236, 237, 238,
239, 240, 241,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-32766,-32767,-32767,-32767,-32767, 27, 242, 243,-32766,-32766,
-32766,-32766,-32766, 671,-32766, 333,-32766,-32766,-32766,-32766,
-32766,-32766,-32767,-32767,-32767,-32767,-32767, 672, 673, 674,
675, 676, 677, 678, 125, 816, 740, 941, 942, 943,
940, 939, 938, 679, 680, 681, 682, 683, 684, 685,
686, 687, 688, 689, 709, 732, 710, 711, 712, 713,
701, 702, 703, 731, 704, 705, 690, 691, 692, 693,
693, 663, 664, 665, 666, 667, 282, 668, 669, 670,
706, 707, 221, 222, 223, 224, 225, 226, 227, 228,
229, 0, 230, 231, 232, 233, 234, 235, 236, 237,
238, 239, 240, 241,-32766,-32766,-32766,-32766,-32766,-32766,
-32766,-32766,-32767,-32767,-32767,-32767, 27, 242, 243,-32766,
-32766,-32766,-32766,-32766, 671,-32766, 333,-32766,-32766,-32766,
-32766,-32766,-32766,-32767,-32767,-32767,-32767,-32767, 672, 673,
674, 675, 676, 677, 678, 1034, 816, 740, 941, 942,
943, 940, 939, 938, 679, 680, 681, 682, 683, 684,
685, 686, 687, 688, 689, 709, 732, 710, 711, 712,
713, 701, 702, 703, 731, 704, 705, 690, 691, 692,
694, 695, 696, 734, 735, 736, 737, 738, 739, 697,
698, 699, 700, 730, 721, 719, 720, 716, 717, 52,
708, 714, 715, 722, 723, 725, 724, 726, 727, 54,
55, 417, 56, 57, 718, 729, 728, 864, 58, 59,
-220, 60,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-32766, 1171,-32767,-32767,-32767,-32767, 1034, 35, 106, 107,
698, 699, 700, 730, 721, 719, 720, 716, 717, 437,
708, 714, 715, 722, 723, 725, 724, 726, 727, 55,
56, 417, 57, 58, 718, 729, 728, 28, 59, 60,
-220, 61,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,
-32766, 36,-32767,-32767,-32767,-32767, 1034, 35, 106, 107,
108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
118,-32766,-32766,-32766,-32766, 61, 62, 10, 1034, 209,
292, 63, 313, 64, 290, 291, 65, 66, 67, 68,
69, 70, 71, 72, 763, 25, 298, 73, 409, 973,
975, 309, 294, 1086, 1087, 1064, 124, 748, 239, 240,
241, 465,-32766,-32766,-32766, 742, 354, 294, 807, 817,
-32766,-32766,-32766, 323, 242, 243, 129, 218, 219, 220,
341, 428, 359,-32766, 1171,-32766,-32766,-32766,-32766,-32766,
-32766,-32766, 488,-32766,-32766,-32766,-32766,-32766, 202, 748,
473, 474, 941, 942, 943, 940, 939, 938,-32766, 475,
476, 865, 1092, 1093, 1094, 1095, 1089, 1090, 315, 1214,
338, 297, 1215, -505, 1096, 1091, 888, 889, 1066, 1065,
1067, 218, 219, 220, 41,-32766, 337, 330, 1185, 332,
418, -126, -126, -126, 75, 410, 464, -4, 817, 296,
805, -224, 202, 40, 21, 419, -126, 466, -126, 467,
-126, 468, -126, 341, 420, 748, 128, 744, 748, 31,
32, 421, 422, 748, 915, 33, 469, 1034, 337, 74,
298, 128, 351, 352, 470, 471,-32766,-32766,-32766, 894,
472, 748, 412, 788, 835, 423, 424,-32767,-32767,-32767,
-32767, 97, 98, 99, 100, 101, 437,-32766, 748,-32766,
-32766,-32766,-32766, 802, 413, 742, 340, 475, 119, 418,
475, 576, 819, 629, -126, 464, 415, 817, 28, 805,
1136, 762, 40, 21, 419, 760, 466, 761, 467, 748,
468, 745, 429, 420, 337, 429, 285, 337, 31, 32,
421, 422, 337, 405, 33, 469, 1034, 1034, 74, 311,
414, 351, 352, 470, 471,-32766,-32766,-32766, 429, 472,
337, 615, 752, 835, 423, 424,-32766,-32766,-32766, 440,
1098, 1137, 747, 1064, 36, 429,-32766, 337,-32766,-32766,
-32766, 48, 130, 342,-32766,-32766, 337,-32766, 418,-32766,
-32766, 819, 629, -4, 464, 416, 817, 748, 805, 123,
1205, 40, 21, 419, 126, 466, 429, 467, 337, 468,
1062, 210, 420, 534, -205, -205, -205, 31, 32, 421,
422, 438, 211, 33, 469, 219, 220, 74, 212, 759,
351, 352, 470, 471, 1066, 1065, 1067, 202, 472, 919,
1034, 788, 835, 423, 424, 202, 1066, 1065, 1067, 1034,
9, 803, 1034, 218, 219, 220, 320, 218, 219, 220,
30, 293, 244, 914, 286, 933, 220, 418, 120, 895,
819, 629, -205, 464, 202, 246, 295, 805, 202, 247,
40, 21, 419, 1034, 466, 202, 467, 1186, 468, 796,
49, 420, 248, -204, -204, -204, 31, 32, 421, 422,
-255, 20, 33, 469, 249, 760, 74, 761, 817, 351,
352, 470, 471, -84, 102, 103, 104, 472, 303,-32766,
788, 835, 423, 424,-32766,-32766,-32766, 218, 219, 220,
105, 79, 80, 81,-32766,-32766,-32766, 632,-32766,-32766,
-32766, 99, 100, 101, 51,-32766, 1052, 310, 202, 819,
629, -204, 34, 817, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 121, 303, 418,
78, 512, 633,-32766, 337, 464, 828, 817, 640, 805,
105, 798, 40, 21, 419, 1034, 466, 643, 467, 815,
468, 888, 889, 420, 236, 237, 238, 133, 31, 32,
421, 567, 132, 127, 33, 469, 637, 43, 74,-32766,
-32766, 351, 352, 303, 418, 800, 242, 243, 105, 472,
464, 122, 134, 364, 805, 447, 22, 40, 21, 419,
1098, 466, 44, 467, 298, 468, 45, 817, 420, 452,
584, 591, 592, 31, 32, 421, 753, 635, 418, 33,
469, 819, 629, 74, 464, 46, 351, 352, 805, 930,
649, 40, 21, 419, 472, 466, 641, 467, 47, 468,
50, 817, 420, 918, 657, 53, 131, 31, 32, 421,
599, 742,-32766, 33, 469, 436, -274, 74, 611, 748,
351, 352, 946, 516, 623, 603, 819, 629, 472, 570,
646, 432, 589,-32766, 321, 836, 837, 318, 418, -82,
11, 439, 456, 281, 464, 322, 817, 573, 805, 588,
-505, 40, 21, 419, 458, 466, 312, 467, -414, 468,
851, 629, 420, 527, 1097, 1143, 747, 31, 32, 421,
-221, -424, 418, 33, 469, 0, 0, 74, 464, 78,
351, 352, 805, 319, 0, 40, 21, 419, 472, 466,
314, 467, -506, 468, 0, 0, 420, -405, 331, 6,
7, 31, 32, 421, 0, 12, 558, 33, 469, 14,
363, 74, -415, 830, 351, 352, 38, 418, 1032, 0,
819, 629, 472, 464, 39, 245, 652, 805, 653, 758,
40, 21, 419, 806, 466, 814, 467, 793, 468, 808,
867, 420, 858, 213, 214, 859, 31, 32, 421, 215,
791, 216, 33, 469, 819, 629, 74, 852, 849, 351,
352, 847, 925, 207, 926, 923, 797, 472, 213, 214,
799, 1086, 1087, 801, 215, 813, 216, 804, 922, 1088,
756, 757, 924, -220, 353, 630, 634, 636, 207, 638,
639, 642, 644, 645, 647, 648, 1086, 1087, 631, 819,
629, 24, 654, 789, 1088, 1211, 1213, 755, 834, 754,
833, 1212, 832, 1048, 824, 1036, 831, 1037, 822, 931,
856, 857, 451, 1210, 1179, 1177, 1162, 1175, 554, 1077,
1092, 1093, 1094, 1095, 1089, 1090, 388, 906, 1183, 1173,
1043, 26, 1096, 1091, 29, 37, 42, 76, 77, 208,
284, 288, 217, 554, 289, 1092, 1093, 1094, 1095, 1089,
1090, 388, 304, 305, 306, 307, 335, 1096, 1091, 406,
408, 1045, 16, 17, 18, 383, 448, 217, 287, 455,
457, 462, 548, 620, 1039, 1042, 896, 1102, 1038, 1014,
559, 1013, 1079, 0, 0, 0, 1044, 1047, 1046, 1061,
1176, 1161, 1157, 1174, 1076, 1208, 1103, 1156, 595, 0,
1142
118,-32766,-32766,-32766,-32766, 62, 63, 1034, 125, 285,
292, 64, 748, 65, 290, 291, 66, 67, 68, 69,
70, 71, 72, 73, 763, 25, 298, 74, 409, 973,
975, 294, 294, 1086, 1087, 1064, 796, 748, 218, 219,
220, 465,-32766,-32766,-32766, 742, 864, 817, 54, 807,
9,-32766,-32766,-32766, 760, 320, 761, 410, 10, 202,
246, 428, 209,-32766, 933,-32766,-32766,-32766,-32766,-32766,
-32766, 488,-32766, 438,-32766,-32766,-32766,-32766,-32766, 473,
474, 941, 942, 943, 940, 939, 938,-32766, 475, 476,
337, 1092, 1093, 1094, 1095, 1089, 1090, 315, 1214, -255,
747, 1215, -505, 1096, 1091, 888, 889, 1066, 1065, 1067,
218, 219, 220, 41, 414, 337, 330, 895, 332, 418,
-126, -126, -126, 75, 52, 464, -4, 817, 54, 805,
-224, 202, 40, 21, 419, -126, 466, -126, 467, -126,
468, -126, 359, 420, 128, 128, 748, 1171, 31, 32,
421, 422, 1034, 894, 33, 469,-32766,-32766,-32766, 1186,
351, 352, 470, 471,-32766,-32766,-32766, 309, 472, 865,
323, 788, 835, 423, 424,-32767,-32767,-32767,-32767, 97,
98, 99, 100, 101, 615,-32766, 313,-32766,-32766,-32766,
-32766, 354, 1185, 1171, 218, 219, 220, 475, 748, 418,
819, 629, -126, 297, 915, 464, 817, 54,-32766, 805,
124, 748, 40, 21, 419, 202, 466, 48, 467, 534,
468, 129, 429, 420, 337, 341, 888, 889, 31, 32,
421, 422, 416, 405, 33, 469,-32766,-32766, 311, 298,
351, 352, 470, 471,-32766,-32766,-32766, 748, 472, 412,
748, 752, 835, 423, 424, 338, 1066, 1065, 1067, 219,
220, 919, 1136, 296, 20,-32766, 576,-32766,-32766,-32766,
742, 341, 342, 413, 429, 1064, 337, 512, 418, 202,
819, 629, -4, 1034, 464, 817, 54, 49, 805, 337,
762, 40, 21, 419, 51, 466, 1034, 467, 475, 468,
340, 748, 420, 120, -205, -205, -205, 31, 32, 421,
422, 1062,-32766, 33, 469,-32766,-32766,-32766, 744, 351,
352, 470, 471, 429, 1098, 337, 429, 472, 337, 1034,
788, 835, 423, 424, 415, 1098,-32766, 802,-32766,-32766,
102, 103, 104, 1137, 303, 202, 130, 1066, 1065, 1067,
337, 123, 239, 240, 241, 748, 105, 418, 1205, 819,
629, -205, 440, 464,-32766,-32766,-32766, 805, 242, 243,
40, 21, 419, 121, 466, 126, 467, 429, 468, 337,
122, 420, 1052, -204, -204, -204, 31, 32, 421, 422,
1034, 745, 33, 469, 220, 759, 817, 54, 351, 352,
470, 471, 218, 219, 220, 119, 472, 244, 127, 788,
835, 423, 424, 202,-32766,-32766,-32766, 30, 293, 803,
79, 80, 81, 202, 798, 210, 632, 99, 100, 101,
236, 237, 238, 817, 54,-32766, 211, 800, 819, 629,
-204, 34, 1034, 82, 83, 84, 85, 86, 87, 88,
89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99, 100, 101, 102, 103, 104, 286, 303, 418, 1034,
817, 54,-32766,-32766, 464, 218, 219, 220, 805, 105,
914, 40, 21, 419, 78, 466, 212, 467, 337, 468,
133, 247, 420, 295, 567, 248, 202, 31, 32, 421,
633, 242, 243, 33, 469, 418, 249, 817, 54, 351,
352, 464, 760, -84, 761, 805, 310, 472, 40, 21,
419,-32766, 466, 640, 467, 643, 468, 447, 22, 420,
815, 452, 584, 132, 31, 32, 421, 637, 134, 364,
33, 469, 418, 303, 817, 54, 351, 352, 464, 819,
629, 828, 805, 43, 472, 40, 21, 419, 44, 466,
45, 467, 46, 468, 591, 592, 420, 753, 635, 930,
649, 31, 32, 421, 641, 918, 657, 33, 469, 418,
105, 817, 54, 351, 352, 464, 819, 629, 47, 805,
50, 472, 40, 21, 419, 53, 466, 131, 467, 298,
468, 599, 742, 420,-32766, -274, 516, 570, 31, 32,
421, 646, 748, 946, 33, 469, 418, 589, 436,-32766,
351, 352, 464, 819, 629, 623, 805, 836, 472, 40,
21, 419, 611, 466, -82, 467, 603, 468, 11, 573,
420, 439, 456, 281, 318, 31, 32, 421, 588, 432,
321, 33, 469, 418, -414, 458, 322, 351, 352, 464,
851, 629, 837, 805, -505, 472, 40, 21, 419, 654,
466, 38, 467, 24, 468, 0, 0, 420, 319, 0,
-405, 0, 31, 32, 421, 245, 312, 314, 33, 469,
-506, 0, 0, 1097, 351, 352, 1143, 819, 629, 0,
0, 527, 472, 213, 214, 6, 7, 12, 14, 215,
363, 216, -415, 558, 789, -221, 830, 0, 0, 747,
0, 0, 0, 207, 39, 652, 653, 758, 806, 814,
793, 1086, 1087, 808, 819, 629, 213, 214, 867, 1088,
858, 859, 215, 791, 216, 852, 849, 847, 925, 926,
923, 813, 797, 799, 801, 804, 207, 922, 756, 757,
924, 287, 78, 331, 1086, 1087, 353, 630, 634, 636,
638, 639, 1088, 642, 644, 645, 647, 648, 631, 1142,
1211, 1213, 755, 834, 754, 833, 1212, 554, 832, 1092,
1093, 1094, 1095, 1089, 1090, 388, 1048, 824, 1036, 831,
1037, 1096, 1091, 822, 931, 856, 857, 451, 1210, 1179,
0, 217, 1177, 1162, 1175, 1077, 906, 1183, 1173, 0,
554, 26, 1092, 1093, 1094, 1095, 1089, 1090, 388, 29,
37, 42, 76, 77, 1096, 1091, 208, 284, 288, 289,
304, 305, 306, 307, 217, 335, 406, 408, 0, -220,
16, 17, 18, 383, 448, 455, 457, 462, 548, 620,
1039, 1042, 896, 1102, 1038, 1014, 559, 1013, 1079, 0,
0, -424, 1032, 0, 1043, 1045, 1044, 1047, 1046, 1061,
1176, 1161, 1157, 1174, 1076, 1208, 1103, 1156, 595
);
protected $actionCheck = array(
2, 3, 4, 5, 6, 13, 8, 9, 10, 11,
12, 32, 33, 34, 35, 36, 37, 38, 39, 40,
0, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 8, 9, 10, 32, 33, 34, 35,
36, 37, 38, 39, 40, 7, 67, 68, 32, 33,
34, 35, 36, 55, 29, 7, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 69, 70, 71,
72, 73, 74, 75, 7, 1, 78, 115, 116, 117,
118, 119, 120, 85, 86, 87, 88, 89, 90, 91,
2, 3, 4, 5, 6, 7, 14, 9, 10, 11,
12, 13, 33, 34, 35, 36, 37, 38, 39, 40,
41, 0, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 9, 10, 11, 33, 34, 35,
36, 37, 38, 39, 40, 41, 8, 68, 69, 33,
34, 35, 36, 37, 56, 30, 8, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 70, 71,
72, 73, 74, 75, 76, 13, 1, 79, 115, 116,
117, 118, 119, 120, 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, 68,
132, 133, 134, 135, 136, 137, 138, 139, 140, 2,
3, 4, 5, 6, 146, 147, 148, 30, 11, 12,
158, 14, 32, 33, 34, 35, 36, 37, 38, 39,
40, 80, 42, 43, 44, 45, 12, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 32, 33, 34, 35, 48, 49, 7, 12, 7,
36, 54, 131, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 156, 68, 69, 70, 71, 57,
58, 7, 36, 76, 77, 78, 155, 80, 51, 52,
53, 84, 8, 9, 10, 78, 7, 36, 154, 1,
8, 9, 10, 7, 67, 68, 155, 8, 9, 10,
159, 104, 7, 29, 80, 31, 32, 33, 34, 35,
36, 29, 115, 31, 32, 33, 34, 35, 29, 80,
123, 124, 115, 116, 117, 118, 119, 120, 115, 132,
133, 154, 135, 136, 137, 138, 139, 140, 141, 78,
7, 36, 81, 131, 147, 148, 133, 134, 151, 152,
153, 8, 9, 10, 157, 8, 159, 160, 1, 162,
72, 73, 74, 75, 150, 126, 78, 0, 1, 7,
82, 158, 29, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 159, 96, 80, 150, 78, 80, 101,
102, 103, 104, 80, 154, 107, 108, 12, 159, 111,
69, 150, 114, 115, 116, 117, 8, 9, 10, 158,
122, 80, 7, 125, 126, 127, 128, 42, 43, 44,
45, 46, 47, 48, 49, 50, 30, 29, 80, 31,
32, 33, 34, 154, 7, 78, 68, 132, 15, 72,
132, 83, 154, 155, 156, 78, 7, 1, 7, 82,
161, 156, 85, 86, 87, 104, 89, 106, 91, 80,
93, 152, 157, 96, 159, 157, 7, 159, 101, 102,
103, 104, 159, 106, 107, 108, 12, 12, 111, 112,
7, 114, 115, 116, 117, 8, 9, 10, 157, 122,
159, 78, 125, 126, 127, 128, 8, 9, 10, 131,
142, 158, 151, 78, 13, 157, 29, 159, 31, 32,
33, 68, 155, 146, 8, 9, 159, 29, 72, 31,
32, 154, 155, 156, 78, 7, 1, 80, 82, 13,
83, 85, 86, 87, 155, 89, 157, 91, 159, 93,
115, 15, 96, 79, 98, 99, 100, 101, 102, 103,
104, 155, 15, 107, 108, 9, 10, 111, 15, 154,
114, 115, 116, 117, 151, 152, 153, 29, 122, 156,
12, 125, 126, 127, 128, 29, 151, 152, 153, 12,
106, 154, 12, 8, 9, 10, 112, 8, 9, 10,
143, 144, 13, 154, 36, 121, 10, 72, 155, 158,
154, 155, 156, 78, 29, 30, 36, 82, 29, 15,
85, 86, 87, 12, 89, 29, 91, 158, 93, 154,
68, 96, 15, 98, 99, 100, 101, 102, 103, 104,
156, 158, 107, 108, 15, 104, 111, 106, 1, 114,
115, 116, 117, 30, 51, 52, 53, 122, 55, 32,
125, 126, 127, 128, 8, 9, 10, 8, 9, 10,
67, 8, 9, 10, 8, 9, 10, 30, 32, 33,
34, 48, 49, 50, 68, 29, 158, 30, 29, 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, 155, 55, 72,
155, 83, 30, 115, 159, 78, 36, 1, 30, 82,
67, 154, 85, 86, 87, 12, 89, 30, 91, 30,
93, 133, 134, 96, 48, 49, 50, 155, 101, 102,
103, 159, 30, 30, 107, 108, 30, 68, 111, 32,
33, 114, 115, 55, 72, 154, 67, 68, 67, 122,
78, 155, 99, 100, 82, 73, 74, 85, 86, 87,
142, 89, 68, 91, 69, 93, 68, 1, 96, 73,
74, 109, 110, 101, 102, 103, 154, 155, 72, 107,
108, 154, 155, 111, 78, 68, 114, 115, 82, 154,
155, 85, 86, 87, 122, 89, 30, 91, 68, 93,
68, 1, 96, 154, 155, 68, 68, 101, 102, 103,
75, 78, 83, 107, 108, 87, 80, 111, 92, 80,
114, 115, 80, 83, 90, 94, 154, 155, 122, 88,
30, 104, 112, 115, 113, 126, 126, 129, 72, 95,
95, 95, 95, 95, 78, 129, 1, 98, 82, 98,
131, 85, 86, 87, 104, 89, 131, 91, 145, 93,
154, 155, 96, 149, 142, 142, 151, 101, 102, 103,
158, 160, 72, 107, 108, -1, -1, 111, 78, 155,
114, 115, 82, 130, -1, 85, 86, 87, 122, 89,
131, 91, 131, 93, -1, -1, 96, 145, 155, 145,
145, 101, 102, 103, -1, 145, 149, 107, 108, 145,
145, 111, 145, 150, 114, 115, 154, 72, 160, -1,
154, 155, 122, 78, 154, 30, 154, 82, 154, 154,
85, 86, 87, 154, 89, 154, 91, 154, 93, 154,
154, 96, 154, 48, 49, 154, 101, 102, 103, 54,
154, 56, 107, 108, 154, 155, 111, 154, 154, 114,
115, 154, 154, 68, 154, 154, 154, 122, 48, 49,
154, 76, 77, 154, 54, 154, 56, 154, 154, 84,
154, 154, 154, 158, 155, 155, 155, 155, 68, 155,
155, 155, 155, 155, 155, 155, 76, 77, 155, 154,
155, 157, 156, 156, 84, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 133, 156,
135, 136, 137, 138, 139, 140, 141, 156, 156, 156,
161, 157, 147, 148, 157, 157, 157, 157, 157, 157,
157, 157, 157, 133, 157, 135, 136, 137, 138, 139,
140, 141, 157, 157, 157, 157, 157, 147, 148, 157,
157, 161, 158, 158, 158, 158, 158, 157, 159, 158,
122, 123, 124, 125, 126, 127, 128, 129, 130, 31,
132, 133, 134, 135, 136, 137, 138, 139, 140, 3,
4, 5, 6, 7, 146, 147, 148, 8, 12, 13,
158, 15, 33, 34, 35, 36, 37, 38, 39, 40,
41, 14, 43, 44, 45, 46, 13, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 33, 34, 35, 36, 49, 50, 13, 8, 8,
37, 55, 81, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 156, 69, 70, 71, 72, 58,
59, 37, 37, 77, 78, 79, 154, 81, 9, 10,
11, 85, 9, 10, 11, 79, 31, 1, 2, 154,
107, 9, 10, 11, 105, 112, 107, 126, 8, 30,
31, 105, 8, 30, 121, 32, 33, 34, 35, 36,
37, 115, 30, 155, 32, 33, 34, 35, 36, 123,
124, 115, 116, 117, 118, 119, 120, 115, 132, 133,
159, 135, 136, 137, 138, 139, 140, 141, 79, 156,
151, 82, 131, 147, 148, 133, 134, 151, 152, 153,
9, 10, 11, 157, 8, 159, 160, 158, 162, 73,
74, 75, 76, 150, 69, 79, 0, 1, 2, 83,
158, 30, 86, 87, 88, 89, 90, 91, 92, 93,
94, 95, 8, 97, 150, 150, 81, 81, 102, 103,
104, 105, 13, 158, 108, 109, 9, 10, 11, 158,
114, 115, 116, 117, 9, 10, 11, 8, 122, 154,
8, 125, 126, 127, 128, 43, 44, 45, 46, 47,
48, 49, 50, 51, 79, 30, 131, 32, 33, 34,
35, 8, 1, 81, 9, 10, 11, 132, 81, 73,
154, 155, 156, 37, 154, 79, 1, 2, 115, 83,
155, 81, 86, 87, 88, 30, 90, 69, 92, 80,
94, 155, 157, 97, 159, 159, 133, 134, 102, 103,
104, 105, 8, 107, 108, 109, 9, 10, 112, 70,
114, 115, 116, 117, 9, 10, 11, 81, 122, 8,
81, 125, 126, 127, 128, 8, 151, 152, 153, 10,
11, 156, 161, 8, 158, 30, 84, 32, 33, 34,
79, 159, 146, 8, 157, 79, 159, 84, 73, 30,
154, 155, 156, 13, 79, 1, 2, 69, 83, 159,
156, 86, 87, 88, 69, 90, 13, 92, 132, 94,
69, 81, 97, 155, 99, 100, 101, 102, 103, 104,
105, 115, 9, 108, 109, 9, 10, 11, 79, 114,
115, 116, 117, 157, 142, 159, 157, 122, 159, 13,
125, 126, 127, 128, 8, 142, 30, 154, 32, 33,
52, 53, 54, 158, 56, 30, 155, 151, 152, 153,
159, 14, 52, 53, 54, 81, 68, 73, 84, 154,
155, 156, 131, 79, 33, 34, 35, 83, 68, 69,
86, 87, 88, 155, 90, 155, 92, 157, 94, 159,
155, 97, 158, 99, 100, 101, 102, 103, 104, 105,
13, 152, 108, 109, 11, 154, 1, 2, 114, 115,
116, 117, 9, 10, 11, 16, 122, 14, 31, 125,
126, 127, 128, 30, 9, 10, 11, 143, 144, 154,
9, 10, 11, 30, 154, 16, 31, 49, 50, 51,
49, 50, 51, 1, 2, 30, 16, 154, 154, 155,
156, 30, 13, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 37, 56, 73, 13,
1, 2, 33, 34, 79, 9, 10, 11, 83, 68,
154, 86, 87, 88, 155, 90, 16, 92, 159, 94,
155, 16, 97, 37, 159, 16, 30, 102, 103, 104,
31, 68, 69, 108, 109, 73, 16, 1, 2, 114,
115, 79, 105, 31, 107, 83, 31, 122, 86, 87,
88, 33, 90, 31, 92, 31, 94, 74, 75, 97,
31, 74, 75, 31, 102, 103, 104, 31, 100, 101,
108, 109, 73, 56, 1, 2, 114, 115, 79, 154,
155, 37, 83, 69, 122, 86, 87, 88, 69, 90,
69, 92, 69, 94, 110, 111, 97, 154, 155, 154,
155, 102, 103, 104, 31, 154, 155, 108, 109, 73,
68, 1, 2, 114, 115, 79, 154, 155, 69, 83,
69, 122, 86, 87, 88, 69, 90, 69, 92, 70,
94, 76, 79, 97, 84, 81, 84, 89, 102, 103,
104, 31, 81, 81, 108, 109, 73, 112, 88, 115,
114, 115, 79, 154, 155, 91, 83, 126, 122, 86,
87, 88, 93, 90, 96, 92, 95, 94, 96, 99,
97, 96, 96, 96, 129, 102, 103, 104, 99, 105,
113, 108, 109, 73, 145, 105, 129, 114, 115, 79,
154, 155, 126, 83, 131, 122, 86, 87, 88, 156,
90, 154, 92, 157, 94, -1, -1, 97, 130, -1,
145, -1, 102, 103, 104, 31, 131, 131, 108, 109,
131, -1, -1, 142, 114, 115, 142, 154, 155, -1,
-1, 149, 122, 49, 50, 145, 145, 145, 145, 55,
145, 57, 145, 149, 156, 158, 150, -1, -1, 151,
-1, -1, -1, 69, 154, 154, 154, 154, 154, 154,
154, 77, 78, 154, 154, 155, 49, 50, 154, 85,
154, 154, 55, 154, 57, 154, 154, 154, 154, 154,
154, 154, 154, 154, 154, 154, 69, 154, 154, 154,
154, 159, 155, 155, 77, 78, 155, 155, 155, 155,
155, 155, 85, 155, 155, 155, 155, 155, 155, 162,
156, 156, 156, 156, 156, 156, 156, 133, 156, 135,
136, 137, 138, 139, 140, 141, 156, 156, 156, 156,
156, 147, 148, 156, 156, 156, 156, 156, 156, 156,
-1, 157, 156, 156, 156, 156, 156, 156, 156, -1,
133, 157, 135, 136, 137, 138, 139, 140, 141, 157,
157, 157, 157, 157, 147, 148, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, -1, 158,
158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
158, 158, 158, -1, -1, -1, 161, 161, 161, 161,
161, 161, 161, 161, 161, 161, 161, 161, 161, -1,
162
158, 158, 158, 158, 158, 158, 158, 158, 158, -1,
-1, 160, 160, -1, 161, 161, 161, 161, 161, 161,
161, 161, 161, 161, 161, 161, 161, 161, 161
);
protected $actionBase = array(
0, 228, 307, 386, 465, 353, 81, 81, 778, -2,
-2, 147, -2, -2, -2, 622, 716, 750, 716, 577,
656, 795, 795, 795, 191, 154, 154, 154, 176, 884,
404, 405, 507, 541, 653, 498, 510, 325, 325, 325,
325, 137, 137, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
325, 325, 325, 325, 325, 117, 74, 456, 431, 762,
766, 769, 771, 880, 698, 881, 817, 818, 652, 819,
820, 821, 823, 831, 816, 832, 897, 833, 593, 593,
593, 593, 593, 593, 593, 593, 593, 593, 593, 593,
287, 519, 283, 515, 229, 446, 589, 589, 589, 589,
589, 589, 589, 596, 596, 596, 596, 596, 596, 596,
596, 596, 596, 596, 596, 596, 596, 596, 596, 596,
596, 486, 845, 586, 586, 586, 526, 870, 870, 870,
870, 870, 870, 870, 870, 870, 870, 870, 870, 870,
870, 870, 870, 870, 870, 870, 870, 870, 870, 870,
870, 870, 870, 870, 870, 870, 870, 870, 870, 870,
870, 870, 870, 870, 870, 870, 870, 870, 870, 870,
478, 428, -21, -21, 417, 557, 338, 657, 222, 576,
214, 25, 25, 25, 25, 25, 149, 16, 4, 4,
4, 4, 152, 315, 315, 315, 315, 120, 120, 120,
120, 245, 245, 414, 248, 248, 271, 319, 288, 288,
288, 288, 288, 288, 288, 288, 288, 288, 179, 563,
563, 626, 626, 253, 153, 153, 153, 153, 686, 538,
538, 291, 297, 297, 297, 568, 673, 898, 365, 365,
365, 365, 365, 365, 533, 533, 533, 167, 167, 167,
690, 471, 387, 471, 387, 668, 665, 495, 665, 679,
201, 522, 793, 492, 699, 814, 701, 815, 599, 717,
61, 869, 677, 249, 869, 632, 646, 612, 249, 249,
702, 336, 855, 164, 117, 585, 546, 638, 773, 345,
664, 776, 219, 367, 308, 572, 383, 413, 707, 777,
882, 883, 399, 711, 638, 638, 638, 381, 298, 383,
-8, 629, 629, 629, 629, 48, 629, 629, 629, 629,
235, 180, 379, 458, 774, 683, 683, 692, 620, 837,
794, 794, 683, 689, 683, 692, 620, 839, 839, 839,
839, 683, 620, 683, 683, 683, 794, 794, 620, 645,
794, 38, 620, 658, 666, 666, 839, 722, 724, 683,
683, 703, 794, 794, 794, 703, 620, 839, 670, 713,
182, 794, 839, 587, 689, 587, 683, 670, 620, 587,
689, 689, 587, 20, 553, 619, 838, 840, 862, 780,
659, 660, 844, 847, 841, 843, 834, 639, 725, 729,
363, 644, 648, 667, 680, 704, 682, 675, 677, 631,
631, 631, 669, 705, 669, 631, 631, 631, 631, 631,
631, 631, 631, 829, 663, 715, 709, 678, 731, 466,
477, 781, 672, 797, 876, 867, 661, 708, 855, 874,
669, 860, 712, 67, 483, 856, 796, 693, 669, 857,
669, 782, 669, 877, 799, 688, 800, 801, 631, 878,
885, 886, 887, 888, 889, 890, 891, 892, 687, 893,
733, 691, 868, 204, 842, 702, 710, 696, 779, 735,
802, 226, 894, 803, 669, 669, 784, 674, 669, 785,
736, 720, 864, 738, 871, 895, 672, 697, 872, 669,
700, 804, 896, 226, 628, 685, 662, 681, 741, 863,
879, 859, 786, 534, 547, 805, 806, 807, 637, 746,
865, 866, 775, 753, 787, 559, 788, 676, 808, 789,
858, 754, 809, 810, 875, 694, 714, 671, 695, 684,
790, 811, 873, 757, 758, 760, 812, 761, 813, 0,
0, 226, 306, 385, 464, 285, 246, 246, 786, -2,
-2, 146, -2, -2, -2, 649, 723, 760, 723, 575,
686, 612, 612, 612, 175, 153, 153, 153, 174, 890,
319, 62, 450, 463, 557, 609, 636, 496, 496, 496,
496, 136, 136, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 195, 75, 777, 517, 147,
778, 779, 780, 886, 727, 887, 832, 833, 682, 836,
837, 838, 839, 840, 831, 841, 907, 842, 591, 591,
591, 591, 591, 591, 591, 591, 591, 591, 591, 591,
483, 573, 365, 209, 281, 407, 646, 646, 646, 646,
646, 646, 646, 327, 327, 327, 327, 327, 327, 327,
327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
327, 429, 834, 585, 585, 585, 563, 867, 867, 867,
867, 867, 867, 867, 867, 867, 867, 867, 867, 867,
867, 867, 867, 867, 867, 867, 867, 867, 867, 867,
867, 867, 867, 867, 867, 867, 867, 867, 867, 867,
867, 867, 867, 867, 867, 867, 867, 867, 867, 867,
495, 486, -21, -21, 415, 668, 335, 619, 222, 511,
213, 25, 25, 25, 25, 25, 148, 16, 4, 4,
4, 4, 151, 312, 312, 312, 312, 119, 119, 119,
119, 346, 346, 123, 245, 245, 349, 400, 297, 297,
297, 297, 297, 297, 297, 297, 297, 297, 111, 558,
558, 561, 561, 310, 152, 152, 152, 152, 704, 273,
273, 129, 371, 371, 371, 373, 734, 797, 376, 376,
376, 376, 376, 376, 468, 468, 468, 480, 480, 480,
702, 587, 454, 587, 454, 684, 748, 509, 748, 700,
199, 515, 803, 398, 720, 829, 729, 830, 601, 747,
235, 782, 724, 419, 782, 633, 637, 634, 419, 419,
715, 98, 863, 292, 195, 595, 405, 667, 781, 421,
732, 784, 363, 445, 411, 593, 328, 286, 744, 785,
888, 889, 181, 739, 667, 667, 667, 139, 362, 328,
-8, 613, 613, 613, 613, 48, 613, 613, 613, 613,
314, 230, 506, 404, 783, 703, 703, 712, 694, 852,
696, 696, 703, 711, 703, 712, 694, 854, 854, 854,
854, 703, 694, 703, 703, 703, 696, 696, 694, 709,
696, 38, 694, 695, 707, 707, 854, 751, 752, 703,
703, 728, 696, 696, 696, 728, 694, 854, 685, 746,
234, 696, 854, 665, 711, 665, 703, 685, 694, 665,
711, 711, 665, 21, 662, 664, 853, 855, 869, 792,
681, 716, 861, 862, 856, 860, 844, 679, 753, 754,
569, 669, 671, 673, 699, 740, 701, 735, 724, 692,
692, 692, 713, 741, 713, 692, 692, 692, 692, 692,
692, 692, 692, 893, 689, 745, 736, 710, 755, 589,
600, 793, 731, 738, 882, 875, 891, 892, 863, 880,
713, 894, 697, 180, 650, 864, 693, 788, 713, 865,
713, 794, 713, 883, 804, 708, 805, 806, 692, 884,
895, 896, 897, 898, 899, 900, 901, 902, 706, 903,
756, 698, 876, 339, 859, 715, 742, 725, 791, 759,
807, 342, 904, 808, 713, 713, 795, 787, 713, 796,
764, 750, 872, 766, 877, 905, 731, 726, 878, 713,
730, 809, 906, 342, 672, 705, 737, 721, 767, 870,
885, 868, 798, 655, 659, 810, 812, 820, 674, 769,
873, 874, 871, 771, 799, 670, 800, 719, 821, 801,
866, 772, 822, 823, 881, 718, 743, 717, 722, 714,
802, 824, 879, 773, 774, 775, 827, 776, 828, 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, 137,
137, 137, 137, -2, -2, -2, -2, 0, 0, -2,
0, 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, 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, 593, 593, 593, 593, 593, 593, 593,
593, 593, 593, 593, 593, 593, 593, 593, 593, 593,
593, 593, 593, 593, 593, 593, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 593, -21,
-21, -21, -21, 593, -21, -21, -21, -21, -21, -21,
-21, 593, 593, 593, 593, 593, 593, 593, 593, 593,
593, 593, 593, 593, 593, 593, 593, 593, 593, -21,
365, 593, 593, 593, -21, 365, 365, 365, 365, 365,
365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
365, 365, 365, 365, 365, 365, 365, 365, 365, 365,
365, 365, 365, 365, 365, 365, 365, 365, -21, 593,
0, 0, 593, -21, 593, -21, 593, -21, 593, 593,
593, 593, 593, 593, -21, -21, -21, -21, -21, -21,
0, 533, 533, 533, 533, -21, -21, -21, -21, 365,
365, -38, 365, 365, 365, 365, 365, 365, 365, 365,
365, 365, 365, 365, 365, 365, 365, 533, 533, 167,
167, 365, 365, 365, 365, 365, -38, 365, 365, 249,
689, 689, 689, 387, 387, 387, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 387, 249,
0, 249, 0, 365, 249, 689, 249, 387, 689, 689,
249, 794, 603, 603, 603, 603, 226, 383, 0, 689,
689, 0, 689, 0, 0, 0, 0, 0, 794, 0,
683, 0, 0, 0, 0, 631, 67, 0, 696, 273,
0, 0, 0, 0, 0, 0, 696, 273, 302, 302,
0, 687, 631, 631, 631, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 136,
136, 136, 136, -2, -2, -2, -2, 0, 0, -2,
0, 0, 0, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 0,
0, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
136, 136, 136, 591, 591, 591, 591, 591, 591, 591,
591, 591, 591, 591, 591, 591, 591, 591, 591, 591,
591, 591, 591, 591, 591, 591, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 591, -21,
-21, -21, -21, 591, -21, -21, -21, -21, -21, -21,
-21, 591, 591, 591, 591, 591, 591, 591, 591, 591,
591, 591, 591, 591, 591, 591, 591, 591, 591, -21,
376, 591, 591, 591, -21, 376, 376, 376, 376, 376,
376, 376, 376, 376, 376, 376, 376, 376, 376, 376,
376, 376, 376, 376, 376, 376, 376, 376, 376, 376,
376, 376, 376, 376, 376, 376, 376, 376, 376, 376,
376, 376, 376, 376, 376, 376, 376, 376, -21, 591,
0, 0, 591, -21, 591, -21, 591, -21, 591, 591,
591, 591, 591, 591, -21, -21, -21, -21, -21, -21,
0, 468, 468, 468, 468, -21, -21, -21, -21, 376,
376, -37, 376, 376, 376, 376, 376, 376, 376, 376,
376, 376, 376, 376, 376, 376, 376, 468, 468, 480,
480, 376, 376, 376, 376, 376, -37, 376, 376, 419,
711, 711, 711, 454, 454, 454, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 454, 419,
0, 419, 0, 376, 419, 711, 419, 454, 711, 711,
419, 696, 618, 618, 618, 618, 342, 328, 0, 711,
711, 0, 711, 0, 0, 0, 0, 0, 696, 0,
703, 0, 0, 0, 0, 692, 180, 0, 725, 427,
0, 0, 0, 0, 0, 0, 725, 427, 435, 435,
0, 706, 692, 692, 692, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 226
0, 0, 342
);
protected $actionDefault = array(
@ -575,15 +575,15 @@ class Php5 extends \PhpParser\ParserAbstract
32767,32767,32767,32767,32767, 534, 534, 489,32767,32767,
32767,32767,32767,32767,32767,32767,32767, 293, 293, 293,
32767,32767,32767, 522, 522, 522, 522, 522, 522, 522,
522, 522, 522, 522,32767,32767,32767,32767,32767, 376,
522, 522, 522, 522,32767,32767,32767,32767,32767,32767,
376,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767, 382, 539,32767,
32767,32767,32767,32767,32767,32767,32767,32767, 382, 539,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767, 357, 358,
360, 361, 292, 542, 523, 241, 383, 538, 291, 243,
@ -639,12 +639,12 @@ class Php5 extends \PhpParser\ParserAbstract
);
protected $goto = array(
165, 138, 138, 138, 165, 143, 146, 139, 140, 141,
165, 139, 139, 139, 165, 143, 146, 140, 141, 142,
148, 186, 167, 162, 162, 162, 162, 143, 143, 164,
164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
158, 159, 160, 161, 183, 137, 184, 489, 490, 367,
491, 495, 496, 497, 498, 499, 500, 501, 502, 959,
142, 163, 144, 145, 147, 170, 175, 185, 203, 251,
137, 158, 159, 160, 161, 183, 138, 184, 489, 490,
367, 491, 495, 496, 497, 498, 499, 500, 501, 502,
959, 163, 144, 145, 147, 170, 175, 185, 203, 251,
254, 256, 258, 260, 261, 262, 263, 264, 265, 273,
274, 275, 276, 299, 300, 324, 325, 326, 384, 385,
386, 538, 187, 188, 189, 190, 191, 192, 193, 194,

File diff suppressed because it is too large Load Diff

View File

@ -6,97 +6,97 @@ namespace PhpParser\Parser;
final class Tokens
{
const YYERRTOK = 256;
const T_INCLUDE = 257;
const T_INCLUDE_ONCE = 258;
const T_EVAL = 259;
const T_REQUIRE = 260;
const T_REQUIRE_ONCE = 261;
const T_LOGICAL_OR = 262;
const T_LOGICAL_XOR = 263;
const T_LOGICAL_AND = 264;
const T_PRINT = 265;
const T_YIELD = 266;
const T_DOUBLE_ARROW = 267;
const T_YIELD_FROM = 268;
const T_PLUS_EQUAL = 269;
const T_MINUS_EQUAL = 270;
const T_MUL_EQUAL = 271;
const T_DIV_EQUAL = 272;
const T_CONCAT_EQUAL = 273;
const T_MOD_EQUAL = 274;
const T_AND_EQUAL = 275;
const T_OR_EQUAL = 276;
const T_XOR_EQUAL = 277;
const T_SL_EQUAL = 278;
const T_SR_EQUAL = 279;
const T_POW_EQUAL = 280;
const T_COALESCE_EQUAL = 281;
const T_COALESCE = 282;
const T_BOOLEAN_OR = 283;
const T_BOOLEAN_AND = 284;
const T_IS_EQUAL = 285;
const T_IS_NOT_EQUAL = 286;
const T_IS_IDENTICAL = 287;
const T_IS_NOT_IDENTICAL = 288;
const T_SPACESHIP = 289;
const T_IS_SMALLER_OR_EQUAL = 290;
const T_IS_GREATER_OR_EQUAL = 291;
const T_SL = 292;
const T_SR = 293;
const T_INSTANCEOF = 294;
const T_INC = 295;
const T_DEC = 296;
const T_INT_CAST = 297;
const T_DOUBLE_CAST = 298;
const T_STRING_CAST = 299;
const T_ARRAY_CAST = 300;
const T_OBJECT_CAST = 301;
const T_BOOL_CAST = 302;
const T_UNSET_CAST = 303;
const T_POW = 304;
const T_NEW = 305;
const T_CLONE = 306;
const T_EXIT = 307;
const T_IF = 308;
const T_ELSEIF = 309;
const T_ELSE = 310;
const T_ENDIF = 311;
const T_LNUMBER = 312;
const T_DNUMBER = 313;
const T_STRING = 314;
const T_STRING_VARNAME = 315;
const T_VARIABLE = 316;
const T_NUM_STRING = 317;
const T_INLINE_HTML = 318;
const T_ENCAPSED_AND_WHITESPACE = 319;
const T_CONSTANT_ENCAPSED_STRING = 320;
const T_ECHO = 321;
const T_DO = 322;
const T_WHILE = 323;
const T_ENDWHILE = 324;
const T_FOR = 325;
const T_ENDFOR = 326;
const T_FOREACH = 327;
const T_ENDFOREACH = 328;
const T_DECLARE = 329;
const T_ENDDECLARE = 330;
const T_AS = 331;
const T_SWITCH = 332;
const T_MATCH = 333;
const T_ENDSWITCH = 334;
const T_CASE = 335;
const T_DEFAULT = 336;
const T_BREAK = 337;
const T_CONTINUE = 338;
const T_GOTO = 339;
const T_FUNCTION = 340;
const T_FN = 341;
const T_CONST = 342;
const T_RETURN = 343;
const T_TRY = 344;
const T_CATCH = 345;
const T_FINALLY = 346;
const T_THROW = 347;
const T_THROW = 257;
const T_INCLUDE = 258;
const T_INCLUDE_ONCE = 259;
const T_EVAL = 260;
const T_REQUIRE = 261;
const T_REQUIRE_ONCE = 262;
const T_LOGICAL_OR = 263;
const T_LOGICAL_XOR = 264;
const T_LOGICAL_AND = 265;
const T_PRINT = 266;
const T_YIELD = 267;
const T_DOUBLE_ARROW = 268;
const T_YIELD_FROM = 269;
const T_PLUS_EQUAL = 270;
const T_MINUS_EQUAL = 271;
const T_MUL_EQUAL = 272;
const T_DIV_EQUAL = 273;
const T_CONCAT_EQUAL = 274;
const T_MOD_EQUAL = 275;
const T_AND_EQUAL = 276;
const T_OR_EQUAL = 277;
const T_XOR_EQUAL = 278;
const T_SL_EQUAL = 279;
const T_SR_EQUAL = 280;
const T_POW_EQUAL = 281;
const T_COALESCE_EQUAL = 282;
const T_COALESCE = 283;
const T_BOOLEAN_OR = 284;
const T_BOOLEAN_AND = 285;
const T_IS_EQUAL = 286;
const T_IS_NOT_EQUAL = 287;
const T_IS_IDENTICAL = 288;
const T_IS_NOT_IDENTICAL = 289;
const T_SPACESHIP = 290;
const T_IS_SMALLER_OR_EQUAL = 291;
const T_IS_GREATER_OR_EQUAL = 292;
const T_SL = 293;
const T_SR = 294;
const T_INSTANCEOF = 295;
const T_INC = 296;
const T_DEC = 297;
const T_INT_CAST = 298;
const T_DOUBLE_CAST = 299;
const T_STRING_CAST = 300;
const T_ARRAY_CAST = 301;
const T_OBJECT_CAST = 302;
const T_BOOL_CAST = 303;
const T_UNSET_CAST = 304;
const T_POW = 305;
const T_NEW = 306;
const T_CLONE = 307;
const T_EXIT = 308;
const T_IF = 309;
const T_ELSEIF = 310;
const T_ELSE = 311;
const T_ENDIF = 312;
const T_LNUMBER = 313;
const T_DNUMBER = 314;
const T_STRING = 315;
const T_STRING_VARNAME = 316;
const T_VARIABLE = 317;
const T_NUM_STRING = 318;
const T_INLINE_HTML = 319;
const T_ENCAPSED_AND_WHITESPACE = 320;
const T_CONSTANT_ENCAPSED_STRING = 321;
const T_ECHO = 322;
const T_DO = 323;
const T_WHILE = 324;
const T_ENDWHILE = 325;
const T_FOR = 326;
const T_ENDFOR = 327;
const T_FOREACH = 328;
const T_ENDFOREACH = 329;
const T_DECLARE = 330;
const T_ENDDECLARE = 331;
const T_AS = 332;
const T_SWITCH = 333;
const T_MATCH = 334;
const T_ENDSWITCH = 335;
const T_CASE = 336;
const T_DEFAULT = 337;
const T_BREAK = 338;
const T_CONTINUE = 339;
const T_GOTO = 340;
const T_FUNCTION = 341;
const T_FN = 342;
const T_CONST = 343;
const T_RETURN = 344;
const T_TRY = 345;
const T_CATCH = 346;
const T_FINALLY = 347;
const T_USE = 348;
const T_INSTEADOF = 349;
const T_GLOBAL = 350;

View File

@ -656,6 +656,10 @@ class Standard extends PrettyPrinterAbstract
. (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : '');
}
protected function pExpr_Throw(Expr\Throw_ $node) {
return 'throw ' . $this->p($node->expr);
}
protected function pExpr_Yield(Expr\Yield_ $node) {
if ($node->value === null) {
return 'yield';

View File

@ -0,0 +1,48 @@
Throw expression
-----
<?php
test(throw $x);
$a ?? throw new Exception;
-----
!!php7
array(
0: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
parts: array(
0: test
)
)
args: array(
0: Arg(
name: null
value: Expr_Throw(
expr: Expr_Variable(
name: x
)
)
byRef: false
unpack: false
)
)
)
)
1: Stmt_Expression(
expr: Expr_BinaryOp_Coalesce(
left: Expr_Variable(
name: a
)
right: Expr_Throw(
expr: Expr_New(
class: Name(
parts: array(
0: Exception
)
)
args: array(
)
)
)
)
)
)

View File

@ -0,0 +1,9 @@
Throw expression
-----
<?php
test(throw $x);
$a ?? throw new Exception;
-----
!!php7
test(throw $x);
$a ?? throw new Exception();