Skip to content

Commit 2d19989

Browse files
committed
[PHP 8.0] Support trailing comma in closure use list
RFC: https://wiki.php.net/rfc/trailing_comma_in_closure_use_list
1 parent 739b4b4 commit 2d19989

File tree

5 files changed

+122
-144
lines changed

5 files changed

+122
-144
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Version 4.7.0-dev
66
* Add `ParentConnectingVisitor` and `NodeConnectingVisitor` classes.
77
* [PHP 8.0] Added support for match expressions. These are represented using a new `Expr\Match_`
88
containing `MatchArm`s.
9+
* [PHP 8.0] Added support for trailing comma in closure use lists.
910

1011
### Fixed
1112

grammar/php7.y

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,7 @@ lexical_vars:
801801
;
802802

803803
lexical_var_list:
804-
non_empty_lexical_var_list no_comma { $$ = $1; }
804+
non_empty_lexical_var_list optional_comma { $$ = $1; }
805805
;
806806

807807
non_empty_lexical_var_list:

lib/PhpParser/Parser/Php7.php

Lines changed: 84 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -330,10 +330,10 @@ class Php7 extends \PhpParser\ParserAbstract
330330
1111, 278, 66, 279, 1080, 312, 298, 361, 786, 591,
331331
363, -445, 1081, 442, -243, -242, 14, 15, 16, 17,
332332
19, 336, 410, 412, 418, -475, 420, 421, 428, 582,
333-
1060, 1009, 1078, 888, 1040, 1048, -247, -95, -93, -475,
334-
13, 18, 786, 591, 22, 263, -475, 335, 509, 0,
335-
513, 534, 445, 446, 584, 1070, 1071, 1072, 1073, 1067,
336-
1068, 1013, 1055, 1010, 1130, 0, 1026, 1074, 1069, 1077,
333+
1060, 1009, 1078, 888, 1040, 1048, -247, -95, 13, -475,
334+
18, 22, 786, 591, 263, 335, -475, 509, 513, 0,
335+
534, 584, 445, 446, 1013, 1070, 1071, 1072, 1073, 1067,
336+
1068, 1055, 1010, 1130, 0, 1026, 0, 1074, 1069, 1077,
337337
1102, 1118, 1151, 546, 69, 0, 0, 0, 273, 285
338338
);
339339

@@ -435,7 +435,7 @@ class Php7 extends \PhpParser\ParserAbstract
435435
155, 155, 155, 155, 155, 115, 155, 155, 155, 145,
436436
155, 155, 151, 152, 155, 155, 152, 155, 155, -1,
437437
155, 155, 132, 133, 155, 135, 136, 137, 138, 139,
438-
140, 155, 155, 155, 155, -1, 156, 147, 148, 157,
438+
140, 155, 155, 155, -1, 156, -1, 147, 148, 157,
439439
157, 157, 157, 157, 154, -1, -1, -1, 158, 159
440440
);
441441

@@ -455,9 +455,9 @@ class Php7 extends \PhpParser\ParserAbstract
455455
384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
456456
384, 384, 384, 384, 384, 384, 384, 384, 384, 384,
457457
384, 384, 384, 384, 384, 384, 332, 332, 214, 167,
458-
519, 800, 816, 803, 817, 796, 795, 802, 805, 818,
459-
689, 690, 544, 694, 695, 697, 698, 806, 826, 799,
460-
809, 567, 567, 567, 567, 567, 567, 567, 567, 567,
458+
519, 799, 809, 802, 816, 795, 793, 800, 803, 817,
459+
689, 690, 544, 694, 695, 697, 698, 805, 826, 796,
460+
806, 567, 567, 567, 567, 567, 567, 567, 567, 567,
461461
567, 567, 567, 567, 567, 567, 567, 567, 567, 567,
462462
150, 162, 19, 156, 156, 156, 156, 156, 156, 156,
463463
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
@@ -470,9 +470,9 @@ class Php7 extends \PhpParser\ParserAbstract
470470
526, 526, 526, 292, 791, 791, 791, 791, 791, 791,
471471
292, 526, 526, 430, 792, 128, -5, 88, 286, 286,
472472
288, 286, 286, 286, 409, 409, 409, 414, 356, 315,
473-
552, 356, 612, 641, 819, 530, 687, 553, 688, 296,
473+
552, 356, 612, 641, 818, 530, 687, 553, 688, 296,
474474
306, 571, 342, 573, 342, 342, 342, 416, 415, 420,
475-
548, 793, 332, 554, 332, 332, 332, 332, 747, 332,
475+
548, 792, 332, 554, 332, 332, 332, 332, 747, 332,
476476
332, 332, 332, 332, 332, 229, 332, 396, 214, 217,
477477
45, 217, 217, 414, 523, 308, 636, 243, 523, 523,
478478
523, 638, 639, 26, -8, 640, 231, 406, 506, 506,
@@ -488,7 +488,7 @@ class Php7 extends \PhpParser\ParserAbstract
488488
536, 555, 531, 705, 568, 512, 512, 512, 701, 512,
489489
512, 512, 512, 512, 512, 512, 512, 524, 822, 560,
490490
501, 751, 539, 528, 550, 540, 619, 521, 570, 570,
491-
645, 765, 820, 509, 747, 785, 741, 498, 542, 775,
491+
645, 765, 819, 509, 747, 785, 741, 498, 542, 775,
492492
752, 611, 557, 564, 753, 757, 776, 786, 620, 787,
493493
646, 515, 650, 570, 652, 512, 692, 658, 823, 703,
494494
524, 824, 771, 572, 777, 778, 566, 653, 516, 825,
@@ -583,7 +583,7 @@ class Php7 extends \PhpParser\ParserAbstract
583583
180, 92, 195,32767, 193, 193, 92,32767, 94, 94,
584584
32767, 94, 197,32767, 493, 197, 94, 92, 217, 217,
585585
422, 180, 267, 94, 94, 94, 267, 182, 267, 94,
586-
422, 267, 180, 267, 92, 92,32767, 92, 267,32767,
586+
422, 267, 180, 267, 92, 92,32767, 94, 267,32767,
587587
32767,32767, 86,32767,32767,32767,32767,32767,32767,32767,
588588
32767,32767,32767,32767,32767,32767,32767,32767, 433,32767,
589589
462,32767, 479, 491,32767, 374, 375, 377, 477, 399,
@@ -618,44 +618,44 @@ class Php7 extends \PhpParser\ParserAbstract
618618
204, 205, 206, 207, 208, 209, 210, 211, 163, 212,
619619
164, 180, 181, 182, 216, 183, 165, 166, 167, 184,
620620
180, 168, 217, 148, 185, 213, 169, 186, 214, 187,
621-
188, 170, 189, 578, 473, 587, 781, 354, 554, 776,
622-
306, 777, 347, 288, 289, 291, 502, 292, 353, 293,
623-
356, 536, 507, 339, 1034, 341, 803, 1035, 559, 280,
624-
342, 478, 478, 478, 256, 302, 478, 524, 551, 467,
625-
467, 467, 467, 875, 880, 881, 526, 526, 493, 510,
621+
188, 170, 189, 578, 473, 587, 781, 354, 554, 524,
622+
551, 306, 347, 288, 289, 291, 502, 292, 353, 293,
623+
356, 536, 507, 714, 467, 467, 467, 467, 399, 399,
624+
280, 478, 478, 478, 510, 256, 478, 339, 399, 341,
625+
1145, 1145, 559, 776, 342, 777, 526, 526, 493, 302,
626626
478, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079,
627-
1079, 1097, 1097, 815, 337, 586, 1097, 1097, 1097, 1097,
628-
1097, 1097, 1097, 1097, 1097, 1097, 1095, 1095, 504, 714,
629-
520, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
627+
1079, 1097, 1097, 1121, 1122, 1145, 1097, 1097, 1097, 1097,
628+
1097, 1097, 1097, 1097, 1097, 1097, 1095, 1095, 875, 880,
629+
881, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
630630
1095, 506, 922, 590, 715, 478, 478, 572, 920, 1045,
631631
750, 492, 516, 478, 478, 478, 741, 326, 330, 485,
632632
508, 511, 533, 702, 458, 458, 547, 548, 479, 458,
633633
458, 458, 458, 458, 458, 458, 458, 458, 458, 491,
634-
503, 1121, 1122, 823, 611, 535, 537, 399, 399, 552,
635-
571, 574, 858, 581, 589, 854, 929, 399, 499, 930,
636-
741, 304, 741, 713, 515, 529, 531, 532, 583, 1046,
637-
3, 4, 717, 1134, 847, 821, 821, 819, 821, 610,
638-
890, 470, 856, 851, 844, 324, 469, 469, 497, 1047,
639-
1105, 722, 1004, 772, 767, 768, 782, 553, 723, 769,
640-
720, 770, 771, 721, 885, 775, 1120, 732, 732, 817,
641-
817, 817, 817, 742, 742, 742, 744, 731, 362, 311,
642-
866, 811, 818, 307, 308, 544, 1145, 1145, 737, 334,
643-
303, 745, 733, 894, 734, 895, 898, 328, 471, 615,
644-
558, 826, 1042, 1160, 484, 861, 861, 1037, 899, 494,
645-
495, 1145, 816, 1049, 1049, 746, 828, 475, 877, 877,
646-
877, 939, 1126, 1126, 523, 405, 877, 877, 877, 937,
647-
749, 417, 1041, 1117, 1117, 423, 1049, 1049, 1049, 1049,
648-
1107, 0, 11, 0, 1128, 1128, 0, 0, 1049, 1049,
649-
0, 1144, 1144, 0, 0, 944, 0, 521, 0, 0,
650-
570, 0, 863, 0, 0, 789, 0, 0, 790, 736,
651-
557, 842, 1113, 0, 0, 730, 1144, 0, 0, 0,
634+
503, 815, 337, 586, 611, 535, 537, 1160, 823, 552,
635+
571, 574, 858, 581, 589, 854, 1034, 499, 803, 1035,
636+
741, 475, 741, 713, 515, 529, 531, 532, 583, 1046,
637+
929, 304, 717, 930, 847, 821, 821, 819, 821, 610,
638+
1134, 470, 856, 851, 1107, 890, 469, 469, 844, 1047,
639+
1105, 722, 324, 772, 767, 768, 782, 553, 723, 769,
640+
720, 770, 771, 721, 570, 775, 497, 732, 732, 817,
641+
817, 817, 817, 742, 742, 742, 744, 731, 745, 733,
642+
894, 811, 818, 898, 307, 308, 1004, 944, 826, 521,
643+
861, 861, 885, 504, 863, 520, 475, 328, 471, 816,
644+
362, 736, 557, 842, 484, 3, 4, 730, 1120, 494,
645+
495, 311, 866, 1049, 1049, 1041, 937, 749, 877, 877,
646+
877, 544, 1126, 1126, 303, 737, 877, 877, 877, 1144,
647+
1144, 417, 334, 1117, 1117, 734, 1049, 1049, 1049, 1049,
648+
895, 615, 11, 558, 1128, 1128, 1042, 1037, 1049, 1049,
649+
1044, 746, 828, 899, 1144, 405, 939, 523, 423, 0,
650+
0, 0, 0, 0, 0, 789, 0, 0, 790, 0,
651+
0, 0, 1113, 0, 1147, 0, 0, 0, 0, 0,
652652
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
653-
0, 0, 475, 490, 0, 0, 1147, 0, 0, 897,
653+
0, 0, 0, 490, 0, 0, 0, 0, 0, 897,
654654
0, 1115, 1115, 897, 0, 0, 0, 0, 0, 0,
655655
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
656656
0, 0, 0, 0, 0, 472, 488, 0, 0, 0,
657657
0, 0, 0, 0, 0, 0, 472, 0, 488, 0,
658-
0, 327, 0, 0, 476, 392, 1044, 394, 0, 0,
658+
0, 327, 0, 0, 476, 392, 0, 394, 0, 0,
659659
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
660660
0, 0, 740, 0, 0, 1152
661661
);
@@ -673,65 +673,65 @@ class Php7 extends \PhpParser\ParserAbstract
673673
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
674674
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
675675
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
676-
33, 33, 33, 63, 10, 8, 13, 56, 56, 55,
677-
81, 55, 56, 56, 56, 56, 56, 56, 56, 56,
678-
56, 56, 105, 70, 68, 70, 68, 68, 70, 142,
679-
70, 10, 10, 10, 142, 70, 10, 46, 46, 91,
680-
91, 91, 91, 98, 98, 98, 92, 92, 10, 91,
676+
33, 33, 33, 63, 10, 8, 13, 56, 56, 46,
677+
46, 81, 56, 56, 56, 56, 56, 56, 56, 56,
678+
56, 56, 105, 17, 91, 91, 91, 91, 124, 124,
679+
142, 10, 10, 10, 91, 142, 10, 70, 124, 70,
680+
156, 156, 70, 55, 70, 55, 92, 92, 10, 70,
681681
10, 92, 92, 92, 92, 92, 92, 92, 92, 92,
682-
92, 143, 143, 77, 77, 77, 143, 143, 143, 143,
683-
143, 143, 143, 143, 143, 143, 144, 144, 2, 17,
684-
2, 144, 144, 144, 144, 144, 144, 144, 144, 144,
682+
92, 143, 143, 151, 151, 156, 143, 143, 143, 143,
683+
143, 143, 143, 143, 143, 143, 144, 144, 98, 98,
684+
98, 144, 144, 144, 144, 144, 144, 144, 144, 144,
685685
144, 7, 7, 7, 18, 10, 10, 7, 7, 100,
686686
36, 10, 10, 10, 10, 10, 26, 49, 49, 49,
687687
49, 49, 74, 5, 146, 146, 74, 74, 10, 146,
688688
146, 146, 146, 146, 146, 146, 146, 146, 146, 39,
689-
10, 151, 151, 40, 39, 39, 39, 124, 124, 39,
690-
39, 39, 39, 39, 39, 39, 119, 124, 145, 119,
691-
26, 152, 26, 16, 69, 69, 69, 69, 69, 100,
692-
37, 37, 13, 154, 16, 16, 16, 16, 16, 16,
693-
102, 16, 16, 16, 87, 52, 76, 76, 88, 100,
694-
100, 13, 126, 13, 13, 13, 13, 54, 13, 13,
695-
13, 13, 13, 13, 97, 13, 149, 26, 26, 76,
696-
76, 76, 76, 26, 26, 26, 26, 26, 96, 20,
697-
94, 76, 76, 81, 81, 24, 156, 156, 30, 19,
698-
11, 14, 14, 14, 28, 104, 14, 66, 66, 83,
699-
23, 14, 135, 12, 66, 91, 91, 132, 107, 66,
700-
66, 156, 14, 63, 63, 32, 80, 12, 63, 63,
701-
63, 122, 8, 8, 73, 72, 63, 63, 63, 14,
702-
14, 66, 14, 105, 105, 130, 63, 63, 63, 63,
703-
12, -1, 66, -1, 105, 105, -1, -1, 63, 63,
704-
-1, 155, 155, -1, -1, 15, -1, 15, -1, -1,
705-
12, -1, 15, -1, -1, 63, -1, -1, 63, 15,
706-
15, 15, 105, -1, -1, 15, 155, -1, -1, -1,
689+
10, 77, 77, 77, 39, 39, 39, 12, 40, 39,
690+
39, 39, 39, 39, 39, 39, 68, 145, 68, 68,
691+
26, 12, 26, 16, 69, 69, 69, 69, 69, 100,
692+
119, 152, 13, 119, 16, 16, 16, 16, 16, 16,
693+
154, 16, 16, 16, 12, 102, 76, 76, 87, 100,
694+
100, 13, 52, 13, 13, 13, 13, 54, 13, 13,
695+
13, 13, 13, 13, 12, 13, 88, 26, 26, 76,
696+
76, 76, 76, 26, 26, 26, 26, 26, 14, 14,
697+
14, 76, 76, 14, 81, 81, 126, 15, 14, 15,
698+
91, 91, 97, 2, 15, 2, 12, 66, 66, 14,
699+
96, 15, 15, 15, 66, 37, 37, 15, 149, 66,
700+
66, 20, 94, 63, 63, 15, 14, 14, 63, 63,
701+
63, 24, 8, 8, 11, 30, 63, 63, 63, 155,
702+
155, 66, 19, 105, 105, 28, 63, 63, 63, 63,
703+
104, 83, 66, 23, 105, 105, 135, 132, 63, 63,
704+
12, 32, 80, 107, 155, 72, 122, 73, 130, -1,
705+
-1, -1, -1, -1, -1, 63, -1, -1, 63, -1,
706+
-1, -1, 105, -1, 155, -1, -1, -1, -1, -1,
707707
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
708-
-1, -1, 12, 8, -1, -1, 155, -1, -1, 105,
708+
-1, -1, -1, 8, -1, -1, -1, -1, -1, 105,
709709
-1, 105, 105, 105, -1, -1, -1, -1, -1, -1,
710710
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
711711
-1, -1, -1, -1, -1, 8, 8, -1, -1, -1,
712712
-1, -1, -1, -1, -1, -1, 8, -1, 8, -1,
713-
-1, 8, -1, -1, 8, 8, 12, 8, -1, -1,
713+
-1, 8, -1, -1, 8, 8, -1, 8, -1, -1,
714714
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
715715
-1, -1, 8, -1, -1, 8
716716
);
717717

718718
protected $gotoBase = array(
719-
0, 0, -395, 0, 0, 223, 0, 206, 115, 0,
720-
-143, 41, 70, -21, -45, 6, 271, 197, 212, 28,
721-
62, 0, 0, -9, 40, 0, -41, 0, 31, 0,
722-
42, 0, -6, -23, 0, 0, 211, -335, 0, -343,
723-
234, 0, 0, 0, 0, 0, 121, 0, 0, 186,
724-
0, 0, 257, 0, 86, 114, -93, 0, 0, 0,
725-
0, 0, 0, 117, 0, 0, -30, 0, -195, -1,
726-
-273, 0, -20, -31, -364, 0, 50, -87, 0, 0,
727-
-7, -279, 0, 11, 0, 0, 0, 264, 259, 0,
728-
0, 135, -54, 0, 46, 0, 75, 63, -96, 0,
729-
-104, 0, 262, 0, 29, 137, 0, -14, 0, 0,
730-
0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
731-
0, 0, -3, 0, 228, 0, 55, 0, 0, 0,
732-
-35, 0, -13, 0, 0, -11, 0, 0, 0, 0,
733-
0, 0, -119, -39, -24, 243, 14, 0, 0, 58,
734-
0, -63, 245, 0, 256, 146, 81, 0, 0
719+
0, 0, -250, 0, 0, 223, 0, 206, 115, 0,
720+
-143, 75, -26, -21, -58, -62, 271, 141, 212, 71,
721+
94, 0, 0, 34, 76, 0, -41, 0, 72, 0,
722+
79, 0, 30, -23, 0, 0, 211, -260, 0, -343,
723+
239, 0, 0, 0, 0, 0, 93, 0, 0, 186,
724+
0, 0, 264, 0, 86, 148, -93, 0, 0, 0,
725+
0, 0, 0, 117, 0, 0, -30, 0, -73, -1,
726+
-259, 0, 10, 2, -364, 0, 50, -19, 0, 0,
727+
29, -278, 0, 53, 0, 0, 0, 268, 277, 0,
728+
0, 120, -54, 0, 78, 0, 97, 91, -61, 0,
729+
-104, 0, 267, 0, 74, 137, 0, 31, 0, 0,
730+
0, 0, 0, 0, 0, 0, 0, 0, 0, 35,
731+
0, 0, 32, 0, 119, 0, 89, 0, 0, 0,
732+
-12, 0, 27, 0, 0, 33, 0, 0, 0, 0,
733+
0, 0, -118, -39, -24, 242, 14, 0, 0, 100,
734+
0, -131, 255, 0, 263, 124, -95, 0, 0
735735
);
736736

737737
protected $gotoDefault = array(

0 commit comments

Comments
 (0)