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

nette / latte / 16329923376

16 Jul 2025 08:43PM UTC coverage: 93.81%. Remained the same
16329923376

push

github

dg
Released version 3.0.23

5213 of 5557 relevant lines covered (93.81%)

0.94 hits per line

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

97.8
/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 = 260;
31

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

35
        /** Map of lexer tokens to internal symbols */
36
        protected const TokenToSymbol = [
37
                0,     114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
38
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   49,    109,   114,   110,   48,    114,   114,
39
                103,   104,   46,    44,    2,     45,    40,    47,    114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   22,    107,
40
                36,    7,     38,    21,    60,    114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
41
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   62,    114,   108,   28,    114,   114,   101,   114,   114,
42
                114,   99,    102,   114,   114,   114,   114,   114,   114,   100,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
43
                114,   114,   114,   105,   26,    106,   51,    114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
44
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
45
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
46
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
47
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
48
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
49
                114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   114,   1,     3,     4,     5,
50
                6,     8,     9,     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,    23,    24,    25,    27,    29,    30,
51
                31,    32,    33,    34,    35,    37,    39,    41,    42,    43,    50,    52,    53,    54,    55,    56,    57,    58,    59,    61,
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,    91,    111,   92,    93,    94,    95,    112,   113,   96,    97,    98,
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
                338,   318,   318,   318,   318,   100,   122,   318,   275,   179,   232,   318,   399,   399,   399,   222,   222,   222,   222,   314,
61
                314,   305,   319,   443,   445,   446,   448,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,
62
                -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,
63
                -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,
64
                -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,
65
                -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -3,    243,   271,   454,   457,   455,   458,   474,   475,   471,   476,
66
                480,   52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    155,   104,   354,   157,   157,
67
                157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   260,   260,   260,   311,
68
                269,   207,   263,   405,   -31,   111,   111,   507,   507,   507,   507,   507,   440,   81,    81,    81,    81,    493,   493,   481,
69
                481,   481,   481,   481,   481,   481,   481,   481,   164,   123,   123,   279,   13,    259,   259,   259,   70,    70,    70,    70,
70
                70,    70,    70,    281,   109,   109,   109,   368,   402,   462,   339,   321,   321,   321,   321,   321,   321,   346,   483,   -22,
71
                133,   133,   156,   225,   225,   133,   436,   40,    231,   -35,   324,   371,   328,   146,   223,   2,     452,   298,   304,   329,
72
                36,    41,    222,   461,   461,   222,   222,   222,   453,   80,    80,    80,    42,    194,   187,   290,   460,   290,   290,   290,
73
                218,   -75,   306,   378,   367,   369,   306,   62,    140,   129,   379,   389,   378,   378,   169,   129,   129,   301,   313,   348,
74
                188,   136,   348,   308,   308,   186,   35,    392,   391,   394,   366,   362,   464,   206,   310,   350,   300,   358,   172,   392,
75
                391,   394,   315,   6,     353,   299,   299,   299,   299,   299,   299,   299,   299,   299,   299,   206,   393,   43,    355,   395,
76
                396,   17,    409,   423,   466,   309,   467,   299,   344,   345,   297,   477,   357,   28,    206,   478,   463,   343,   317,   398,
77
                303,   479,   425,   332,   468,   214,   397,   228,   469,   235,   465,   312,   430,   302,   470,   0,     -44,   -44,   -44,   -44,
78
                -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,   -44,
79
                -44,   -44,   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,     0,     52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    0,     0,     0,     0,
84
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     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,    52,    52,    0,     440,
86
                52,    52,    52,    52,    52,    52,    52,    0,     109,   109,   109,   109,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,
87
                -23,   -23,   -23,   109,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   0,     0,
88
                0,     0,     0,     0,     0,     436,   308,   308,   308,   308,   308,   308,   436,   436,   0,     0,     0,     0,     109,   109,
89
                0,     0,     436,   308,   0,     0,     0,     0,     0,     0,     0,     222,   222,   222,   436,   378,   0,     0,     308,   308,
90
                0,     0,     0,     306,   0,     0,     0,     0,     0,     0,     299,   43,    299,   299,   299,
91
        ];
92

93
        /** Table of actions. Indexed according to self::ActionBase comment. */
94
        protected const Action = [
95
                33,    34,    -272,  31,    -272,  35,    -50,   36,    179,   180,   37,    38,    39,    40,    41,    42,    43,    -48,   1,     193,
96
                44,    561,   562,   207,   172,   543,   382,   -225,  -47,   559,   287,   526,   245,   246,   196,   0,     288,   289,   12,    382,
97
                -223,  290,   291,   210,   541,   7,     543,   -225,  -225,  -225,  545,   544,   567,   565,   566,   53,    54,    55,    13,    28,
98
                -223,  -223,  -223,  417,   11,    226,   292,   197,   198,   -223,  199,   545,   544,   22,    98,    56,    57,    58,    59,    292,
99
                60,    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
100
                80,    209,   195,   363,   364,   362,   -272,  -8190, -8190, 419,   -272,  418,   -8190, 81,    -8190, -8190, -8190, -8191, -8191, -8191,
101
                -8191, 72,    73,    74,    75,    363,   364,   362,   570,   361,   360,   14,    -8190, -187,  -8190, -8190, -8190, -8190, 20,    -8190,
102
                -8190, -8190, 101,   373,   196,   -187,  -80,   380,   -80,   381,   367,   361,   360,   76,    77,    78,    79,    80,    -8190, 195,
103
                -8190, -8190, -8190, 194,   45,    373,   419,   203,   418,   298,   81,    191,   367,   -80,   299,   369,   237,   238,   368,   374,
104
                300,   301,   363,   364,   362,   194,   45,    -47,   236,   203,   384,   298,   23,    178,   -23,   -220,  299,   369,   237,   238,
105
                368,   374,   300,   301,   430,   73,    74,    75,    361,   360,   -8190, -8190, -8190, 95,    24,    -220,  -220,  -220,  30,    419,
106
                105,   418,   373,   -270,  -220,  -270,  430,   -52,   -8190, 367,   -8190, -8190, -8190, -8190, 106,   363,   364,   362,   214,   215,
107
                216,   107,   194,   45,    200,   201,   203,   244,   298,   16,    -80,   361,   360,   299,   369,   237,   238,   368,   374,   300,
108
                301,   361,   360,   -8190, -8190, -8190, -8190, -8190, -8190, -8190, -8190, 25,    -8190, -8190, -8190, 373,   340,   18,    363,   364,
109
                362,   -8190, 367,   430,   -8190, -186,  -8190, -8190, -8190, -8190, -8190, -8190, -8190, -8190, -8190, 194,   45,    -186,  645,   203,
110
                196,   298,   646,   -22,   361,   360,   299,   369,   237,   238,   368,   374,   300,   301,   -8190, -8190, -8190, 96,    373,   108,
111
                -17,   363,   364,   362,   26,    367,   -16,   -270,  -268,  382,   -268,  -270,  -8190, 172,   -8190, -8190, 430,   17,    194,   45,
112
                195,   97,    203,   -226,  298,   -8190, 202,   361,   360,   299,   369,   237,   238,   368,   374,   300,   301,   -8190, -8190, -8190,
113
                81,    373,   49,    -226,  -226,  -226,  104,   100,   367,   292,   192,   102,   -186,  324,   647,   419,   103,   418,   382,   430,
114
                346,   194,   45,    -29,   -186,  203,   29,    298,   380,   280,   381,   -195,  299,   369,   237,   238,   368,   374,   300,   301,
115
                -255,  -8190, 363,   364,   362,   392,   211,   212,   213,   354,   46,    47,    15,    82,    83,    84,    85,    86,    87,    88,
116
                89,    90,    91,    92,    93,    94,    99,    571,   361,   360,   -226,  292,   -268,  228,   572,   -254,  -268,  32,    262,   3,
117
                177,   164,   373,   363,   364,   362,   243,   277,   -253,  367,   -226,  -226,  -226,  249,   250,   251,   -229,  471,   473,   -186,
118
                -228,  -227,  194,   45,    -222,  2,     203,   -220,  298,   4,     5,     -186,  6,     299,   369,   237,   238,   368,   374,   300,
119
                301,   8,     9,     373,   -222,  -222,  -222,  -220,  -220,  -220,  367,   100,   10,    -222,  27,    50,    -220,  51,    189,   190,
120
                242,   556,   279,   366,   365,   -229,  382,   377,   634,   378,   -8190, -8190, -8190, 514,   370,   369,   372,   371,   368,   374,
121
                375,   376,   361,   360,   -221,  21,    183,   557,   -8190, 431,   -8190, -8190, -8190, -8190, 529,   -8190, -8190, -8190, -8191, -8191,
122
                -8191, -8191, -8191, 1,     -221,  -221,  -221,  535,   253,   537,   539,   382,   589,   -221,  559,   1,     -29,   509,   332,   336,
123
                253,   548,   515,   382,   614,   -228,  559,   291,   19,    52,    261,   292,   642,   644,   393,   643,   525,   343,   290,   291,
124
                641,   598,   612,   0,     48,    586,   602,   637,   348,   0,     226,   292,   560,   0,     0,     0,     48,    0,     0,     0,
125
                0,     0,     226,   292,
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
                44,    45,    0,     78,    2,     49,    0,     51,    52,    53,    54,    55,    56,    57,    58,    59,    60,    0,     62,    63,
132
                64,    65,    66,    67,    27,    69,    70,    62,    0,     73,    74,    106,   76,    77,    21,    0,     80,    81,    2,     70,
133
                62,    85,    86,    87,    67,    2,     69,    82,    83,    84,    94,    95,    96,    97,    98,    3,     4,     5,     22,    103,
134
                82,    83,    84,    86,    2,     109,   110,   26,    27,    91,    29,    94,    95,    21,    105,   23,    24,    25,    26,    110,
135
                28,    29,    30,    31,    32,    33,    34,    35,    36,    37,    38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
136
                48,    104,   50,    3,     4,     5,     104,   3,     4,     96,    108,   98,    72,    61,    3,     4,     5,     36,    37,    38,
137
                39,    40,    41,    42,    43,    3,     4,     5,     88,    29,    30,    2,     21,    91,    23,    24,    25,    26,    2,     28,
138
                29,    30,    2,     43,    21,    103,   0,     67,    2,     69,    50,    29,    30,    44,    45,    46,    47,    48,    3,     50,
139
                3,     4,     5,     63,    64,    43,    96,    67,    98,    69,    61,    2,     50,    27,    74,    75,    76,    77,    78,    79,
140
                80,    81,    3,     4,     5,     63,    64,    0,     2,     67,    2,     69,    92,    6,     22,    62,    74,    75,    76,    77,
141
                78,    79,    80,    81,    104,   41,    42,    43,    29,    30,    3,     4,     5,     7,     92,    82,    83,    84,    62,    96,
142
                6,     98,    43,    0,     91,    2,     104,   104,   21,    50,    23,    24,    25,    26,    6,     3,     4,     5,     82,    83,
143
                84,    6,     63,    64,    26,    27,    67,    91,    69,    6,     104,   29,    30,    74,    75,    76,    77,    78,    79,    80,
144
                81,    29,    30,    3,     4,     5,     3,     4,     5,     44,    45,    92,    3,     4,     5,     43,    45,    6,     3,     4,
145
                5,     21,    50,    104,   21,    91,    23,    24,    25,    26,    21,    28,    23,    24,    25,    63,    64,    103,   67,    67,
146
                21,    69,    71,    22,    29,    30,    74,    75,    76,    77,    78,    79,    80,    81,    3,     4,     5,     7,     43,    7,
147
                22,    3,     4,     5,     92,    50,    22,    104,   0,     70,    2,     108,   21,    27,    23,    24,    104,   22,    63,    64,
148
                50,    22,    67,    62,    69,    86,    29,    29,    30,    74,    75,    76,    77,    78,    79,    80,    81,    3,     4,     5,
149
                61,    43,    103,   82,    83,    84,    22,    92,    50,    110,   22,    62,    91,    68,    71,    96,    22,    98,    70,    104,
150
                79,    63,    64,    104,   103,   67,    62,    69,    67,    75,    69,    91,    74,    75,    76,    77,    78,    79,    80,    81,
151
                103,   72,    3,     4,     5,     92,    82,    83,    84,    107,   92,    93,    7,     8,     9,     10,    11,    12,    13,    14,
152
                15,    16,    17,    18,    19,    20,    105,   88,    29,    30,    62,    110,   104,   62,    88,    103,   108,   99,    100,   101,
153
                102,   91,    43,    3,     4,     5,     91,    104,   103,   50,    82,    83,    84,    82,    83,    84,    103,   52,    53,    91,
154
                103,   103,   63,    64,    62,    103,   67,    62,    69,    103,   103,   103,   103,   74,    75,    76,    77,    78,    79,    80,
155
                81,    103,   103,   43,    82,    83,    84,    82,    83,    84,    50,    92,    103,   91,    103,   103,   91,    103,   103,   103,
156
                103,   108,   104,   63,    64,    103,   70,    67,    72,    69,    3,     4,     5,     104,   74,    75,    76,    77,    78,    79,
157
                80,    81,    29,    30,    62,    89,    90,    104,   21,    104,   23,    24,    25,    26,    104,   28,    29,    30,    31,    32,
158
                33,    34,    35,    62,    82,    83,    84,    104,   67,    104,   104,   70,    104,   91,    73,    62,    104,   104,   104,   104,
159
                67,    104,   104,   70,    104,   103,   73,    86,    105,   105,   105,   110,   106,   106,   106,   106,   106,   106,   85,    86,
160
                106,   106,   106,   -1,    103,   108,   108,   108,   108,   -1,    109,   110,   109,   -1,    -1,    -1,    103,   -1,    -1,    -1,
161
                -1,    -1,    109,   110,
162
        ];
163

164
        /** Map of states to their default action */
165
        protected const ActionDefault = [
166
                8191,  266,   266,   31,    266,   8191,  8191,  266,   8191,  8191,  8191,  29,    8191,  8191,  29,    8191,  8191,  8191,  8191,  39,
167
                29,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  218,   218,   218,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
168
                8191,  8191,  8191,  8191,  8191,  10,    8191,  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,  267,   267,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
172
                8191,  1,     273,   274,   85,    79,    219,   269,   271,   81,    84,    82,    43,    44,    56,    122,   124,   157,   123,   98,
173
                103,   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,   96,    97,    169,   158,   156,   155,   120,
174
                121,   125,   128,   95,    8191,  126,   127,   145,   146,   143,   144,   147,   8191,  148,   149,   150,   151,   8191,  8191,  8191,
175
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  129,   71,    71,    71,    8191,  8191,  11,    8191,  8191,  8191,  8191,  8191,
176
                8191,  8191,  8191,  209,   135,   136,   138,   209,   208,   153,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  214,
177
                117,   119,   192,   130,   131,   99,    8191,  8191,  8191,  213,   8191,  281,   220,   220,   220,   220,   34,    34,    34,    8191,
178
                91,    57,    34,    8191,  8191,  34,    34,    34,    8191,  8191,  8191,  8191,  198,   226,   220,   141,   8191,  132,   133,   134,
179
                59,    8191,  8191,  196,   185,   8191,  2,     28,    28,    28,    8191,  239,   240,   241,   28,    28,    28,    173,   36,    73,
180
                28,    28,    73,    8191,  8191,  28,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  203,   8191,  224,   237,   188,   15,
181
                20,    21,    8191,  203,   222,   139,   140,   142,   161,   162,   163,   164,   165,   166,   167,   264,   8191,  260,   191,   8191,
182
                8191,  220,   8191,  8191,  280,   8191,  220,   137,   8191,  199,   244,   8191,  221,   220,   265,   8191,  8191,  8191,  60,    8191,
183
                8191,  8191,  8191,  200,   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,     237,   -238,  19,    -19,   0,     109,   45,    0,     0,     0,     0,     101,
190
                203,   53,    -22,   263,   -11,   42,    0,     44,    0,     50,    75,    0,     0,     -63,   -29,   23,    -8,    183,   0,     0,
191
                49,    0,     0,     48,    0,     0,     85,    0,     0,     0,     10,    0,     0,     0,     0,     -186,  -49,   0,     0,     9,
192
                30,    111,   41,    25,    -28,   0,     0,     -10,   -35,   0,     -44,   113,   112,   79,    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,   275,   276,   111,   318,   318,   318,   110,   638,   639,   640,   139,   127,   128,   127,   124,   124,
198
                116,   137,   129,   129,   129,   129,   124,   109,   126,   126,   126,   121,   305,   306,   255,   307,   308,   309,   310,   311,
199
                312,   313,   314,   457,   457,   122,   123,   112,   113,   114,   115,   117,   135,   136,   138,   156,   159,   160,   161,   162,
200
                165,   166,   167,   168,   169,   170,   171,   173,   174,   175,   176,   188,   204,   205,   206,   223,   224,   257,   258,   259,
201
                327,   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,   181,   181,   181,   181,   387,   323,   181,   335,   353,   256,   181,   616,
203
                388,   397,   184,   186,   187,   186,   416,   416,   416,   416,   540,   540,   540,   416,   416,   416,   416,   416,   416,   416,
204
                542,   542,   542,   542,   542,   542,   542,   542,   542,   542,   542,   542,   542,   542,   330,   254,   333,   220,   221,   232,
205
                321,   326,   225,   233,   234,   235,   303,   303,   558,   558,   558,   558,   558,   558,   558,   558,   558,   272,   273,   603,
206
                604,   605,   227,   601,   601,   601,   580,   580,   580,   580,   580,   580,   580,   580,   580,   580,   580,   433,   239,   606,
207
                607,   613,   613,   613,   613,   613,   613,   578,   578,   578,   578,   578,   578,   578,   578,   578,   578,   578,   304,   304,
208
                304,   304,   304,   304,   304,   304,   304,   304,   304,   231,   322,   401,   339,   599,   599,   409,   231,   231,   302,   302,
209
                302,   302,   429,   507,   302,   231,   231,   648,   302,   438,   342,   218,   531,   350,   0,     406,   448,   447,   231,   0,
210
                0,     349,   395,   0,     315,   315,   530,   315,   0,     0,     315,   413,   420,   422,   424,   421,   423,   425,   0,     0,
211
                0,     334,   319,   320,   182,   182,   552,   534,   536,   632,   319,   320,   278,   538,   588,   590,   591,   442,   0,     0,
212
                0,     0,     351,   533,   0,     632,   633,   0,     0,     0,     0,     443,   0,     0,     0,     444,   0,     0,     633,   0,
213
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
214
                0,     0,     0,     390,   390,   390,   0,     0,     0,     390,   0,     0,     390,   390,   390,   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,     329,   0,     0,     0,     0,     0,     0,     0,     240,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
218
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
219
                404,   404,
220
        ];
221

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

250
        /** Map of non-terminals to the default state to goto after their reduction */
251
        protected const GotoDefault = [
252
                -8192, 286,   125,   266,   358,   359,   185,   379,   328,   611,   597,   385,   267,   618,   284,   283,   456,   344,   281,   396,
253
                345,   400,   163,   293,   294,   337,   274,   408,   247,   427,   241,   260,   338,   264,   347,   449,   269,   432,   268,   248,
254
                441,   445,   455,   263,   523,   282,   331,   527,   352,   285,   532,   587,   265,   295,   270,   549,   252,   222,   296,   229,
255
                219,   316,   208,   217,   631,   230,   297,   585,   271,   593,   600,   317,   617,   630,   325,   341,
256
        ];
257

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

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

298
        /** Map of symbols to their names */
299
        protected const SymbolToName = [
300
                'end',
301
                'error',
302
                "','",
303
                "'or'",
304
                "'xor'",
305
                "'and'",
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
                "'.'",
341
                "'<<'",
342
                "'>>'",
343
                "'in'",
344
                "'+'",
345
                "'-'",
346
                "'*'",
347
                "'/'",
348
                "'%'",
349
                "'!'",
350
                "'instanceof'",
351
                "'~'",
352
                "'++'",
353
                "'--'",
354
                "'(int)'",
355
                "'(float'",
356
                "'(string)'",
357
                "'(array)'",
358
                "'(object)'",
359
                "'(bool)'",
360
                "'@'",
361
                "'**'",
362
                "'['",
363
                "'new'",
364
                "'clone'",
365
                'integer',
366
                'floating-point number',
367
                'identifier',
368
                'variable name',
369
                'constant',
370
                'variable',
371
                'number',
372
                'string content',
373
                'quoted string',
374
                "'match'",
375
                "'default'",
376
                "'function'",
377
                "'fn'",
378
                "'return'",
379
                "'use'",
380
                "'isset'",
381
                "'empty'",
382
                "'->'",
383
                "'?->'",
384
                "'??->'",
385
                "'list'",
386
                "'array'",
387
                "'heredoc start'",
388
                "'heredoc end'",
389
                "'\${'",
390
                "'{\$'",
391
                "'::'",
392
                "'...'",
393
                "'(expand)'",
394
                'fully qualified name',
395
                'namespaced name',
396
                "'null'",
397
                "'true'",
398
                "'false'",
399
                "'e'",
400
                "'m'",
401
                "'a'",
402
                "'f'",
403
                "'('",
404
                "')'",
405
                "'{'",
406
                "'}'",
407
                "';'",
408
                "']'",
409
                "'\"'",
410
                "'$'",
411
                "'\\\\'",
412
                'whitespace',
413
                'comment',
414
        ];
415

416
        /** Temporary value containing the result of last semantic action (reduction) */
417
        protected mixed $semValue = null;
418

419
        /** Semantic value stack (contains values of tokens and semantic action results) */
420
        protected array $semStack;
421

422
        /** @var Token[] Start attribute stack */
423
        protected array $startTokenStack;
424

425

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