• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

nette / latte / 15809643126

22 Jun 2025 06:35PM UTC coverage: 93.67% (+0.09%) from 93.583%
15809643126

push

github

dg
added {include?} {import?} {embed?} {sandbox?}

34 of 36 new or added lines in 7 files covered. (94.44%)

164 existing lines in 43 files now uncovered.

5164 of 5513 relevant lines covered (93.67%)

0.94 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.79
/src/Latte/Compiler/TagParserData.php
1
<?php
2

3
/**
4
 * This file is part of the Latte (https://latte.nette.org)
5
 * Copyright (c) 2008 David Grudl (https://davidgrudl.com)
6
 */
7

8
declare(strict_types=1);
9

10
namespace Latte\Compiler;
11

12
use Latte\Compiler\Nodes\Php as Node;
13
use Latte\Compiler\Nodes\Php\Expression;
14
use Latte\Compiler\Nodes\Php\Scalar;
15
use function array_pop, count, is_string, substr;
16

17

18
/** @internal generated trait used by TagParser */
19
abstract class TagParserData
20
{
21
        /** Symbol number of error recovery token */
22
        protected const ErrorSymbol = 1;
23

24
        /** Action number signifying default action */
25
        protected const DefaultAction = -8190;
26

27
        /** Rule number signifying that an unexpected token was encountered */
28
        protected const UnexpectedTokenRule = 8191;
29

30
        protected const Yy2Tblstate = 256;
31

32
        /** Number of non-leaf states */
33
        protected const NumNonLeafStates = 354;
34

35
        /** Map of lexer tokens to internal symbols */
36
        protected const TokenToSymbol = [
37
                0,     113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
38
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   48,    108,   113,   109,   47,    113,   113,
39
                102,   103,   45,    43,    2,     44,    39,    46,    113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   22,    106,
40
                35,    7,     37,    21,    59,    113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
41
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   61,    113,   107,   27,    113,   113,   100,   113,   113,
42
                113,   98,    101,   113,   113,   113,   113,   113,   113,   99,    113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
43
                113,   113,   113,   104,   26,    105,   50,    113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
44
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
45
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
46
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
47
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
48
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,
49
                113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   113,   1,     3,     4,     5,
50
                6,     8,     9,     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,    23,    24,    25,    28,    29,    30,
51
                31,    32,    33,    34,    36,    38,    40,    41,    42,    49,    51,    52,    53,    54,    55,    56,    57,    58,    60,    62,
52
                63,    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
53
                83,    84,    85,    86,    87,    88,    89,    90,    110,   91,    92,    93,    94,    111,   112,   95,    96,    97,
54
        ];
55

56
        /** Map of states to a displacement into the self::Action table. The corresponding action for this
57
         *  state/symbol pair is self::Action[self::ActionBase[$state] + $symbol]. If self::ActionBase[$state] is 0, the
58
         *  action is defaulted, i.e. self::ActionDefault[$state] should be used instead. */
59
        protected const ActionBase = [
60
                297,   326,   326,   326,   326,   99,    121,   326,   273,   177,   230,   326,   406,   406,   406,   406,   219,   219,   219,   219,
61
                295,   295,   267,   262,   401,   402,   403,   404,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,
62
                -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,
63
                -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,
64
                -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,
65
                -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   133,   165,   185,   416,   432,   427,   436,   460,   462,   459,   463,
66
                468,   52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    126,   182,   528,   213,   213,
67
                213,   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,   213,   549,   549,   549,   437,
68
                362,   204,   412,   38,    110,   110,   513,   513,   513,   513,   513,   447,   81,    81,    81,    81,    500,   500,   271,   271,
69
                271,   271,   271,   271,   271,   271,   271,   272,   135,   135,   454,   13,    275,   275,   275,   228,   228,   228,   228,   228,
70
                181,   108,   108,   108,   236,   355,   409,   276,   207,   207,   207,   207,   207,   207,   285,   469,   -21,   132,   132,   205,
71
                167,   167,   132,   378,   -13,   122,   -34,   208,   332,   221,   143,   158,   2,     405,   245,   252,   287,   142,   219,   269,
72
                269,   219,   219,   219,   411,   64,    64,    64,    147,   180,   39,    278,   445,   278,   278,   278,   42,    -74,   268,   352,
73
                344,   351,   268,   36,    76,    62,    354,   357,   352,   352,   98,    62,    62,    62,    283,   299,   277,   109,   65,    277,
74
                288,   288,   104,   28,    363,   360,   369,   342,   341,   408,   197,   234,   281,   280,   337,   198,   363,   360,   369,   259,
75
                6,     310,   282,   282,   282,   282,   282,   282,   282,   282,   282,   282,   197,   452,   33,    291,   374,   375,   17,    385,
76
                395,   286,   284,   453,   282,   263,   306,   260,   464,   331,   24,    197,   466,   270,   279,   274,   292,   384,   289,   467,
77
                397,   305,   398,   455,   130,   376,   134,   457,   140,   451,   253,   400,   450,   458,   0,     -43,   -43,   -43,   -43,   -43,
78
                -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,   -43,
79
                -43,   -43,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
80
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
81
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
82
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
83
                0,     0,     0,     52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    0,     0,     0,     0,     0,
84
                0,     0,     0,     0,     0,     0,     0,     0,     0,     52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,
85
                52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    0,     447,   52,    52,
86
                52,    52,    52,    52,    52,    0,     108,   108,   108,   108,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,
87
                -22,   108,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   -22,   0,     0,     0,     0,     0,     0,
88
                0,     378,   288,   288,   288,   288,   288,   288,   378,   378,   0,     0,     0,     0,     108,   108,   0,     0,     378,   288,
89
                0,     0,     0,     0,     0,     0,     0,     219,   219,   219,   378,   0,     0,     288,   288,   0,     0,     0,     268,   0,
90
                0,     0,     0,     0,     0,     282,   33,    282,   282,   282,
91
        ];
92

93
        /** Table of actions. Indexed according to self::ActionBase comment. */
94
        protected const Action = [
95
                34,    35,    -269,  32,    -269,  36,    -50,   37,    178,   179,   38,    39,    40,    41,    42,    43,    44,    -48,   1,     192,
96
                45,    557,   558,   204,   -47,   539,   381,   -222,  0,     555,   284,   522,   241,   242,   195,   7,     285,   286,   11,    -47,
97
                -220,  287,   288,   207,   537,   177,   539,   -222,  -222,  -222,  541,   540,   563,   561,   562,   54,    55,    56,    -8190, 29,
98
                -220,  -220,  -220,  416,   15,    223,   289,   21,    196,   -220,  197,   541,   540,   23,    566,   57,    58,    59,    101,   60,
99
                61,    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
100
                190,   194,   362,   363,   361,   -269,  233,   381,   418,   -269,  417,   383,   81,    -8190, -8190, -8190, -8191, -8191, -8191, -8191,
101
                72,    73,    74,    75,    362,   363,   361,   360,   359,   -8190, 379,   -8190, 380,   -8190, -8190, -8190, 105,   -8190, -8190, -8190,
102
                106,   372,   98,    -78,   12,    -78,   107,   289,   366,   360,   359,   76,    77,    78,    79,    80,    195,   194,   -267,  171,
103
                -267,  193,   46,    372,   13,    200,   338,   295,   81,    -78,   366,   17,    296,   368,   234,   235,   367,   373,   297,   298,
104
                362,   363,   361,   193,   46,    -8190, -8190, 200,   641,   295,   24,    19,    642,   -217,  296,   368,   234,   235,   367,   373,
105
                297,   298,   427,   -22,   95,    360,   359,   -8190, -8190, -8190, -8190, -8190, 25,    -217,  -217,  -217,  -8190, -8190, -8190, 372,
106
                -23,   -265,  -217,  -265,  427,   -8190, 366,   -8190, -8190, -8190, 418,   -8190, 417,   362,   363,   361,   206,   -184,  -52,   193,
107
                46,    96,    -223,  200,   14,    295,   -78,   360,   359,   -184,  296,   368,   234,   235,   367,   373,   297,   298,   360,   359,
108
                108,   -267,  -223,  -223,  -223,  -267,  31,    -17,   26,    30,    -183,  -183,  372,   379,   -16,   380,   362,   363,   361,   366,
109
                427,   18,    -183,  -183,  97,    104,   211,   212,   213,   208,   209,   210,   193,   46,    171,   240,   200,   -223,  295,   191,
110
                198,   360,   359,   296,   368,   234,   235,   367,   373,   297,   298,   99,    73,    74,    75,    372,   289,   -223,  -223,  -223,
111
                199,   27,    366,   418,   -265,  417,   -183,  194,   -265,  362,   363,   361,   1,     427,   321,   193,   46,    249,   -183,  200,
112
                381,   295,   81,    555,   381,   102,   296,   368,   234,   235,   367,   373,   297,   298,   360,   359,   288,   381,   -8190, 643,
113
                -8190, 345,   -252,  567,   100,   -8190, -8190, -8190, 372,   277,   -192,  163,   568,   49,    20,    366,   427,   50,    289,   223,
114
                289,   239,   274,   -8190, 289,   -8190, -8190, -8190, 193,   46,    391,   638,   200,   225,   295,   33,    258,   3,     176,   296,
115
                368,   234,   235,   367,   373,   297,   298,   -251,  -250,  362,   363,   361,   -226,  245,   246,   247,   -219,  47,    48,    16,
116
                82,    83,    84,    85,    86,    87,    88,    89,    90,    91,    92,    93,    94,    -225,  360,   359,   -219,  -219,  -219,  -224,
117
                -8190, -8190, -8190, 2,     4,     -219,  5,     381,   372,   630,   362,   363,   361,   6,     8,     366,   9,     -226,  -8190, 10,
118
                -8190, -8190, 28,    468,   470,   51,    22,    182,   193,   46,    -218,  52,    200,   -217,  295,   195,   188,   189,   238,   296,
119
                368,   234,   235,   367,   373,   297,   298,   276,   510,   372,   -218,  -218,  -218,  -217,  -217,  -217,  366,   100,   553,   -218,
120
                428,   446,   -217,  525,   531,   533,   535,   585,   -29,   365,   364,   -225,  53,    376,   505,   377,   -8190, -8190, -8190, 329,
121
                369,   368,   371,   370,   367,   373,   374,   375,   360,   359,   333,   -8190, -8190, -8190, -8190, 544,   -8190, -8190, -8190, 511,
122
                -8190, -8190, -8190, -8191, -8191, -8191, -8191, -8191, 610,   418,   103,   417,   -8190, -8190, -8190, 257,   353,   -29,   640,   552,
123
                392,   1,     639,   521,   341,   637,   249,   594,   608,   381,   -8190, 582,   555,   598,   633,   347,   0,     556,   0,     0,
124
                0,     0,     0,     0,     287,   288,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
125
                0,     0,     49,    0,     0,     0,     0,     0,     223,   289,
126
        ];
127

128
        /** Table indexed analogously to self::Action. If self::ActionCheck[self::ActionBase[$state] + $symbol] != $symbol
129
         *  then the action is defaulted, i.e. self::ActionDefault[$state] should be used instead. */
130
        protected const ActionCheck = [
131
                43,    44,    0,     77,    2,     48,    0,     50,    51,    52,    53,    54,    55,    56,    57,    58,    59,    0,     61,    62,
132
                63,    64,    65,    66,    0,     68,    69,    61,    0,     72,    73,    105,   75,    76,    21,    2,     79,    80,    2,     0,
133
                61,    84,    85,    86,    66,    6,     68,    81,    82,    83,    93,    94,    95,    96,    97,    3,     4,     5,     71,    102,
134
                81,    82,    83,    85,    2,     108,   109,   2,     26,    90,    28,    93,    94,    21,    87,    23,    24,    25,    2,     27,
135
                28,    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
136
                2,     49,    3,     4,     5,     103,   2,     69,    95,    107,   97,    2,     60,    3,     4,     5,     35,    36,    37,    38,
137
                39,    40,    41,    42,    3,     4,     5,     28,    29,    3,     66,    21,    68,    23,    24,    25,    6,     27,    28,    29,
138
                6,     42,    104,   0,     2,     2,     6,     109,   49,    28,    29,    43,    44,    45,    46,    47,    21,    49,    0,     26,
139
                2,     62,    63,    42,    22,    66,    44,    68,    60,    26,    49,    6,     73,    74,    75,    76,    77,    78,    79,    80,
140
                3,     4,     5,     62,    63,    3,     4,     66,    66,    68,    91,    6,     70,    61,    73,    74,    75,    76,    77,    78,
141
                79,    80,    103,   22,    7,     28,    29,    3,     4,     5,     43,    44,    91,    81,    82,    83,    3,     4,     5,     42,
142
                22,    0,     90,    2,     103,   21,    49,    23,    24,    25,    95,    27,    97,    3,     4,     5,     103,   90,    103,   62,
143
                63,    7,     61,    66,    102,   68,    103,   28,    29,    102,   73,    74,    75,    76,    77,    78,    79,    80,    28,    29,
144
                7,     103,   81,    82,    83,    107,   61,    22,    91,    61,    90,    90,    42,    66,    22,    68,    3,     4,     5,     49,
145
                103,   22,    102,   102,   22,    22,    81,    82,    83,    81,    82,    83,    62,    63,    26,    90,    66,    61,    68,    22,
146
                26,    28,    29,    73,    74,    75,    76,    77,    78,    79,    80,    104,   40,    41,    42,    42,    109,   81,    82,    83,
147
                28,    91,    49,    95,    103,   97,    90,    49,    107,   3,     4,     5,     61,    103,   67,    62,    63,    66,    102,   66,
148
                69,    68,    60,    72,    69,    61,    73,    74,    75,    76,    77,    78,    79,    80,    28,    29,    85,    69,    71,    70,
149
                85,    78,    102,   87,    91,    3,     4,     5,     42,    74,    90,    90,    87,    102,   104,   49,    103,   102,   109,   108,
150
                109,   90,    103,   21,    109,   23,    24,    25,    62,    63,    91,    105,   66,    61,    68,    98,    99,    100,   101,   73,
151
                74,    75,    76,    77,    78,    79,    80,    102,   102,   3,     4,     5,     102,   81,    82,    83,    61,    91,    92,    7,
152
                8,     9,     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,    102,   28,    29,    81,    82,    83,    102,
153
                3,     4,     5,     102,   102,   90,    102,   69,    42,    71,    3,     4,     5,     102,   102,   49,    102,   102,   21,    102,
154
                23,    24,    102,   51,    52,    102,   88,    89,    62,    63,    61,    102,   66,    61,    68,    21,    102,   102,   102,   73,
155
                74,    75,    76,    77,    78,    79,    80,    103,   103,   42,    81,    82,    83,    81,    82,    83,    49,    91,    103,   90,
156
                103,   103,   90,    103,   103,   103,   103,   103,   103,   62,    63,    102,   104,   66,    103,   68,    3,     4,     5,     103,
157
                73,    74,    75,    76,    77,    78,    79,    80,    28,    29,    103,   3,     4,     5,     21,    103,   23,    24,    25,    103,
158
                27,    28,    29,    30,    31,    32,    33,    34,    103,   95,    22,    97,    3,     4,     5,     104,   106,   103,   105,   107,
159
                105,   61,    105,   105,   105,   105,   66,    105,   105,   69,    21,    107,   72,    107,   107,   107,   -1,    108,   -1,    -1,
160
                -1,    -1,    -1,    -1,    84,    85,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
161
                -1,    -1,    102,   -1,    -1,    -1,    -1,    -1,    108,   109,
162
        ];
163

164
        /** Map of states to their default action */
165
        protected const ActionDefault = [
166
                8191,  263,   263,   31,    263,   8191,  8191,  263,   8191,  8191,  8191,  29,    8191,  8191,  8191,  29,    8191,  8191,  8191,  8191,
167
                39,    29,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  215,   215,   215,   8191,  8191,  8191,  8191,  8191,  8191,  8191,
168
                8191,  8191,  8191,  8191,  8191,  8191,  10,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
169
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
170
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
171
                8191,  29,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  264,   264,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
172
                8191,  1,     270,   271,   83,    77,    216,   266,   268,   79,    82,    80,    43,    44,    56,    120,   122,   154,   121,   96,
173
                101,   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,   94,    95,    166,   155,   153,   152,   118,
174
                119,   125,   93,    8191,  123,   124,   142,   143,   140,   141,   144,   8191,  145,   146,   147,   148,   8191,  8191,  8191,  8191,
175
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  126,   69,    69,    69,    8191,  8191,  11,    8191,  8191,  8191,  8191,  8191,  8191,
176
                206,   132,   133,   135,   206,   205,   150,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  211,   115,   117,   189,
177
                127,   128,   97,    8191,  8191,  8191,  210,   8191,  278,   217,   217,   217,   217,   34,    34,    34,    8191,  89,    34,    8191,
178
                8191,  34,    34,    34,    8191,  8191,  8191,  8191,  195,   223,   217,   138,   8191,  129,   130,   131,   57,    8191,  8191,  193,
179
                182,   8191,  2,     28,    28,    28,    8191,  236,   237,   238,   28,    28,    28,    28,    170,   36,    71,    28,    28,    71,
180
                8191,  8191,  28,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  200,   8191,  221,   234,   185,   15,    20,    21,    8191,
181
                200,   219,   136,   137,   139,   158,   159,   160,   161,   162,   163,   164,   261,   8191,  257,   188,   8191,  8191,  217,   8191,
182
                8191,  277,   8191,  217,   134,   8191,  196,   241,   8191,  218,   217,   262,   8191,  8191,  8191,  59,    60,    8191,  8191,  8191,
183
                8191,  197,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  55,    8191,  8191,  8191,
184
        ];
185

186
        /** Map of non-terminals to a displacement into the self::Goto table. The corresponding goto state for this
187
         *  non-terminal/state pair is self::Goto[self::GotoBase[$nonTerminal] + $state] (unless defaulted) */
188
        protected const GotoBase = [
189
                0,     0,     -1,    0,     0,     0,     107,   0,     254,   -126,  16,    -28,   0,     235,   -230,  0,     0,     0,     0,     166,
190
                200,   52,    -13,   262,   -2,    58,    0,     63,    0,     57,    75,    0,     0,     -61,   3,     -34,   -5,    124,   0,     0,
191
                41,    0,     0,     65,    0,     0,     154,   0,     0,     0,     24,    0,     0,     0,     0,     -77,   -44,   0,     0,     14,
192
                25,    12,    36,    37,    -67,   0,     0,     -51,   66,    0,     -15,   109,   115,   44,    0,     0,
193
        ];
194

195
        /** Table of states to goto after reduction. Indexed according to self::GotoBase comment. */
196
        protected const Goto = [
197
                111,   111,   110,   111,   316,   317,   111,   271,   272,   273,   110,   316,   317,   275,   320,   139,   127,   128,   127,   124,
198
                124,   116,   137,   129,   129,   129,   129,   124,   109,   126,   126,   126,   121,   302,   303,   251,   304,   305,   306,   307,
199
                308,   309,   310,   311,   454,   454,   122,   123,   112,   113,   114,   115,   117,   135,   136,   138,   156,   159,   160,   161,
200
                164,   165,   166,   167,   168,   169,   170,   172,   173,   174,   175,   187,   201,   202,   203,   220,   221,   253,   254,   255,
201
                324,   140,   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,   157,   118,   119,   129,
202
                130,   120,   158,   131,   132,   155,   133,   134,   180,   180,   180,   180,   327,   252,   180,   315,   315,   315,   180,   634,
203
                635,   636,   612,   183,   185,   186,   185,   415,   415,   415,   415,   536,   536,   536,   415,   415,   415,   415,   415,   430,
204
                224,   597,   597,   597,   538,   538,   538,   538,   538,   538,   538,   538,   538,   538,   538,   538,   236,   609,   609,   609,
205
                609,   609,   609,   250,   330,   217,   218,   229,   318,   323,   222,   230,   231,   232,   300,   300,   554,   554,   554,   554,
206
                554,   554,   554,   554,   554,   332,   352,   396,   595,   595,   576,   576,   576,   576,   576,   576,   576,   576,   576,   576,
207
                576,   574,   574,   574,   574,   574,   574,   574,   574,   574,   574,   574,   301,   301,   301,   301,   301,   301,   301,   301,
208
                301,   301,   301,   228,   602,   603,   530,   532,   319,   400,   228,   228,   534,   584,   586,   587,   435,   340,   386,   228,
209
                228,   644,   405,   445,   444,   342,   387,   337,   426,   348,   394,   628,   228,   408,   526,   299,   299,   299,   299,   503,
210
                215,   299,   527,   312,   312,   299,   312,   628,   629,   312,   412,   419,   421,   420,   422,   268,   269,   599,   600,   601,
211
                629,   331,   349,   181,   181,   439,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     350,   529,   0,     440,
212
                0,     0,     0,     441,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
213
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
214
                389,   389,   389,   0,     0,     389,   0,     0,     389,   389,   389,   0,     0,     0,     0,     0,     0,     0,     0,     0,
215
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
216
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
217
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     326,   0,     0,
218
                0,     0,     0,     0,     0,     237,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     403,   403,
219
        ];
220

221
        /** Table indexed analogously to self::Goto. If self::GotoCheck[self::GotoBase[$nonTerminal] + $state] != $nonTerminal
222
         *  then the goto state is defaulted, i.e. self::GotoDefault[$nonTerminal] should be used. */
223
        protected const GotoCheck = [
224
                2,     2,     2,     2,     14,    14,    2,     36,    36,    36,    2,     14,    14,    14,    61,    2,     2,     2,     2,     2,
225
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
226
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
227
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
228
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
229
                2,     2,     2,     2,     2,     2,     2,     2,     6,     6,     6,     6,     67,    71,    6,     55,    55,    55,    6,     9,
230
                9,     9,     72,    6,     6,     6,     6,     33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    37,
231
                64,    67,    67,    67,    56,    56,    56,    56,    56,    56,    56,    56,    56,    56,    56,    56,    64,    67,    67,    67,
232
                67,    67,    67,    22,    22,    22,    22,    22,    22,    22,    22,    22,    22,    22,    24,    24,    24,    24,    24,    24,
233
                24,    24,    24,    24,    24,    46,    46,    19,    67,    67,    59,    59,    59,    59,    59,    59,    59,    59,    59,    59,
234
                59,    60,    60,    60,    60,    60,    60,    60,    60,    60,    60,    60,    62,    62,    62,    62,    62,    62,    62,    62,
235
                62,    62,    62,    10,    70,    70,    35,    35,    20,    21,    10,    10,    35,    35,    35,    35,    11,    11,    13,    10,
236
                10,    10,    11,    11,    11,    11,    13,    25,    29,    11,    11,    73,    10,    27,    11,    8,     8,     8,     8,     43,
237
                63,    8,     50,    23,    23,    8,     23,    73,    73,    23,    30,    30,    30,    30,    30,    68,    68,    68,    68,    68,
238
                73,    23,    34,    6,     6,     40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    10,    -1,    40,
239
                -1,    -1,    -1,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
240
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
241
                6,     6,     6,     -1,    -1,    6,     -1,    -1,    6,     6,     6,     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
242
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
243
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
244
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    8,     -1,    -1,
245
                -1,    -1,    -1,    -1,    -1,    8,     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    23,    23,
246
        ];
247

248
        /** Map of non-terminals to the default state to goto after their reduction */
249
        protected const GotoDefault = [
250
                -8192, 283,   125,   262,   357,   358,   184,   378,   325,   607,   593,   384,   263,   614,   281,   280,   453,   343,   278,   395,
251
                344,   399,   162,   290,   291,   334,   270,   407,   243,   424,   256,   335,   336,   260,   346,   548,   265,   429,   264,   244,
252
                438,   442,   452,   259,   519,   279,   328,   523,   351,   282,   528,   583,   261,   292,   266,   545,   248,   219,   293,   226,
253
                216,   313,   205,   214,   627,   227,   294,   581,   267,   589,   596,   314,   613,   626,   322,   339,
254
        ];
255

256
        /** Map of rules to the non-terminal on their left-hand side, i.e. the non-terminal to use for
257
         *  determining the state to goto after reduction. */
258
        protected const RuleToNonTerminal = [
259
                0,     1,     1,     1,     1,     6,     6,     7,     7,     7,     7,     7,     7,     7,     7,     7,     7,     7,     7,     7,
260
                7,     7,     8,     8,     8,     9,     9,     10,    11,    11,    4,     4,     12,    12,    14,    14,    15,    15,    16,    17,
261
                17,    18,    18,    19,    19,    5,     5,     21,    21,    21,    21,    25,    25,    26,    26,    27,    27,    29,    29,    29,
262
                29,    30,    30,    30,    30,    31,    31,    32,    32,    28,    28,    34,    34,    35,    35,    36,    36,    37,    37,    37,
263
                37,    20,    38,    38,    39,    39,    3,     3,     40,    41,    41,    41,    41,    2,     2,     2,     2,     2,     2,     2,
264
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
265
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
266
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
267
                2,     2,     2,     2,     2,     2,     2,     2,     2,     42,    45,    45,    48,    49,    49,    50,    51,    51,    51,    51,
268
                51,    51,    55,    33,    33,    56,    56,    56,    43,    43,    43,    53,    53,    47,    47,    59,    60,    60,    24,    62,
269
                62,    62,    62,    44,    44,    44,    44,    44,    44,    44,    44,    44,    44,    44,    44,    46,    46,    58,    58,    58,
270
                58,    65,    65,    65,    52,    52,    52,    66,    66,    66,    66,    66,    66,    66,    22,    22,    22,    22,    22,    67,
271
                67,    70,    69,    57,    57,    57,    57,    57,    57,    57,    54,    54,    54,    68,    68,    68,    23,    61,    71,    71,
272
                72,    72,    72,    72,    13,    13,    13,    13,    13,    13,    13,    13,    63,    63,    63,    63,    64,    74,    73,    73,
273
                73,    73,    73,    73,    73,    73,    73,    75,    75,    75,    75,
274
        ];
275

276
        /** Map of rules to the length of their right-hand side, which is the number of elements that have to
277
         *  be popped from the stack(s) on reduction. */
278
        protected const RuleToLength = [
279
                1,     2,     2,     2,     2,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
280
                1,     1,     1,     1,     1,     1,     1,     1,     0,     1,     2,     0,     1,     3,     0,     1,     0,     1,     7,     0,
281
                2,     1,     3,     3,     4,     1,     3,     1,     2,     1,     1,     2,     0,     1,     3,     4,     6,     1,     2,     1,
282
                1,     1,     1,     1,     1,     3,     3,     3,     3,     0,     1,     0,     2,     2,     4,     1,     3,     1,     2,     2,
283
                3,     2,     3,     1,     2,     2,     1,     2,     3,     0,     3,     3,     4,     1,     3,     3,     3,     4,     1,     1,
284
                2,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     2,     2,     2,     2,     3,     3,
285
                3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     2,     2,     2,     2,
286
                3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     5,     4,     3,     3,     4,     4,     2,     2,
287
                2,     2,     2,     2,     2,     1,     8,     12,    9,     3,     0,     4,     2,     1,     3,     2,     2,     4,     2,     4,
288
                4,     6,     1,     1,     1,     1,     1,     1,     1,     1,     3,     1,     1,     0,     1,     1,     3,     5,     3,     4,
289
                1,     1,     3,     1,     1,     1,     1,     1,     1,     1,     1,     1,     3,     2,     3,     0,     1,     1,     3,     1,
290
                1,     1,     1,     1,     1,     3,     1,     1,     4,     1,     4,     6,     4,     4,     1,     1,     3,     3,     3,     1,
291
                4,     1,     3,     1,     4,     3,     3,     3,     3,     3,     1,     3,     1,     1,     3,     1,     4,     1,     3,     1,
292
                1,     1,     3,     0,     1,     2,     3,     4,     3,     4,     2,     2,     2,     2,     1,     2,     1,     1,     1,     4,
293
                3,     3,     3,     3,     3,     6,     3,     1,     1,     2,     1,
294
        ];
295

296
        /** Map of symbols to their names */
297
        protected const SymbolToName = [
298
                'end',
299
                'error',
300
                "','",
301
                "'or'",
302
                "'xor'",
303
                "'and'",
304
                "'=>'",
305
                "'='",
306
                "'+='",
307
                "'-='",
308
                "'*='",
309
                "'/='",
310
                "'.='",
311
                "'%='",
312
                "'&='",
313
                "'|='",
314
                "'^='",
315
                "'<<='",
316
                "'>>='",
317
                "'**='",
318
                "'??='",
319
                "'?'",
320
                "':'",
321
                "'??'",
322
                "'||'",
323
                "'&&'",
324
                "'|'",
325
                "'^'",
326
                "'&'",
327
                "'&'",
328
                "'=='",
329
                "'!='",
330
                "'==='",
331
                "'!=='",
332
                "'<=>'",
333
                "'<'",
334
                "'<='",
335
                "'>'",
336
                "'>='",
337
                "'.'",
338
                "'<<'",
339
                "'>>'",
340
                "'in'",
341
                "'+'",
342
                "'-'",
343
                "'*'",
344
                "'/'",
345
                "'%'",
346
                "'!'",
347
                "'instanceof'",
348
                "'~'",
349
                "'++'",
350
                "'--'",
351
                "'(int)'",
352
                "'(float'",
353
                "'(string)'",
354
                "'(array)'",
355
                "'(object)'",
356
                "'(bool)'",
357
                "'@'",
358
                "'**'",
359
                "'['",
360
                "'new'",
361
                "'clone'",
362
                'integer',
363
                'floating-point number',
364
                'identifier',
365
                'variable name',
366
                'constant',
367
                'variable',
368
                'number',
369
                'string content',
370
                'quoted string',
371
                "'match'",
372
                "'default'",
373
                "'function'",
374
                "'fn'",
375
                "'return'",
376
                "'use'",
377
                "'isset'",
378
                "'empty'",
379
                "'->'",
380
                "'?->'",
381
                "'??->'",
382
                "'list'",
383
                "'array'",
384
                "'heredoc start'",
385
                "'heredoc end'",
386
                "'\${'",
387
                "'{\$'",
388
                "'::'",
389
                "'...'",
390
                "'(expand)'",
391
                'fully qualified name',
392
                'namespaced name',
393
                "'null'",
394
                "'true'",
395
                "'false'",
396
                "'e'",
397
                "'m'",
398
                "'a'",
399
                "'f'",
400
                "'('",
401
                "')'",
402
                "'{'",
403
                "'}'",
404
                "';'",
405
                "']'",
406
                "'\"'",
407
                "'$'",
408
                "'\\\\'",
409
                'whitespace',
410
                'comment',
411
        ];
412

413
        /** Temporary value containing the result of last semantic action (reduction) */
414
        protected mixed $semValue = null;
415

416
        /** Semantic value stack (contains values of tokens and semantic action results) */
417
        protected array $semStack;
418

419
        /** @var Token[] Start attribute stack */
420
        protected array $startTokenStack;
421

422

423
        protected function reduce(int $rule, int $pos): void
1✔
424
        {
425
                (match ($rule) {
1✔
426
                        0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 28, 29, 57, 70, 72, 93, 98, 99, 165, 182, 184, 188, 189, 191, 192, 194, 205, 210, 211, 216, 217, 219, 220, 221, 222, 224, 226, 227, 229, 234, 235, 239, 243, 250, 252, 253, 255, 260, 278, 290 => fn() => $this->semValue = $this->semStack[$pos],
1✔
427
                        2 => fn() => $this->semValue = new Node\ModifierNode($this->semStack[$pos], position: $this->startTokenStack[$pos]->position),
1✔
428
                        3 => fn() => $this->semValue = new Expression\ArrayNode($this->semStack[$pos], position: $this->startTokenStack[$pos]->position),
1✔
429
                        22, 23, 24, 25, 26, 62, 63, 64 => fn() => $this->semValue = new Node\IdentifierNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
430
                        27 => fn() => $this->semValue = new Expression\VariableNode(substr($this->semStack[$pos], 1), $this->startTokenStack[$pos]->position),
1✔
431
                        30, 40, 51, 81, 90, 91, 150, 151, 171, 172, 190, 218, 225, 251, 254, 286 => fn() => $this->semValue = $this->semStack[$pos - 1],
1✔
432
                        31, 39, 52, 73, 89, 170, 193 => fn() => $this->semValue = [],
1✔
433
                        32, 41, 53, 75, 83, 86, 173, 259, 274 => fn() => $this->semValue = [$this->semStack[$pos]],
1✔
434
                        33, 42, 54, 66, 68, 76, 82, 174, 258 => function () use ($pos) {
1✔
435
                                $this->semStack[$pos - 2][] = $this->semStack[$pos];
1✔
436
                                $this->semValue = $this->semStack[$pos - 2];
1✔
437
                        },
1✔
438
                        34, 36 => fn() => $this->semValue = false,
1✔
439
                        35, 37 => fn() => $this->semValue = true,
1✔
440
                        38 => fn() => $this->semValue = new Expression\MatchNode($this->semStack[$pos - 4], $this->semStack[$pos - 1], $this->startTokenStack[$pos - 6]->position),
1✔
441
                        43 => fn() => $this->semValue = new Node\MatchArmNode($this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
442
                        44 => fn() => $this->semValue = new Node\MatchArmNode(null, $this->semStack[$pos], $this->startTokenStack[$pos - 3]->position),
1✔
443
                        45 => fn() => $this->semValue = [null, ...$this->semStack[$pos]],
1✔
444
                        46 => fn() => $this->semValue = [$this->semStack[$pos - 2], ...$this->semStack[$pos]],
1✔
445
                        47, 49 => fn() => $this->semValue = [$this->semStack[$pos], false],
1✔
UNCOV
446
                        48 => fn() => $this->semValue = [$this->semStack[$pos], true],
×
447
                        50 => fn() => $this->semValue = [$this->convertArrayToList($this->semStack[$pos]), false],
1✔
448
                        55 => fn() => $this->semValue = new Node\ParameterNode($this->semStack[$pos], null, $this->semStack[$pos - 3], $this->semStack[$pos - 2], $this->semStack[$pos - 1], $this->startTokenStack[$pos - 3]->position),
1✔
449
                        56 => fn() => $this->semValue = new Node\ParameterNode($this->semStack[$pos - 2], $this->semStack[$pos], $this->semStack[$pos - 5], $this->semStack[$pos - 4], $this->semStack[$pos - 3], $this->startTokenStack[$pos - 5]->position),
1✔
450
                        58 => fn() => $this->semValue = new Node\NullableTypeNode($this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
451
                        59 => fn() => $this->semValue = new Node\UnionTypeNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
452
                        60 => fn() => $this->semValue = new Node\IntersectionTypeNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
453
                        61 => fn() => $this->semValue = TagParser::handleBuiltinTypes($this->semStack[$pos]),
1✔
454
                        65, 67 => fn() => $this->semValue = [$this->semStack[$pos - 2], $this->semStack[$pos]],
1✔
455
                        69, 71, 215 => fn() => $this->semValue = null,
1✔
456
                        74, 92 => fn() => $this->semValue = $this->semStack[$pos - 2],
1✔
457
                        77 => fn() => $this->semValue = new Node\ArgumentNode($this->semStack[$pos], false, false, null, $this->startTokenStack[$pos]->position),
1✔
458
                        78 => fn() => $this->semValue = new Node\ArgumentNode($this->semStack[$pos], true, false, null, $this->startTokenStack[$pos - 1]->position),
1✔
459
                        79 => fn() => $this->semValue = new Node\ArgumentNode($this->semStack[$pos], false, true, null, $this->startTokenStack[$pos - 1]->position),
1✔
460
                        80 => fn() => $this->semValue = new Node\ArgumentNode($this->semStack[$pos], false, false, $this->semStack[$pos - 2], $this->startTokenStack[$pos - 2]->position),
1✔
461
                        84, 85 => fn() => $this->semValue = new Expression\FilterCallNode($this->semStack[$pos - 1], $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
462
                        87, 272, 273 => function () use ($pos) {
1✔
463
                                $this->semStack[$pos - 1][] = $this->semStack[$pos];
1✔
464
                                $this->semValue = $this->semStack[$pos - 1];
1✔
465
                        },
1✔
466
                        88 => fn() => $this->semValue = new Node\FilterNode($this->semStack[$pos - 1], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
467
                        94, 96 => fn() => $this->semValue = new Expression\AssignNode($this->semStack[$pos - 2], $this->semStack[$pos], false, $this->startTokenStack[$pos - 2]->position),
1✔
468
                        95 => fn() => $this->semValue = new Expression\AssignNode($this->convertArrayToList($this->semStack[$pos - 2]), $this->semStack[$pos], false, $this->startTokenStack[$pos - 2]->position),
1✔
469
                        97 => fn() => $this->semValue = new Expression\AssignNode($this->semStack[$pos - 3], $this->semStack[$pos], true, $this->startTokenStack[$pos - 3]->position),
1✔
470
                        100 => fn() => $this->semValue = new Expression\CloneNode($this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
471
                        101 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '+', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
472
                        102 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '-', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
473
                        103 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '*', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
474
                        104 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '/', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
475
                        105 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '.', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
476
                        106 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '%', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
477
                        107 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '&', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
478
                        108 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '|', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
479
                        109 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '^', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
480
                        110 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '<<', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
481
                        111 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '>>', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
482
                        112 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '**', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
483
                        113 => fn() => $this->semValue = new Expression\AssignOpNode($this->semStack[$pos - 2], '??', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
484
                        114 => fn() => $this->semValue = new Expression\PostOpNode($this->semStack[$pos - 1], '++', $this->startTokenStack[$pos - 1]->position),
1✔
485
                        115 => fn() => $this->semValue = new Expression\PreOpNode($this->semStack[$pos], '++', $this->startTokenStack[$pos - 1]->position),
1✔
486
                        116 => fn() => $this->semValue = new Expression\PostOpNode($this->semStack[$pos - 1], '--', $this->startTokenStack[$pos - 1]->position),
1✔
487
                        117 => fn() => $this->semValue = new Expression\PreOpNode($this->semStack[$pos], '--', $this->startTokenStack[$pos - 1]->position),
1✔
488
                        118 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '||', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
489
                        119 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '&&', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
490
                        120 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], 'or', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
491
                        121 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], 'and', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
492
                        122 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], 'xor', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
493
                        123, 124 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '&', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
494
                        125 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '^', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
495
                        126 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '.', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
496
                        127 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '+', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
497
                        128 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '-', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
498
                        129 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '*', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
499
                        130 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '/', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
500
                        131 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '%', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
501
                        132 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '<<', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
502
                        133 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '>>', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
503
                        134 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '**', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
504
                        135 => fn() => $this->semValue = new Expression\InNode($this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
505
                        136 => fn() => $this->semValue = new Expression\UnaryOpNode($this->semStack[$pos], '+', $this->startTokenStack[$pos - 1]->position),
1✔
506
                        137 => fn() => $this->semValue = new Expression\UnaryOpNode($this->semStack[$pos], '-', $this->startTokenStack[$pos - 1]->position),
1✔
507
                        138 => fn() => $this->semValue = new Expression\NotNode($this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
508
                        139 => fn() => $this->semValue = new Expression\UnaryOpNode($this->semStack[$pos], '~', $this->startTokenStack[$pos - 1]->position),
1✔
509
                        140 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '===', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
510
                        141 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '!==', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
511
                        142 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '==', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
512
                        143 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '!=', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
513
                        144 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '<=>', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
514
                        145 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '<', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
515
                        146 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '<=', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
516
                        147 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '>', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
517
                        148 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '>=', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
518
                        149 => fn() => $this->semValue = new Expression\InstanceofNode($this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
519
                        152 => fn() => $this->semValue = new Expression\TernaryNode($this->semStack[$pos - 4], $this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 4]->position),
1✔
520
                        153 => fn() => $this->semValue = new Expression\TernaryNode($this->semStack[$pos - 3], null, $this->semStack[$pos], $this->startTokenStack[$pos - 3]->position),
1✔
521
                        154 => fn() => $this->semValue = new Expression\TernaryNode($this->semStack[$pos - 2], $this->semStack[$pos], null, $this->startTokenStack[$pos - 2]->position),
1✔
522
                        155 => fn() => $this->semValue = new Expression\BinaryOpNode($this->semStack[$pos - 2], '??', $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
523
                        156 => fn() => $this->semValue = new Expression\IssetNode($this->semStack[$pos - 1], $this->startTokenStack[$pos - 3]->position),
1✔
524
                        157 => fn() => $this->semValue = new Expression\EmptyNode($this->semStack[$pos - 1], $this->startTokenStack[$pos - 3]->position),
1✔
525
                        158 => fn() => $this->semValue = new Expression\CastNode('int', $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
526
                        159 => fn() => $this->semValue = new Expression\CastNode('float', $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
527
                        160 => fn() => $this->semValue = new Expression\CastNode('string', $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
528
                        161 => fn() => $this->semValue = new Expression\CastNode('array', $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
529
                        162 => fn() => $this->semValue = new Expression\CastNode('object', $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
530
                        163 => fn() => $this->semValue = new Expression\CastNode('bool', $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
531
                        164 => fn() => $this->semValue = new Expression\ErrorSuppressNode($this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
532
                        166 => fn() => $this->semValue = new Expression\ClosureNode((bool) $this->semStack[$pos - 6], $this->semStack[$pos - 4], [], $this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 7]->position),
1✔
533
                        167 => fn() => $this->semValue = new Expression\ClosureNode((bool) $this->semStack[$pos - 10], $this->semStack[$pos - 8], $this->semStack[$pos - 6], $this->semStack[$pos - 5], $this->semStack[$pos - 2], $this->startTokenStack[$pos - 11]->position),
1✔
534
                        168 => fn() => $this->semValue = new Expression\ClosureNode((bool) $this->semStack[$pos - 7], $this->semStack[$pos - 5], $this->semStack[$pos - 3], $this->semStack[$pos - 2], null, $this->startTokenStack[$pos - 8]->position),
1✔
535
                        169 => fn() => $this->semValue = new Expression\NewNode($this->semStack[$pos - 1], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
536
                        175 => fn() => $this->semValue = new Node\ClosureUseNode($this->semStack[$pos], $this->semStack[$pos - 1], $this->startTokenStack[$pos - 1]->position),
1✔
537
                        176, 178 => fn() => $this->semValue = $this->checkFunctionName(new Expression\FunctionCallNode($this->semStack[$pos - 1], $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position)),
1✔
538
                        177, 179 => fn() => $this->semValue = $this->checkFunctionName(new Expression\FunctionCallableNode($this->semStack[$pos - 3], $this->startTokenStack[$pos - 3]->position)),
1✔
539
                        180 => fn() => $this->semValue = new Expression\StaticMethodCallNode($this->semStack[$pos - 3], $this->semStack[$pos - 1], $this->semStack[$pos], $this->startTokenStack[$pos - 3]->position),
1✔
540
                        181 => fn() => $this->semValue = new Expression\StaticMethodCallableNode($this->semStack[$pos - 5], $this->semStack[$pos - 3], $this->startTokenStack[$pos - 5]->position),
1✔
541
                        183, 185, 186 => fn() => $this->semValue = new Node\NameNode($this->semStack[$pos], Node\NameNode::KindNormal, $this->startTokenStack[$pos]->position),
1✔
542
                        187 => fn() => $this->semValue = new Node\NameNode($this->semStack[$pos], Node\NameNode::KindFullyQualified, $this->startTokenStack[$pos]->position),
1✔
543
                        195 => fn() => $this->semValue = new Expression\ConstantFetchNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
544
                        196 => fn() => $this->semValue = new Expression\ClassConstantFetchNode($this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
545
                        197 => fn() => $this->semValue = new Expression\ClassConstantFetchNode($this->semStack[$pos - 4], $this->semStack[$pos - 1], $this->startTokenStack[$pos - 4]->position),
1✔
546
                        198 => fn() => $this->semValue = new Expression\ArrayNode($this->semStack[$pos - 1], $this->startTokenStack[$pos - 2]->position),
1✔
547
                        199 => fn() => $this->semValue = new Expression\ArrayNode($this->semStack[$pos - 1], $this->startTokenStack[$pos - 3]->position),
1✔
548
                        200 => function () use ($pos) {
1✔
549
                                $this->semValue = $this->semStack[$pos];
1✔
550
                                $this->shortArrays->attach($this->semValue);
1✔
551
                        },
1✔
552
                        201 => fn() => $this->semValue = Scalar\StringNode::parse($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
553
                        202 => fn() => $this->semValue = Scalar\InterpolatedStringNode::parse($this->semStack[$pos - 1], $this->startTokenStack[$pos - 2]->position),
1✔
554
                        203 => fn() => $this->semValue = Scalar\IntegerNode::parse($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
555
                        204 => fn() => $this->semValue = Scalar\FloatNode::parse($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
556
                        206, 287 => fn() => $this->semValue = new Scalar\StringNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
557
                        207 => fn() => $this->semValue = new Scalar\BooleanNode(true, $this->startTokenStack[$pos]->position),
1✔
558
                        208 => fn() => $this->semValue = new Scalar\BooleanNode(false, $this->startTokenStack[$pos]->position),
1✔
559
                        209 => fn() => $this->semValue = new Scalar\NullNode($this->startTokenStack[$pos]->position),
1✔
560
                        212 => fn() => $this->semValue = $this->parseDocString($this->semStack[$pos - 2], [$this->semStack[$pos - 1]], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position, $this->startTokenStack[$pos]->position),
1✔
561
                        213 => fn() => $this->semValue = $this->parseDocString($this->semStack[$pos - 1], [], $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position, $this->startTokenStack[$pos]->position),
1✔
562
                        214 => fn() => $this->semValue = $this->parseDocString($this->semStack[$pos - 2], $this->semStack[$pos - 1], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position, $this->startTokenStack[$pos]->position),
1✔
563
                        223 => fn() => $this->semValue = new Expression\ConstantFetchNode(new Node\NameNode($this->semStack[$pos], Node\NameNode::KindNormal, $this->startTokenStack[$pos]->position), $this->startTokenStack[$pos]->position),
1✔
564
                        228, 244, 279 => fn() => $this->semValue = new Expression\ArrayAccessNode($this->semStack[$pos - 3], $this->semStack[$pos - 1], $this->startTokenStack[$pos - 3]->position),
1✔
565
                        230 => fn() => $this->semValue = new Expression\MethodCallNode($this->semStack[$pos - 3], $this->semStack[$pos - 1], $this->semStack[$pos], false, $this->startTokenStack[$pos - 3]->position),
1✔
566
                        231 => fn() => $this->semValue = new Expression\MethodCallableNode($this->semStack[$pos - 5], $this->semStack[$pos - 3], $this->startTokenStack[$pos - 5]->position),
1✔
567
                        232 => fn() => $this->semValue = new Expression\MethodCallNode($this->semStack[$pos - 3], $this->semStack[$pos - 1], $this->semStack[$pos], true, $this->startTokenStack[$pos - 3]->position),
1✔
568
                        233 => fn() => $this->semValue = new Expression\MethodCallNode(new Expression\BinaryOpNode($this->semStack[$pos - 3], '??', new Scalar\NullNode($this->startTokenStack[$pos - 3]->position), $this->startTokenStack[$pos - 3]->position), $this->semStack[$pos - 1], $this->semStack[$pos], true, $this->startTokenStack[$pos - 3]->position),
1✔
569
                        236, 245, 280 => fn() => $this->semValue = new Expression\PropertyFetchNode($this->semStack[$pos - 2], $this->semStack[$pos], false, $this->startTokenStack[$pos - 2]->position),
1✔
570
                        237, 246, 281 => fn() => $this->semValue = new Expression\PropertyFetchNode($this->semStack[$pos - 2], $this->semStack[$pos], true, $this->startTokenStack[$pos - 2]->position),
1✔
571
                        238, 247, 282 => fn() => $this->semValue = new Expression\PropertyFetchNode(new Expression\BinaryOpNode($this->semStack[$pos - 2], '??', new Scalar\NullNode($this->startTokenStack[$pos - 2]->position), $this->startTokenStack[$pos - 2]->position), $this->semStack[$pos], true, $this->startTokenStack[$pos - 2]->position),
1✔
572
                        240 => fn() => $this->semValue = new Expression\VariableNode($this->semStack[$pos - 1], $this->startTokenStack[$pos - 3]->position),
1✔
573
                        241 => function () use ($pos) {
1✔
574
                                $var = $this->semStack[$pos]->name;
1✔
575
                                $this->semValue = is_string($var)
1✔
576
                                        ? new Node\VarLikeIdentifierNode($var, $this->startTokenStack[$pos]->position)
1✔
577
                                        : $var;
1✔
578
                        },
1✔
579
                        242, 248, 249 => fn() => $this->semValue = new Expression\StaticPropertyFetchNode($this->semStack[$pos - 2], $this->semStack[$pos], $this->startTokenStack[$pos - 2]->position),
1✔
580
                        256 => fn() => $this->semValue = $this->convertArrayToList(new Expression\ArrayNode($this->semStack[$pos - 1], $this->startTokenStack[$pos - 3]->position)),
1✔
581
                        257 => function () use ($pos) {
1✔
582
                                $this->semValue = $this->semStack[$pos];
1✔
583
                                $end = count($this->semValue) - 1;
1✔
584
                                if (
585
                                        $this->semValue[$end]->value instanceof Expression\TemporaryNode
1✔
586
                                        && !$this->semValue[$end]->value->value
1✔
587
                                ) {
588
                                        array_pop($this->semValue);
1✔
589
                                }
590
                        },
1✔
591
                        261 => fn() => $this->semValue = new Node\ArrayItemNode(new Expression\TemporaryNode($this->semStack[$pos], $this->startTokenStack[$pos]->position), null, false, false, $this->startTokenStack[$pos]->position),
1✔
592
                        262 => fn() => $this->semValue = new Node\ArrayItemNode(new Expression\TemporaryNode($this->semStack[$pos], $this->startTokenStack[$pos - 2]->position), $this->semStack[$pos - 2], false, false, $this->startTokenStack[$pos - 2]->position),
1✔
593
                        263 => fn() => $this->semValue = new Node\ArrayItemNode(new Expression\TemporaryNode(null), null, false, false, $this->startTokenStack[$pos]->position),
1✔
594
                        264 => fn() => $this->semValue = new Node\ArrayItemNode($this->semStack[$pos], null, false, false, $this->startTokenStack[$pos]->position),
1✔
595
                        265 => fn() => $this->semValue = new Node\ArrayItemNode($this->semStack[$pos], null, true, false, $this->startTokenStack[$pos - 1]->position),
1✔
596
                        266, 268 => fn() => $this->semValue = new Node\ArrayItemNode($this->semStack[$pos], $this->semStack[$pos - 2], false, false, $this->startTokenStack[$pos - 2]->position),
1✔
597
                        267, 269 => fn() => $this->semValue = new Node\ArrayItemNode($this->semStack[$pos], $this->semStack[$pos - 3], true, false, $this->startTokenStack[$pos - 3]->position),
1✔
598
                        270, 271 => fn() => $this->semValue = new Node\ArrayItemNode($this->semStack[$pos], null, false, true, $this->startTokenStack[$pos - 1]->position),
1✔
599
                        275 => fn() => $this->semValue = [$this->semStack[$pos - 1], $this->semStack[$pos]],
1✔
600
                        276 => fn() => $this->semValue = new Node\InterpolatedStringPartNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
601
                        277 => fn() => $this->semValue = new Expression\VariableNode($this->semStack[$pos], $this->startTokenStack[$pos]->position),
×
602
                        283, 284 => fn() => $this->semValue = new Expression\VariableNode($this->semStack[$pos - 1], $this->startTokenStack[$pos - 2]->position),
×
UNCOV
603
                        285 => fn() => $this->semValue = new Expression\ArrayAccessNode($this->semStack[$pos - 4], $this->semStack[$pos - 2], $this->startTokenStack[$pos - 5]->position),
×
604
                        288 => fn() => $this->semValue = TagParser::parseOffset($this->semStack[$pos], $this->startTokenStack[$pos]->position),
1✔
605
                        289 => fn() => $this->semValue = TagParser::parseOffset('-' . $this->semStack[$pos], $this->startTokenStack[$pos - 1]->position),
1✔
606
                })();
1✔
607
        }
1✔
608
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc