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

nette / latte / 16317493748

16 Jul 2025 10:49AM UTC coverage: 93.696% (-0.002%) from 93.698%
16317493748

push

github

dg
PrintContent: refactoring and updated operator precedence and associativity table

23 of 23 new or added lines in 1 file covered. (100.0%)

30 existing lines in 15 files now uncovered.

5187 of 5536 relevant lines covered (93.7%)

0.94 hits per line

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

97.77
/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 = 257;
31

32
        /** Number of non-leaf states */
33
        protected const NumNonLeafStates = 353;
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
                274,   318,   318,   318,   318,   100,   122,   318,   275,   179,   232,   318,   399,   399,   399,   221,   221,   221,   221,   305,
61
                305,   277,   295,   421,   422,   423,   425,   -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,   38,    238,   258,   446,   452,   448,   453,   470,   471,   469,   474,
66
                477,   52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    165,   104,   431,   157,   157,
67
                157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   157,   325,   325,   325,   311,
68
                427,   207,   263,   405,   389,   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,   273,   13,    63,    63,    63,    262,   262,   262,   262,
70
                262,   281,   109,   109,   109,   190,   402,   462,   301,   387,   387,   387,   387,   387,   387,   302,   478,   -22,   133,   133,
71
                156,   149,   149,   133,   230,   40,    218,   -35,   324,   487,   357,   145,   223,   2,     429,   247,   248,   306,   36,    221,
72
                472,   472,   221,   221,   221,   443,   121,   121,   121,   55,    142,   39,    283,   454,   283,   283,   283,   41,    -75,   266,
73
                352,   343,   344,   266,   66,    99,    72,    366,   367,   352,   352,   129,   72,    72,    309,   308,   315,   146,   76,    315,
74
                296,   296,   135,   28,    369,   368,   378,   338,   337,   401,   206,   269,   310,   292,   336,   243,   369,   368,   378,   276,
75
                6,     334,   279,   279,   279,   279,   279,   279,   279,   279,   279,   279,   206,   451,   33,    314,   379,   392,   17,    397,
76
                398,   303,   300,   458,   279,   304,   330,   288,   460,   335,   24,    206,   473,   322,   356,   271,   312,   396,   299,   475,
77
                404,   323,   466,   181,   395,   214,   467,   235,   456,   270,   409,   455,   468,   0,     -44,   -44,   -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
                0,     0,     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,     52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    0,     0,     0,     0,     0,     0,
84
                0,     0,     0,     0,     0,     0,     0,     0,     52,    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,     440,   52,    52,
86
                52,    52,    52,    52,    52,    0,     109,   109,   109,   109,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,
87
                -23,   109,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   -23,   0,     0,     0,     0,     0,     0,
88
                0,     230,   296,   296,   296,   296,   296,   296,   230,   230,   0,     0,     0,     0,     109,   109,   0,     0,     230,   296,
89
                0,     0,     0,     0,     0,     0,     0,     221,   221,   221,   230,   352,   0,     296,   296,   0,     0,     0,     266,   0,
90
                0,     0,     0,     0,     0,     279,   33,    279,   279,   279,
91
        ];
92

93
        /** Table of actions. Indexed according to self::ActionBase comment. */
94
        protected const Action = [
95
                33,    34,    -270,  31,    -270,  35,    -50,   36,    179,   180,   37,    38,    39,    40,    41,    42,    43,    -48,   1,     193,
96
                44,    557,   558,   205,   -47,   539,   380,   -223,  0,     555,   284,   522,   242,   243,   196,   7,     285,   286,   12,    -47,
97
                -221,  287,   288,   208,   537,   178,   539,   -223,  -223,  -223,  541,   540,   563,   561,   562,   53,    54,    55,    13,    28,
98
                -221,  -221,  -221,  415,   172,   224,   289,   197,   11,    -221,  198,   541,   540,   22,    14,    56,    57,    58,    20,    59,
99
                60,    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
100
                80,    101,   195,   361,   362,   360,   -270,  -8190, -8190, 417,   -270,  416,   -8190, 81,    -8190, -8190, -8190, -8191, -8191, -8191,
101
                -8191, 72,    73,    74,    75,    361,   362,   360,   566,   359,   358,   191,   -8190, 380,   -8190, -8190, -8190, 234,   -8190, -8190,
102
                -8190, -8190, 207,   371,   196,   -78,   -185,  -78,   382,   -8190, 365,   359,   358,   76,    77,    78,    79,    80,    -185,  195,
103
                -8190, -8190, -8190, 194,   45,    371,   49,    201,   -8190, 295,   81,    -78,   365,   289,   296,   367,   235,   236,   366,   372,
104
                297,   298,   361,   362,   360,   194,   45,    105,   378,   201,   379,   295,   23,    -8190, -8190, -218,  296,   367,   235,   236,
105
                366,   372,   297,   298,   426,   73,    74,    75,    359,   358,   -8190, -8190, -8190, 95,    24,    -218,  -218,  -218,  30,    417,
106
                106,   416,   371,   -268,  -218,  -268,  426,   -52,   -8190, 365,   -8190, -8190, -8190, -184,  -8190, 361,   362,   360,   212,   213,
107
                214,   107,   194,   45,    16,    -184,  201,   241,   295,   -78,   359,   358,   -224,  296,   367,   235,   236,   366,   372,   297,
108
                298,   359,   358,   338,   18,    -23,   -8190, -8190, -8190, -17,   -16,   25,    -224,  -224,  -224,  371,   96,    108,   361,   362,
109
                360,   -184,  365,   426,   -8190, 641,   -8190, -8190, -8190, 642,   -8190, -8190, 172,   -184,  196,   194,   45,    199,   17,    201,
110
                380,   295,   630,   -22,   359,   358,   296,   367,   235,   236,   366,   372,   297,   298,   -8190, -8190, -8190, 97,    371,   21,
111
                183,   361,   362,   360,   26,    365,   104,   -268,  -8190, -8190, -8190, -268,  -8190, 195,   -8190, -8190, 426,   192,   194,   45,
112
                81,    200,   201,   -224,  295,   321,   -8190, 359,   358,   296,   367,   235,   236,   366,   372,   297,   298,   -266,  417,   -266,
113
                416,   371,   102,   -224,  -224,  -224,  380,   100,   365,   417,   643,   416,   -184,  32,    259,   3,     177,   -29,   -8190, 426,
114
                277,   194,   45,    -193,  -184,  201,   29,    295,   344,   567,   568,   -253,  296,   367,   235,   236,   366,   372,   297,   298,
115
                390,   164,   361,   362,   360,   240,   209,   210,   211,   638,   46,    47,    15,    82,    83,    84,    85,    86,    87,    88,
116
                89,    90,    91,    92,    93,    94,    -252,  19,    359,   358,   -8190, -8190, -8190, -251,  -8190, -8190, -8190, -227,  -226,  -225,
117
                2,     4,     371,   361,   362,   360,   5,     6,     -8190, 365,   -8190, -8190, -8190, 103,   378,   8,     379,   467,   469,   380,
118
                274,   -266,  194,   45,    -220,  -266,  201,   -218,  295,   9,     10,    27,    50,    296,   367,   235,   236,   366,   372,   297,
119
                298,   51,    189,   371,   -220,  -220,  -220,  -218,  -218,  -218,  365,   100,   99,    -220,  98,    190,   -218,  289,   239,   289,
120
                276,   510,   553,   364,   363,   -227,  52,    375,   427,   376,   -8190, -8190, -8190, 525,   368,   367,   370,   369,   366,   372,
121
                373,   374,   359,   358,   -219,  531,   533,   535,   -8190, 585,   -8190, -8190, -8190, -29,   -8190, -8190, -8190, -8190, -8191, -8191,
122
                -8191, -8191, -8191, 1,     -219,  -219,  -219,  505,   250,   226,   329,   380,   333,   -219,  555,   1,     544,   511,   610,   552,
123
                250,   258,   352,   380,   640,   -226,  555,   288,   582,   246,   247,   248,   391,   639,   521,   341,   637,   594,   287,   288,
124
                608,   598,   289,   633,   48,    346,   0,     556,   0,     0,     224,   289,   0,     0,     0,     0,     48,    0,     0,     0,
125
                0,     0,     224,   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
                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,    0,     69,    70,    62,    0,     73,    74,    106,   76,    77,    21,    2,     80,    81,    2,     0,
133
                62,    85,    86,    87,    67,    6,     69,    82,    83,    84,    94,    95,    96,    97,    98,    3,     4,     5,     22,    103,
134
                82,    83,    84,    86,    26,    109,   110,   26,    2,     91,    29,    94,    95,    21,    2,     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
                48,    2,     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,    70,    23,    24,    25,    2,     27,    28,
138
                29,    30,    104,   43,    21,    0,     91,    2,     2,     86,    50,    29,    30,    44,    45,    46,    47,    48,    103,   50,
139
                3,     4,     5,     63,    64,    43,    103,   67,    3,     69,    61,    26,    50,    110,   74,    75,    76,    77,    78,    79,
140
                80,    81,    3,     4,     5,     63,    64,    6,     67,    67,    69,    69,    92,    44,    45,    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,    91,    27,    3,     4,     5,     82,    83,
143
                84,    6,     63,    64,    6,     103,   67,    91,    69,    104,   29,    30,    62,    74,    75,    76,    77,    78,    79,    80,
144
                81,    29,    30,    45,    6,     22,    3,     4,     5,     22,    22,    92,    82,    83,    84,    43,    7,     7,     3,     4,
145
                5,     91,    50,    104,   21,    67,    23,    24,    25,    71,    27,    28,    26,    103,   21,    63,    64,    26,    22,    67,
146
                70,    69,    72,    22,    29,    30,    74,    75,    76,    77,    78,    79,    80,    81,    3,     4,     5,     22,    43,    89,
147
                90,    3,     4,     5,     92,    50,    22,    104,   3,     4,     5,     108,   21,    50,    23,    24,    104,   22,    63,    64,
148
                61,    29,    67,    62,    69,    68,    21,    29,    30,    74,    75,    76,    77,    78,    79,    80,    81,    0,     96,    2,
149
                98,    43,    62,    82,    83,    84,    70,    92,    50,    96,    71,    98,    91,    99,    100,   101,   102,   104,   72,    104,
150
                75,    63,    64,    91,    103,   67,    62,    69,    79,    88,    88,    103,   74,    75,    76,    77,    78,    79,    80,    81,
151
                92,    91,    3,     4,     5,     91,    82,    83,    84,    106,   92,    93,    7,     8,     9,     10,    11,    12,    13,    14,
152
                15,    16,    17,    18,    19,    20,    103,   105,   29,    30,    3,     4,     5,     103,   3,     4,     5,     103,   103,   103,
153
                103,   103,   43,    3,     4,     5,     103,   103,   21,    50,    23,    24,    25,    22,    67,    103,   69,    52,    53,    70,
154
                104,   104,   63,    64,    62,    108,   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,    105,   91,    105,   103,   91,    110,   103,   110,
156
                104,   104,   104,   63,    64,    103,   105,   67,    104,   69,    3,     4,     5,     104,   74,    75,    76,    77,    78,    79,
157
                80,    81,    29,    30,    62,    104,   104,   104,   21,    104,   23,    24,    25,    104,   27,    28,    29,    30,    31,    32,
158
                33,    34,    35,    62,    82,    83,    84,    104,   67,    62,    104,   70,    104,   91,    73,    62,    104,   104,   104,   108,
159
                67,    105,   107,   70,    106,   103,   73,    86,    108,   82,    83,    84,    106,   106,   106,   106,   106,   106,   85,    86,
160
                106,   108,   110,   108,   103,   108,   -1,    109,   -1,    -1,    109,   110,   -1,    -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,  264,   264,   31,    264,   8191,  8191,  264,   8191,  8191,  8191,  29,    8191,  8191,  29,    8191,  8191,  8191,  8191,  39,
167
                29,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  216,   216,   216,   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,  265,   265,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
172
                8191,  1,     271,   272,   83,    77,    217,   267,   269,   79,    82,    80,    43,    44,    56,    120,   122,   155,   121,   96,
173
                101,   102,   103,   104,   105,   106,   107,   108,   109,   110,   111,   112,   113,   94,    95,    167,   156,   154,   153,   118,
174
                119,   123,   126,   93,    8191,  124,   125,   143,   144,   141,   142,   145,   8191,  146,   147,   148,   149,   8191,  8191,  8191,
175
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  127,   69,    69,    69,    8191,  8191,  11,    8191,  8191,  8191,  8191,  8191,
176
                8191,  207,   133,   134,   136,   207,   206,   151,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  212,   115,   117,
177
                190,   128,   129,   97,    8191,  8191,  8191,  211,   8191,  279,   218,   218,   218,   218,   34,    34,    34,    8191,  89,    34,
178
                8191,  8191,  34,    34,    34,    8191,  8191,  8191,  8191,  196,   224,   218,   139,   8191,  130,   131,   132,   57,    8191,  8191,
179
                194,   183,   8191,  2,     28,    28,    28,    8191,  237,   238,   239,   28,    28,    28,    171,   36,    71,    28,    28,    71,
180
                8191,  8191,  28,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  201,   8191,  222,   235,   186,   15,    20,    21,    8191,
181
                201,   220,   137,   138,   140,   159,   160,   161,   162,   163,   164,   165,   262,   8191,  258,   189,   8191,  8191,  218,   8191,
182
                8191,  278,   8191,  218,   135,   8191,  197,   242,   8191,  219,   218,   263,   8191,  8191,  8191,  59,    60,    8191,  8191,  8191,
183
                8191,  198,   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,     225,   -131,  15,    -28,   0,     110,   -231,  0,     0,     0,     0,     214,
190
                215,   68,    -14,   254,   -3,    58,    0,     66,    0,     67,    81,    0,     0,     -63,   -16,   6,     126,   221,   0,     0,
191
                -12,   0,     0,     65,    0,     0,     89,    0,     0,     0,     25,    0,     0,     0,     0,     -186,  -45,   0,     0,     13,
192
                24,    185,   35,    38,    -68,   0,     0,     -52,   76,    0,     -55,   220,   218,   45,    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,   315,   315,   315,   110,   316,   317,   275,   139,   127,   128,   127,   124,   124,
198
                116,   137,   129,   129,   129,   129,   124,   109,   126,   126,   126,   121,   302,   303,   252,   304,   305,   306,   307,   308,
199
                309,   310,   311,   453,   453,   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,   202,   203,   204,   221,   222,   254,   255,   256,
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,   181,   181,   181,   181,   327,   385,   181,   634,   635,   636,   181,   332,
203
                351,   386,   184,   186,   187,   186,   414,   414,   414,   414,   536,   536,   536,   414,   414,   414,   414,   414,   272,   273,
204
                225,   597,   597,   597,   538,   538,   538,   538,   538,   538,   538,   538,   538,   538,   538,   538,   237,   609,   609,   609,
205
                609,   609,   609,   251,   330,   218,   219,   230,   318,   323,   223,   231,   232,   233,   300,   300,   554,   554,   554,   554,
206
                554,   554,   554,   554,   554,   602,   603,   320,   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,   229,   253,   612,   299,   299,   299,   299,   229,   229,   299,   438,   395,   429,   299,   434,   340,   229,
209
                229,   644,   319,   404,   444,   443,   399,   439,   337,   347,   393,   440,   229,   628,   526,   312,   312,   407,   312,   425,
210
                503,   312,   216,   348,   527,   0,     548,   530,   532,   628,   629,   0,     331,   534,   584,   586,   587,   411,   418,   420,
211
                419,   421,   629,   0,     182,   182,   269,   270,   599,   600,   601,   0,     0,     0,     0,     349,   529,   0,     0,     0,
212
                0,     0,     0,     0,     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
                0,     388,   388,   388,   0,     0,     388,   0,     0,     388,   388,   388,   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,     326,   0,     0,     0,     0,     0,     0,     0,     238,   0,     0,
217
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
218
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     402,   402,
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,     55,    55,    55,    2,     14,    14,    14,    2,     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,    13,    6,     9,     9,     9,     6,     46,
230
                46,    13,    6,     6,     6,     6,     33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    36,    36,
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,    70,    70,    61,    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,    71,    72,    8,     8,     8,     8,     10,    10,    8,     40,    19,    37,    8,     11,    11,    10,
236
                10,    10,    20,    11,    11,    11,    21,    40,    25,    11,    11,    40,    10,    73,    11,    23,    23,    27,    23,    29,
237
                43,    23,    63,    34,    50,    -1,    35,    35,    35,    73,    73,    -1,    23,    35,    35,    35,    35,    30,    30,    30,
238
                30,    30,    73,    -1,    6,     6,     68,    68,    68,    68,    68,    -1,    -1,    -1,    -1,    10,    10,    -1,    -1,    -1,
239
                -1,    -1,    -1,    -1,    -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
                -1,    6,     6,     6,     -1,    -1,    6,     -1,    -1,    6,     6,     6,     -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,    8,     -1,    -1,    -1,    -1,    -1,    -1,    -1,    8,     -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,    -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,   263,   356,   357,   185,   377,   325,   607,   593,   383,   264,   614,   281,   280,   452,   342,   278,   394,
251
                343,   398,   163,   290,   291,   334,   271,   406,   244,   423,   257,   335,   336,   261,   345,   445,   266,   428,   265,   245,
252
                437,   441,   451,   260,   519,   279,   328,   523,   350,   282,   528,   583,   262,   292,   267,   545,   249,   220,   293,   227,
253
                217,   313,   206,   215,   627,   228,   294,   581,   268,   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,     2,     42,    45,    45,    48,    49,    49,    50,    51,    51,    51,
268
                51,    51,    51,    55,    33,    33,    56,    56,    56,    43,    43,    43,    53,    53,    47,    47,    59,    60,    60,    24,
269
                62,    62,    62,    62,    44,    44,    44,    44,    44,    44,    44,    44,    44,    44,    44,    44,    46,    46,    58,    58,
270
                58,    58,    65,    65,    65,    52,    52,    52,    66,    66,    66,    66,    66,    66,    66,    22,    22,    22,    22,    22,
271
                67,    67,    70,    69,    57,    57,    57,    57,    57,    57,    57,    54,    54,    54,    68,    68,    68,    23,    61,    71,
272
                71,    72,    72,    72,    72,    13,    13,    13,    13,    13,    13,    13,    13,    63,    63,    63,    63,    64,    74,    73,
273
                73,    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,     1,     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,     3,     2,     2,     2,
286
                2,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     5,     4,     3,     3,     4,     4,     2,
287
                2,     2,     2,     2,     2,     2,     1,     8,     12,    9,     3,     0,     4,     2,     1,     3,     2,     2,     4,     2,
288
                4,     4,     6,     1,     1,     1,     1,     1,     1,     1,     1,     3,     1,     1,     0,     1,     1,     3,     5,     3,
289
                4,     1,     1,     3,     1,     1,     1,     1,     1,     1,     1,     1,     1,     3,     2,     3,     0,     1,     1,     3,
290
                1,     1,     1,     1,     1,     1,     3,     1,     1,     4,     1,     4,     6,     4,     4,     1,     1,     3,     3,     3,
291
                1,     4,     1,     3,     1,     4,     3,     3,     3,     3,     3,     1,     3,     1,     1,     3,     1,     4,     1,     3,
292
                1,     1,     1,     3,     0,     1,     2,     3,     4,     3,     4,     2,     2,     2,     2,     1,     2,     1,     1,     1,
293
                4,     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
                "'>>'",
341
                "'in'",
342
                "'+'",
343
                "'-'",
344
                "'*'",
345
                "'/'",
346
                "'%'",
347
                "'!'",
348
                "'instanceof'",
349
                "'~'",
350
                "'++'",
351
                "'--'",
352
                "'(int)'",
353
                "'(float'",
354
                "'(string)'",
355
                "'(array)'",
356
                "'(object)'",
357
                "'(bool)'",
358
                "'@'",
359
                "'**'",
360
                "'['",
361
                "'new'",
362
                "'clone'",
363
                'integer',
364
                'floating-point number',
365
                'identifier',
366
                'variable name',
367
                'constant',
368
                'variable',
369
                'number',
370
                'string content',
371
                'quoted string',
372
                "'match'",
373
                "'default'",
374
                "'function'",
375
                "'fn'",
376
                "'return'",
377
                "'use'",
378
                "'isset'",
379
                "'empty'",
380
                "'->'",
381
                "'?->'",
382
                "'??->'",
383
                "'list'",
384
                "'array'",
385
                "'heredoc start'",
386
                "'heredoc end'",
387
                "'\${'",
388
                "'{\$'",
389
                "'::'",
390
                "'...'",
391
                "'(expand)'",
392
                'fully qualified name',
393
                'namespaced name',
394
                "'null'",
395
                "'true'",
396
                "'false'",
397
                "'e'",
398
                "'m'",
399
                "'a'",
400
                "'f'",
401
                "'('",
402
                "')'",
403
                "'{'",
404
                "'}'",
405
                "';'",
406
                "']'",
407
                "'\"'",
408
                "'$'",
409
                "'\\\\'",
410
                'whitespace',
411
                'comment',
412
        ];
413

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

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

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

423

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