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

nette / latte / 20081577287

09 Dec 2025 11:13PM UTC coverage: 94.967% (+0.06%) from 94.909%
20081577287

push

github

dg
fixed operator ! priority

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

2 existing lines in 1 file now uncovered.

5529 of 5822 relevant lines covered (94.97%)

0.95 hits per line

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

97.92
/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 part of TagParser */
19
trait 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 = 268;
31

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

35
        /** Map of lexer tokens to internal symbols */
36
        protected const TokenToSymbol = [
37
                0,     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
38
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   51,    111,   116,   112,   50,    116,   116,
39
                105,   106,   48,    46,    2,     47,    42,    49,    116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   22,    109,
40
                37,    7,     39,    21,    62,    116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
41
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   64,    116,   110,   29,    116,   116,   103,   116,   116,
42
                116,   101,   104,   116,   116,   116,   116,   116,   116,   102,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
43
                116,   116,   116,   107,   26,    108,   53,    116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
44
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
45
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
46
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
47
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
48
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
49
                116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   116,   1,     3,     4,     5,
50
                6,     8,     9,     10,    11,    12,    13,    14,    15,    16,    17,    18,    19,    20,    23,    24,    25,    27,    28,    30,
51
                31,    32,    33,    34,    35,    36,    38,    40,    41,    43,    44,    45,    52,    54,    55,    56,    57,    58,    59,    60,
52
                61,    63,    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,    92,    93,    113,   94,    95,    96,    97,    114,   115,   98,    99,
54
                100,
55
        ];
56

57
        /** Map of states to a displacement into the self::Action table. The corresponding action for this
58
         *  state/symbol pair is self::Action[self::ActionBase[$state] + $symbol]. If self::ActionBase[$state] is 0, the
59
         *  action is defaulted, i.e. self::ActionDefault[$state] should be used instead. */
60
        protected const ActionBase = [
61
                214,   317,   317,   317,   317,   102,   145,   317,   274,   188,   231,   317,   400,   400,   400,   293,   293,   293,   293,   298,
62
                298,   302,   324,   391,   392,   394,   395,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,
63
                -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,
64
                -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,
65
                -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,
66
                -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   131,   232,   246,   417,   422,   419,   425,   450,   453,   449,
67
                466,   477,   52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    192,   252,   152,   327,
68
                327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   327,   355,   355,   355,
69
                269,   560,   530,   140,   406,   433,   433,   481,   481,   481,   481,   481,   105,   58,    58,    161,   161,   161,   161,   457,
70
                457,   455,   455,   455,   455,   455,   455,   455,   455,   455,   243,   365,   13,    13,    88,    18,    -41,   -41,   -41,   -41,
71
                109,   109,   109,   109,   109,   109,   109,   486,   195,   195,   195,   67,    280,   454,   509,   289,   177,   177,   177,   177,
72
                177,   177,   291,   467,   512,   522,   522,   525,   295,   295,   522,   301,   158,   40,    73,    -40,   -16,   306,   334,   333,
73
                2,     397,   284,   305,   300,   36,    36,    403,   95,    293,   476,   476,   271,   293,   293,   293,   271,   57,    57,    57,
74
                -65,   -33,   74,    239,   430,   239,   239,   239,   254,   107,   344,   345,   47,    346,   346,   115,   65,    348,   350,   346,
75
                346,   160,   65,    65,    297,   290,   341,   187,   77,    341,   299,   299,   168,   27,    363,   362,   367,   343,   342,   435,
76
                213,   253,   296,   294,   337,   273,   363,   362,   367,   316,   3,     329,   330,   286,   286,   286,   286,   286,   286,   286,
77
                286,   286,   286,   213,   292,   33,    308,   368,   369,   6,     383,   387,   321,   303,   429,   286,   339,   328,   322,   465,
78
                336,   17,    213,   470,   434,   326,   245,   340,   304,   472,   389,   323,   440,   207,   370,   223,   441,   225,   439,   256,
79
                390,   468,   444,   0,     -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,
80
                -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   -46,   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,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
84
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     52,    52,    52,    52,    52,    52,    52,
85
                52,    52,    52,    52,    52,    0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     52,
86
                52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,    52,
87
                52,    52,    52,    52,    52,    52,    52,    0,     52,    52,    52,    52,    52,    52,    52,    58,    0,     0,     195,   195,
88
                195,   195,   532,   532,   532,   532,   532,   532,   532,   532,   532,   532,   532,   195,   195,   532,   532,   532,   532,   532,
89
                532,   532,   532,   532,   532,   532,   532,   532,   532,   532,   0,     0,     0,     0,     0,     0,     0,     0,     158,   299,
90
                299,   299,   299,   299,   299,   158,   158,   0,     0,     0,     0,     195,   195,   0,     0,     0,     158,   299,   0,     0,
91
                0,     0,     0,     0,     293,   293,   293,   158,   346,   346,   271,   0,     0,     299,   299,   0,     0,     0,     0,     0,
92
                0,     0,     0,     0,     0,     0,     286,   33,    286,   286,   286,
93
        ];
94

95
        /** Table of actions. Indexed according to self::ActionBase comment. */
96
        protected const Action = [
97
                33,    34,    -279,  -50,   -279,  35,    -48,   36,    181,   182,   37,    38,    39,    40,    41,    42,    43,    -47,   1,     196,
98
                44,    574,   575,   211,   -231,  556,   390,   0,     -192,  572,   294,   390,   253,   254,   200,   7,     295,   296,   12,    200,
99
                -192,  297,   298,   215,   -231,  -231,  -231,  -8190, 29,    11,    558,   557,   580,   578,   579,   53,    54,    55,    13,    28,
100
                -191,  371,   372,   370,   49,    232,   299,   14,    216,   217,   218,   299,   -191,  22,    -47,   56,    57,    58,    59,    20,
101
                180,   60,    61,    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
102
                79,    80,    81,    381,   199,   371,   372,   370,   -279,  200,   375,   427,   -279,  426,   -8190, 82,    427,   102,   426,   -52,
103
                348,   201,   202,   374,   373,   203,   388,   385,   389,   386,   583,   -232,  369,   368,   378,   377,   380,   379,   376,   382,
104
                383,   384,   660,   -8190, -8190, -8190, 661,   381,   371,   372,   370,   -232,  -232,  -232,  375,   -8190, -8190, -8190, 173,   174,
105
                -191,  -8190, 194,   -8190, -8190, -8190, -8190, 197,   45,    -8190, 241,   207,   -191,  305,   104,   369,   368,   390,   306,   377,
106
                242,   243,   376,   382,   307,   308,   427,   31,    426,   392,   381,   371,   372,   370,   -29,   -8190, 23,    375,   -8191, -8191,
107
                -8191, -8191, 72,    73,    74,    75,    76,    427,   438,   426,   197,   45,    99,    106,   207,   536,   305,   299,   369,   368,
108
                96,    306,   377,   242,   243,   376,   382,   307,   308,   107,   390,   108,   649,   381,   371,   372,   370,   214,   16,    24,
109
                375,   77,    78,    79,    80,    81,    388,   199,   389,   21,    185,   438,   18,    197,   45,    -8190, -8190, 207,   82,    305,
110
                97,    369,   368,   109,   306,   377,   242,   243,   376,   382,   307,   308,   -8190, -8190, -8190, 206,   381,   371,   372,   370,
111
                204,   205,   25,    375,   100,   73,    74,    75,    76,    299,   -8190, 199,   -8190, -8190, 438,   -23,   197,   45,    173,   174,
112
                207,   -80,   305,   -80,   369,   368,   -17,   306,   377,   242,   243,   376,   382,   307,   308,   32,    252,   3,     179,   381,
113
                371,   372,   370,   369,   368,   26,    375,   -16,   -80,   -80,   -8190, -8190, -8190, -277,  -275,  -277,  -275,  438,   17,    197,
114
                45,    -8190, -8190, 207,   -229,  305,   98,    369,   368,   82,    306,   377,   242,   243,   376,   382,   307,   308,   -8190, -8190,
115
                -8190, 105,   381,   195,   -229,  -229,  -229,  103,   101,   375,   234,   390,   332,   -229,  -8190, 287,   -8190, 662,   354,   584,
116
                438,   585,   197,   45,    400,   -236,  207,   -200,  305,   172,   257,   258,   259,   306,   377,   242,   243,   376,   382,   307,
117
                308,   250,   569,   371,   372,   370,   0,     -80,   74,    75,    76,    46,    47,    15,    83,    84,    85,    86,    87,    88,
118
                89,    90,    91,    92,    93,    94,    95,    -262,  -261,  657,   369,   368,   284,   -260,  -236,  -235,  -8190, -8190, -8190, -277,
119
                -275,  -234,  -233,  -277,  -275,  381,   286,   2,     4,     5,     6,     8,     375,   9,     -8190, 10,    -8190, -8190, -8190, -8190,
120
                480,   482,   -8190, -8190, -8190, 197,   45,    27,    50,    207,   -225,  305,   51,    192,   193,   249,   306,   377,   242,   243,
121
                376,   382,   307,   308,   -8190, -8190, -8190, 369,   368,   524,   -225,  -225,  -225,  570,   101,   439,   542,   548,   550,   -225,
122
                552,   604,   -8190, -29,   -8190, -8190, -8190, -8190, -22,   519,   -8190, -8190, -8190, -8191, -8191, -8191, -8191, -8191, -227,  1,
123
                198,   1,     198,   340,   261,   344,   261,   390,   561,   390,   572,   525,   572,   -8190, -8190, -8190, 629,   659,   -227,  -227,
124
                -227,  19,    52,    298,   297,   298,   269,   -227,  401,   658,   -232,  -8190, 535,   -8190, -8190, -8190, -8190, 351,   656,   -235,
125
                48,    613,   48,    -8190, -8190, -8190, 232,   299,   232,   299,   -232,  -232,  -232,  -226,  627,   601,   -228,  362,   573,   -191,
126
                617,   -8190, 652,   -8190, -8190, -8190, -225,  356,   299,   30,    0,     -191,  0,     -226,  -226,  -226,  -228,  -228,  -228,  0,
127
                0,     554,   -226,  556,   0,     -228,  -225,  -225,  -225,  219,   220,   221,   0,     0,     -234,  -225,  0,     0,     251,   0,
128
                425,   0,     0,     0,     0,     0,     0,     0,     558,   557,
129
        ];
130

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

168
        /** Map of states to their default action */
169
        protected const ActionDefault = [
170
                8191,  273,   273,   31,    273,   8191,  8191,  273,   8191,  8191,  8191,  29,    8191,  8191,  29,    8191,  8191,  8191,  8191,  39,
171
                29,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  223,   223,   223,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
172
                8191,  8191,  8191,  8191,  8191,  10,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
173
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
174
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,
175
                8191,  8191,  29,    8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  274,   274,   8191,  8191,  8191,  8191,  8191,  8191,  8191,
176
                8191,  8191,  1,     280,   281,   85,    79,    224,   276,   278,   81,    84,    82,    43,    44,    56,    123,   125,   159,   124,
177
                99,    104,   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,   115,   116,   97,    98,    171,   160,   158,   157,
178
                121,   122,   126,   129,   96,    127,   128,   146,   147,   144,   145,   148,   8191,  8191,  8191,  149,   150,   151,   152,   8191,
179
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  8191,  153,   130,   71,    71,    71,    8191,  8191,  11,    8191,  8191,
180
                8191,  8191,  8191,  8191,  8191,  8191,  8191,  214,   136,   137,   139,   214,   176,   213,   155,   8191,  8191,  8191,  8191,  8191,
181
                8191,  8191,  8191,  8191,  219,   118,   120,   197,   131,   132,   100,   225,   8191,  8191,  8191,  218,   8191,  288,   225,   225,
182
                225,   34,    34,    34,    8191,  92,    92,    8191,  57,    34,    8191,  8191,  8191,  34,    34,    34,    2,     8191,  8191,  8191,
183
                203,   232,   225,   142,   8191,  133,   134,   135,   59,    8191,  190,   8191,  28,    175,   8191,  28,    28,    8191,  246,   247,
184
                248,   28,    28,    28,    178,   36,    73,    28,    28,    73,    8191,  8191,  28,    8191,  8191,  8191,  8191,  8191,  8191,  8191,
185
                8191,  208,   8191,  230,   244,   193,   15,    20,    21,    8191,  208,   229,   227,   140,   141,   143,   163,   164,   165,   166,
186
                167,   168,   169,   271,   8191,  267,   196,   8191,  8191,  225,   8191,  8191,  287,   8191,  225,   138,   8191,  204,   251,   8191,
187
                226,   225,   272,   8191,  8191,  8191,  60,    8191,  8191,  8191,  8191,  205,   8191,  8191,  8191,  8191,  8191,  8191,  8191,  55,
188
                8191,  8191,  8191,
189
        ];
190

191
        /** Map of non-terminals to a displacement into the self::Goto table. The corresponding goto state for this
192
         *  non-terminal/state pair is self::Goto[self::GotoBase[$nonTerminal] + $state] (unless defaulted) */
193
        protected const GotoBase = [
194
                0,     0,     -1,    0,     0,     0,     108,   0,     247,   -141,  37,    -20,   0,     110,   61,    0,     0,     0,     0,     102,
195
                169,   54,    -21,   288,   -10,   60,    0,     72,    0,     78,    96,    0,     0,     -65,   -3,    5,     -5,    166,   0,     0,
196
                -243,  34,    0,     66,    0,     0,     -19,   6,     0,     0,     0,     56,    0,     0,     0,     0,     1,     -50,   0,     0,
197
                0,     28,    39,    3,     58,    45,    42,    0,     0,     -15,   12,    0,     43,    116,   107,   76,    0,     0,
198
        ];
199

200
        /** Table of states to goto after reduction. Indexed according to self::GotoBase comment. */
201
        protected const Goto = [
202
                112,   112,   111,   112,   450,   331,   112,   282,   283,   451,   111,   343,   361,   452,   140,   128,   129,   128,   125,   125,
203
                117,   138,   130,   130,   130,   130,   125,   110,   127,   127,   127,   122,   313,   314,   263,   315,   316,   317,   318,   319,
204
                320,   321,   322,   466,   466,   123,   124,   113,   114,   115,   116,   118,   136,   137,   139,   157,   160,   161,   162,   163,
205
                165,   166,   167,   168,   169,   170,   171,   175,   176,   177,   178,   190,   191,   208,   209,   210,   228,   229,   265,   266,
206
                267,   335,   141,   142,   143,   144,   145,   146,   147,   148,   149,   150,   151,   152,   153,   154,   155,   158,   119,   120,
207
                130,   131,   121,   159,   132,   133,   156,   134,   135,   183,   183,   183,   183,   395,   631,   183,   653,   654,   655,   183,
208
                264,   396,   405,   186,   188,   189,   188,   424,   424,   424,   424,   553,   553,   553,   553,   424,   424,   424,   424,   424,
209
                424,   424,   555,   555,   555,   555,   555,   555,   555,   555,   555,   555,   555,   555,   555,   555,   555,   338,   262,   341,
210
                225,   226,   238,   329,   334,   230,   231,   239,   240,   310,   310,   571,   571,   571,   571,   571,   571,   571,   571,   571,
211
                441,   616,   616,   616,   616,   311,   311,   311,   311,   311,   311,   311,   311,   311,   311,   311,   330,   326,   326,   326,
212
                326,   628,   628,   628,   628,   628,   628,   594,   594,   594,   594,   594,   594,   594,   594,   594,   594,   594,   591,   591,
213
                591,   591,   591,   591,   591,   591,   591,   591,   591,   279,   280,   618,   619,   620,   409,   614,   614,   312,   312,   312,
214
                312,   312,   312,   312,   312,   312,   312,   312,   309,   309,   309,   309,   237,   347,   309,   446,   350,   233,   309,   237,
215
                237,   414,   457,   456,   274,   517,   417,   357,   403,   237,   237,   663,   543,   437,   244,   547,   549,   223,   537,   537,
216
                454,   237,   551,   603,   605,   606,   358,   184,   184,   323,   323,   647,   323,   621,   622,   323,   421,   428,   430,   432,
217
                429,   431,   433,   327,   328,   544,   342,   0,     647,   648,   0,     0,     0,     0,     327,   328,   285,   0,     0,     0,
218
                648,   0,     0,     0,     0,     0,     0,     359,   546,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
219
                0,     0,     0,     0,     0,     0,     0,     0,     0,     398,   398,   398,   0,     0,     0,     0,     0,     398,   0,     0,
220
                0,     398,   398,   398,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
221
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
222
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     337,
223
                245,   246,   0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
224
                0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
225
                0,     0,     0,     0,     0,     0,     0,     412,   412,
226
        ];
227

228
        /** Table indexed analogously to self::Goto. If self::GotoCheck[self::GotoBase[$nonTerminal] + $state] != $nonTerminal
229
         *  then the goto state is defaulted, i.e. self::GotoDefault[$nonTerminal] should be used. */
230
        protected const GotoCheck = [
231
                2,     2,     2,     2,     40,    63,    2,     36,    36,    40,    2,     46,    46,    40,    2,     2,     2,     2,     2,     2,
232
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
233
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
234
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
235
                2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
236
                2,     2,     2,     2,     2,     2,     2,     2,     2,     6,     6,     6,     6,     13,    74,    6,     9,     9,     9,     6,
237
                73,    13,    19,    6,     6,     6,     6,     33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
238
                33,    33,    57,    57,    57,    57,    57,    57,    57,    57,    57,    57,    57,    57,    57,    57,    57,    69,    22,    22,
239
                22,    22,    22,    22,    22,    22,    22,    22,    22,    24,    24,    24,    24,    24,    24,    24,    24,    24,    24,    24,
240
                37,    69,    69,    69,    69,    47,    47,    47,    47,    47,    47,    47,    47,    47,    47,    47,    20,    56,    56,    56,
241
                56,    69,    69,    69,    69,    69,    69,    61,    61,    61,    61,    61,    61,    61,    61,    61,    61,    61,    62,    62,
242
                62,    62,    62,    62,    62,    62,    62,    62,    62,    70,    70,    70,    70,    70,    21,    69,    69,    64,    64,    64,
243
                64,    64,    64,    64,    64,    64,    64,    64,    8,     8,     8,     8,     10,    25,    8,     11,    11,    66,    8,     10,
244
                10,    11,    11,    11,    43,    43,    27,    11,    11,    10,    10,    10,    11,    29,    66,    35,    35,    65,    35,    35,
245
                41,    10,    35,    35,    35,    35,    34,    6,     6,     23,    23,    75,    23,    72,    72,    23,    30,    30,    30,    30,
246
                30,    30,    30,    14,    14,    51,    23,    -1,    75,    75,    -1,    -1,    -1,    -1,    14,    14,    14,    -1,    -1,    -1,
247
                75,    -1,    -1,    -1,    -1,    -1,    -1,    10,    10,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
248
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    6,     6,     6,     -1,    -1,    -1,    -1,    -1,    6,     -1,    -1,
249
                -1,    6,     6,     6,     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
250
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
251
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    8,
252
                8,     8,     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
253
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
254
                -1,    -1,    -1,    -1,    -1,    -1,    -1,    23,    23,
255
        ];
256

257
        /** Map of non-terminals to the default state to goto after their reduction */
258
        protected const GotoDefault = [
259
                -8192, 293,   126,   256,   366,   367,   187,   387,   336,   626,   612,   393,   272,   633,   291,   290,   465,   352,   288,   404,
260
                353,   408,   164,   300,   301,   345,   281,   416,   255,   435,   248,   268,   346,   270,   355,   458,   276,   440,   275,   247,
261
                449,   453,   464,   273,   533,   289,   339,   212,   540,   360,   292,   545,   602,   271,   302,   277,   562,   260,   227,   303,
262
                -8192, 235,   224,   324,   213,   222,   646,   236,   304,   600,   278,   608,   615,   325,   632,   645,   333,   349,
263
        ];
264

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

286
        /** Map of rules to the length of their right-hand side, which is the number of elements that have to
287
         *  be popped from the stack(s) on reduction. */
288
        protected const RuleToLength = [
289
                1,     2,     2,     2,     2,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
290
                1,     1,     1,     1,     1,     1,     1,     1,     0,     1,     2,     0,     1,     3,     0,     1,     0,     1,     7,     0,
291
                2,     1,     3,     3,     4,     1,     3,     1,     2,     1,     1,     2,     0,     1,     3,     4,     6,     1,     2,     1,
292
                1,     1,     1,     1,     1,     3,     3,     3,     3,     3,     3,     0,     1,     0,     2,     2,     4,     1,     3,     1,
293
                2,     2,     3,     2,     3,     1,     2,     2,     1,     2,     3,     3,     0,     3,     3,     1,     1,     3,     3,     3,
294
                4,     1,     1,     2,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     2,     2,     2,
295
                2,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
296
                2,     2,     2,     2,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,     5,     4,     3,
297
                3,     4,     4,     2,     2,     2,     2,     2,     2,     2,     1,     8,     12,    9,     3,     2,     1,     1,     0,     4,
298
                2,     1,     3,     2,     2,     4,     2,     4,     4,     6,     1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
299
                1,     0,     1,     1,     3,     5,     3,     4,     1,     1,     3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
300
                3,     2,     3,     0,     1,     1,     3,     1,     1,     1,     1,     1,     1,     1,     3,     1,     1,     1,     4,     1,
301
                4,     6,     4,     4,     1,     1,     3,     3,     3,     1,     4,     1,     3,     1,     4,     3,     3,     3,     3,     3,
302
                1,     3,     1,     1,     3,     1,     4,     1,     3,     1,     1,     1,     3,     0,     1,     2,     3,     4,     3,     4,
303
                2,     2,     2,     2,     1,     2,     1,     1,     1,     4,     3,     3,     3,     3,     3,     6,     3,     1,     1,     2,
304
                1,
305
        ];
306

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

427
        /** Temporary value containing the result of last semantic action (reduction) */
428
        protected mixed $semValue = null;
429

430
        /** Semantic value stack (contains values of tokens and semantic action results) */
431
        protected array $semStack;
432

433
        /** @var Token[] Start attribute stack */
434
        protected array $startTokenStack;
435

436

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