1 #include "php_phalcon.h"
2 #if PHP_VERSION_ID < 70000
3 /* Driver template for the LEMON parser generator.
4 ** The author disclaims copyright to this source code.
5 */
6 /* First off, code is include which follows the "include" declaration
7 ** in the input file. */
8 #include <stdio.h>
9 // 42 "parser.php5.lemon"
10
11 #include "parser.php5.inc.h"
12
13 // 12 "parser.php5.c"
14 /* Next is all token values, in a form suitable for use by makeheaders.
15 ** This section will be null unless lemon is run with the -m switch.
16 */
17 /*
18 ** These constants (all generated automatically by the parser generator)
19 ** specify the various kinds of tokens (terminals) that the parser
20 ** understands.
21 **
22 ** Each symbol here is a terminal symbol in the grammar.
23 */
24 /* Make sure the INTERFACE macro is defined.
25 */
26 #ifndef INTERFACE
27 # define INTERFACE 1
28 #endif
29 /* The next thing included is series of defines which control
30 ** various aspects of the generated parser.
31 ** VVCODETYPE is the data type used for storing terminal
32 ** and nonterminal numbers. "unsigned char" is
33 ** used if there are fewer than 250 terminals
34 ** and nonterminals. "int" is used otherwise.
35 ** VVNOCODE is a number of type VVCODETYPE which corresponds
36 ** to no legal terminal or nonterminal number. This
37 ** number is used to fill in empty slots of the hash
38 ** table.
39 ** VVFALLBACK If defined, this indicates that one or more tokens
40 ** have fall-back values which should be used if the
41 ** original value of the token will not parse.
42 ** VVACTIONTYPE is the data type used for storing terminal
43 ** and nonterminal numbers. "unsigned char" is
44 ** used if there are fewer than 250 rules and
45 ** states combined. "int" is used otherwise.
46 ** phvolt_TOKENTYPE is the data type used for minor tokens given
47 ** directly to the parser from the tokenizer.
48 ** VVMINORTYPE is the data type used for all minor tokens.
49 ** This is typically a union of many types, one of
50 ** which is phvolt_TOKENTYPE. The entry in the union
51 ** for base tokens is called "vv0".
52 ** VVSTACKDEPTH is the maximum depth of the parser's stack.
53 ** phvolt_ARG_SDECL A static variable declaration for the %extra_argument
54 ** phvolt_ARG_PDECL A parameter declaration for the %extra_argument
55 ** phvolt_ARG_STORE Code to store %extra_argument into vvpParser
56 ** phvolt_ARG_FETCH Code to extract %extra_argument from vvpParser
57 ** VVNSTATE the combined number of states.
58 ** VVNRULE the number of rules in the grammar
59 ** VVERRORSYMBOL is the code number of the error symbol. If not
60 ** defined, then do no error processing.
61 */
62 #define VVCODETYPE unsigned char
63 #define VVNOCODE 131
64 #define VVACTIONTYPE unsigned short int
65 #define phvolt_TOKENTYPE phvolt_parser_token*
66 typedef union {
67 phvolt_TOKENTYPE vv0;
68 zval* vv228;
69 int vv261;
70 } VVMINORTYPE;
71 #define VVSTACKDEPTH 100
72 #define phvolt_ARG_SDECL phvolt_parser_status *status;
73 #define phvolt_ARG_PDECL ,phvolt_parser_status *status
74 #define phvolt_ARG_FETCH phvolt_parser_status *status = vvpParser->status
75 #define phvolt_ARG_STORE vvpParser->status = status
76 #define VVNSTATE 365
77 #define VVNRULE 158
78 #define VVERRORSYMBOL 89
79 #define VVERRSYMDT vv261
80 #define VV_NO_ACTION (VVNSTATE+VVNRULE+2)
81 #define VV_ACCEPT_ACTION (VVNSTATE+VVNRULE+1)
82 #define VV_ERROR_ACTION (VVNSTATE+VVNRULE)
83
84 /* Next are that tables used to determine what action to take based on the
85 ** current state and lookahead token. These tables are used to implement
86 ** functions that take a state number and lookahead value and return an
87 ** action integer.
88 **
89 ** Suppose the action integer is N. Then the action is determined as
90 ** follows
91 **
92 ** 0 <= N < VVNSTATE Shift N. That is, push the lookahead
93 ** token onto the stack and goto state N.
94 **
95 ** VVNSTATE <= N < VVNSTATE+VVNRULE Reduce by rule N-VVNSTATE.
96 **
97 ** N == VVNSTATE+VVNRULE A syntax error has occurred.
98 **
99 ** N == VVNSTATE+VVNRULE+1 The parser accepts its input.
100 **
101 ** N == VVNSTATE+VVNRULE+2 No such action. Denotes unused
102 ** slots in the vv_action[] table.
103 **
104 ** The action table is constructed as a single large table named vv_action[].
105 ** Given state S and lookahead X, the action is computed as
106 **
107 ** vv_action[ vv_shift_ofst[S] + X ]
108 **
109 ** If the index value vv_shift_ofst[S]+X is out of range or if the value
110 ** vv_lookahead[vv_shift_ofst[S]+X] is not equal to X or if vv_shift_ofst[S]
111 ** is equal to VV_SHIFT_USE_DFLT, it means that the action is not in the table
112 ** and that vv_default[S] should be used instead.
113 **
114 ** The formula above is for computing the action when the lookahead is
115 ** a terminal symbol. If the lookahead is a non-terminal (as occurs after
116 ** a reduce action) then the vv_reduce_ofst[] array is used in place of
117 ** the vv_shift_ofst[] array and VV_REDUCE_USE_DFLT is used in place of
118 ** VV_SHIFT_USE_DFLT.
119 **
120 ** The following are the tables generated in this section:
121 **
122 ** vv_action[] A single table containing all actions.
123 ** vv_lookahead[] A table containing the lookahead for each entry in
124 ** vv_action. Used to detect hash collisions.
125 ** vv_shift_ofst[] For each state, the offset into vv_action for
126 ** shifting terminals.
127 ** vv_reduce_ofst[] For each state, the offset into vv_action for
128 ** shifting non-terminals after a reduce.
129 ** vv_default[] Default action for each state.
130 */
131 static VVACTIONTYPE vv_action[] = {
132 /* 0 */ 85, 95, 111, 63, 55, 57, 69, 65, 67, 75,
133 /* 10 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
134 /* 20 */ 59, 92, 61, 87, 90, 91, 99, 83, 365, 245,
135 /* 30 */ 87, 90, 91, 99, 83, 300, 51, 49, 53, 46,
136 /* 40 */ 43, 59, 92, 61, 87, 90, 91, 99, 83, 33,
137 /* 50 */ 110, 299, 194, 215, 198, 85, 95, 196, 63, 55,
138 /* 60 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
139 /* 70 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
140 /* 80 */ 91, 99, 83, 331, 176, 85, 95, 195, 63, 55,
141 /* 90 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
142 /* 100 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
143 /* 110 */ 91, 99, 83, 35, 265, 85, 95, 39, 63, 55,
144 /* 120 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
145 /* 130 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
146 /* 140 */ 91, 99, 83, 347, 342, 92, 61, 87, 90, 91,
147 /* 150 */ 99, 83, 338, 174, 266, 197, 198, 88, 85, 95,
148 /* 160 */ 139, 63, 55, 57, 69, 65, 67, 75, 77, 79,
149 /* 170 */ 81, 71, 73, 51, 49, 53, 46, 43, 59, 92,
150 /* 180 */ 61, 87, 90, 91, 99, 83, 118, 29, 85, 95,
151 /* 190 */ 140, 63, 55, 57, 69, 65, 67, 75, 77, 79,
152 /* 200 */ 81, 71, 73, 51, 49, 53, 46, 43, 59, 92,
153 /* 210 */ 61, 87, 90, 91, 99, 83, 134, 42, 85, 95,
154 /* 220 */ 503, 63, 55, 57, 69, 65, 67, 75, 77, 79,
155 /* 230 */ 81, 71, 73, 51, 49, 53, 46, 43, 59, 92,
156 /* 240 */ 61, 87, 90, 91, 99, 83, 46, 43, 59, 92,
157 /* 250 */ 61, 87, 90, 91, 99, 83, 321, 322, 323, 324,
158 /* 260 */ 325, 326, 504, 111, 144, 94, 309, 327, 146, 85,
159 /* 270 */ 95, 97, 63, 55, 57, 69, 65, 67, 75, 77,
160 /* 280 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
161 /* 290 */ 92, 61, 87, 90, 91, 99, 83, 85, 95, 147,
162 /* 300 */ 63, 55, 57, 69, 65, 67, 75, 77, 79, 81,
163 /* 310 */ 71, 73, 51, 49, 53, 46, 43, 59, 92, 61,
164 /* 320 */ 87, 90, 91, 99, 83, 100, 503, 142, 142, 504,
165 /* 330 */ 107, 171, 129, 276, 287, 173, 107, 120, 137, 109,
166 /* 340 */ 145, 116, 120, 141, 141, 114, 105, 116, 120, 115,
167 /* 350 */ 85, 95, 180, 63, 55, 57, 69, 65, 67, 75,
168 /* 360 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
169 /* 370 */ 59, 92, 61, 87, 90, 91, 99, 83, 187, 183,
170 /* 380 */ 85, 95, 26, 63, 55, 57, 69, 65, 67, 75,
171 /* 390 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
172 /* 400 */ 59, 92, 61, 87, 90, 91, 99, 83, 192, 190,
173 /* 410 */ 85, 95, 213, 63, 55, 57, 69, 65, 67, 75,
174 /* 420 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
175 /* 430 */ 59, 92, 61, 87, 90, 91, 99, 83, 100, 217,
176 /* 440 */ 220, 28, 93, 252, 165, 228, 214, 107, 218, 318,
177 /* 450 */ 120, 137, 143, 120, 120, 224, 120, 211, 128, 120,
178 /* 460 */ 259, 85, 95, 219, 63, 55, 57, 69, 65, 67,
179 /* 470 */ 75, 77, 79, 81, 71, 73, 51, 49, 53, 46,
180 /* 480 */ 43, 59, 92, 61, 87, 90, 91, 99, 83, 85,
181 /* 490 */ 95, 230, 63, 55, 57, 69, 65, 67, 75, 77,
182 /* 500 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
183 /* 510 */ 92, 61, 87, 90, 91, 99, 83, 234, 262, 85,
184 /* 520 */ 95, 254, 63, 55, 57, 69, 65, 67, 75, 77,
185 /* 530 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
186 /* 540 */ 92, 61, 87, 90, 91, 99, 83, 237, 268, 85,
187 /* 550 */ 95, 238, 63, 55, 57, 69, 65, 67, 75, 77,
188 /* 560 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
189 /* 570 */ 92, 61, 87, 90, 91, 99, 83, 242, 271, 85,
190 /* 580 */ 95, 293, 63, 55, 57, 69, 65, 67, 75, 77,
191 /* 590 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
192 /* 600 */ 92, 61, 87, 90, 91, 99, 83, 249, 274, 85,
193 /* 610 */ 95, 251, 63, 55, 57, 69, 65, 67, 75, 77,
194 /* 620 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
195 /* 630 */ 92, 61, 87, 90, 91, 99, 83, 257, 333, 85,
196 /* 640 */ 95, 256, 63, 55, 57, 69, 65, 67, 75, 77,
197 /* 650 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
198 /* 660 */ 92, 61, 87, 90, 91, 99, 83, 318, 349, 85,
199 /* 670 */ 95, 258, 63, 55, 57, 69, 65, 67, 75, 77,
200 /* 680 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
201 /* 690 */ 92, 61, 87, 90, 91, 99, 83, 85, 95, 277,
202 /* 700 */ 63, 55, 57, 69, 65, 67, 75, 77, 79, 81,
203 /* 710 */ 71, 73, 51, 49, 53, 46, 43, 59, 92, 61,
204 /* 720 */ 87, 90, 91, 227, 83, 524, 1, 2, 286, 4,
205 /* 730 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
206 /* 740 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
207 /* 750 */ 25, 95, 281, 63, 55, 57, 69, 65, 67, 75,
208 /* 760 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
209 /* 770 */ 59, 92, 61, 87, 90, 91, 99, 83, 63, 55,
210 /* 780 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
211 /* 790 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
212 /* 800 */ 91, 99, 83, 30, 286, 4, 5, 6, 7, 8,
213 /* 810 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
214 /* 820 */ 19, 20, 21, 22, 23, 24, 25, 36, 286, 4,
215 /* 830 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
216 /* 840 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
217 /* 850 */ 25, 55, 57, 69, 65, 67, 75, 77, 79, 81,
218 /* 860 */ 71, 73, 51, 49, 53, 46, 43, 59, 92, 61,
219 /* 870 */ 87, 90, 91, 99, 83, 177, 286, 4, 5, 6,
220 /* 880 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
221 /* 890 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 184,
222 /* 900 */ 286, 4, 5, 6, 7, 8, 9, 10, 11, 12,
223 /* 910 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
224 /* 920 */ 23, 24, 25, 221, 286, 4, 5, 6, 7, 8,
225 /* 930 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
226 /* 940 */ 19, 20, 21, 22, 23, 24, 25, 231, 286, 4,
227 /* 950 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
228 /* 960 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
229 /* 970 */ 25, 239, 286, 4, 5, 6, 7, 8, 9, 10,
230 /* 980 */ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
231 /* 990 */ 21, 22, 23, 24, 25, 246, 286, 4, 5, 6,
232 /* 1000 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
233 /* 1010 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 278,
234 /* 1020 */ 286, 4, 5, 6, 7, 8, 9, 10, 11, 12,
235 /* 1030 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
236 /* 1040 */ 23, 24, 25, 289, 286, 4, 5, 6, 7, 8,
237 /* 1050 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
238 /* 1060 */ 19, 20, 21, 22, 23, 24, 25, 295, 286, 4,
239 /* 1070 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
240 /* 1080 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
241 /* 1090 */ 25, 312, 286, 4, 5, 6, 7, 8, 9, 10,
242 /* 1100 */ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
243 /* 1110 */ 21, 22, 23, 24, 25, 334, 286, 4, 5, 6,
244 /* 1120 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
245 /* 1130 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 343,
246 /* 1140 */ 286, 4, 5, 6, 7, 8, 9, 10, 11, 12,
247 /* 1150 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
248 /* 1160 */ 23, 24, 25, 350, 286, 4, 5, 6, 7, 8,
249 /* 1170 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
250 /* 1180 */ 19, 20, 21, 22, 23, 24, 25, 3, 4, 5,
251 /* 1190 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
252 /* 1200 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
253 /* 1210 */ 27, 235, 32, 34, 40, 170, 172, 41, 283, 181,
254 /* 1220 */ 100, 188, 191, 193, 169, 45, 168, 285, 288, 120,
255 /* 1230 */ 216, 292, 120, 132, 178, 294, 120, 120, 120, 225,
256 /* 1240 */ 366, 26, 298, 236, 437, 243, 438, 250, 131, 260,
257 /* 1250 */ 263, 303, 269, 272, 275, 305, 282, 284, 255, 4,
258 /* 1260 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
259 /* 1270 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
260 /* 1280 */ 25, 27, 235, 358, 360, 40, 170, 172, 48, 357,
261 /* 1290 */ 181, 31, 188, 191, 193, 252, 354, 50, 130, 52,
262 /* 1300 */ 120, 216, 252, 54, 306, 56, 131, 308, 316, 120,
263 /* 1310 */ 225, 120, 259, 307, 236, 120, 243, 120, 250, 259,
264 /* 1320 */ 260, 263, 317, 269, 272, 275, 311, 282, 284, 58,
265 /* 1330 */ 315, 60, 319, 27, 235, 38, 62, 40, 170, 172,
266 /* 1340 */ 320, 120, 181, 120, 188, 191, 193, 330, 120, 337,
267 /* 1350 */ 252, 339, 252, 216, 37, 340, 229, 252, 310, 328,
268 /* 1360 */ 346, 185, 225, 222, 353, 232, 236, 259, 243, 259,
269 /* 1370 */ 250, 356, 260, 263, 259, 269, 272, 275, 359, 282,
270 /* 1380 */ 284, 361, 69, 65, 67, 75, 77, 79, 81, 71,
271 /* 1390 */ 73, 51, 49, 53, 46, 43, 59, 92, 61, 87,
272 /* 1400 */ 90, 91, 99, 83, 362, 27, 235, 64, 363, 40,
273 /* 1410 */ 170, 172, 364, 179, 181, 252, 188, 191, 193, 120,
274 /* 1420 */ 252, 290, 252, 244, 252, 216, 252, 290, 301, 290,
275 /* 1430 */ 240, 290, 259, 290, 225, 120, 290, 259, 236, 259,
276 /* 1440 */ 243, 259, 250, 259, 260, 263, 247, 269, 272, 275,
277 /* 1450 */ 279, 282, 284, 290, 290, 290, 290, 27, 235, 209,
278 /* 1460 */ 290, 40, 170, 172, 290, 212, 181, 186, 188, 191,
279 /* 1470 */ 193, 290, 290, 253, 290, 332, 290, 216, 290, 290,
280 /* 1480 */ 199, 201, 203, 205, 207, 120, 225, 120, 290, 252,
281 /* 1490 */ 236, 252, 243, 296, 250, 290, 260, 263, 313, 269,
282 /* 1500 */ 272, 275, 335, 282, 284, 290, 259, 252, 259, 27,
283 /* 1510 */ 235, 252, 290, 40, 170, 172, 290, 344, 181, 290,
284 /* 1520 */ 188, 191, 193, 66, 259, 290, 290, 68, 259, 216,
285 /* 1530 */ 290, 223, 290, 252, 290, 120, 290, 290, 225, 120,
286 /* 1540 */ 290, 290, 236, 290, 243, 290, 250, 290, 260, 263,
287 /* 1550 */ 259, 269, 272, 275, 252, 282, 284, 70, 290, 252,
288 /* 1560 */ 290, 27, 235, 252, 290, 40, 170, 172, 290, 120,
289 /* 1570 */ 181, 259, 188, 191, 193, 72, 259, 290, 252, 290,
290 /* 1580 */ 259, 216, 290, 290, 290, 290, 290, 120, 290, 290,
291 /* 1590 */ 225, 233, 290, 290, 236, 259, 243, 351, 250, 74,
292 /* 1600 */ 260, 263, 290, 269, 272, 275, 290, 282, 284, 76,
293 /* 1610 */ 290, 120, 290, 27, 235, 78, 80, 40, 170, 172,
294 /* 1620 */ 82, 120, 181, 84, 188, 191, 193, 120, 120, 290,
295 /* 1630 */ 290, 86, 120, 216, 290, 120, 290, 89, 290, 96,
296 /* 1640 */ 290, 290, 225, 120, 290, 290, 236, 241, 243, 120,
297 /* 1650 */ 250, 120, 260, 263, 290, 269, 272, 275, 252, 282,
298 /* 1660 */ 284, 98, 290, 290, 290, 27, 235, 102, 104, 40,
299 /* 1670 */ 170, 172, 119, 120, 181, 259, 188, 191, 193, 120,
300 /* 1680 */ 120, 290, 290, 135, 120, 216, 290, 167, 290, 290,
301 /* 1690 */ 290, 175, 290, 290, 225, 120, 290, 290, 236, 120,
302 /* 1700 */ 243, 248, 250, 120, 260, 263, 290, 269, 272, 275,
303 /* 1710 */ 290, 282, 284, 182, 290, 189, 290, 27, 235, 290,
304 /* 1720 */ 200, 40, 170, 172, 202, 120, 181, 120, 188, 191,
305 /* 1730 */ 193, 204, 120, 206, 290, 208, 120, 216, 290, 210,
306 /* 1740 */ 290, 226, 290, 120, 290, 120, 225, 120, 290, 290,
307 /* 1750 */ 236, 120, 243, 120, 250, 290, 260, 263, 290, 269,
308 /* 1760 */ 272, 275, 280, 282, 284, 261, 290, 264, 290, 27,
309 /* 1770 */ 235, 290, 267, 40, 170, 172, 270, 120, 181, 120,
310 /* 1780 */ 188, 191, 193, 273, 120, 341, 290, 348, 120, 216,
311 /* 1790 */ 290, 290, 290, 290, 290, 120, 290, 120, 225, 120,
312 /* 1800 */ 290, 290, 236, 290, 243, 290, 250, 290, 260, 263,
313 /* 1810 */ 290, 269, 272, 275, 291, 282, 284, 290, 290, 290,
314 /* 1820 */ 290, 27, 235, 290, 290, 40, 170, 172, 290, 290,
315 /* 1830 */ 181, 290, 188, 191, 193, 290, 290, 290, 290, 290,
316 /* 1840 */ 290, 216, 290, 290, 290, 290, 290, 290, 290, 290,
317 /* 1850 */ 225, 290, 290, 290, 236, 290, 243, 297, 250, 290,
318 /* 1860 */ 260, 263, 290, 269, 272, 275, 290, 282, 284, 290,
319 /* 1870 */ 290, 290, 290, 27, 235, 290, 290, 40, 170, 172,
320 /* 1880 */ 290, 290, 181, 290, 188, 191, 193, 290, 290, 290,
321 /* 1890 */ 290, 290, 290, 216, 290, 290, 290, 290, 290, 290,
322 /* 1900 */ 290, 290, 225, 290, 290, 290, 236, 302, 243, 290,
323 /* 1910 */ 250, 290, 260, 263, 290, 269, 272, 275, 290, 282,
324 /* 1920 */ 284, 290, 290, 290, 290, 27, 235, 290, 290, 40,
325 /* 1930 */ 170, 172, 290, 290, 181, 290, 188, 191, 193, 290,
326 /* 1940 */ 290, 290, 290, 290, 290, 216, 290, 314, 290, 290,
327 /* 1950 */ 290, 290, 290, 290, 225, 290, 290, 290, 236, 290,
328 /* 1960 */ 243, 290, 250, 290, 260, 263, 290, 269, 272, 275,
329 /* 1970 */ 290, 282, 284, 290, 290, 290, 290, 27, 235, 290,
330 /* 1980 */ 290, 40, 170, 172, 290, 290, 181, 329, 188, 191,
331 /* 1990 */ 193, 290, 290, 290, 290, 290, 290, 216, 290, 290,
332 /* 2000 */ 290, 290, 290, 290, 290, 290, 225, 290, 290, 290,
333 /* 2010 */ 236, 290, 243, 290, 250, 290, 260, 263, 290, 269,
334 /* 2020 */ 272, 275, 290, 282, 284, 290, 290, 290, 290, 27,
335 /* 2030 */ 235, 290, 290, 40, 170, 172, 290, 336, 181, 290,
336 /* 2040 */ 188, 191, 193, 290, 290, 290, 290, 290, 290, 216,
337 /* 2050 */ 290, 290, 290, 290, 290, 290, 290, 290, 225, 290,
338 /* 2060 */ 290, 290, 236, 290, 243, 290, 250, 290, 260, 263,
339 /* 2070 */ 290, 269, 272, 275, 290, 282, 284, 290, 290, 290,
340 /* 2080 */ 290, 27, 235, 290, 290, 40, 170, 172, 290, 345,
341 /* 2090 */ 181, 290, 188, 191, 193, 290, 290, 290, 290, 290,
342 /* 2100 */ 290, 216, 290, 290, 290, 290, 290, 290, 290, 290,
343 /* 2110 */ 225, 290, 290, 290, 236, 290, 243, 290, 250, 290,
344 /* 2120 */ 260, 263, 290, 269, 272, 275, 290, 282, 284, 290,
345 /* 2130 */ 290, 290, 290, 27, 235, 290, 290, 40, 170, 172,
346 /* 2140 */ 290, 352, 181, 290, 188, 191, 193, 290, 290, 290,
347 /* 2150 */ 290, 290, 290, 216, 290, 290, 290, 290, 290, 290,
348 /* 2160 */ 290, 290, 225, 290, 290, 290, 236, 290, 243, 290,
349 /* 2170 */ 250, 290, 260, 263, 290, 269, 272, 275, 290, 282,
350 /* 2180 */ 284, 290, 290, 290, 290, 27, 235, 355, 290, 40,
351 /* 2190 */ 170, 172, 290, 290, 181, 290, 188, 191, 193, 290,
352 /* 2200 */ 290, 290, 290, 290, 290, 216, 290, 290, 290, 290,
353 /* 2210 */ 290, 290, 290, 290, 225, 290, 290, 290, 236, 290,
354 /* 2220 */ 243, 290, 250, 290, 260, 263, 290, 269, 272, 275,
355 /* 2230 */ 290, 282, 284, 290, 290, 290, 290, 27, 235, 290,
356 /* 2240 */ 290, 40, 170, 172, 290, 290, 181, 290, 188, 191,
357 /* 2250 */ 193, 290, 290, 290, 290, 290, 290, 216, 290, 290,
358 /* 2260 */ 290, 290, 290, 290, 290, 290, 225, 290, 290, 290,
359 /* 2270 */ 236, 290, 243, 290, 250, 290, 260, 263, 290, 269,
360 /* 2280 */ 272, 275, 290, 282, 284, 290, 290, 290, 47, 44,
361 /* 2290 */ 290, 106, 290, 101, 290, 290, 103, 290, 47, 44,
362 /* 2300 */ 290, 106, 290, 101, 290, 121, 103, 290, 290, 290,
363 /* 2310 */ 290, 290, 290, 290, 290, 121, 290, 290, 290, 290,
364 /* 2320 */ 290, 122, 123, 124, 125, 126, 127, 290, 290, 290,
365 /* 2330 */ 290, 122, 123, 124, 125, 126, 127, 290, 290, 290,
366 /* 2340 */ 290, 290, 290, 290, 290, 290, 290, 157, 158, 159,
367 /* 2350 */ 160, 161, 162, 163, 112, 290, 290, 150, 151, 152,
368 /* 2360 */ 153, 154, 155, 156, 112, 290, 290, 166, 290, 47,
369 /* 2370 */ 44, 290, 106, 290, 101, 290, 164, 103, 290, 47,
370 /* 2380 */ 44, 290, 106, 290, 101, 290, 121, 103, 290, 290,
371 /* 2390 */ 290, 290, 290, 290, 290, 290, 121, 290, 290, 290,
372 /* 2400 */ 290, 290, 122, 123, 124, 125, 126, 127, 138, 290,
373 /* 2410 */ 290, 290, 122, 123, 124, 125, 126, 127, 290, 290,
374 /* 2420 */ 290, 290, 290, 290, 47, 44, 290, 106, 290, 101,
375 /* 2430 */ 290, 290, 103, 290, 290, 112, 290, 290, 290, 47,
376 /* 2440 */ 44, 149, 106, 290, 101, 112, 290, 103, 290, 290,
377 /* 2450 */ 290, 290, 290, 290, 290, 290, 121, 148, 123, 124,
378 /* 2460 */ 125, 126, 127, 47, 44, 290, 106, 290, 101, 290,
379 /* 2470 */ 136, 103, 122, 133, 124, 125, 126, 127, 47, 44,
380 /* 2480 */ 121, 106, 290, 101, 290, 290, 103, 290, 290, 290,
381 /* 2490 */ 112, 290, 108, 290, 290, 121, 122, 117, 124, 125,
382 /* 2500 */ 126, 127, 290, 290, 290, 112, 290, 290, 290, 290,
383 /* 2510 */ 290, 122, 117, 124, 125, 126, 127, 47, 44, 290,
384 /* 2520 */ 106, 290, 101, 47, 44, 103, 106, 290, 101, 112,
385 /* 2530 */ 290, 103, 290, 290, 121, 290, 290, 290, 290, 290,
386 /* 2540 */ 121, 290, 290, 290, 112, 113, 290, 290, 304, 290,
387 /* 2550 */ 122, 133, 124, 125, 126, 127, 122, 123, 124, 125,
388 /* 2560 */ 126, 127, 47, 44, 290, 106, 290, 101, 290, 290,
389 /* 2570 */ 103, 290, 290, 47, 44, 290, 106, 290, 101, 121,
390 /* 2580 */ 290, 103, 290, 112, 290, 290, 290, 290, 290, 112,
391 /* 2590 */ 121, 290, 290, 290, 290, 122, 117, 124, 125, 126,
392 /* 2600 */ 127, 290, 290, 290, 290, 290, 122, 133, 124, 125,
393 /* 2610 */ 126, 127, 290, 290, 290, 290, 290, 290, 290, 290,
394 /* 2620 */ 290, 290, 290, 290, 290, 290, 290, 290, 112, 290,
395 /* 2630 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 112,
396 };
397 static VVCODETYPE vv_lookahead[] = {
398 /* 0 */ 3, 4, 2, 6, 7, 8, 9, 10, 11, 12,
399 /* 10 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
400 /* 20 */ 23, 24, 25, 26, 27, 28, 29, 30, 0, 32,
401 /* 30 */ 26, 27, 28, 29, 30, 38, 18, 19, 20, 21,
402 /* 40 */ 22, 23, 24, 25, 26, 27, 28, 29, 30, 32,
403 /* 50 */ 50, 54, 117, 118, 119, 3, 4, 2, 6, 7,
404 /* 60 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
405 /* 70 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
406 /* 80 */ 28, 29, 30, 31, 32, 3, 4, 32, 6, 7,
407 /* 90 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
408 /* 100 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
409 /* 110 */ 28, 29, 30, 32, 32, 3, 4, 32, 6, 7,
410 /* 120 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
411 /* 130 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
412 /* 140 */ 28, 29, 30, 31, 32, 24, 25, 26, 27, 28,
413 /* 150 */ 29, 30, 2, 3, 72, 118, 119, 3, 3, 4,
414 /* 160 */ 126, 6, 7, 8, 9, 10, 11, 12, 13, 14,
415 /* 170 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
416 /* 180 */ 25, 26, 27, 28, 29, 30, 5, 32, 3, 4,
417 /* 190 */ 50, 6, 7, 8, 9, 10, 11, 12, 13, 14,
418 /* 200 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
419 /* 210 */ 25, 26, 27, 28, 29, 30, 5, 32, 3, 4,
420 /* 220 */ 50, 6, 7, 8, 9, 10, 11, 12, 13, 14,
421 /* 230 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
422 /* 240 */ 25, 26, 27, 28, 29, 30, 21, 22, 23, 24,
423 /* 250 */ 25, 26, 27, 28, 29, 30, 54, 55, 56, 57,
424 /* 260 */ 58, 59, 50, 2, 5, 50, 120, 121, 126, 3,
425 /* 270 */ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
426 /* 280 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
427 /* 290 */ 24, 25, 26, 27, 28, 29, 30, 3, 4, 50,
428 /* 300 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
429 /* 310 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
430 /* 320 */ 26, 27, 28, 29, 30, 116, 5, 38, 38, 5,
431 /* 330 */ 116, 32, 123, 58, 59, 38, 116, 128, 129, 125,
432 /* 340 */ 50, 127, 128, 54, 54, 125, 52, 127, 128, 88,
433 /* 350 */ 3, 4, 32, 6, 7, 8, 9, 10, 11, 12,
434 /* 360 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
435 /* 370 */ 23, 24, 25, 26, 27, 28, 29, 30, 32, 32,
436 /* 380 */ 3, 4, 1, 6, 7, 8, 9, 10, 11, 12,
437 /* 390 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
438 /* 400 */ 23, 24, 25, 26, 27, 28, 29, 30, 32, 32,
439 /* 410 */ 3, 4, 38, 6, 7, 8, 9, 10, 11, 12,
440 /* 420 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
441 /* 430 */ 23, 24, 25, 26, 27, 28, 29, 30, 116, 38,
442 /* 440 */ 32, 116, 116, 62, 116, 123, 119, 116, 29, 38,
443 /* 450 */ 128, 129, 126, 128, 128, 32, 128, 50, 127, 128,
444 /* 460 */ 79, 3, 4, 52, 6, 7, 8, 9, 10, 11,
445 /* 470 */ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
446 /* 480 */ 22, 23, 24, 25, 26, 27, 28, 29, 30, 3,
447 /* 490 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
448 /* 500 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
449 /* 510 */ 24, 25, 26, 27, 28, 29, 30, 32, 32, 3,
450 /* 520 */ 4, 63, 6, 7, 8, 9, 10, 11, 12, 13,
451 /* 530 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
452 /* 540 */ 24, 25, 26, 27, 28, 29, 30, 38, 32, 3,
453 /* 550 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
454 /* 560 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
455 /* 570 */ 24, 25, 26, 27, 28, 29, 30, 32, 32, 3,
456 /* 580 */ 4, 124, 6, 7, 8, 9, 10, 11, 12, 13,
457 /* 590 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
458 /* 600 */ 24, 25, 26, 27, 28, 29, 30, 32, 32, 3,
459 /* 610 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
460 /* 620 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
461 /* 630 */ 24, 25, 26, 27, 28, 29, 30, 69, 32, 3,
462 /* 640 */ 4, 1, 6, 7, 8, 9, 10, 11, 12, 13,
463 /* 650 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
464 /* 660 */ 24, 25, 26, 27, 28, 29, 30, 38, 32, 3,
465 /* 670 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
466 /* 680 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
467 /* 690 */ 24, 25, 26, 27, 28, 29, 30, 3, 4, 32,
468 /* 700 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
469 /* 710 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
470 /* 720 */ 26, 27, 28, 29, 30, 90, 91, 92, 93, 94,
471 /* 730 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
472 /* 740 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
473 /* 750 */ 115, 4, 32, 6, 7, 8, 9, 10, 11, 12,
474 /* 760 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
475 /* 770 */ 23, 24, 25, 26, 27, 28, 29, 30, 6, 7,
476 /* 780 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
477 /* 790 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
478 /* 800 */ 28, 29, 30, 92, 93, 94, 95, 96, 97, 98,
479 /* 810 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
480 /* 820 */ 109, 110, 111, 112, 113, 114, 115, 92, 93, 94,
481 /* 830 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
482 /* 840 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
483 /* 850 */ 115, 7, 8, 9, 10, 11, 12, 13, 14, 15,
484 /* 860 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
485 /* 870 */ 26, 27, 28, 29, 30, 92, 93, 94, 95, 96,
486 /* 880 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
487 /* 890 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 92,
488 /* 900 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
489 /* 910 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
490 /* 920 */ 113, 114, 115, 92, 93, 94, 95, 96, 97, 98,
491 /* 930 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
492 /* 940 */ 109, 110, 111, 112, 113, 114, 115, 92, 93, 94,
493 /* 950 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
494 /* 960 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
495 /* 970 */ 115, 92, 93, 94, 95, 96, 97, 98, 99, 100,
496 /* 980 */ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
497 /* 990 */ 111, 112, 113, 114, 115, 92, 93, 94, 95, 96,
498 /* 1000 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
499 /* 1010 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 92,
500 /* 1020 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
501 /* 1030 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
502 /* 1040 */ 113, 114, 115, 92, 93, 94, 95, 96, 97, 98,
503 /* 1050 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
504 /* 1060 */ 109, 110, 111, 112, 113, 114, 115, 92, 93, 94,
505 /* 1070 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
506 /* 1080 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
507 /* 1090 */ 115, 92, 93, 94, 95, 96, 97, 98, 99, 100,
508 /* 1100 */ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
509 /* 1110 */ 111, 112, 113, 114, 115, 92, 93, 94, 95, 96,
510 /* 1120 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
511 /* 1130 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 92,
512 /* 1140 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
513 /* 1150 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
514 /* 1160 */ 113, 114, 115, 92, 93, 94, 95, 96, 97, 98,
515 /* 1170 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
516 /* 1180 */ 109, 110, 111, 112, 113, 114, 115, 93, 94, 95,
517 /* 1190 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
518 /* 1200 */ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
519 /* 1210 */ 31, 32, 33, 34, 35, 36, 37, 116, 32, 40,
520 /* 1220 */ 116, 42, 43, 44, 116, 116, 116, 32, 32, 128,
521 /* 1230 */ 51, 32, 128, 129, 1, 32, 128, 128, 128, 60,
522 /* 1240 */ 0, 1, 32, 64, 32, 66, 32, 68, 2, 70,
523 /* 1250 */ 71, 32, 73, 74, 75, 32, 77, 78, 93, 94,
524 /* 1260 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
525 /* 1270 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
526 /* 1280 */ 115, 31, 32, 33, 34, 35, 36, 37, 116, 1,
527 /* 1290 */ 40, 1, 42, 43, 44, 62, 1, 116, 52, 116,
528 /* 1300 */ 128, 51, 62, 116, 1, 116, 2, 32, 2, 128,
529 /* 1310 */ 60, 128, 79, 61, 64, 128, 66, 128, 68, 79,
530 /* 1320 */ 70, 71, 121, 73, 74, 75, 32, 77, 78, 116,
531 /* 1330 */ 32, 116, 45, 31, 32, 33, 116, 35, 36, 37,
532 /* 1340 */ 122, 128, 40, 128, 42, 43, 44, 32, 128, 32,
533 /* 1350 */ 62, 38, 62, 51, 1, 3, 52, 62, 52, 1,
534 /* 1360 */ 32, 1, 60, 1, 32, 1, 64, 79, 66, 79,
535 /* 1370 */ 68, 32, 70, 71, 79, 73, 74, 75, 32, 77,
536 /* 1380 */ 78, 32, 9, 10, 11, 12, 13, 14, 15, 16,
537 /* 1390 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
538 /* 1400 */ 27, 28, 29, 30, 1, 31, 32, 116, 33, 35,
539 /* 1410 */ 36, 37, 32, 39, 40, 62, 42, 43, 44, 128,
540 /* 1420 */ 62, 130, 62, 116, 62, 51, 62, 130, 1, 130,
541 /* 1430 */ 1, 130, 79, 130, 60, 128, 130, 79, 64, 79,
542 /* 1440 */ 66, 79, 68, 79, 70, 71, 1, 73, 74, 75,
543 /* 1450 */ 1, 77, 78, 130, 130, 130, 130, 31, 32, 24,
544 /* 1460 */ 130, 35, 36, 37, 130, 30, 40, 41, 42, 43,
545 /* 1470 */ 44, 130, 1, 116, 130, 116, 130, 51, 130, 130,
546 /* 1480 */ 45, 46, 47, 48, 49, 128, 60, 128, 130, 62,
547 /* 1490 */ 64, 62, 66, 1, 68, 130, 70, 71, 1, 73,
548 /* 1500 */ 74, 75, 1, 77, 78, 130, 79, 62, 79, 31,
549 /* 1510 */ 32, 62, 130, 35, 36, 37, 130, 1, 40, 130,
550 /* 1520 */ 42, 43, 44, 116, 79, 130, 130, 116, 79, 51,
551 /* 1530 */ 130, 53, 130, 62, 130, 128, 130, 130, 60, 128,
552 /* 1540 */ 130, 130, 64, 130, 66, 130, 68, 130, 70, 71,
553 /* 1550 */ 79, 73, 74, 75, 62, 77, 78, 116, 130, 62,
554 /* 1560 */ 130, 31, 32, 62, 130, 35, 36, 37, 130, 128,
555 /* 1570 */ 40, 79, 42, 43, 44, 116, 79, 130, 62, 130,
556 /* 1580 */ 79, 51, 130, 130, 130, 130, 130, 128, 130, 130,
557 /* 1590 */ 60, 61, 130, 130, 64, 79, 66, 1, 68, 116,
558 /* 1600 */ 70, 71, 130, 73, 74, 75, 130, 77, 78, 116,
559 /* 1610 */ 130, 128, 130, 31, 32, 116, 116, 35, 36, 37,
560 /* 1620 */ 116, 128, 40, 116, 42, 43, 44, 128, 128, 130,
561 /* 1630 */ 130, 116, 128, 51, 130, 128, 130, 116, 130, 116,
562 /* 1640 */ 130, 130, 60, 128, 130, 130, 64, 65, 66, 128,
563 /* 1650 */ 68, 128, 70, 71, 130, 73, 74, 75, 62, 77,
564 /* 1660 */ 78, 116, 130, 130, 130, 31, 32, 116, 116, 35,
565 /* 1670 */ 36, 37, 116, 128, 40, 79, 42, 43, 44, 128,
566 /* 1680 */ 128, 130, 130, 116, 128, 51, 130, 116, 130, 130,
567 /* 1690 */ 130, 116, 130, 130, 60, 128, 130, 130, 64, 128,
568 /* 1700 */ 66, 67, 68, 128, 70, 71, 130, 73, 74, 75,
569 /* 1710 */ 130, 77, 78, 116, 130, 116, 130, 31, 32, 130,
570 /* 1720 */ 116, 35, 36, 37, 116, 128, 40, 128, 42, 43,
571 /* 1730 */ 44, 116, 128, 116, 130, 116, 128, 51, 130, 116,
572 /* 1740 */ 130, 116, 130, 128, 130, 128, 60, 128, 130, 130,
573 /* 1750 */ 64, 128, 66, 128, 68, 130, 70, 71, 130, 73,
574 /* 1760 */ 74, 75, 76, 77, 78, 116, 130, 116, 130, 31,
575 /* 1770 */ 32, 130, 116, 35, 36, 37, 116, 128, 40, 128,
576 /* 1780 */ 42, 43, 44, 116, 128, 116, 130, 116, 128, 51,
577 /* 1790 */ 130, 130, 130, 130, 130, 128, 130, 128, 60, 128,
578 /* 1800 */ 130, 130, 64, 130, 66, 130, 68, 130, 70, 71,
579 /* 1810 */ 130, 73, 74, 75, 76, 77, 78, 130, 130, 130,
580 /* 1820 */ 130, 31, 32, 130, 130, 35, 36, 37, 130, 130,
581 /* 1830 */ 40, 130, 42, 43, 44, 130, 130, 130, 130, 130,
582 /* 1840 */ 130, 51, 130, 130, 130, 130, 130, 130, 130, 130,
583 /* 1850 */ 60, 130, 130, 130, 64, 130, 66, 67, 68, 130,
584 /* 1860 */ 70, 71, 130, 73, 74, 75, 130, 77, 78, 130,
585 /* 1870 */ 130, 130, 130, 31, 32, 130, 130, 35, 36, 37,
586 /* 1880 */ 130, 130, 40, 130, 42, 43, 44, 130, 130, 130,
587 /* 1890 */ 130, 130, 130, 51, 130, 130, 130, 130, 130, 130,
588 /* 1900 */ 130, 130, 60, 130, 130, 130, 64, 65, 66, 130,
589 /* 1910 */ 68, 130, 70, 71, 130, 73, 74, 75, 130, 77,
590 /* 1920 */ 78, 130, 130, 130, 130, 31, 32, 130, 130, 35,
591 /* 1930 */ 36, 37, 130, 130, 40, 130, 42, 43, 44, 130,
592 /* 1940 */ 130, 130, 130, 130, 130, 51, 130, 53, 130, 130,
593 /* 1950 */ 130, 130, 130, 130, 60, 130, 130, 130, 64, 130,
594 /* 1960 */ 66, 130, 68, 130, 70, 71, 130, 73, 74, 75,
595 /* 1970 */ 130, 77, 78, 130, 130, 130, 130, 31, 32, 130,
596 /* 1980 */ 130, 35, 36, 37, 130, 130, 40, 41, 42, 43,
597 /* 1990 */ 44, 130, 130, 130, 130, 130, 130, 51, 130, 130,
598 /* 2000 */ 130, 130, 130, 130, 130, 130, 60, 130, 130, 130,
599 /* 2010 */ 64, 130, 66, 130, 68, 130, 70, 71, 130, 73,
600 /* 2020 */ 74, 75, 130, 77, 78, 130, 130, 130, 130, 31,
601 /* 2030 */ 32, 130, 130, 35, 36, 37, 130, 39, 40, 130,
602 /* 2040 */ 42, 43, 44, 130, 130, 130, 130, 130, 130, 51,
603 /* 2050 */ 130, 130, 130, 130, 130, 130, 130, 130, 60, 130,
604 /* 2060 */ 130, 130, 64, 130, 66, 130, 68, 130, 70, 71,
605 /* 2070 */ 130, 73, 74, 75, 130, 77, 78, 130, 130, 130,
606 /* 2080 */ 130, 31, 32, 130, 130, 35, 36, 37, 130, 39,
607 /* 2090 */ 40, 130, 42, 43, 44, 130, 130, 130, 130, 130,
608 /* 2100 */ 130, 51, 130, 130, 130, 130, 130, 130, 130, 130,
609 /* 2110 */ 60, 130, 130, 130, 64, 130, 66, 130, 68, 130,
610 /* 2120 */ 70, 71, 130, 73, 74, 75, 130, 77, 78, 130,
611 /* 2130 */ 130, 130, 130, 31, 32, 130, 130, 35, 36, 37,
612 /* 2140 */ 130, 39, 40, 130, 42, 43, 44, 130, 130, 130,
613 /* 2150 */ 130, 130, 130, 51, 130, 130, 130, 130, 130, 130,
614 /* 2160 */ 130, 130, 60, 130, 130, 130, 64, 130, 66, 130,
615 /* 2170 */ 68, 130, 70, 71, 130, 73, 74, 75, 130, 77,
616 /* 2180 */ 78, 130, 130, 130, 130, 31, 32, 33, 130, 35,
617 /* 2190 */ 36, 37, 130, 130, 40, 130, 42, 43, 44, 130,
618 /* 2200 */ 130, 130, 130, 130, 130, 51, 130, 130, 130, 130,
619 /* 2210 */ 130, 130, 130, 130, 60, 130, 130, 130, 64, 130,
620 /* 2220 */ 66, 130, 68, 130, 70, 71, 130, 73, 74, 75,
621 /* 2230 */ 130, 77, 78, 130, 130, 130, 130, 31, 32, 130,
622 /* 2240 */ 130, 35, 36, 37, 130, 130, 40, 130, 42, 43,
623 /* 2250 */ 44, 130, 130, 130, 130, 130, 130, 51, 130, 130,
624 /* 2260 */ 130, 130, 130, 130, 130, 130, 60, 130, 130, 130,
625 /* 2270 */ 64, 130, 66, 130, 68, 130, 70, 71, 130, 73,
626 /* 2280 */ 74, 75, 130, 77, 78, 130, 130, 130, 21, 22,
627 /* 2290 */ 130, 24, 130, 26, 130, 130, 29, 130, 21, 22,
628 /* 2300 */ 130, 24, 130, 26, 130, 38, 29, 130, 130, 130,
629 /* 2310 */ 130, 130, 130, 130, 130, 38, 130, 130, 130, 130,
630 /* 2320 */ 130, 54, 55, 56, 57, 58, 59, 130, 130, 130,
631 /* 2330 */ 130, 54, 55, 56, 57, 58, 59, 130, 130, 130,
632 /* 2340 */ 130, 130, 130, 130, 130, 130, 130, 80, 81, 82,
633 /* 2350 */ 83, 84, 85, 86, 87, 130, 130, 80, 81, 82,
634 /* 2360 */ 83, 84, 85, 86, 87, 130, 130, 19, 130, 21,
635 /* 2370 */ 22, 130, 24, 130, 26, 130, 18, 29, 130, 21,
636 /* 2380 */ 22, 130, 24, 130, 26, 130, 38, 29, 130, 130,
637 /* 2390 */ 130, 130, 130, 130, 130, 130, 38, 130, 130, 130,
638 /* 2400 */ 130, 130, 54, 55, 56, 57, 58, 59, 5, 130,
639 /* 2410 */ 130, 130, 54, 55, 56, 57, 58, 59, 130, 130,
640 /* 2420 */ 130, 130, 130, 130, 21, 22, 130, 24, 130, 26,
641 /* 2430 */ 130, 130, 29, 130, 130, 87, 130, 130, 130, 21,
642 /* 2440 */ 22, 38, 24, 130, 26, 87, 130, 29, 130, 130,
643 /* 2450 */ 130, 130, 130, 130, 130, 130, 38, 54, 55, 56,
644 /* 2460 */ 57, 58, 59, 21, 22, 130, 24, 130, 26, 130,
645 /* 2470 */ 52, 29, 54, 55, 56, 57, 58, 59, 21, 22,
646 /* 2480 */ 38, 24, 130, 26, 130, 130, 29, 130, 130, 130,
647 /* 2490 */ 87, 130, 50, 130, 130, 38, 54, 55, 56, 57,
648 /* 2500 */ 58, 59, 130, 130, 130, 87, 130, 130, 130, 130,
649 /* 2510 */ 130, 54, 55, 56, 57, 58, 59, 21, 22, 130,
650 /* 2520 */ 24, 130, 26, 21, 22, 29, 24, 130, 26, 87,
651 /* 2530 */ 130, 29, 130, 130, 38, 130, 130, 130, 130, 130,
652 /* 2540 */ 38, 130, 130, 130, 87, 88, 130, 130, 52, 130,
653 /* 2550 */ 54, 55, 56, 57, 58, 59, 54, 55, 56, 57,
654 /* 2560 */ 58, 59, 21, 22, 130, 24, 130, 26, 130, 130,
655 /* 2570 */ 29, 130, 130, 21, 22, 130, 24, 130, 26, 38,
656 /* 2580 */ 130, 29, 130, 87, 130, 130, 130, 130, 130, 87,
657 /* 2590 */ 38, 130, 130, 130, 130, 54, 55, 56, 57, 58,
658 /* 2600 */ 59, 130, 130, 130, 130, 130, 54, 55, 56, 57,
659 /* 2610 */ 58, 59, 130, 130, 130, 130, 130, 130, 130, 130,
660 /* 2620 */ 130, 130, 130, 130, 130, 130, 130, 130, 87, 130,
661 /* 2630 */ 130, 130, 130, 130, 130, 130, 130, 130, 130, 87,
662 };
663 #define VV_SHIFT_USE_DFLT (-4)
664 static short vv_shift_ofst[] = {
665 /* 0 */ 381, 28, 1240, -4, -4, -4, -4, -4, -4, -4,
666 /* 10 */ -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
667 /* 20 */ -4, -4, -4, -4, -4, -4, 2206, 2502, 155, 1288,
668 /* 30 */ 1290, 1179, 17, -4, 81, 1295, 1353, 1302, 85, -4,
669 /* 40 */ 2502, 185, -4, 2502, 2502, 121, 2502, 2502, 121, 2348,
670 /* 50 */ 225, 2358, 225, 2502, 225, 2502, 1373, 2502, 1373, 2502,
671 /* 60 */ 121, 2502, 4, 2502, 844, 2502, 18, 2267, 18, 2277,
672 /* 70 */ 18, 2502, 18, 2502, 18, 2502, 18, 2502, 18, 2502,
673 /* 80 */ 18, 2502, 18, 2502, -4, 2502, 747, 154, 2502, 4,
674 /* 90 */ -4, -4, 2403, 215, -4, 2502, 266, 2502, 772, 2418,
675 /* 100 */ 666, 2502, 4, 2502, 294, -4, 2442, 666, -4, 0,
676 /* 110 */ -4, 2541, 2457, -4, 261, -4, -4, 181, 2502, 666,
677 /* 120 */ -4, -4, -4, -4, -4, -4, -4, -4, -4, 1246,
678 /* 130 */ -4, 2552, -4, 211, 2502, 666, -4, -4, 289, 140,
679 /* 140 */ -4, 170, 212, 259, 290, -4, 249, -4, 321, 324,
680 /* 150 */ -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
681 /* 160 */ -4, -4, -4, -4, 2502, 225, 2502, 225, 121, 121,
682 /* 170 */ 299, -4, 297, 150, 2502, 52, 381, 1233, 1374, 320,
683 /* 180 */ -4, 2502, 347, 1358, 1360, 1426, 346, -4, 2502, 377,
684 /* 190 */ -4, 376, -4, 374, 55, -4, 374, -4, 1435, 2502,
685 /* 200 */ 666, 2502, 666, 2502, 666, 2502, 666, 2502, 666, 2502,
686 /* 210 */ 407, -4, 374, -4, -4, -4, 401, 419, 411, 408,
687 /* 220 */ 381, 1362, 1478, 423, -4, 2502, 694, 2496, 1304, 459,
688 /* 230 */ 381, 1364, 1530, 485, -4, -4, 509, 519, 1427, 1429,
689 /* 240 */ 1582, 545, -4, 2502, -3, 381, 1445, 1634, 575, -4,
690 /* 250 */ 579, 381, 2502, 458, -4, 640, 568, 639, -4, -4,
691 /* 260 */ 2502, 486, -4, 2502, 82, -4, 2502, 516, -4, 2502,
692 /* 270 */ 546, -4, 2502, 576, -4, 275, 667, 381, 1449, 1686,
693 /* 280 */ 720, -4, 1186, -4, 1195, -4, -4, 1196, 381, 1471,
694 /* 290 */ 1738, 1199, -4, 1203, 381, 1492, 1790, 1210, -4, 1212,
695 /* 300 */ 1214, 1842, 1219, -4, 1223, 1303, 1252, 1275, -4, 1306,
696 /* 310 */ 1294, 381, 1497, 1894, 1298, -4, 629, -4, 1287, 202,
697 /* 320 */ -4, -4, -4, -4, -4, -4, -4, -4, 1946, 1315,
698 /* 330 */ -4, 2502, 606, 381, 1501, 1998, 1317, -4, 1313, 1352,
699 /* 340 */ 2502, 112, 381, 1516, 2050, 1328, -4, 2502, 636, 381,
700 /* 350 */ 1596, 2102, 1332, -4, 2154, 1339, -4, 1250, 1346, -4,
701 /* 360 */ 1349, 1403, 1375, 1380, -4,
702 };
703 #define VV_REDUCE_USE_DFLT (-66)
704 static short vv_reduce_ofst[] = {
705 /* 0 */ 635, -66, 1094, -66, -66, -66, -66, -66, -66, -66,
706 /* 10 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
707 /* 20 */ -66, -66, -66, -66, -66, -66, -66, 325, -66, 711,
708 /* 30 */ 1094, -66, -66, -66, -66, 735, 1094, -66, -66, -66,
709 /* 40 */ 1101, -66, -66, 1108, 1109, -66, 1110, 1172, -66, 1181,
710 /* 50 */ -66, 1183, -66, 1187, -66, 1189, -66, 1213, -66, 1215,
711 /* 60 */ -66, 1220, -66, 1291, -66, 1407, -66, 1411, -66, 1441,
712 /* 70 */ -66, 1459, -66, 1483, -66, 1493, -66, 1499, -66, 1500,
713 /* 80 */ -66, 1504, -66, 1507, -66, 1515, -66, -66, 1521, -66,
714 /* 90 */ -66, -66, 326, -66, -66, 1523, -66, 1545, -66, 209,
715 /* 100 */ -66, 1551, -66, 1552, -66, -66, 214, -66, -66, -66,
716 /* 110 */ -66, 331, 220, -66, -66, -66, -66, -66, 1556, -66,
717 /* 120 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
718 /* 130 */ -66, 1104, -66, -66, 1567, -66, -66, -66, 34, -66,
719 /* 140 */ -66, -66, -66, -66, 142, -66, -66, -66, -66, -66,
720 /* 150 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
721 /* 160 */ -66, -66, -66, -66, 328, -66, 1571, -66, -66, -66,
722 /* 170 */ -66, -66, -66, -66, 1575, -66, 783, 1094, -66, -66,
723 /* 180 */ -66, 1597, -66, 807, 1094, -66, -66, -66, 1599, -66,
724 /* 190 */ -66, -66, -66, -65, -66, -66, 37, -66, -66, 1604,
725 /* 200 */ -66, 1608, -66, 1615, -66, 1617, -66, 1619, -66, 1623,
726 /* 210 */ -66, -66, 327, -66, -66, -66, -66, -66, 146, -66,
727 /* 220 */ 831, 1094, -66, -66, -66, 1625, -66, 322, -66, -66,
728 /* 230 */ 855, 1094, -66, -66, -66, -66, -66, -66, 879, 1094,
729 /* 240 */ -66, -66, -66, 1307, 457, 903, 1094, -66, -66, -66,
730 /* 250 */ -66, 1165, 1357, -66, -66, -66, -66, -66, -66, -66,
731 /* 260 */ 1649, -66, -66, 1651, -66, -66, 1656, -66, -66, 1660,
732 /* 270 */ -66, -66, 1667, -66, -66, -66, -66, 927, 1094, -66,
733 /* 280 */ -66, -66, -66, -66, -66, -66, -66, -66, 951, 1094,
734 /* 290 */ -66, -66, -66, -66, 975, 1094, -66, -66, -66, -66,
735 /* 300 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
736 /* 310 */ -66, 999, 1094, -66, -66, -66, 1201, -66, -66, 1218,
737 /* 320 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
738 /* 330 */ -66, 1359, -66, 1023, 1094, -66, -66, -66, -66, -66,
739 /* 340 */ 1669, -66, 1047, 1094, -66, -66, -66, 1671, -66, 1071,
740 /* 350 */ 1094, -66, -66, -66, -66, -66, -66, -66, -66, -66,
741 /* 360 */ -66, -66, -66, -66, -66,
742 };
743 static VVACTIONTYPE vv_default[] = {
744 /* 0 */ 523, 523, 523, 367, 369, 370, 371, 372, 373, 374,
745 /* 10 */ 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
746 /* 20 */ 385, 386, 387, 388, 389, 390, 523, 523, 523, 523,
747 /* 30 */ 523, 523, 523, 391, 523, 523, 523, 523, 523, 393,
748 /* 40 */ 523, 523, 396, 523, 523, 450, 523, 523, 451, 523,
749 /* 50 */ 454, 523, 456, 523, 458, 523, 459, 523, 460, 523,
750 /* 60 */ 461, 523, 462, 523, 463, 523, 464, 523, 480, 523,
751 /* 70 */ 479, 523, 481, 523, 482, 523, 483, 523, 484, 523,
752 /* 80 */ 485, 523, 486, 523, 487, 523, 488, 523, 523, 489,
753 /* 90 */ 491, 492, 523, 523, 498, 523, 523, 523, 499, 523,
754 /* 100 */ 514, 523, 490, 523, 523, 493, 523, 508, 494, 523,
755 /* 110 */ 495, 523, 523, 496, 523, 497, 506, 518, 523, 507,
756 /* 120 */ 509, 516, 517, 518, 519, 520, 521, 522, 505, 523,
757 /* 130 */ 510, 523, 512, 518, 523, 515, 511, 513, 523, 523,
758 /* 140 */ 500, 523, 523, 523, 523, 501, 523, 502, 517, 516,
759 /* 150 */ 466, 468, 470, 472, 474, 476, 478, 465, 467, 469,
760 /* 160 */ 471, 473, 475, 477, 523, 457, 523, 455, 453, 452,
761 /* 170 */ 523, 397, 523, 523, 523, 523, 523, 523, 523, 523,
762 /* 180 */ 398, 523, 523, 523, 523, 523, 523, 402, 523, 523,
763 /* 190 */ 404, 523, 405, 523, 523, 406, 523, 407, 523, 523,
764 /* 200 */ 409, 523, 410, 523, 411, 523, 412, 523, 413, 523,
765 /* 210 */ 523, 415, 523, 414, 416, 408, 523, 523, 523, 523,
766 /* 220 */ 523, 523, 523, 523, 417, 523, 523, 523, 523, 510,
767 /* 230 */ 523, 523, 523, 523, 429, 431, 523, 523, 523, 523,
768 /* 240 */ 523, 523, 433, 523, 523, 523, 523, 523, 523, 435,
769 /* 250 */ 523, 523, 523, 523, 432, 523, 523, 523, 439, 449,
770 /* 260 */ 523, 523, 440, 523, 523, 441, 523, 523, 442, 523,
771 /* 270 */ 523, 443, 523, 523, 444, 523, 523, 523, 523, 523,
772 /* 280 */ 523, 445, 523, 447, 523, 448, 368, 523, 523, 523,
773 /* 290 */ 523, 523, 446, 523, 523, 523, 523, 523, 436, 523,
774 /* 300 */ 523, 523, 523, 434, 511, 523, 523, 523, 430, 523,
775 /* 310 */ 523, 523, 523, 523, 523, 418, 523, 419, 421, 523,
776 /* 320 */ 422, 423, 424, 425, 426, 427, 428, 420, 523, 523,
777 /* 330 */ 403, 523, 523, 523, 523, 523, 523, 399, 523, 523,
778 /* 340 */ 523, 523, 523, 523, 523, 523, 400, 523, 523, 523,
779 /* 350 */ 523, 523, 523, 401, 523, 523, 394, 523, 523, 392,
780 /* 360 */ 523, 523, 523, 523, 395,
781 };
782 #define VV_SZ_ACTTAB (sizeof(vv_action)/sizeof(vv_action[0]))
783
784 /* The next table maps tokens into fallback tokens. If a construct
785 ** like the following:
786 **
787 ** %fallback ID X Y Z.
788 **
789 ** appears in the grammer, then ID becomes a fallback token for X, Y,
790 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser
791 ** but it does not parse, the type of the token is changed to ID and
792 ** the parse is retried before an error is thrown.
793 */
794 #ifdef VVFALLBACK
795 static const VVCODETYPE vvFallback[] = {
796 };
797 #endif /* VVFALLBACK */
798
799 /* The following structure represents a single element of the
800 ** parser's stack. Information stored includes:
801 **
802 ** + The state number for the parser at this level of the stack.
803 **
804 ** + The value of the token stored at this level of the stack.
805 ** (In other words, the "major" token.)
806 **
807 ** + The semantic value stored at this level of the stack. This is
808 ** the information used by the action routines in the grammar.
809 ** It is sometimes called the "minor" token.
810 */
811 struct vvStackEntry {
812 int stateno; /* The state-number */
813 int major; /* The major token value. This is the code
814 ** number for the token at this stack level */
815 VVMINORTYPE minor; /* The user-supplied minor token value. This
816 ** is the value of the token */
817 };
818 typedef struct vvStackEntry vvStackEntry;
819
820 /* The state of the parser is completely contained in an instance of
821 ** the following structure */
822 struct vvParser {
823 int vvidx; /* Index of top element in stack */
824 int vverrcnt; /* Shifts left before out of the error */
825 phvolt_ARG_SDECL /* A place to hold %extra_argument */
826 vvStackEntry vvstack[VVSTACKDEPTH]; /* The parser's stack */
827 };
828 typedef struct vvParser vvParser;
829
830 #ifndef NDEBUG
831 #include <stdio.h>
832 static FILE *vvTraceFILE = 0;
833 static char *vvTracePrompt = 0;
834 #endif /* NDEBUG */
835
836 #ifndef NDEBUG
837 /*
838 ** Turn parser tracing on by giving a stream to which to write the trace
839 ** and a prompt to preface each trace message. Tracing is turned off
840 ** by making either argument NULL
841 **
842 ** Inputs:
843 ** <ul>
844 ** <li> A FILE* to which trace output should be written.
845 ** If NULL, then tracing is turned off.
846 ** <li> A prefix string written at the beginning of every
847 ** line of trace output. If NULL, then tracing is
848 ** turned off.
849 ** </ul>
850 **
851 ** Outputs:
852 ** None.
853 */
phvolt_Trace(FILE * TraceFILE,char * zTracePrompt)854 void phvolt_Trace(FILE *TraceFILE, char *zTracePrompt){
855 vvTraceFILE = TraceFILE;
856 vvTracePrompt = zTracePrompt;
857 if( vvTraceFILE==0 ) vvTracePrompt = 0;
858 else if( vvTracePrompt==0 ) vvTraceFILE = 0;
859 }
860 #endif /* NDEBUG */
861
862 #ifndef NDEBUG
863 /* For tracing shifts, the names of all terminals and nonterminals
864 ** are required. The following table supplies these names */
865 static const char *vvTokenName[] = {
866 "$", "OPEN_DELIMITER", "COMMA", "IN",
867 "QUESTION", "COLON", "RANGE", "AND",
868 "OR", "IS", "EQUALS", "NOTEQUALS",
869 "LESS", "GREATER", "GREATEREQUAL", "LESSEQUAL",
870 "IDENTICAL", "NOTIDENTICAL", "DIVIDE", "TIMES",
871 "MOD", "PLUS", "MINUS", "CONCAT",
872 "SBRACKET_OPEN", "PIPE", "NOT", "INCR",
873 "DECR", "PARENTHESES_OPEN", "DOT", "IF",
874 "CLOSE_DELIMITER", "ENDIF", "ELSE", "ELSEIF",
875 "ELSEFOR", "FOR", "IDENTIFIER", "ENDFOR",
876 "SWITCH", "ENDSWITCH", "CASE", "DEFAULT",
877 "SET", "ASSIGN", "ADD_ASSIGN", "SUB_ASSIGN",
878 "MUL_ASSIGN", "DIV_ASSIGN", "SBRACKET_CLOSE", "MACRO",
879 "PARENTHESES_CLOSE", "ENDMACRO", "INTEGER", "STRING",
880 "DOUBLE", "NULL", "FALSE", "TRUE",
881 "CALL", "ENDCALL", "OPEN_EDELIMITER", "CLOSE_EDELIMITER",
882 "BLOCK", "ENDBLOCK", "CACHE", "ENDCACHE",
883 "RAW", "ENDRAW", "EXTENDS", "INCLUDE",
884 "WITH", "DO", "RETURN", "AUTOESCAPE",
885 "ENDAUTOESCAPE", "BREAK", "CONTINUE", "RAW_FRAGMENT",
886 "DEFINED", "EMPTY", "EVEN", "ODD",
887 "NUMERIC", "SCALAR", "ITERABLE", "CBRACKET_OPEN",
888 "CBRACKET_CLOSE", "error", "program", "volt_language",
889 "statement_list", "statement", "raw_fragment", "if_statement",
890 "elseif_statement", "elsefor_statement", "for_statement", "switch_statement",
891 "case_clause", "set_statement", "echo_statement", "block_statement",
892 "cache_statement", "extends_statement", "include_statement", "do_statement",
893 "return_statement", "autoescape_statement", "raw_statement", "break_statement",
894 "continue_statement", "macro_statement", "empty_statement", "macro_call_statement",
895 "expr", "set_assignments", "set_assignment", "assignable_expr",
896 "macro_parameters", "macro_parameter", "macro_parameter_default", "argument_list",
897 "cache_lifetime", "array_list", "slice_offset", "array_item",
898 "function_call", "argument_item",
899 };
900 #endif /* NDEBUG */
901
902 #ifndef NDEBUG
903 /* For tracing reduce actions, the names of all rules are required.
904 */
905 static const char *vvRuleName[] = {
906 /* 0 */ "program ::= volt_language",
907 /* 1 */ "volt_language ::= statement_list",
908 /* 2 */ "statement_list ::= statement_list statement",
909 /* 3 */ "statement_list ::= statement",
910 /* 4 */ "statement ::= raw_fragment",
911 /* 5 */ "statement ::= if_statement",
912 /* 6 */ "statement ::= elseif_statement",
913 /* 7 */ "statement ::= elsefor_statement",
914 /* 8 */ "statement ::= for_statement",
915 /* 9 */ "statement ::= switch_statement",
916 /* 10 */ "statement ::= case_clause",
917 /* 11 */ "statement ::= set_statement",
918 /* 12 */ "statement ::= echo_statement",
919 /* 13 */ "statement ::= block_statement",
920 /* 14 */ "statement ::= cache_statement",
921 /* 15 */ "statement ::= extends_statement",
922 /* 16 */ "statement ::= include_statement",
923 /* 17 */ "statement ::= do_statement",
924 /* 18 */ "statement ::= return_statement",
925 /* 19 */ "statement ::= autoescape_statement",
926 /* 20 */ "statement ::= raw_statement",
927 /* 21 */ "statement ::= break_statement",
928 /* 22 */ "statement ::= continue_statement",
929 /* 23 */ "statement ::= macro_statement",
930 /* 24 */ "statement ::= empty_statement",
931 /* 25 */ "statement ::= macro_call_statement",
932 /* 26 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
933 /* 27 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
934 /* 28 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ELSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
935 /* 29 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ELSE CLOSE_DELIMITER OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
936 /* 30 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER OPEN_DELIMITER ELSE CLOSE_DELIMITER OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
937 /* 31 */ "elseif_statement ::= OPEN_DELIMITER ELSEIF expr CLOSE_DELIMITER",
938 /* 32 */ "elsefor_statement ::= OPEN_DELIMITER ELSEFOR CLOSE_DELIMITER",
939 /* 33 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER IN expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
940 /* 34 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER IN expr IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
941 /* 35 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER COMMA IDENTIFIER IN expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
942 /* 36 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER COMMA IDENTIFIER IN expr IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
943 /* 37 */ "switch_statement ::= OPEN_DELIMITER SWITCH expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDSWITCH CLOSE_DELIMITER",
944 /* 38 */ "switch_statement ::= OPEN_DELIMITER SWITCH expr CLOSE_DELIMITER OPEN_DELIMITER ENDSWITCH CLOSE_DELIMITER",
945 /* 39 */ "case_clause ::= OPEN_DELIMITER CASE expr CLOSE_DELIMITER",
946 /* 40 */ "case_clause ::= OPEN_DELIMITER DEFAULT CLOSE_DELIMITER",
947 /* 41 */ "set_statement ::= OPEN_DELIMITER SET set_assignments CLOSE_DELIMITER",
948 /* 42 */ "set_assignments ::= set_assignments COMMA set_assignment",
949 /* 43 */ "set_assignments ::= set_assignment",
950 /* 44 */ "set_assignment ::= assignable_expr ASSIGN expr",
951 /* 45 */ "set_assignment ::= assignable_expr ADD_ASSIGN expr",
952 /* 46 */ "set_assignment ::= assignable_expr SUB_ASSIGN expr",
953 /* 47 */ "set_assignment ::= assignable_expr MUL_ASSIGN expr",
954 /* 48 */ "set_assignment ::= assignable_expr DIV_ASSIGN expr",
955 /* 49 */ "assignable_expr ::= IDENTIFIER",
956 /* 50 */ "assignable_expr ::= assignable_expr SBRACKET_OPEN expr SBRACKET_CLOSE",
957 /* 51 */ "assignable_expr ::= assignable_expr DOT assignable_expr",
958 /* 52 */ "macro_statement ::= OPEN_DELIMITER MACRO IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDMACRO CLOSE_DELIMITER",
959 /* 53 */ "macro_statement ::= OPEN_DELIMITER MACRO IDENTIFIER PARENTHESES_OPEN macro_parameters PARENTHESES_CLOSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDMACRO CLOSE_DELIMITER",
960 /* 54 */ "macro_parameters ::= macro_parameters COMMA macro_parameter",
961 /* 55 */ "macro_parameters ::= macro_parameter",
962 /* 56 */ "macro_parameter ::= IDENTIFIER",
963 /* 57 */ "macro_parameter ::= IDENTIFIER ASSIGN macro_parameter_default",
964 /* 58 */ "macro_parameter_default ::= INTEGER",
965 /* 59 */ "macro_parameter_default ::= STRING",
966 /* 60 */ "macro_parameter_default ::= DOUBLE",
967 /* 61 */ "macro_parameter_default ::= NULL",
968 /* 62 */ "macro_parameter_default ::= FALSE",
969 /* 63 */ "macro_parameter_default ::= TRUE",
970 /* 64 */ "macro_call_statement ::= OPEN_DELIMITER CALL expr PARENTHESES_OPEN argument_list PARENTHESES_CLOSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDCALL CLOSE_DELIMITER",
971 /* 65 */ "macro_call_statement ::= OPEN_DELIMITER CALL expr PARENTHESES_OPEN PARENTHESES_CLOSE CLOSE_DELIMITER OPEN_DELIMITER ENDCALL CLOSE_DELIMITER",
972 /* 66 */ "empty_statement ::= OPEN_DELIMITER CLOSE_DELIMITER",
973 /* 67 */ "echo_statement ::= OPEN_EDELIMITER expr CLOSE_EDELIMITER",
974 /* 68 */ "block_statement ::= OPEN_DELIMITER BLOCK IDENTIFIER CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDBLOCK CLOSE_DELIMITER",
975 /* 69 */ "block_statement ::= OPEN_DELIMITER BLOCK IDENTIFIER CLOSE_DELIMITER OPEN_DELIMITER ENDBLOCK CLOSE_DELIMITER",
976 /* 70 */ "cache_statement ::= OPEN_DELIMITER CACHE expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDCACHE CLOSE_DELIMITER",
977 /* 71 */ "cache_statement ::= OPEN_DELIMITER CACHE expr cache_lifetime CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDCACHE CLOSE_DELIMITER",
978 /* 72 */ "cache_lifetime ::= INTEGER",
979 /* 73 */ "cache_lifetime ::= IDENTIFIER",
980 /* 74 */ "raw_statement ::= OPEN_DELIMITER RAW CLOSE_DELIMITER statement OPEN_DELIMITER ENDRAW CLOSE_DELIMITER",
981 /* 75 */ "extends_statement ::= OPEN_DELIMITER EXTENDS expr CLOSE_DELIMITER",
982 /* 76 */ "include_statement ::= OPEN_DELIMITER INCLUDE expr CLOSE_DELIMITER",
983 /* 77 */ "include_statement ::= OPEN_DELIMITER INCLUDE expr WITH expr CLOSE_DELIMITER",
984 /* 78 */ "do_statement ::= OPEN_DELIMITER DO expr CLOSE_DELIMITER",
985 /* 79 */ "return_statement ::= OPEN_DELIMITER RETURN expr CLOSE_DELIMITER",
986 /* 80 */ "autoescape_statement ::= OPEN_DELIMITER AUTOESCAPE FALSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDAUTOESCAPE CLOSE_DELIMITER",
987 /* 81 */ "autoescape_statement ::= OPEN_DELIMITER AUTOESCAPE TRUE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDAUTOESCAPE CLOSE_DELIMITER",
988 /* 82 */ "break_statement ::= OPEN_DELIMITER BREAK CLOSE_DELIMITER",
989 /* 83 */ "continue_statement ::= OPEN_DELIMITER CONTINUE CLOSE_DELIMITER",
990 /* 84 */ "raw_fragment ::= RAW_FRAGMENT",
991 /* 85 */ "expr ::= MINUS expr",
992 /* 86 */ "expr ::= PLUS expr",
993 /* 87 */ "expr ::= expr MINUS expr",
994 /* 88 */ "expr ::= expr PLUS expr",
995 /* 89 */ "expr ::= expr TIMES expr",
996 /* 90 */ "expr ::= expr TIMES TIMES expr",
997 /* 91 */ "expr ::= expr DIVIDE expr",
998 /* 92 */ "expr ::= expr DIVIDE DIVIDE expr",
999 /* 93 */ "expr ::= expr MOD expr",
1000 /* 94 */ "expr ::= expr AND expr",
1001 /* 95 */ "expr ::= expr OR expr",
1002 /* 96 */ "expr ::= expr CONCAT expr",
1003 /* 97 */ "expr ::= expr PIPE expr",
1004 /* 98 */ "expr ::= expr RANGE expr",
1005 /* 99 */ "expr ::= expr EQUALS expr",
1006 /* 100 */ "expr ::= expr NOTEQUALS DEFINED",
1007 /* 101 */ "expr ::= expr IS DEFINED",
1008 /* 102 */ "expr ::= expr NOTEQUALS EMPTY",
1009 /* 103 */ "expr ::= expr IS EMPTY",
1010 /* 104 */ "expr ::= expr NOTEQUALS EVEN",
1011 /* 105 */ "expr ::= expr IS EVEN",
1012 /* 106 */ "expr ::= expr NOTEQUALS ODD",
1013 /* 107 */ "expr ::= expr IS ODD",
1014 /* 108 */ "expr ::= expr NOTEQUALS NUMERIC",
1015 /* 109 */ "expr ::= expr IS NUMERIC",
1016 /* 110 */ "expr ::= expr NOTEQUALS SCALAR",
1017 /* 111 */ "expr ::= expr IS SCALAR",
1018 /* 112 */ "expr ::= expr NOTEQUALS ITERABLE",
1019 /* 113 */ "expr ::= expr IS ITERABLE",
1020 /* 114 */ "expr ::= expr IS expr",
1021 /* 115 */ "expr ::= expr NOTEQUALS expr",
1022 /* 116 */ "expr ::= expr IDENTICAL expr",
1023 /* 117 */ "expr ::= expr NOTIDENTICAL expr",
1024 /* 118 */ "expr ::= expr LESS expr",
1025 /* 119 */ "expr ::= expr GREATER expr",
1026 /* 120 */ "expr ::= expr GREATEREQUAL expr",
1027 /* 121 */ "expr ::= expr LESSEQUAL expr",
1028 /* 122 */ "expr ::= expr DOT expr",
1029 /* 123 */ "expr ::= expr IN expr",
1030 /* 124 */ "expr ::= expr NOT IN expr",
1031 /* 125 */ "expr ::= NOT expr",
1032 /* 126 */ "expr ::= expr INCR",
1033 /* 127 */ "expr ::= expr DECR",
1034 /* 128 */ "expr ::= PARENTHESES_OPEN expr PARENTHESES_CLOSE",
1035 /* 129 */ "expr ::= SBRACKET_OPEN SBRACKET_CLOSE",
1036 /* 130 */ "expr ::= SBRACKET_OPEN array_list SBRACKET_CLOSE",
1037 /* 131 */ "expr ::= CBRACKET_OPEN CBRACKET_CLOSE",
1038 /* 132 */ "expr ::= CBRACKET_OPEN array_list CBRACKET_CLOSE",
1039 /* 133 */ "expr ::= expr SBRACKET_OPEN expr SBRACKET_CLOSE",
1040 /* 134 */ "expr ::= expr QUESTION expr COLON expr",
1041 /* 135 */ "expr ::= expr SBRACKET_OPEN COLON slice_offset SBRACKET_CLOSE",
1042 /* 136 */ "expr ::= expr SBRACKET_OPEN slice_offset COLON SBRACKET_CLOSE",
1043 /* 137 */ "expr ::= expr SBRACKET_OPEN slice_offset COLON slice_offset SBRACKET_CLOSE",
1044 /* 138 */ "slice_offset ::= INTEGER",
1045 /* 139 */ "slice_offset ::= IDENTIFIER",
1046 /* 140 */ "array_list ::= array_list COMMA array_item",
1047 /* 141 */ "array_list ::= array_item",
1048 /* 142 */ "array_item ::= STRING COLON expr",
1049 /* 143 */ "array_item ::= expr",
1050 /* 144 */ "expr ::= function_call",
1051 /* 145 */ "function_call ::= expr PARENTHESES_OPEN argument_list PARENTHESES_CLOSE",
1052 /* 146 */ "function_call ::= expr PARENTHESES_OPEN PARENTHESES_CLOSE",
1053 /* 147 */ "argument_list ::= argument_list COMMA argument_item",
1054 /* 148 */ "argument_list ::= argument_item",
1055 /* 149 */ "argument_item ::= expr",
1056 /* 150 */ "argument_item ::= STRING COLON expr",
1057 /* 151 */ "expr ::= IDENTIFIER",
1058 /* 152 */ "expr ::= INTEGER",
1059 /* 153 */ "expr ::= STRING",
1060 /* 154 */ "expr ::= DOUBLE",
1061 /* 155 */ "expr ::= NULL",
1062 /* 156 */ "expr ::= FALSE",
1063 /* 157 */ "expr ::= TRUE",
1064 };
1065 #endif /* NDEBUG */
1066
1067 /*
1068 ** This function returns the symbolic name associated with a token
1069 ** value.
1070 */
phvolt_TokenName(int tokenType)1071 const char *phvolt_TokenName(int tokenType){
1072 #ifndef NDEBUG
1073 if( tokenType>0 && tokenType<(sizeof(vvTokenName)/sizeof(vvTokenName[0])) ){
1074 return vvTokenName[tokenType];
1075 }else{
1076 return "Unknown";
1077 }
1078 #else
1079 return "";
1080 #endif
1081 }
1082
1083 /*
1084 ** This function allocates a new parser.
1085 ** The only argument is a pointer to a function which works like
1086 ** malloc.
1087 **
1088 ** Inputs:
1089 ** A pointer to the function used to allocate memory.
1090 **
1091 ** Outputs:
1092 ** A pointer to a parser. This pointer is used in subsequent calls
1093 ** to phvolt_ and phvolt_Free.
1094 */
phvolt_Alloc(void * (* mallocProc)(size_t))1095 void *phvolt_Alloc(void *(*mallocProc)(size_t)){
1096 vvParser *pParser;
1097 pParser = (vvParser*)(*mallocProc)( (size_t)sizeof(vvParser) );
1098 if( pParser ){
1099 pParser->vvidx = -1;
1100 }
1101 return pParser;
1102 }
1103
1104 /* The following function deletes the value associated with a
1105 ** symbol. The symbol can be either a terminal or nonterminal.
1106 ** "vvmajor" is the symbol code, and "vvpminor" is a pointer to
1107 ** the value.
1108 */
vv_destructor(VVCODETYPE vvmajor,VVMINORTYPE * vvpminor)1109 static void vv_destructor(VVCODETYPE vvmajor, VVMINORTYPE *vvpminor){
1110 switch( vvmajor ){
1111 /* Here is inserted the actions which take place when a
1112 ** terminal or non-terminal is destroyed. This can happen
1113 ** when the symbol is popped from the stack during a
1114 ** reduce or during error processing or when a parser is
1115 ** being destroyed before it is finished parsing.
1116 **
1117 ** Note: during a reduce, the only symbols destroyed are those
1118 ** which appear on the RHS of the rule, but which are not used
1119 ** inside the C code.
1120 */
1121 case 1:
1122 case 2:
1123 case 3:
1124 case 4:
1125 case 5:
1126 case 6:
1127 case 7:
1128 case 8:
1129 case 9:
1130 case 10:
1131 case 11:
1132 case 12:
1133 case 13:
1134 case 14:
1135 case 15:
1136 case 16:
1137 case 17:
1138 case 18:
1139 case 19:
1140 case 20:
1141 case 21:
1142 case 22:
1143 case 23:
1144 case 24:
1145 case 25:
1146 case 26:
1147 case 27:
1148 case 28:
1149 case 29:
1150 case 30:
1151 case 31:
1152 case 32:
1153 case 33:
1154 case 34:
1155 case 35:
1156 case 36:
1157 case 37:
1158 case 38:
1159 case 39:
1160 case 40:
1161 case 41:
1162 case 42:
1163 case 43:
1164 case 44:
1165 case 45:
1166 case 46:
1167 case 47:
1168 case 48:
1169 case 49:
1170 case 50:
1171 case 51:
1172 case 52:
1173 case 53:
1174 case 54:
1175 case 55:
1176 case 56:
1177 case 57:
1178 case 58:
1179 case 59:
1180 case 60:
1181 case 61:
1182 case 62:
1183 case 63:
1184 case 64:
1185 case 65:
1186 case 66:
1187 case 67:
1188 case 68:
1189 case 69:
1190 case 70:
1191 case 71:
1192 case 72:
1193 case 73:
1194 case 74:
1195 case 75:
1196 case 76:
1197 case 77:
1198 case 78:
1199 case 79:
1200 case 80:
1201 case 81:
1202 case 82:
1203 case 83:
1204 case 84:
1205 case 85:
1206 case 86:
1207 case 87:
1208 case 88:
1209 // 161 "parser.php5.lemon"
1210 {
1211 if ((vvpminor->vv0)) {
1212 if ((vvpminor->vv0)->free_flag) {
1213 efree((vvpminor->vv0)->token);
1214 }
1215 efree((vvpminor->vv0));
1216 }
1217 }
1218 // 1217 "parser.php5.c"
1219 break;
1220 case 92:
1221 case 93:
1222 case 94:
1223 case 95:
1224 case 96:
1225 case 97:
1226 case 98:
1227 case 99:
1228 case 100:
1229 case 101:
1230 case 102:
1231 case 103:
1232 case 104:
1233 case 105:
1234 case 106:
1235 case 107:
1236 case 108:
1237 case 109:
1238 case 110:
1239 case 111:
1240 case 112:
1241 case 113:
1242 case 114:
1243 case 115:
1244 case 116:
1245 case 117:
1246 case 118:
1247 case 120:
1248 case 121:
1249 case 123:
1250 case 124:
1251 case 125:
1252 case 126:
1253 case 127:
1254 case 128:
1255 case 129:
1256 // 178 "parser.php5.lemon"
1257 {
1258 #if PHP_VERSION_ID < 70000
1259 zval_ptr_dtor(&(vvpminor->vv228));
1260 #endif
1261 }
1262 // 1261 "parser.php5.c"
1263 break;
1264 default: break; /* If no destructor action specified: do nothing */
1265 }
1266 }
1267
1268 /*
1269 ** Pop the parser's stack once.
1270 **
1271 ** If there is a destructor routine associated with the token which
1272 ** is popped from the stack, then call it.
1273 **
1274 ** Return the major token number for the symbol popped.
1275 */
vv_pop_parser_stack(vvParser * pParser)1276 static int vv_pop_parser_stack(vvParser *pParser){
1277 VVCODETYPE vvmajor;
1278 vvStackEntry *vvtos = &pParser->vvstack[pParser->vvidx];
1279
1280 if( pParser->vvidx<0 ) return 0;
1281 #ifndef NDEBUG
1282 if( vvTraceFILE && pParser->vvidx>=0 ){
1283 fprintf(vvTraceFILE,"%sPopping %s\n",
1284 vvTracePrompt,
1285 vvTokenName[vvtos->major]);
1286 }
1287 #endif
1288 vvmajor = vvtos->major;
1289 vv_destructor( vvmajor, &vvtos->minor);
1290 pParser->vvidx--;
1291 return vvmajor;
1292 }
1293
1294 /*
1295 ** Deallocate and destroy a parser. Destructors are all called for
1296 ** all stack elements before shutting the parser down.
1297 **
1298 ** Inputs:
1299 ** <ul>
1300 ** <li> A pointer to the parser. This should be a pointer
1301 ** obtained from phvolt_Alloc.
1302 ** <li> A pointer to a function used to reclaim memory obtained
1303 ** from malloc.
1304 ** </ul>
1305 */
phvolt_Free(void * p,void (* freeProc)(void *))1306 void phvolt_Free(
1307 void *p, /* The parser to be deleted */
1308 void (*freeProc)(void*) /* Function used to reclaim memory */
1309 ){
1310 vvParser *pParser = (vvParser*)p;
1311 if( pParser==0 ) return;
1312 while( pParser->vvidx>=0 ) vv_pop_parser_stack(pParser);
1313 (*freeProc)((void*)pParser);
1314 }
1315
1316 /*
1317 ** Find the appropriate action for a parser given the terminal
1318 ** look-ahead token iLookAhead.
1319 **
1320 ** If the look-ahead token is VVNOCODE, then check to see if the action is
1321 ** independent of the look-ahead. If it is, return the action, otherwise
1322 ** return VV_NO_ACTION.
1323 */
vv_find_shift_action(vvParser * pParser,int iLookAhead)1324 static int vv_find_shift_action(
1325 vvParser *pParser, /* The parser */
1326 int iLookAhead /* The look-ahead token */
1327 ){
1328 int i;
1329 int stateno = pParser->vvstack[pParser->vvidx].stateno;
1330
1331 /* if( pParser->vvidx<0 ) return VV_NO_ACTION; */
1332 i = vv_shift_ofst[stateno];
1333 if( i==VV_SHIFT_USE_DFLT ){
1334 return vv_default[stateno];
1335 }
1336 if( iLookAhead==VVNOCODE ){
1337 return VV_NO_ACTION;
1338 }
1339 i += iLookAhead;
1340 if( i<0 || i>=VV_SZ_ACTTAB || vv_lookahead[i]!=iLookAhead ){
1341 #ifdef VVFALLBACK
1342 int iFallback; /* Fallback token */
1343 if( iLookAhead<sizeof(vvFallback)/sizeof(vvFallback[0])
1344 && (iFallback = vvFallback[iLookAhead])!=0 ){
1345 #ifndef NDEBUG
1346 if( vvTraceFILE ){
1347 fprintf(vvTraceFILE, "%sFALLBACK %s => %s\n",
1348 vvTracePrompt, vvTokenName[iLookAhead], vvTokenName[iFallback]);
1349 }
1350 #endif
1351 return vv_find_shift_action(pParser, iFallback);
1352 }
1353 #endif
1354 return vv_default[stateno];
1355 }else{
1356 return vv_action[i];
1357 }
1358 }
1359
1360 /*
1361 ** Find the appropriate action for a parser given the non-terminal
1362 ** look-ahead token iLookAhead.
1363 **
1364 ** If the look-ahead token is VVNOCODE, then check to see if the action is
1365 ** independent of the look-ahead. If it is, return the action, otherwise
1366 ** return VV_NO_ACTION.
1367 */
vv_find_reduce_action(vvParser * pParser,int iLookAhead)1368 static int vv_find_reduce_action(
1369 vvParser *pParser, /* The parser */
1370 int iLookAhead /* The look-ahead token */
1371 ){
1372 int i;
1373 int stateno = pParser->vvstack[pParser->vvidx].stateno;
1374
1375 i = vv_reduce_ofst[stateno];
1376 if( i==VV_REDUCE_USE_DFLT ){
1377 return vv_default[stateno];
1378 }
1379 if( iLookAhead==VVNOCODE ){
1380 return VV_NO_ACTION;
1381 }
1382 i += iLookAhead;
1383 if( i<0 || i>=VV_SZ_ACTTAB || vv_lookahead[i]!=iLookAhead ){
1384 return vv_default[stateno];
1385 }else{
1386 return vv_action[i];
1387 }
1388 }
1389
1390 /*
1391 ** Perform a shift action.
1392 */
vv_shift(vvParser * vvpParser,int vvNewState,int vvMajor,VVMINORTYPE * vvpMinor)1393 static void vv_shift(
1394 vvParser *vvpParser, /* The parser to be shifted */
1395 int vvNewState, /* The new state to shift in */
1396 int vvMajor, /* The major token to shift in */
1397 VVMINORTYPE *vvpMinor /* Pointer ot the minor token to shift in */
1398 ){
1399 vvStackEntry *vvtos;
1400 vvpParser->vvidx++;
1401 if( vvpParser->vvidx>=VVSTACKDEPTH ){
1402 phvolt_ARG_FETCH;
1403 vvpParser->vvidx--;
1404 #ifndef NDEBUG
1405 if( vvTraceFILE ){
1406 fprintf(vvTraceFILE,"%sStack Overflow!\n",vvTracePrompt);
1407 }
1408 #endif
1409 while( vvpParser->vvidx>=0 ) vv_pop_parser_stack(vvpParser);
1410 /* Here code is inserted which will execute if the parser
1411 ** stack every overflows */
1412 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument var */
1413 return;
1414 }
1415 vvtos = &vvpParser->vvstack[vvpParser->vvidx];
1416 vvtos->stateno = vvNewState;
1417 vvtos->major = vvMajor;
1418 vvtos->minor = *vvpMinor;
1419 #ifndef NDEBUG
1420 if( vvTraceFILE && vvpParser->vvidx>0 ){
1421 int i;
1422 fprintf(vvTraceFILE,"%sShift %d\n",vvTracePrompt,vvNewState);
1423 fprintf(vvTraceFILE,"%sStack:",vvTracePrompt);
1424 for(i=1; i<=vvpParser->vvidx; i++)
1425 fprintf(vvTraceFILE," %s",vvTokenName[vvpParser->vvstack[i].major]);
1426 fprintf(vvTraceFILE,"\n");
1427 }
1428 #endif
1429 }
1430
1431 /* The following table contains information about every rule that
1432 ** is used during the reduce.
1433 */
1434 static struct {
1435 VVCODETYPE lhs; /* Symbol on the left-hand side of the rule */
1436 unsigned char nrhs; /* Number of right-hand side symbols in the rule */
1437 } vvRuleInfo[] = {
1438 { 90, 1 },
1439 { 91, 1 },
1440 { 92, 2 },
1441 { 92, 1 },
1442 { 93, 1 },
1443 { 93, 1 },
1444 { 93, 1 },
1445 { 93, 1 },
1446 { 93, 1 },
1447 { 93, 1 },
1448 { 93, 1 },
1449 { 93, 1 },
1450 { 93, 1 },
1451 { 93, 1 },
1452 { 93, 1 },
1453 { 93, 1 },
1454 { 93, 1 },
1455 { 93, 1 },
1456 { 93, 1 },
1457 { 93, 1 },
1458 { 93, 1 },
1459 { 93, 1 },
1460 { 93, 1 },
1461 { 93, 1 },
1462 { 93, 1 },
1463 { 93, 1 },
1464 { 95, 8 },
1465 { 95, 7 },
1466 { 95, 12 },
1467 { 95, 11 },
1468 { 95, 10 },
1469 { 96, 4 },
1470 { 97, 3 },
1471 { 98, 10 },
1472 { 98, 12 },
1473 { 98, 12 },
1474 { 98, 14 },
1475 { 99, 8 },
1476 { 99, 7 },
1477 { 100, 4 },
1478 { 100, 3 },
1479 { 101, 4 },
1480 { 117, 3 },
1481 { 117, 1 },
1482 { 118, 3 },
1483 { 118, 3 },
1484 { 118, 3 },
1485 { 118, 3 },
1486 { 118, 3 },
1487 { 119, 1 },
1488 { 119, 4 },
1489 { 119, 3 },
1490 { 113, 10 },
1491 { 113, 11 },
1492 { 120, 3 },
1493 { 120, 1 },
1494 { 121, 1 },
1495 { 121, 3 },
1496 { 122, 1 },
1497 { 122, 1 },
1498 { 122, 1 },
1499 { 122, 1 },
1500 { 122, 1 },
1501 { 122, 1 },
1502 { 115, 11 },
1503 { 115, 9 },
1504 { 114, 2 },
1505 { 102, 3 },
1506 { 103, 8 },
1507 { 103, 7 },
1508 { 104, 8 },
1509 { 104, 9 },
1510 { 124, 1 },
1511 { 124, 1 },
1512 { 110, 7 },
1513 { 105, 4 },
1514 { 106, 4 },
1515 { 106, 6 },
1516 { 107, 4 },
1517 { 108, 4 },
1518 { 109, 8 },
1519 { 109, 8 },
1520 { 111, 3 },
1521 { 112, 3 },
1522 { 94, 1 },
1523 { 116, 2 },
1524 { 116, 2 },
1525 { 116, 3 },
1526 { 116, 3 },
1527 { 116, 3 },
1528 { 116, 4 },
1529 { 116, 3 },
1530 { 116, 4 },
1531 { 116, 3 },
1532 { 116, 3 },
1533 { 116, 3 },
1534 { 116, 3 },
1535 { 116, 3 },
1536 { 116, 3 },
1537 { 116, 3 },
1538 { 116, 3 },
1539 { 116, 3 },
1540 { 116, 3 },
1541 { 116, 3 },
1542 { 116, 3 },
1543 { 116, 3 },
1544 { 116, 3 },
1545 { 116, 3 },
1546 { 116, 3 },
1547 { 116, 3 },
1548 { 116, 3 },
1549 { 116, 3 },
1550 { 116, 3 },
1551 { 116, 3 },
1552 { 116, 3 },
1553 { 116, 3 },
1554 { 116, 3 },
1555 { 116, 3 },
1556 { 116, 3 },
1557 { 116, 3 },
1558 { 116, 3 },
1559 { 116, 3 },
1560 { 116, 3 },
1561 { 116, 3 },
1562 { 116, 4 },
1563 { 116, 2 },
1564 { 116, 2 },
1565 { 116, 2 },
1566 { 116, 3 },
1567 { 116, 2 },
1568 { 116, 3 },
1569 { 116, 2 },
1570 { 116, 3 },
1571 { 116, 4 },
1572 { 116, 5 },
1573 { 116, 5 },
1574 { 116, 5 },
1575 { 116, 6 },
1576 { 126, 1 },
1577 { 126, 1 },
1578 { 125, 3 },
1579 { 125, 1 },
1580 { 127, 3 },
1581 { 127, 1 },
1582 { 116, 1 },
1583 { 128, 4 },
1584 { 128, 3 },
1585 { 123, 3 },
1586 { 123, 1 },
1587 { 129, 1 },
1588 { 129, 3 },
1589 { 116, 1 },
1590 { 116, 1 },
1591 { 116, 1 },
1592 { 116, 1 },
1593 { 116, 1 },
1594 { 116, 1 },
1595 { 116, 1 },
1596 };
1597
1598 static void vv_accept(vvParser*); /* Forward Declaration */
1599
1600 /*
1601 ** Perform a reduce action and the shift that must immediately
1602 ** follow the reduce.
1603 */
vv_reduce(vvParser * vvpParser,int vvruleno)1604 static void vv_reduce(
1605 vvParser *vvpParser, /* The parser */
1606 int vvruleno /* Number of the rule by which to reduce */
1607 ){
1608 int vvgoto; /* The next state */
1609 int vvact; /* The next action */
1610 VVMINORTYPE vvgotominor; /* The LHS of the rule reduced */
1611 vvStackEntry *vvmsp; /* The top of the parser's stack */
1612 int vvsize; /* Amount to pop the stack */
1613 phvolt_ARG_FETCH;
1614 vvmsp = &vvpParser->vvstack[vvpParser->vvidx];
1615 #ifndef NDEBUG
1616 if( vvTraceFILE && vvruleno>=0
1617 && vvruleno<sizeof(vvRuleName)/sizeof(vvRuleName[0]) ){
1618 fprintf(vvTraceFILE, "%sReduce [%s].\n", vvTracePrompt,
1619 vvRuleName[vvruleno]);
1620 }
1621 #endif /* NDEBUG */
1622
1623 switch( vvruleno ){
1624 /* Beginning here are the reduction cases. A typical example
1625 ** follows:
1626 ** case 0:
1627 ** // <lineno> <grammarfile>
1628 ** { ... } // User supplied code
1629 ** // <lineno> <thisfile>
1630 ** break;
1631 */
1632 case 0:
1633 // 170 "parser.php5.lemon"
1634 {
1635 status->ret = vvmsp[0].minor.vv228;
1636 }
1637 // 1636 "parser.php5.c"
1638 break;
1639 case 1:
1640 case 4:
1641 case 5:
1642 case 6:
1643 case 7:
1644 case 8:
1645 case 9:
1646 case 10:
1647 case 11:
1648 case 12:
1649 case 13:
1650 case 14:
1651 case 15:
1652 case 16:
1653 case 17:
1654 case 18:
1655 case 19:
1656 case 20:
1657 case 21:
1658 case 22:
1659 case 23:
1660 case 24:
1661 case 25:
1662 case 144:
1663 // 174 "parser.php5.lemon"
1664 {
1665 vvgotominor.vv228 = vvmsp[0].minor.vv228;
1666 }
1667 // 1666 "parser.php5.c"
1668 break;
1669 case 2:
1670 // 184 "parser.php5.lemon"
1671 {
1672 vvgotominor.vv228 = phvolt_ret_zval_list(vvmsp[-1].minor.vv228, vvmsp[0].minor.vv228);
1673 }
1674 // 1673 "parser.php5.c"
1675 break;
1676 case 3:
1677 case 43:
1678 case 55:
1679 case 141:
1680 case 148:
1681 // 188 "parser.php5.lemon"
1682 {
1683 vvgotominor.vv228 = phvolt_ret_zval_list(NULL, vvmsp[0].minor.vv228);
1684 }
1685 // 1684 "parser.php5.c"
1686 break;
1687 case 26:
1688 // 293 "parser.php5.lemon"
1689 {
1690 vvgotominor.vv228 = phvolt_ret_if_statement(vvmsp[-5].minor.vv228, vvmsp[-3].minor.vv228, NULL, status->scanner_state);
1691 vv_destructor(1,&vvmsp[-7].minor);
1692 vv_destructor(31,&vvmsp[-6].minor);
1693 vv_destructor(32,&vvmsp[-4].minor);
1694 vv_destructor(1,&vvmsp[-2].minor);
1695 vv_destructor(33,&vvmsp[-1].minor);
1696 vv_destructor(32,&vvmsp[0].minor);
1697 }
1698 // 1697 "parser.php5.c"
1699 break;
1700 case 27:
1701 // 298 "parser.php5.lemon"
1702 {
1703 vvgotominor.vv228 = phvolt_ret_if_statement(vvmsp[-4].minor.vv228, NULL, NULL, status->scanner_state);
1704 vv_destructor(1,&vvmsp[-6].minor);
1705 vv_destructor(31,&vvmsp[-5].minor);
1706 vv_destructor(32,&vvmsp[-3].minor);
1707 vv_destructor(1,&vvmsp[-2].minor);
1708 vv_destructor(33,&vvmsp[-1].minor);
1709 vv_destructor(32,&vvmsp[0].minor);
1710 }
1711 // 1710 "parser.php5.c"
1712 break;
1713 case 28:
1714 // 303 "parser.php5.lemon"
1715 {
1716 vvgotominor.vv228 = phvolt_ret_if_statement(vvmsp[-9].minor.vv228, vvmsp[-7].minor.vv228, vvmsp[-3].minor.vv228, status->scanner_state);
1717 vv_destructor(1,&vvmsp[-11].minor);
1718 vv_destructor(31,&vvmsp[-10].minor);
1719 vv_destructor(32,&vvmsp[-8].minor);
1720 vv_destructor(1,&vvmsp[-6].minor);
1721 vv_destructor(34,&vvmsp[-5].minor);
1722 vv_destructor(32,&vvmsp[-4].minor);
1723 vv_destructor(1,&vvmsp[-2].minor);
1724 vv_destructor(33,&vvmsp[-1].minor);
1725 vv_destructor(32,&vvmsp[0].minor);
1726 }
1727 // 1726 "parser.php5.c"
1728 break;
1729 case 29:
1730 // 308 "parser.php5.lemon"
1731 {
1732 vvgotominor.vv228 = phvolt_ret_if_statement(vvmsp[-8].minor.vv228, vvmsp[-6].minor.vv228, NULL, status->scanner_state);
1733 vv_destructor(1,&vvmsp[-10].minor);
1734 vv_destructor(31,&vvmsp[-9].minor);
1735 vv_destructor(32,&vvmsp[-7].minor);
1736 vv_destructor(1,&vvmsp[-5].minor);
1737 vv_destructor(34,&vvmsp[-4].minor);
1738 vv_destructor(32,&vvmsp[-3].minor);
1739 vv_destructor(1,&vvmsp[-2].minor);
1740 vv_destructor(33,&vvmsp[-1].minor);
1741 vv_destructor(32,&vvmsp[0].minor);
1742 }
1743 // 1742 "parser.php5.c"
1744 break;
1745 case 30:
1746 // 313 "parser.php5.lemon"
1747 {
1748 vvgotominor.vv228 = phvolt_ret_if_statement(vvmsp[-7].minor.vv228, NULL, NULL, status->scanner_state);
1749 vv_destructor(1,&vvmsp[-9].minor);
1750 vv_destructor(31,&vvmsp[-8].minor);
1751 vv_destructor(32,&vvmsp[-6].minor);
1752 vv_destructor(1,&vvmsp[-5].minor);
1753 vv_destructor(34,&vvmsp[-4].minor);
1754 vv_destructor(32,&vvmsp[-3].minor);
1755 vv_destructor(1,&vvmsp[-2].minor);
1756 vv_destructor(33,&vvmsp[-1].minor);
1757 vv_destructor(32,&vvmsp[0].minor);
1758 }
1759 // 1758 "parser.php5.c"
1760 break;
1761 case 31:
1762 // 323 "parser.php5.lemon"
1763 {
1764 vvgotominor.vv228 = phvolt_ret_elseif_statement(vvmsp[-1].minor.vv228, status->scanner_state);
1765 vv_destructor(1,&vvmsp[-3].minor);
1766 vv_destructor(35,&vvmsp[-2].minor);
1767 vv_destructor(32,&vvmsp[0].minor);
1768 }
1769 // 1768 "parser.php5.c"
1770 break;
1771 case 32:
1772 // 333 "parser.php5.lemon"
1773 {
1774 vvgotominor.vv228 = phvolt_ret_elsefor_statement(status->scanner_state);
1775 vv_destructor(1,&vvmsp[-2].minor);
1776 vv_destructor(36,&vvmsp[-1].minor);
1777 vv_destructor(32,&vvmsp[0].minor);
1778 }
1779 // 1778 "parser.php5.c"
1780 break;
1781 case 33:
1782 // 343 "parser.php5.lemon"
1783 {
1784 vvgotominor.vv228 = phvolt_ret_for_statement(vvmsp[-7].minor.vv0, NULL, vvmsp[-5].minor.vv228, NULL, vvmsp[-3].minor.vv228, status->scanner_state);
1785 vv_destructor(1,&vvmsp[-9].minor);
1786 vv_destructor(37,&vvmsp[-8].minor);
1787 vv_destructor(3,&vvmsp[-6].minor);
1788 vv_destructor(32,&vvmsp[-4].minor);
1789 vv_destructor(1,&vvmsp[-2].minor);
1790 vv_destructor(39,&vvmsp[-1].minor);
1791 vv_destructor(32,&vvmsp[0].minor);
1792 }
1793 // 1792 "parser.php5.c"
1794 break;
1795 case 34:
1796 // 347 "parser.php5.lemon"
1797 {
1798 vvgotominor.vv228 = phvolt_ret_for_statement(vvmsp[-9].minor.vv0, NULL, vvmsp[-7].minor.vv228, vvmsp[-5].minor.vv228, vvmsp[-3].minor.vv228, status->scanner_state);
1799 vv_destructor(1,&vvmsp[-11].minor);
1800 vv_destructor(37,&vvmsp[-10].minor);
1801 vv_destructor(3,&vvmsp[-8].minor);
1802 vv_destructor(31,&vvmsp[-6].minor);
1803 vv_destructor(32,&vvmsp[-4].minor);
1804 vv_destructor(1,&vvmsp[-2].minor);
1805 vv_destructor(39,&vvmsp[-1].minor);
1806 vv_destructor(32,&vvmsp[0].minor);
1807 }
1808 // 1807 "parser.php5.c"
1809 break;
1810 case 35:
1811 // 351 "parser.php5.lemon"
1812 {
1813 vvgotominor.vv228 = phvolt_ret_for_statement(vvmsp[-7].minor.vv0, vvmsp[-9].minor.vv0, vvmsp[-5].minor.vv228, NULL, vvmsp[-3].minor.vv228, status->scanner_state);
1814 vv_destructor(1,&vvmsp[-11].minor);
1815 vv_destructor(37,&vvmsp[-10].minor);
1816 vv_destructor(2,&vvmsp[-8].minor);
1817 vv_destructor(3,&vvmsp[-6].minor);
1818 vv_destructor(32,&vvmsp[-4].minor);
1819 vv_destructor(1,&vvmsp[-2].minor);
1820 vv_destructor(39,&vvmsp[-1].minor);
1821 vv_destructor(32,&vvmsp[0].minor);
1822 }
1823 // 1822 "parser.php5.c"
1824 break;
1825 case 36:
1826 // 355 "parser.php5.lemon"
1827 {
1828 vvgotominor.vv228 = phvolt_ret_for_statement(vvmsp[-9].minor.vv0, vvmsp[-11].minor.vv0, vvmsp[-7].minor.vv228, vvmsp[-5].minor.vv228, vvmsp[-3].minor.vv228, status->scanner_state);
1829 vv_destructor(1,&vvmsp[-13].minor);
1830 vv_destructor(37,&vvmsp[-12].minor);
1831 vv_destructor(2,&vvmsp[-10].minor);
1832 vv_destructor(3,&vvmsp[-8].minor);
1833 vv_destructor(31,&vvmsp[-6].minor);
1834 vv_destructor(32,&vvmsp[-4].minor);
1835 vv_destructor(1,&vvmsp[-2].minor);
1836 vv_destructor(39,&vvmsp[-1].minor);
1837 vv_destructor(32,&vvmsp[0].minor);
1838 }
1839 // 1838 "parser.php5.c"
1840 break;
1841 case 37:
1842 // 366 "parser.php5.lemon"
1843 {
1844 vvgotominor.vv228 = phvolt_ret_switch_statement(vvmsp[-5].minor.vv228, vvmsp[-3].minor.vv228, status->scanner_state);
1845 vv_destructor(1,&vvmsp[-7].minor);
1846 vv_destructor(40,&vvmsp[-6].minor);
1847 vv_destructor(32,&vvmsp[-4].minor);
1848 vv_destructor(1,&vvmsp[-2].minor);
1849 vv_destructor(41,&vvmsp[-1].minor);
1850 vv_destructor(32,&vvmsp[0].minor);
1851 }
1852 // 1851 "parser.php5.c"
1853 break;
1854 case 38:
1855 // 371 "parser.php5.lemon"
1856 {
1857 vvgotominor.vv228 = phvolt_ret_switch_statement(vvmsp[-4].minor.vv228, NULL, status->scanner_state);
1858 vv_destructor(1,&vvmsp[-6].minor);
1859 vv_destructor(40,&vvmsp[-5].minor);
1860 vv_destructor(32,&vvmsp[-3].minor);
1861 vv_destructor(1,&vvmsp[-2].minor);
1862 vv_destructor(41,&vvmsp[-1].minor);
1863 vv_destructor(32,&vvmsp[0].minor);
1864 }
1865 // 1864 "parser.php5.c"
1866 break;
1867 case 39:
1868 // 382 "parser.php5.lemon"
1869 {
1870 vvgotominor.vv228 = phvolt_ret_case_clause(vvmsp[-1].minor.vv228, status->scanner_state);
1871 vv_destructor(1,&vvmsp[-3].minor);
1872 vv_destructor(42,&vvmsp[-2].minor);
1873 vv_destructor(32,&vvmsp[0].minor);
1874 }
1875 // 1874 "parser.php5.c"
1876 break;
1877 case 40:
1878 // 387 "parser.php5.lemon"
1879 {
1880 vvgotominor.vv228 = phvolt_ret_case_clause(NULL, status->scanner_state);
1881 vv_destructor(1,&vvmsp[-2].minor);
1882 vv_destructor(43,&vvmsp[-1].minor);
1883 vv_destructor(32,&vvmsp[0].minor);
1884 }
1885 // 1884 "parser.php5.c"
1886 break;
1887 case 41:
1888 // 397 "parser.php5.lemon"
1889 {
1890 vvgotominor.vv228 = phvolt_ret_set_statement(vvmsp[-1].minor.vv228);
1891 vv_destructor(1,&vvmsp[-3].minor);
1892 vv_destructor(44,&vvmsp[-2].minor);
1893 vv_destructor(32,&vvmsp[0].minor);
1894 }
1895 // 1894 "parser.php5.c"
1896 break;
1897 case 42:
1898 case 54:
1899 case 140:
1900 case 147:
1901 // 407 "parser.php5.lemon"
1902 {
1903 vvgotominor.vv228 = phvolt_ret_zval_list(vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228);
1904 vv_destructor(2,&vvmsp[-1].minor);
1905 }
1906 // 1905 "parser.php5.c"
1907 break;
1908 case 44:
1909 // 421 "parser.php5.lemon"
1910 {
1911 vvgotominor.vv228 = phvolt_ret_set_assignment(vvmsp[-2].minor.vv228, PHVOLT_T_ASSIGN, vvmsp[0].minor.vv228, status->scanner_state);
1912 vv_destructor(45,&vvmsp[-1].minor);
1913 }
1914 // 1913 "parser.php5.c"
1915 break;
1916 case 45:
1917 // 425 "parser.php5.lemon"
1918 {
1919 vvgotominor.vv228 = phvolt_ret_set_assignment(vvmsp[-2].minor.vv228, PHVOLT_T_ADD_ASSIGN, vvmsp[0].minor.vv228, status->scanner_state);
1920 vv_destructor(46,&vvmsp[-1].minor);
1921 }
1922 // 1921 "parser.php5.c"
1923 break;
1924 case 46:
1925 // 429 "parser.php5.lemon"
1926 {
1927 vvgotominor.vv228 = phvolt_ret_set_assignment(vvmsp[-2].minor.vv228, PHVOLT_T_SUB_ASSIGN, vvmsp[0].minor.vv228, status->scanner_state);
1928 vv_destructor(47,&vvmsp[-1].minor);
1929 }
1930 // 1929 "parser.php5.c"
1931 break;
1932 case 47:
1933 // 433 "parser.php5.lemon"
1934 {
1935 vvgotominor.vv228 = phvolt_ret_set_assignment(vvmsp[-2].minor.vv228, PHVOLT_T_MUL_ASSIGN, vvmsp[0].minor.vv228, status->scanner_state);
1936 vv_destructor(48,&vvmsp[-1].minor);
1937 }
1938 // 1937 "parser.php5.c"
1939 break;
1940 case 48:
1941 // 437 "parser.php5.lemon"
1942 {
1943 vvgotominor.vv228 = phvolt_ret_set_assignment(vvmsp[-2].minor.vv228, PHVOLT_T_DIV_ASSIGN, vvmsp[0].minor.vv228, status->scanner_state);
1944 vv_destructor(49,&vvmsp[-1].minor);
1945 }
1946 // 1945 "parser.php5.c"
1947 break;
1948 case 49:
1949 case 73:
1950 case 139:
1951 case 151:
1952 // 441 "parser.php5.lemon"
1953 {
1954 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_IDENTIFIER, vvmsp[0].minor.vv0, status->scanner_state);
1955 }
1956 // 1955 "parser.php5.c"
1957 break;
1958 case 50:
1959 case 133:
1960 // 445 "parser.php5.lemon"
1961 {
1962 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ARRAYACCESS, vvmsp[-3].minor.vv228, vvmsp[-1].minor.vv228, NULL, status->scanner_state);
1963 vv_destructor(24,&vvmsp[-2].minor);
1964 vv_destructor(50,&vvmsp[0].minor);
1965 }
1966 // 1965 "parser.php5.c"
1967 break;
1968 case 51:
1969 case 122:
1970 // 449 "parser.php5.lemon"
1971 {
1972 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_DOT, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
1973 vv_destructor(30,&vvmsp[-1].minor);
1974 }
1975 // 1974 "parser.php5.c"
1976 break;
1977 case 52:
1978 // 459 "parser.php5.lemon"
1979 {
1980 vvgotominor.vv228 = phvolt_ret_macro_statement(vvmsp[-7].minor.vv0, NULL, vvmsp[-3].minor.vv228, status->scanner_state);
1981 vv_destructor(1,&vvmsp[-9].minor);
1982 vv_destructor(51,&vvmsp[-8].minor);
1983 vv_destructor(29,&vvmsp[-6].minor);
1984 vv_destructor(52,&vvmsp[-5].minor);
1985 vv_destructor(32,&vvmsp[-4].minor);
1986 vv_destructor(1,&vvmsp[-2].minor);
1987 vv_destructor(53,&vvmsp[-1].minor);
1988 vv_destructor(32,&vvmsp[0].minor);
1989 }
1990 // 1989 "parser.php5.c"
1991 break;
1992 case 53:
1993 // 463 "parser.php5.lemon"
1994 {
1995 vvgotominor.vv228 = phvolt_ret_macro_statement(vvmsp[-8].minor.vv0, vvmsp[-6].minor.vv228, vvmsp[-3].minor.vv228, status->scanner_state);
1996 vv_destructor(1,&vvmsp[-10].minor);
1997 vv_destructor(51,&vvmsp[-9].minor);
1998 vv_destructor(29,&vvmsp[-7].minor);
1999 vv_destructor(52,&vvmsp[-5].minor);
2000 vv_destructor(32,&vvmsp[-4].minor);
2001 vv_destructor(1,&vvmsp[-2].minor);
2002 vv_destructor(53,&vvmsp[-1].minor);
2003 vv_destructor(32,&vvmsp[0].minor);
2004 }
2005 // 2004 "parser.php5.c"
2006 break;
2007 case 56:
2008 // 487 "parser.php5.lemon"
2009 {
2010 vvgotominor.vv228 = phvolt_ret_macro_parameter(vvmsp[0].minor.vv0, NULL, status->scanner_state);
2011 }
2012 // 2011 "parser.php5.c"
2013 break;
2014 case 57:
2015 // 491 "parser.php5.lemon"
2016 {
2017 vvgotominor.vv228 = phvolt_ret_macro_parameter(vvmsp[-2].minor.vv0, vvmsp[0].minor.vv228, status->scanner_state);
2018 vv_destructor(45,&vvmsp[-1].minor);
2019 }
2020 // 2019 "parser.php5.c"
2021 break;
2022 case 58:
2023 case 72:
2024 case 138:
2025 case 152:
2026 // 495 "parser.php5.lemon"
2027 {
2028 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_INTEGER, vvmsp[0].minor.vv0, status->scanner_state);
2029 }
2030 // 2029 "parser.php5.c"
2031 break;
2032 case 59:
2033 case 153:
2034 // 499 "parser.php5.lemon"
2035 {
2036 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_STRING, vvmsp[0].minor.vv0, status->scanner_state);
2037 }
2038 // 2037 "parser.php5.c"
2039 break;
2040 case 60:
2041 case 154:
2042 // 503 "parser.php5.lemon"
2043 {
2044 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_DOUBLE, vvmsp[0].minor.vv0, status->scanner_state);
2045 }
2046 // 2045 "parser.php5.c"
2047 break;
2048 case 61:
2049 case 155:
2050 // 507 "parser.php5.lemon"
2051 {
2052 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_NULL, NULL, status->scanner_state);
2053 vv_destructor(57,&vvmsp[0].minor);
2054 }
2055 // 2054 "parser.php5.c"
2056 break;
2057 case 62:
2058 case 156:
2059 // 511 "parser.php5.lemon"
2060 {
2061 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_FALSE, NULL, status->scanner_state);
2062 vv_destructor(58,&vvmsp[0].minor);
2063 }
2064 // 2063 "parser.php5.c"
2065 break;
2066 case 63:
2067 case 157:
2068 // 515 "parser.php5.lemon"
2069 {
2070 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_TRUE, NULL, status->scanner_state);
2071 vv_destructor(59,&vvmsp[0].minor);
2072 }
2073 // 2072 "parser.php5.c"
2074 break;
2075 case 64:
2076 // 525 "parser.php5.lemon"
2077 {
2078 vvgotominor.vv228 = phvolt_ret_macro_call_statement(vvmsp[-8].minor.vv228, vvmsp[-6].minor.vv228, vvmsp[-3].minor.vv228, status->scanner_state);
2079 vv_destructor(1,&vvmsp[-10].minor);
2080 vv_destructor(60,&vvmsp[-9].minor);
2081 vv_destructor(29,&vvmsp[-7].minor);
2082 vv_destructor(52,&vvmsp[-5].minor);
2083 vv_destructor(32,&vvmsp[-4].minor);
2084 vv_destructor(1,&vvmsp[-2].minor);
2085 vv_destructor(61,&vvmsp[-1].minor);
2086 vv_destructor(32,&vvmsp[0].minor);
2087 }
2088 // 2087 "parser.php5.c"
2089 break;
2090 case 65:
2091 // 529 "parser.php5.lemon"
2092 {
2093 vvgotominor.vv228 = phvolt_ret_macro_call_statement(vvmsp[-6].minor.vv228, NULL, NULL, status->scanner_state);
2094 vv_destructor(1,&vvmsp[-8].minor);
2095 vv_destructor(60,&vvmsp[-7].minor);
2096 vv_destructor(29,&vvmsp[-5].minor);
2097 vv_destructor(52,&vvmsp[-4].minor);
2098 vv_destructor(32,&vvmsp[-3].minor);
2099 vv_destructor(1,&vvmsp[-2].minor);
2100 vv_destructor(61,&vvmsp[-1].minor);
2101 vv_destructor(32,&vvmsp[0].minor);
2102 }
2103 // 2102 "parser.php5.c"
2104 break;
2105 case 66:
2106 // 539 "parser.php5.lemon"
2107 {
2108 vvgotominor.vv228 = phvolt_ret_empty_statement(status->scanner_state);
2109 vv_destructor(1,&vvmsp[-1].minor);
2110 vv_destructor(32,&vvmsp[0].minor);
2111 }
2112 // 2111 "parser.php5.c"
2113 break;
2114 case 67:
2115 // 549 "parser.php5.lemon"
2116 {
2117 vvgotominor.vv228 = phvolt_ret_echo_statement(vvmsp[-1].minor.vv228, status->scanner_state);
2118 vv_destructor(62,&vvmsp[-2].minor);
2119 vv_destructor(63,&vvmsp[0].minor);
2120 }
2121 // 2120 "parser.php5.c"
2122 break;
2123 case 68:
2124 // 559 "parser.php5.lemon"
2125 {
2126 vvgotominor.vv228 = phvolt_ret_block_statement(vvmsp[-5].minor.vv0, vvmsp[-3].minor.vv228, status->scanner_state);
2127 vv_destructor(1,&vvmsp[-7].minor);
2128 vv_destructor(64,&vvmsp[-6].minor);
2129 vv_destructor(32,&vvmsp[-4].minor);
2130 vv_destructor(1,&vvmsp[-2].minor);
2131 vv_destructor(65,&vvmsp[-1].minor);
2132 vv_destructor(32,&vvmsp[0].minor);
2133 }
2134 // 2133 "parser.php5.c"
2135 break;
2136 case 69:
2137 // 563 "parser.php5.lemon"
2138 {
2139 vvgotominor.vv228 = phvolt_ret_block_statement(vvmsp[-4].minor.vv0, NULL, status->scanner_state);
2140 vv_destructor(1,&vvmsp[-6].minor);
2141 vv_destructor(64,&vvmsp[-5].minor);
2142 vv_destructor(32,&vvmsp[-3].minor);
2143 vv_destructor(1,&vvmsp[-2].minor);
2144 vv_destructor(65,&vvmsp[-1].minor);
2145 vv_destructor(32,&vvmsp[0].minor);
2146 }
2147 // 2146 "parser.php5.c"
2148 break;
2149 case 70:
2150 // 573 "parser.php5.lemon"
2151 {
2152 vvgotominor.vv228 = phvolt_ret_cache_statement(vvmsp[-5].minor.vv228, NULL, vvmsp[-3].minor.vv228, status->scanner_state);
2153 vv_destructor(1,&vvmsp[-7].minor);
2154 vv_destructor(66,&vvmsp[-6].minor);
2155 vv_destructor(32,&vvmsp[-4].minor);
2156 vv_destructor(1,&vvmsp[-2].minor);
2157 vv_destructor(67,&vvmsp[-1].minor);
2158 vv_destructor(32,&vvmsp[0].minor);
2159 }
2160 // 2159 "parser.php5.c"
2161 break;
2162 case 71:
2163 // 577 "parser.php5.lemon"
2164 {
2165 vvgotominor.vv228 = phvolt_ret_cache_statement(vvmsp[-6].minor.vv228, vvmsp[-5].minor.vv228, vvmsp[-3].minor.vv228, status->scanner_state);
2166 vv_destructor(1,&vvmsp[-8].minor);
2167 vv_destructor(66,&vvmsp[-7].minor);
2168 vv_destructor(32,&vvmsp[-4].minor);
2169 vv_destructor(1,&vvmsp[-2].minor);
2170 vv_destructor(67,&vvmsp[-1].minor);
2171 vv_destructor(32,&vvmsp[0].minor);
2172 }
2173 // 2172 "parser.php5.c"
2174 break;
2175 case 74:
2176 // 601 "parser.php5.lemon"
2177 {
2178 vvgotominor.vv228 = phvolt_ret_raw_statement(vvmsp[-3].minor.vv228, status->scanner_state);
2179 vv_destructor(1,&vvmsp[-6].minor);
2180 vv_destructor(68,&vvmsp[-5].minor);
2181 vv_destructor(32,&vvmsp[-4].minor);
2182 vv_destructor(1,&vvmsp[-2].minor);
2183 vv_destructor(69,&vvmsp[-1].minor);
2184 vv_destructor(32,&vvmsp[0].minor);
2185 }
2186 // 2185 "parser.php5.c"
2187 break;
2188 case 75:
2189 // 611 "parser.php5.lemon"
2190 {
2191 vvgotominor.vv228 = phvolt_ret_extends_statement(vvmsp[-1].minor.vv228, status->scanner_state);
2192 vv_destructor(1,&vvmsp[-3].minor);
2193 vv_destructor(70,&vvmsp[-2].minor);
2194 vv_destructor(32,&vvmsp[0].minor);
2195 }
2196 // 2195 "parser.php5.c"
2197 break;
2198 case 76:
2199 // 621 "parser.php5.lemon"
2200 {
2201 vvgotominor.vv228 = phvolt_ret_include_statement(vvmsp[-1].minor.vv228, NULL, status->scanner_state);
2202 vv_destructor(1,&vvmsp[-3].minor);
2203 vv_destructor(71,&vvmsp[-2].minor);
2204 vv_destructor(32,&vvmsp[0].minor);
2205 }
2206 // 2205 "parser.php5.c"
2207 break;
2208 case 77:
2209 // 625 "parser.php5.lemon"
2210 {
2211 vvgotominor.vv228 = phvolt_ret_include_statement(vvmsp[-3].minor.vv228, vvmsp[-1].minor.vv228, status->scanner_state);
2212 vv_destructor(1,&vvmsp[-5].minor);
2213 vv_destructor(71,&vvmsp[-4].minor);
2214 vv_destructor(72,&vvmsp[-2].minor);
2215 vv_destructor(32,&vvmsp[0].minor);
2216 }
2217 // 2216 "parser.php5.c"
2218 break;
2219 case 78:
2220 // 635 "parser.php5.lemon"
2221 {
2222 vvgotominor.vv228 = phvolt_ret_do_statement(vvmsp[-1].minor.vv228, status->scanner_state);
2223 vv_destructor(1,&vvmsp[-3].minor);
2224 vv_destructor(73,&vvmsp[-2].minor);
2225 vv_destructor(32,&vvmsp[0].minor);
2226 }
2227 // 2226 "parser.php5.c"
2228 break;
2229 case 79:
2230 // 645 "parser.php5.lemon"
2231 {
2232 vvgotominor.vv228 = phvolt_ret_return_statement(vvmsp[-1].minor.vv228, status->scanner_state);
2233 vv_destructor(1,&vvmsp[-3].minor);
2234 vv_destructor(74,&vvmsp[-2].minor);
2235 vv_destructor(32,&vvmsp[0].minor);
2236 }
2237 // 2236 "parser.php5.c"
2238 break;
2239 case 80:
2240 // 655 "parser.php5.lemon"
2241 {
2242 vvgotominor.vv228 = phvolt_ret_autoescape_statement(0, vvmsp[-3].minor.vv228, status->scanner_state);
2243 vv_destructor(1,&vvmsp[-7].minor);
2244 vv_destructor(75,&vvmsp[-6].minor);
2245 vv_destructor(58,&vvmsp[-5].minor);
2246 vv_destructor(32,&vvmsp[-4].minor);
2247 vv_destructor(1,&vvmsp[-2].minor);
2248 vv_destructor(76,&vvmsp[-1].minor);
2249 vv_destructor(32,&vvmsp[0].minor);
2250 }
2251 // 2250 "parser.php5.c"
2252 break;
2253 case 81:
2254 // 659 "parser.php5.lemon"
2255 {
2256 vvgotominor.vv228 = phvolt_ret_autoescape_statement(1, vvmsp[-3].minor.vv228, status->scanner_state);
2257 vv_destructor(1,&vvmsp[-7].minor);
2258 vv_destructor(75,&vvmsp[-6].minor);
2259 vv_destructor(59,&vvmsp[-5].minor);
2260 vv_destructor(32,&vvmsp[-4].minor);
2261 vv_destructor(1,&vvmsp[-2].minor);
2262 vv_destructor(76,&vvmsp[-1].minor);
2263 vv_destructor(32,&vvmsp[0].minor);
2264 }
2265 // 2264 "parser.php5.c"
2266 break;
2267 case 82:
2268 // 669 "parser.php5.lemon"
2269 {
2270 vvgotominor.vv228 = phvolt_ret_break_statement(status->scanner_state);
2271 vv_destructor(1,&vvmsp[-2].minor);
2272 vv_destructor(77,&vvmsp[-1].minor);
2273 vv_destructor(32,&vvmsp[0].minor);
2274 }
2275 // 2274 "parser.php5.c"
2276 break;
2277 case 83:
2278 // 679 "parser.php5.lemon"
2279 {
2280 vvgotominor.vv228 = phvolt_ret_continue_statement(status->scanner_state);
2281 vv_destructor(1,&vvmsp[-2].minor);
2282 vv_destructor(78,&vvmsp[-1].minor);
2283 vv_destructor(32,&vvmsp[0].minor);
2284 }
2285 // 2284 "parser.php5.c"
2286 break;
2287 case 84:
2288 // 689 "parser.php5.lemon"
2289 {
2290 vvgotominor.vv228 = phvolt_ret_literal_zval(PHVOLT_T_RAW_FRAGMENT, vvmsp[0].minor.vv0, status->scanner_state);
2291 }
2292 // 2291 "parser.php5.c"
2293 break;
2294 case 85:
2295 // 699 "parser.php5.lemon"
2296 {
2297 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_MINUS, NULL, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2298 vv_destructor(22,&vvmsp[-1].minor);
2299 }
2300 // 2299 "parser.php5.c"
2301 break;
2302 case 86:
2303 // 703 "parser.php5.lemon"
2304 {
2305 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_PLUS, NULL, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2306 vv_destructor(21,&vvmsp[-1].minor);
2307 }
2308 // 2307 "parser.php5.c"
2309 break;
2310 case 87:
2311 // 707 "parser.php5.lemon"
2312 {
2313 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_SUB, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2314 vv_destructor(22,&vvmsp[-1].minor);
2315 }
2316 // 2315 "parser.php5.c"
2317 break;
2318 case 88:
2319 // 711 "parser.php5.lemon"
2320 {
2321 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ADD, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2322 vv_destructor(21,&vvmsp[-1].minor);
2323 }
2324 // 2323 "parser.php5.c"
2325 break;
2326 case 89:
2327 // 715 "parser.php5.lemon"
2328 {
2329 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_MUL, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2330 vv_destructor(19,&vvmsp[-1].minor);
2331 }
2332 // 2331 "parser.php5.c"
2333 break;
2334 case 90:
2335 // 719 "parser.php5.lemon"
2336 {
2337 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_POW, vvmsp[-3].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2338 vv_destructor(19,&vvmsp[-2].minor);
2339 vv_destructor(19,&vvmsp[-1].minor);
2340 }
2341 // 2340 "parser.php5.c"
2342 break;
2343 case 91:
2344 // 723 "parser.php5.lemon"
2345 {
2346 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_DIV, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2347 vv_destructor(18,&vvmsp[-1].minor);
2348 }
2349 // 2348 "parser.php5.c"
2350 break;
2351 case 92:
2352 // 727 "parser.php5.lemon"
2353 {
2354 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_MOD, vvmsp[-3].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2355 vv_destructor(18,&vvmsp[-2].minor);
2356 vv_destructor(18,&vvmsp[-1].minor);
2357 }
2358 // 2357 "parser.php5.c"
2359 break;
2360 case 93:
2361 // 731 "parser.php5.lemon"
2362 {
2363 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_MOD, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2364 vv_destructor(20,&vvmsp[-1].minor);
2365 }
2366 // 2365 "parser.php5.c"
2367 break;
2368 case 94:
2369 // 735 "parser.php5.lemon"
2370 {
2371 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_AND, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2372 vv_destructor(7,&vvmsp[-1].minor);
2373 }
2374 // 2373 "parser.php5.c"
2375 break;
2376 case 95:
2377 // 739 "parser.php5.lemon"
2378 {
2379 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_OR, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2380 vv_destructor(8,&vvmsp[-1].minor);
2381 }
2382 // 2381 "parser.php5.c"
2383 break;
2384 case 96:
2385 // 743 "parser.php5.lemon"
2386 {
2387 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_CONCAT, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2388 vv_destructor(23,&vvmsp[-1].minor);
2389 }
2390 // 2389 "parser.php5.c"
2391 break;
2392 case 97:
2393 // 747 "parser.php5.lemon"
2394 {
2395 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_PIPE, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2396 vv_destructor(25,&vvmsp[-1].minor);
2397 }
2398 // 2397 "parser.php5.c"
2399 break;
2400 case 98:
2401 // 751 "parser.php5.lemon"
2402 {
2403 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_RANGE, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2404 vv_destructor(6,&vvmsp[-1].minor);
2405 }
2406 // 2405 "parser.php5.c"
2407 break;
2408 case 99:
2409 // 755 "parser.php5.lemon"
2410 {
2411 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_EQUALS, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2412 vv_destructor(10,&vvmsp[-1].minor);
2413 }
2414 // 2413 "parser.php5.c"
2415 break;
2416 case 100:
2417 // 759 "parser.php5.lemon"
2418 {
2419 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_ISSET, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2420 vv_destructor(11,&vvmsp[-1].minor);
2421 vv_destructor(80,&vvmsp[0].minor);
2422 }
2423 // 2422 "parser.php5.c"
2424 break;
2425 case 101:
2426 // 763 "parser.php5.lemon"
2427 {
2428 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ISSET, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2429 vv_destructor(9,&vvmsp[-1].minor);
2430 vv_destructor(80,&vvmsp[0].minor);
2431 }
2432 // 2431 "parser.php5.c"
2433 break;
2434 case 102:
2435 // 767 "parser.php5.lemon"
2436 {
2437 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_ISEMPTY, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2438 vv_destructor(11,&vvmsp[-1].minor);
2439 vv_destructor(81,&vvmsp[0].minor);
2440 }
2441 // 2440 "parser.php5.c"
2442 break;
2443 case 103:
2444 // 771 "parser.php5.lemon"
2445 {
2446 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ISEMPTY, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2447 vv_destructor(9,&vvmsp[-1].minor);
2448 vv_destructor(81,&vvmsp[0].minor);
2449 }
2450 // 2449 "parser.php5.c"
2451 break;
2452 case 104:
2453 // 775 "parser.php5.lemon"
2454 {
2455 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_ISEVEN, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2456 vv_destructor(11,&vvmsp[-1].minor);
2457 vv_destructor(82,&vvmsp[0].minor);
2458 }
2459 // 2458 "parser.php5.c"
2460 break;
2461 case 105:
2462 // 779 "parser.php5.lemon"
2463 {
2464 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ISEVEN, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2465 vv_destructor(9,&vvmsp[-1].minor);
2466 vv_destructor(82,&vvmsp[0].minor);
2467 }
2468 // 2467 "parser.php5.c"
2469 break;
2470 case 106:
2471 // 783 "parser.php5.lemon"
2472 {
2473 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_ISODD, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2474 vv_destructor(11,&vvmsp[-1].minor);
2475 vv_destructor(83,&vvmsp[0].minor);
2476 }
2477 // 2476 "parser.php5.c"
2478 break;
2479 case 107:
2480 // 787 "parser.php5.lemon"
2481 {
2482 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ISODD, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2483 vv_destructor(9,&vvmsp[-1].minor);
2484 vv_destructor(83,&vvmsp[0].minor);
2485 }
2486 // 2485 "parser.php5.c"
2487 break;
2488 case 108:
2489 // 791 "parser.php5.lemon"
2490 {
2491 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_ISNUMERIC, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2492 vv_destructor(11,&vvmsp[-1].minor);
2493 vv_destructor(84,&vvmsp[0].minor);
2494 }
2495 // 2494 "parser.php5.c"
2496 break;
2497 case 109:
2498 // 795 "parser.php5.lemon"
2499 {
2500 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ISNUMERIC, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2501 vv_destructor(9,&vvmsp[-1].minor);
2502 vv_destructor(84,&vvmsp[0].minor);
2503 }
2504 // 2503 "parser.php5.c"
2505 break;
2506 case 110:
2507 // 799 "parser.php5.lemon"
2508 {
2509 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_ISSCALAR, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2510 vv_destructor(11,&vvmsp[-1].minor);
2511 vv_destructor(85,&vvmsp[0].minor);
2512 }
2513 // 2512 "parser.php5.c"
2514 break;
2515 case 111:
2516 // 803 "parser.php5.lemon"
2517 {
2518 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ISSCALAR, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2519 vv_destructor(9,&vvmsp[-1].minor);
2520 vv_destructor(85,&vvmsp[0].minor);
2521 }
2522 // 2521 "parser.php5.c"
2523 break;
2524 case 112:
2525 // 807 "parser.php5.lemon"
2526 {
2527 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_ISITERABLE, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2528 vv_destructor(11,&vvmsp[-1].minor);
2529 vv_destructor(86,&vvmsp[0].minor);
2530 }
2531 // 2530 "parser.php5.c"
2532 break;
2533 case 113:
2534 // 811 "parser.php5.lemon"
2535 {
2536 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ISITERABLE, vvmsp[-2].minor.vv228, NULL, NULL, status->scanner_state);
2537 vv_destructor(9,&vvmsp[-1].minor);
2538 vv_destructor(86,&vvmsp[0].minor);
2539 }
2540 // 2539 "parser.php5.c"
2541 break;
2542 case 114:
2543 // 815 "parser.php5.lemon"
2544 {
2545 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_IS, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2546 vv_destructor(9,&vvmsp[-1].minor);
2547 }
2548 // 2547 "parser.php5.c"
2549 break;
2550 case 115:
2551 // 819 "parser.php5.lemon"
2552 {
2553 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOTEQUALS, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2554 vv_destructor(11,&vvmsp[-1].minor);
2555 }
2556 // 2555 "parser.php5.c"
2557 break;
2558 case 116:
2559 // 823 "parser.php5.lemon"
2560 {
2561 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_IDENTICAL, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2562 vv_destructor(16,&vvmsp[-1].minor);
2563 }
2564 // 2563 "parser.php5.c"
2565 break;
2566 case 117:
2567 // 827 "parser.php5.lemon"
2568 {
2569 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOTIDENTICAL, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2570 vv_destructor(17,&vvmsp[-1].minor);
2571 }
2572 // 2571 "parser.php5.c"
2573 break;
2574 case 118:
2575 // 831 "parser.php5.lemon"
2576 {
2577 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_LESS, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2578 vv_destructor(12,&vvmsp[-1].minor);
2579 }
2580 // 2579 "parser.php5.c"
2581 break;
2582 case 119:
2583 // 835 "parser.php5.lemon"
2584 {
2585 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_GREATER, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2586 vv_destructor(13,&vvmsp[-1].minor);
2587 }
2588 // 2587 "parser.php5.c"
2589 break;
2590 case 120:
2591 // 839 "parser.php5.lemon"
2592 {
2593 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_GREATEREQUAL, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2594 vv_destructor(14,&vvmsp[-1].minor);
2595 }
2596 // 2595 "parser.php5.c"
2597 break;
2598 case 121:
2599 // 843 "parser.php5.lemon"
2600 {
2601 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_LESSEQUAL, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2602 vv_destructor(15,&vvmsp[-1].minor);
2603 }
2604 // 2603 "parser.php5.c"
2605 break;
2606 case 123:
2607 // 851 "parser.php5.lemon"
2608 {
2609 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_IN, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2610 vv_destructor(3,&vvmsp[-1].minor);
2611 }
2612 // 2611 "parser.php5.c"
2613 break;
2614 case 124:
2615 // 855 "parser.php5.lemon"
2616 {
2617 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT_IN, vvmsp[-3].minor.vv228, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2618 vv_destructor(26,&vvmsp[-2].minor);
2619 vv_destructor(3,&vvmsp[-1].minor);
2620 }
2621 // 2620 "parser.php5.c"
2622 break;
2623 case 125:
2624 // 859 "parser.php5.lemon"
2625 {
2626 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_NOT, NULL, vvmsp[0].minor.vv228, NULL, status->scanner_state);
2627 vv_destructor(26,&vvmsp[-1].minor);
2628 }
2629 // 2628 "parser.php5.c"
2630 break;
2631 case 126:
2632 // 863 "parser.php5.lemon"
2633 {
2634 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_INCR, vvmsp[-1].minor.vv228, NULL, NULL, status->scanner_state);
2635 vv_destructor(27,&vvmsp[0].minor);
2636 }
2637 // 2636 "parser.php5.c"
2638 break;
2639 case 127:
2640 // 867 "parser.php5.lemon"
2641 {
2642 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_DECR, vvmsp[-1].minor.vv228, NULL, NULL, status->scanner_state);
2643 vv_destructor(28,&vvmsp[0].minor);
2644 }
2645 // 2644 "parser.php5.c"
2646 break;
2647 case 128:
2648 // 871 "parser.php5.lemon"
2649 {
2650 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ENCLOSED, vvmsp[-1].minor.vv228, NULL, NULL, status->scanner_state);
2651 vv_destructor(29,&vvmsp[-2].minor);
2652 vv_destructor(52,&vvmsp[0].minor);
2653 }
2654 // 2653 "parser.php5.c"
2655 break;
2656 case 129:
2657 // 875 "parser.php5.lemon"
2658 {
2659 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ARRAY, NULL, NULL, NULL, status->scanner_state);
2660 vv_destructor(24,&vvmsp[-1].minor);
2661 vv_destructor(50,&vvmsp[0].minor);
2662 }
2663 // 2662 "parser.php5.c"
2664 break;
2665 case 130:
2666 // 879 "parser.php5.lemon"
2667 {
2668 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ARRAY, vvmsp[-1].minor.vv228, NULL, NULL, status->scanner_state);
2669 vv_destructor(24,&vvmsp[-2].minor);
2670 vv_destructor(50,&vvmsp[0].minor);
2671 }
2672 // 2671 "parser.php5.c"
2673 break;
2674 case 131:
2675 // 883 "parser.php5.lemon"
2676 {
2677 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ARRAY, NULL, NULL, NULL, status->scanner_state);
2678 vv_destructor(87,&vvmsp[-1].minor);
2679 vv_destructor(88,&vvmsp[0].minor);
2680 }
2681 // 2680 "parser.php5.c"
2682 break;
2683 case 132:
2684 // 887 "parser.php5.lemon"
2685 {
2686 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_ARRAY, vvmsp[-1].minor.vv228, NULL, NULL, status->scanner_state);
2687 vv_destructor(87,&vvmsp[-2].minor);
2688 vv_destructor(88,&vvmsp[0].minor);
2689 }
2690 // 2689 "parser.php5.c"
2691 break;
2692 case 134:
2693 // 895 "parser.php5.lemon"
2694 {
2695 vvgotominor.vv228 = phvolt_ret_expr(PHVOLT_T_TERNARY, vvmsp[-2].minor.vv228, vvmsp[0].minor.vv228, vvmsp[-4].minor.vv228, status->scanner_state);
2696 vv_destructor(4,&vvmsp[-3].minor);
2697 vv_destructor(5,&vvmsp[-1].minor);
2698 }
2699 // 2698 "parser.php5.c"
2700 break;
2701 case 135:
2702 // 899 "parser.php5.lemon"
2703 {
2704 vvgotominor.vv228 = phvolt_ret_slice(vvmsp[-4].minor.vv228, NULL, vvmsp[-1].minor.vv228, status->scanner_state);
2705 vv_destructor(24,&vvmsp[-3].minor);
2706 vv_destructor(5,&vvmsp[-2].minor);
2707 vv_destructor(50,&vvmsp[0].minor);
2708 }
2709 // 2708 "parser.php5.c"
2710 break;
2711 case 136:
2712 // 903 "parser.php5.lemon"
2713 {
2714 vvgotominor.vv228 = phvolt_ret_slice(vvmsp[-4].minor.vv228, vvmsp[-2].minor.vv228, NULL, status->scanner_state);
2715 vv_destructor(24,&vvmsp[-3].minor);
2716 vv_destructor(5,&vvmsp[-1].minor);
2717 vv_destructor(50,&vvmsp[0].minor);
2718 }
2719 // 2718 "parser.php5.c"
2720 break;
2721 case 137:
2722 // 907 "parser.php5.lemon"
2723 {
2724 vvgotominor.vv228 = phvolt_ret_slice(vvmsp[-5].minor.vv228, vvmsp[-3].minor.vv228, vvmsp[-1].minor.vv228, status->scanner_state);
2725 vv_destructor(24,&vvmsp[-4].minor);
2726 vv_destructor(5,&vvmsp[-2].minor);
2727 vv_destructor(50,&vvmsp[0].minor);
2728 }
2729 // 2728 "parser.php5.c"
2730 break;
2731 case 142:
2732 case 150:
2733 // 945 "parser.php5.lemon"
2734 {
2735 vvgotominor.vv228 = phvolt_ret_named_item(vvmsp[-2].minor.vv0, vvmsp[0].minor.vv228, status->scanner_state);
2736 vv_destructor(5,&vvmsp[-1].minor);
2737 }
2738 // 2737 "parser.php5.c"
2739 break;
2740 case 143:
2741 case 149:
2742 // 949 "parser.php5.lemon"
2743 {
2744 vvgotominor.vv228 = phvolt_ret_named_item(NULL, vvmsp[0].minor.vv228, status->scanner_state);
2745 }
2746 // 2745 "parser.php5.c"
2747 break;
2748 case 145:
2749 // 963 "parser.php5.lemon"
2750 {
2751 vvgotominor.vv228 = phvolt_ret_func_call(vvmsp[-3].minor.vv228, vvmsp[-1].minor.vv228, status->scanner_state);
2752 vv_destructor(29,&vvmsp[-2].minor);
2753 vv_destructor(52,&vvmsp[0].minor);
2754 }
2755 // 2754 "parser.php5.c"
2756 break;
2757 case 146:
2758 // 967 "parser.php5.lemon"
2759 {
2760 vvgotominor.vv228 = phvolt_ret_func_call(vvmsp[-2].minor.vv228, NULL, status->scanner_state);
2761 vv_destructor(29,&vvmsp[-1].minor);
2762 vv_destructor(52,&vvmsp[0].minor);
2763 }
2764 // 2763 "parser.php5.c"
2765 break;
2766 };
2767 vvgoto = vvRuleInfo[vvruleno].lhs;
2768 vvsize = vvRuleInfo[vvruleno].nrhs;
2769 vvpParser->vvidx -= vvsize;
2770 vvact = vv_find_reduce_action(vvpParser,vvgoto);
2771 if( vvact < VVNSTATE ){
2772 vv_shift(vvpParser,vvact,vvgoto,&vvgotominor);
2773 }else if( vvact == VVNSTATE + VVNRULE + 1 ){
2774 vv_accept(vvpParser);
2775 }
2776 }
2777
2778 /*
2779 ** The following code executes when the parse fails
2780 */
vv_parse_failed(vvParser * vvpParser)2781 static void vv_parse_failed(
2782 vvParser *vvpParser /* The parser */
2783 ){
2784 phvolt_ARG_FETCH;
2785 #ifndef NDEBUG
2786 if( vvTraceFILE ){
2787 fprintf(vvTraceFILE,"%sFail!\n",vvTracePrompt);
2788 }
2789 #endif
2790 while( vvpParser->vvidx>=0 ) vv_pop_parser_stack(vvpParser);
2791 /* Here code is inserted which will be executed whenever the
2792 ** parser fails */
2793 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument variable */
2794 }
2795
2796 /*
2797 ** The following code executes when a syntax error first occurs.
2798 */
vv_syntax_error(vvParser * vvpParser,int vvmajor,VVMINORTYPE vvminor)2799 static void vv_syntax_error(
2800 vvParser *vvpParser, /* The parser */
2801 int vvmajor, /* The major type of the error token */
2802 VVMINORTYPE vvminor /* The minor type of the error token */
2803 ){
2804 phvolt_ARG_FETCH;
2805 #define VTOKEN (vvminor.vv0)
2806 // 46 "parser.php5.lemon"
2807
2808 {
2809
2810 smart_str error_str = {0};
2811
2812 char *token_name = NULL;
2813 const phvolt_token_names *tokens = phvolt_tokens;
2814 int token_len = 0;
2815 int active_token = status->scanner_state->active_token;
2816
2817 if (status->scanner_state->start_length) {
2818
2819 if (active_token) {
2820
2821 do {
2822 if (tokens->code == active_token) {
2823 token_name = tokens->name;
2824 token_len = tokens->len;
2825 break;
2826 }
2827 ++tokens;
2828 } while (tokens[0].code != 0);
2829
2830 }
2831
2832 smart_str_appendl(&error_str, "Syntax error, unexpected token ", sizeof("Syntax error, unexpected token ") - 1);
2833 if (!token_name) {
2834 smart_str_appendl(&error_str, "UNKNOWN", sizeof("UNKNOWN") - 1);
2835 } else {
2836 smart_str_appendl(&error_str, token_name, token_len);
2837 }
2838
2839 if (status->token->value) {
2840 smart_str_appendc(&error_str, '(');
2841 smart_str_appendl(&error_str, status->token->value, status->token->len);
2842 smart_str_appendc(&error_str, ')');
2843 }
2844
2845 smart_str_appendl(&error_str, " in ", sizeof(" in ") - 1);
2846 smart_str_appendl(&error_str, Z_STRVAL_P(status->scanner_state->active_file), Z_STRLEN_P(status->scanner_state->active_file));
2847 smart_str_appendl(&error_str, " on line ", sizeof(" on line ") - 1);
2848
2849 {
2850 char stmp[MAX_LENGTH_OF_LONG + 1];
2851 int str_len;
2852 str_len = slprintf(stmp, sizeof(stmp), "%ld", status->scanner_state->active_line);
2853 smart_str_appendl(&error_str, stmp, str_len);
2854 }
2855
2856 } else {
2857
2858 smart_str_appendl(&error_str, "Syntax error, unexpected EOF in ", sizeof("Syntax error, unexpected EOF in ") - 1);
2859 smart_str_appendl(&error_str, Z_STRVAL_P(status->scanner_state->active_file), Z_STRLEN_P(status->scanner_state->active_file));
2860
2861 /* Report unclosed 'if' blocks */
2862 if ((status->scanner_state->if_level + status->scanner_state->old_if_level) > 0) {
2863 if ((status->scanner_state->if_level + status->scanner_state->old_if_level) == 1) {
2864 smart_str_appendl(&error_str, ", there is one 'if' block without close", sizeof(", there is one 'if' block without close") - 1);
2865 } else {
2866 smart_str_appendl(&error_str, ", there are ", sizeof(", there are ") - 1);
2867 {
2868 char stmp[MAX_LENGTH_OF_LONG + 1];
2869 int str_len;
2870 str_len = slprintf(stmp, sizeof(stmp), "%ld", status->scanner_state->if_level + status->scanner_state->old_if_level);
2871 smart_str_appendl(&error_str, stmp, str_len);
2872 }
2873 smart_str_appendl(&error_str, " 'if' blocks without close", sizeof(" 'if' blocks without close") - 1);
2874 }
2875 }
2876
2877 /* Report unclosed 'for' blocks */
2878 if (status->scanner_state->for_level > 0) {
2879 if (status->scanner_state->for_level == 1) {
2880 smart_str_appendl(&error_str, ", there is one 'for' block without close", sizeof(", there is one 'for' block without close") - 1);
2881 } else {
2882 smart_str_appendl(&error_str, ", there are ", sizeof(", there are ") - 1);
2883 {
2884 char stmp[MAX_LENGTH_OF_LONG + 1];
2885 int str_len;
2886 str_len = slprintf(stmp, sizeof(stmp), "%ld", status->scanner_state->if_level);
2887 smart_str_appendl(&error_str, stmp, str_len);
2888 }
2889 smart_str_appendl(&error_str, " 'for' blocks without close", sizeof(" 'for' blocks without close") - 1);
2890 }
2891 }
2892
2893 /* Report unclosed 'switch' blocks */
2894 if (status->scanner_state->switch_level > 0) {
2895 smart_str_appendl(&error_str, ", there is a 'switch' block without 'endswitch'", sizeof(", there is a 'switch' block without 'endswitch'") - 1);
2896 }
2897
2898 }
2899
2900 smart_str_0(&error_str);
2901
2902 #if PHP_VERSION_ID < 70000
2903 if (error_str.len) {
2904 status->syntax_error = error_str.c;
2905 status->syntax_error_len = error_str.len;
2906 } else {
2907 status->syntax_error = NULL;
2908 }
2909 #else
2910 if (error_str.s) {
2911 status->syntax_error = estrndup(ZSTR_VAL(error_str.s), ZSTR_LEN(error_str.s));
2912 status->syntax_error_len = ZSTR_LEN(error_str.s);
2913 } else {
2914 status->syntax_error = NULL;
2915 }
2916 #endif
2917 }
2918
2919 status->status = PHVOLT_PARSING_FAILED;
2920
2921 // 2920 "parser.php5.c"
2922 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument variable */
2923 }
2924
2925 /*
2926 ** The following is executed when the parser accepts
2927 */
vv_accept(vvParser * vvpParser)2928 static void vv_accept(
2929 vvParser *vvpParser /* The parser */
2930 ){
2931 phvolt_ARG_FETCH;
2932 #ifndef NDEBUG
2933 if( vvTraceFILE ){
2934 fprintf(vvTraceFILE,"%sAccept!\n",vvTracePrompt);
2935 }
2936 #endif
2937 while( vvpParser->vvidx>=0 ) vv_pop_parser_stack(vvpParser);
2938 /* Here code is inserted which will be executed whenever the
2939 ** parser accepts */
2940 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument variable */
2941 }
2942
2943 /* The main parser program.
2944 ** The first argument is a pointer to a structure obtained from
2945 ** "phvolt_Alloc" which describes the current state of the parser.
2946 ** The second argument is the major token number. The third is
2947 ** the minor token. The fourth optional argument is whatever the
2948 ** user wants (and specified in the grammar) and is available for
2949 ** use by the action routines.
2950 **
2951 ** Inputs:
2952 ** <ul>
2953 ** <li> A pointer to the parser (an opaque structure.)
2954 ** <li> The major token number.
2955 ** <li> The minor token number.
2956 ** <li> An option argument of a grammar-specified type.
2957 ** </ul>
2958 **
2959 ** Outputs:
2960 ** None.
2961 */
phvolt_(void * vvp,int vvmajor,phvolt_TOKENTYPE vvminor phvolt_ARG_PDECL)2962 void phvolt_(
2963 void *vvp, /* The parser */
2964 int vvmajor, /* The major token code number */
2965 phvolt_TOKENTYPE vvminor /* The value for the token */
2966 phvolt_ARG_PDECL /* Optional %extra_argument parameter */
2967 ){
2968 VVMINORTYPE vvminorunion;
2969 int vvact; /* The parser action. */
2970 int vvendofinput; /* True if we are at the end of input */
2971 int vverrorhit = 0; /* True if vvmajor has invoked an error */
2972 vvParser *vvpParser; /* The parser */
2973
2974 /* (re)initialize the parser, if necessary */
2975 vvpParser = (vvParser*)vvp;
2976 if( vvpParser->vvidx<0 ){
2977 if( vvmajor==0 ) return;
2978 vvpParser->vvidx = 0;
2979 vvpParser->vverrcnt = -1;
2980 vvpParser->vvstack[0].stateno = 0;
2981 vvpParser->vvstack[0].major = 0;
2982 }
2983 vvminorunion.vv0 = vvminor;
2984 vvendofinput = (vvmajor==0);
2985 phvolt_ARG_STORE;
2986
2987 #ifndef NDEBUG
2988 if( vvTraceFILE ){
2989 fprintf(vvTraceFILE,"%sInput %s\n",vvTracePrompt,vvTokenName[vvmajor]);
2990 }
2991 #endif
2992
2993 do{
2994 vvact = vv_find_shift_action(vvpParser,vvmajor);
2995 if( vvact<VVNSTATE ){
2996 vv_shift(vvpParser,vvact,vvmajor,&vvminorunion);
2997 vvpParser->vverrcnt--;
2998 if( vvendofinput && vvpParser->vvidx>=0 ){
2999 vvmajor = 0;
3000 }else{
3001 vvmajor = VVNOCODE;
3002 }
3003 }else if( vvact < VVNSTATE + VVNRULE ){
3004 vv_reduce(vvpParser,vvact-VVNSTATE);
3005 }else if( vvact == VV_ERROR_ACTION ){
3006 int vvmx;
3007 #ifndef NDEBUG
3008 if( vvTraceFILE ){
3009 fprintf(vvTraceFILE,"%sSyntax Error!\n",vvTracePrompt);
3010 }
3011 #endif
3012 #ifdef VVERRORSYMBOL
3013 /* A syntax error has occurred.
3014 ** The response to an error depends upon whether or not the
3015 ** grammar defines an error token "ERROR".
3016 **
3017 ** This is what we do if the grammar does define ERROR:
3018 **
3019 ** * Call the %syntax_error function.
3020 **
3021 ** * Begin popping the stack until we enter a state where
3022 ** it is legal to shift the error symbol, then shift
3023 ** the error symbol.
3024 **
3025 ** * Set the error count to three.
3026 **
3027 ** * Begin accepting and shifting new tokens. No new error
3028 ** processing will occur until three tokens have been
3029 ** shifted successfully.
3030 **
3031 */
3032 if( vvpParser->vverrcnt<0 ){
3033 vv_syntax_error(vvpParser,vvmajor,vvminorunion);
3034 }
3035 vvmx = vvpParser->vvstack[vvpParser->vvidx].major;
3036 if( vvmx==VVERRORSYMBOL || vverrorhit ){
3037 #ifndef NDEBUG
3038 if( vvTraceFILE ){
3039 fprintf(vvTraceFILE,"%sDiscard input token %s\n",
3040 vvTracePrompt,vvTokenName[vvmajor]);
3041 }
3042 #endif
3043 vv_destructor(vvmajor,&vvminorunion);
3044 vvmajor = VVNOCODE;
3045 }else{
3046 while(
3047 vvpParser->vvidx >= 0 &&
3048 vvmx != VVERRORSYMBOL &&
3049 (vvact = vv_find_shift_action(vvpParser,VVERRORSYMBOL)) >= VVNSTATE
3050 ){
3051 vv_pop_parser_stack(vvpParser);
3052 }
3053 if( vvpParser->vvidx < 0 || vvmajor==0 ){
3054 vv_destructor(vvmajor,&vvminorunion);
3055 vv_parse_failed(vvpParser);
3056 vvmajor = VVNOCODE;
3057 }else if( vvmx!=VVERRORSYMBOL ){
3058 VVMINORTYPE u2;
3059 u2.VVERRSYMDT = 0;
3060 vv_shift(vvpParser,vvact,VVERRORSYMBOL,&u2);
3061 }
3062 }
3063 vvpParser->vverrcnt = 3;
3064 vverrorhit = 1;
3065 #else /* VVERRORSYMBOL is not defined */
3066 /* This is what we do if the grammar does not define ERROR:
3067 **
3068 ** * Report an error message, and throw away the input token.
3069 **
3070 ** * If the input token is $, then fail the parse.
3071 **
3072 ** As before, subsequent error messages are suppressed until
3073 ** three input tokens have been successfully shifted.
3074 */
3075 if( vvpParser->vverrcnt<=0 ){
3076 vv_syntax_error(vvpParser,vvmajor,vvminorunion);
3077 }
3078 vvpParser->vverrcnt = 3;
3079 vv_destructor(vvmajor,&vvminorunion);
3080 if( vvendofinput ){
3081 vv_parse_failed(vvpParser);
3082 }
3083 vvmajor = VVNOCODE;
3084 #endif
3085 }else{
3086 vv_accept(vvpParser);
3087 vvmajor = VVNOCODE;
3088 }
3089 }while( vvmajor!=VVNOCODE && vvpParser->vvidx>=0 );
3090 return;
3091 }
3092 #else
3093 /* Driver template for the LEMON parser generator.
3094 ** The author disclaims copyright to this source code.
3095 */
3096 /* First off, code is include which follows the "include" declaration
3097 ** in the input file. */
3098 #include <stdio.h>
3099 // 42 "parser.php7.lemon"
3100
3101 #include "parser.php7.inc.h"
3102
3103 // 12 "parser.php7.c"
3104 /* Next is all token values, in a form suitable for use by makeheaders.
3105 ** This section will be null unless lemon is run with the -m switch.
3106 */
3107 /*
3108 ** These constants (all generated automatically by the parser generator)
3109 ** specify the various kinds of tokens (terminals) that the parser
3110 ** understands.
3111 **
3112 ** Each symbol here is a terminal symbol in the grammar.
3113 */
3114 /* Make sure the INTERFACE macro is defined.
3115 */
3116 #ifndef INTERFACE
3117 # define INTERFACE 1
3118 #endif
3119 /* The next thing included is series of defines which control
3120 ** various aspects of the generated parser.
3121 ** VVCODETYPE is the data type used for storing terminal
3122 ** and nonterminal numbers. "unsigned char" is
3123 ** used if there are fewer than 250 terminals
3124 ** and nonterminals. "int" is used otherwise.
3125 ** VVNOCODE is a number of type VVCODETYPE which corresponds
3126 ** to no legal terminal or nonterminal number. This
3127 ** number is used to fill in empty slots of the hash
3128 ** table.
3129 ** VVFALLBACK If defined, this indicates that one or more tokens
3130 ** have fall-back values which should be used if the
3131 ** original value of the token will not parse.
3132 ** VVACTIONTYPE is the data type used for storing terminal
3133 ** and nonterminal numbers. "unsigned char" is
3134 ** used if there are fewer than 250 rules and
3135 ** states combined. "int" is used otherwise.
3136 ** phvolt_TOKENTYPE is the data type used for minor tokens given
3137 ** directly to the parser from the tokenizer.
3138 ** VVMINORTYPE is the data type used for all minor tokens.
3139 ** This is typically a union of many types, one of
3140 ** which is phvolt_TOKENTYPE. The entry in the union
3141 ** for base tokens is called "vv0".
3142 ** VVSTACKDEPTH is the maximum depth of the parser's stack.
3143 ** phvolt_ARG_SDECL A static variable declaration for the %extra_argument
3144 ** phvolt_ARG_PDECL A parameter declaration for the %extra_argument
3145 ** phvolt_ARG_STORE Code to store %extra_argument into vvpParser
3146 ** phvolt_ARG_FETCH Code to extract %extra_argument from vvpParser
3147 ** VVNSTATE the combined number of states.
3148 ** VVNRULE the number of rules in the grammar
3149 ** VVERRORSYMBOL is the code number of the error symbol. If not
3150 ** defined, then do no error processing.
3151 */
3152 #define VVCODETYPE unsigned char
3153 #define VVNOCODE 131
3154 #define VVACTIONTYPE unsigned short int
3155 #define phvolt_TOKENTYPE phvolt_parser_token*
3156 typedef union {
3157 phvolt_TOKENTYPE vv0;
3158 zval vv186;
3159 int vv261;
3160 } VVMINORTYPE;
3161 #define VVSTACKDEPTH 100
3162 #define phvolt_ARG_SDECL phvolt_parser_status *status;
3163 #define phvolt_ARG_PDECL ,phvolt_parser_status *status
3164 #define phvolt_ARG_FETCH phvolt_parser_status *status = vvpParser->status
3165 #define phvolt_ARG_STORE vvpParser->status = status
3166 #define VVNSTATE 365
3167 #define VVNRULE 158
3168 #define VVERRORSYMBOL 89
3169 #define VVERRSYMDT vv261
3170 #define VV_NO_ACTION (VVNSTATE+VVNRULE+2)
3171 #define VV_ACCEPT_ACTION (VVNSTATE+VVNRULE+1)
3172 #define VV_ERROR_ACTION (VVNSTATE+VVNRULE)
3173
3174 /* Next are that tables used to determine what action to take based on the
3175 ** current state and lookahead token. These tables are used to implement
3176 ** functions that take a state number and lookahead value and return an
3177 ** action integer.
3178 **
3179 ** Suppose the action integer is N. Then the action is determined as
3180 ** follows
3181 **
3182 ** 0 <= N < VVNSTATE Shift N. That is, push the lookahead
3183 ** token onto the stack and goto state N.
3184 **
3185 ** VVNSTATE <= N < VVNSTATE+VVNRULE Reduce by rule N-VVNSTATE.
3186 **
3187 ** N == VVNSTATE+VVNRULE A syntax error has occurred.
3188 **
3189 ** N == VVNSTATE+VVNRULE+1 The parser accepts its input.
3190 **
3191 ** N == VVNSTATE+VVNRULE+2 No such action. Denotes unused
3192 ** slots in the vv_action[] table.
3193 **
3194 ** The action table is constructed as a single large table named vv_action[].
3195 ** Given state S and lookahead X, the action is computed as
3196 **
3197 ** vv_action[ vv_shift_ofst[S] + X ]
3198 **
3199 ** If the index value vv_shift_ofst[S]+X is out of range or if the value
3200 ** vv_lookahead[vv_shift_ofst[S]+X] is not equal to X or if vv_shift_ofst[S]
3201 ** is equal to VV_SHIFT_USE_DFLT, it means that the action is not in the table
3202 ** and that vv_default[S] should be used instead.
3203 **
3204 ** The formula above is for computing the action when the lookahead is
3205 ** a terminal symbol. If the lookahead is a non-terminal (as occurs after
3206 ** a reduce action) then the vv_reduce_ofst[] array is used in place of
3207 ** the vv_shift_ofst[] array and VV_REDUCE_USE_DFLT is used in place of
3208 ** VV_SHIFT_USE_DFLT.
3209 **
3210 ** The following are the tables generated in this section:
3211 **
3212 ** vv_action[] A single table containing all actions.
3213 ** vv_lookahead[] A table containing the lookahead for each entry in
3214 ** vv_action. Used to detect hash collisions.
3215 ** vv_shift_ofst[] For each state, the offset into vv_action for
3216 ** shifting terminals.
3217 ** vv_reduce_ofst[] For each state, the offset into vv_action for
3218 ** shifting non-terminals after a reduce.
3219 ** vv_default[] Default action for each state.
3220 */
3221 static VVACTIONTYPE vv_action[] = {
3222 /* 0 */ 85, 95, 111, 63, 55, 57, 69, 65, 67, 75,
3223 /* 10 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
3224 /* 20 */ 59, 92, 61, 87, 90, 91, 99, 83, 365, 245,
3225 /* 30 */ 87, 90, 91, 99, 83, 300, 51, 49, 53, 46,
3226 /* 40 */ 43, 59, 92, 61, 87, 90, 91, 99, 83, 33,
3227 /* 50 */ 110, 299, 194, 215, 198, 85, 95, 196, 63, 55,
3228 /* 60 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
3229 /* 70 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
3230 /* 80 */ 91, 99, 83, 331, 176, 85, 95, 195, 63, 55,
3231 /* 90 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
3232 /* 100 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
3233 /* 110 */ 91, 99, 83, 35, 265, 85, 95, 39, 63, 55,
3234 /* 120 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
3235 /* 130 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
3236 /* 140 */ 91, 99, 83, 347, 342, 92, 61, 87, 90, 91,
3237 /* 150 */ 99, 83, 338, 174, 266, 197, 198, 88, 85, 95,
3238 /* 160 */ 139, 63, 55, 57, 69, 65, 67, 75, 77, 79,
3239 /* 170 */ 81, 71, 73, 51, 49, 53, 46, 43, 59, 92,
3240 /* 180 */ 61, 87, 90, 91, 99, 83, 118, 29, 85, 95,
3241 /* 190 */ 140, 63, 55, 57, 69, 65, 67, 75, 77, 79,
3242 /* 200 */ 81, 71, 73, 51, 49, 53, 46, 43, 59, 92,
3243 /* 210 */ 61, 87, 90, 91, 99, 83, 134, 42, 85, 95,
3244 /* 220 */ 503, 63, 55, 57, 69, 65, 67, 75, 77, 79,
3245 /* 230 */ 81, 71, 73, 51, 49, 53, 46, 43, 59, 92,
3246 /* 240 */ 61, 87, 90, 91, 99, 83, 46, 43, 59, 92,
3247 /* 250 */ 61, 87, 90, 91, 99, 83, 321, 322, 323, 324,
3248 /* 260 */ 325, 326, 504, 111, 144, 94, 309, 327, 146, 85,
3249 /* 270 */ 95, 97, 63, 55, 57, 69, 65, 67, 75, 77,
3250 /* 280 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3251 /* 290 */ 92, 61, 87, 90, 91, 99, 83, 85, 95, 147,
3252 /* 300 */ 63, 55, 57, 69, 65, 67, 75, 77, 79, 81,
3253 /* 310 */ 71, 73, 51, 49, 53, 46, 43, 59, 92, 61,
3254 /* 320 */ 87, 90, 91, 99, 83, 100, 503, 142, 142, 504,
3255 /* 330 */ 107, 171, 129, 276, 287, 173, 107, 120, 137, 109,
3256 /* 340 */ 145, 116, 120, 141, 141, 114, 105, 116, 120, 115,
3257 /* 350 */ 85, 95, 180, 63, 55, 57, 69, 65, 67, 75,
3258 /* 360 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
3259 /* 370 */ 59, 92, 61, 87, 90, 91, 99, 83, 187, 183,
3260 /* 380 */ 85, 95, 26, 63, 55, 57, 69, 65, 67, 75,
3261 /* 390 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
3262 /* 400 */ 59, 92, 61, 87, 90, 91, 99, 83, 192, 190,
3263 /* 410 */ 85, 95, 213, 63, 55, 57, 69, 65, 67, 75,
3264 /* 420 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
3265 /* 430 */ 59, 92, 61, 87, 90, 91, 99, 83, 100, 217,
3266 /* 440 */ 220, 28, 93, 252, 165, 228, 214, 107, 218, 318,
3267 /* 450 */ 120, 137, 143, 120, 120, 224, 120, 211, 128, 120,
3268 /* 460 */ 259, 85, 95, 219, 63, 55, 57, 69, 65, 67,
3269 /* 470 */ 75, 77, 79, 81, 71, 73, 51, 49, 53, 46,
3270 /* 480 */ 43, 59, 92, 61, 87, 90, 91, 99, 83, 85,
3271 /* 490 */ 95, 230, 63, 55, 57, 69, 65, 67, 75, 77,
3272 /* 500 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3273 /* 510 */ 92, 61, 87, 90, 91, 99, 83, 234, 262, 85,
3274 /* 520 */ 95, 254, 63, 55, 57, 69, 65, 67, 75, 77,
3275 /* 530 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3276 /* 540 */ 92, 61, 87, 90, 91, 99, 83, 237, 268, 85,
3277 /* 550 */ 95, 238, 63, 55, 57, 69, 65, 67, 75, 77,
3278 /* 560 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3279 /* 570 */ 92, 61, 87, 90, 91, 99, 83, 242, 271, 85,
3280 /* 580 */ 95, 293, 63, 55, 57, 69, 65, 67, 75, 77,
3281 /* 590 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3282 /* 600 */ 92, 61, 87, 90, 91, 99, 83, 249, 274, 85,
3283 /* 610 */ 95, 251, 63, 55, 57, 69, 65, 67, 75, 77,
3284 /* 620 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3285 /* 630 */ 92, 61, 87, 90, 91, 99, 83, 257, 333, 85,
3286 /* 640 */ 95, 256, 63, 55, 57, 69, 65, 67, 75, 77,
3287 /* 650 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3288 /* 660 */ 92, 61, 87, 90, 91, 99, 83, 318, 349, 85,
3289 /* 670 */ 95, 258, 63, 55, 57, 69, 65, 67, 75, 77,
3290 /* 680 */ 79, 81, 71, 73, 51, 49, 53, 46, 43, 59,
3291 /* 690 */ 92, 61, 87, 90, 91, 99, 83, 85, 95, 277,
3292 /* 700 */ 63, 55, 57, 69, 65, 67, 75, 77, 79, 81,
3293 /* 710 */ 71, 73, 51, 49, 53, 46, 43, 59, 92, 61,
3294 /* 720 */ 87, 90, 91, 227, 83, 524, 1, 2, 286, 4,
3295 /* 730 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3296 /* 740 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3297 /* 750 */ 25, 95, 281, 63, 55, 57, 69, 65, 67, 75,
3298 /* 760 */ 77, 79, 81, 71, 73, 51, 49, 53, 46, 43,
3299 /* 770 */ 59, 92, 61, 87, 90, 91, 99, 83, 63, 55,
3300 /* 780 */ 57, 69, 65, 67, 75, 77, 79, 81, 71, 73,
3301 /* 790 */ 51, 49, 53, 46, 43, 59, 92, 61, 87, 90,
3302 /* 800 */ 91, 99, 83, 30, 286, 4, 5, 6, 7, 8,
3303 /* 810 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3304 /* 820 */ 19, 20, 21, 22, 23, 24, 25, 36, 286, 4,
3305 /* 830 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3306 /* 840 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3307 /* 850 */ 25, 55, 57, 69, 65, 67, 75, 77, 79, 81,
3308 /* 860 */ 71, 73, 51, 49, 53, 46, 43, 59, 92, 61,
3309 /* 870 */ 87, 90, 91, 99, 83, 177, 286, 4, 5, 6,
3310 /* 880 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
3311 /* 890 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 184,
3312 /* 900 */ 286, 4, 5, 6, 7, 8, 9, 10, 11, 12,
3313 /* 910 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3314 /* 920 */ 23, 24, 25, 221, 286, 4, 5, 6, 7, 8,
3315 /* 930 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3316 /* 940 */ 19, 20, 21, 22, 23, 24, 25, 231, 286, 4,
3317 /* 950 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3318 /* 960 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3319 /* 970 */ 25, 239, 286, 4, 5, 6, 7, 8, 9, 10,
3320 /* 980 */ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
3321 /* 990 */ 21, 22, 23, 24, 25, 246, 286, 4, 5, 6,
3322 /* 1000 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
3323 /* 1010 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 278,
3324 /* 1020 */ 286, 4, 5, 6, 7, 8, 9, 10, 11, 12,
3325 /* 1030 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3326 /* 1040 */ 23, 24, 25, 289, 286, 4, 5, 6, 7, 8,
3327 /* 1050 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3328 /* 1060 */ 19, 20, 21, 22, 23, 24, 25, 295, 286, 4,
3329 /* 1070 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3330 /* 1080 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3331 /* 1090 */ 25, 312, 286, 4, 5, 6, 7, 8, 9, 10,
3332 /* 1100 */ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
3333 /* 1110 */ 21, 22, 23, 24, 25, 334, 286, 4, 5, 6,
3334 /* 1120 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
3335 /* 1130 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 343,
3336 /* 1140 */ 286, 4, 5, 6, 7, 8, 9, 10, 11, 12,
3337 /* 1150 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3338 /* 1160 */ 23, 24, 25, 350, 286, 4, 5, 6, 7, 8,
3339 /* 1170 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3340 /* 1180 */ 19, 20, 21, 22, 23, 24, 25, 3, 4, 5,
3341 /* 1190 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
3342 /* 1200 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
3343 /* 1210 */ 27, 235, 32, 34, 40, 170, 172, 41, 283, 181,
3344 /* 1220 */ 100, 188, 191, 193, 169, 45, 168, 285, 288, 120,
3345 /* 1230 */ 216, 292, 120, 132, 178, 294, 120, 120, 120, 225,
3346 /* 1240 */ 366, 26, 298, 236, 437, 243, 438, 250, 131, 260,
3347 /* 1250 */ 263, 303, 269, 272, 275, 305, 282, 284, 255, 4,
3348 /* 1260 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3349 /* 1270 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3350 /* 1280 */ 25, 27, 235, 358, 360, 40, 170, 172, 48, 357,
3351 /* 1290 */ 181, 31, 188, 191, 193, 252, 354, 50, 130, 52,
3352 /* 1300 */ 120, 216, 252, 54, 306, 56, 131, 308, 316, 120,
3353 /* 1310 */ 225, 120, 259, 307, 236, 120, 243, 120, 250, 259,
3354 /* 1320 */ 260, 263, 317, 269, 272, 275, 311, 282, 284, 58,
3355 /* 1330 */ 315, 60, 319, 27, 235, 38, 62, 40, 170, 172,
3356 /* 1340 */ 320, 120, 181, 120, 188, 191, 193, 330, 120, 337,
3357 /* 1350 */ 252, 339, 252, 216, 37, 340, 229, 252, 310, 328,
3358 /* 1360 */ 346, 185, 225, 222, 353, 232, 236, 259, 243, 259,
3359 /* 1370 */ 250, 356, 260, 263, 259, 269, 272, 275, 359, 282,
3360 /* 1380 */ 284, 361, 69, 65, 67, 75, 77, 79, 81, 71,
3361 /* 1390 */ 73, 51, 49, 53, 46, 43, 59, 92, 61, 87,
3362 /* 1400 */ 90, 91, 99, 83, 362, 27, 235, 64, 363, 40,
3363 /* 1410 */ 170, 172, 364, 179, 181, 252, 188, 191, 193, 120,
3364 /* 1420 */ 252, 290, 252, 244, 252, 216, 252, 290, 301, 290,
3365 /* 1430 */ 240, 290, 259, 290, 225, 120, 290, 259, 236, 259,
3366 /* 1440 */ 243, 259, 250, 259, 260, 263, 247, 269, 272, 275,
3367 /* 1450 */ 279, 282, 284, 290, 290, 290, 290, 27, 235, 209,
3368 /* 1460 */ 290, 40, 170, 172, 290, 212, 181, 186, 188, 191,
3369 /* 1470 */ 193, 290, 290, 253, 290, 332, 290, 216, 290, 290,
3370 /* 1480 */ 199, 201, 203, 205, 207, 120, 225, 120, 290, 252,
3371 /* 1490 */ 236, 252, 243, 296, 250, 290, 260, 263, 313, 269,
3372 /* 1500 */ 272, 275, 335, 282, 284, 290, 259, 252, 259, 27,
3373 /* 1510 */ 235, 252, 290, 40, 170, 172, 290, 344, 181, 290,
3374 /* 1520 */ 188, 191, 193, 66, 259, 290, 290, 68, 259, 216,
3375 /* 1530 */ 290, 223, 290, 252, 290, 120, 290, 290, 225, 120,
3376 /* 1540 */ 290, 290, 236, 290, 243, 290, 250, 290, 260, 263,
3377 /* 1550 */ 259, 269, 272, 275, 252, 282, 284, 70, 290, 252,
3378 /* 1560 */ 290, 27, 235, 252, 290, 40, 170, 172, 290, 120,
3379 /* 1570 */ 181, 259, 188, 191, 193, 72, 259, 290, 252, 290,
3380 /* 1580 */ 259, 216, 290, 290, 290, 290, 290, 120, 290, 290,
3381 /* 1590 */ 225, 233, 290, 290, 236, 259, 243, 351, 250, 74,
3382 /* 1600 */ 260, 263, 290, 269, 272, 275, 290, 282, 284, 76,
3383 /* 1610 */ 290, 120, 290, 27, 235, 78, 80, 40, 170, 172,
3384 /* 1620 */ 82, 120, 181, 84, 188, 191, 193, 120, 120, 290,
3385 /* 1630 */ 290, 86, 120, 216, 290, 120, 290, 89, 290, 96,
3386 /* 1640 */ 290, 290, 225, 120, 290, 290, 236, 241, 243, 120,
3387 /* 1650 */ 250, 120, 260, 263, 290, 269, 272, 275, 252, 282,
3388 /* 1660 */ 284, 98, 290, 290, 290, 27, 235, 102, 104, 40,
3389 /* 1670 */ 170, 172, 119, 120, 181, 259, 188, 191, 193, 120,
3390 /* 1680 */ 120, 290, 290, 135, 120, 216, 290, 167, 290, 290,
3391 /* 1690 */ 290, 175, 290, 290, 225, 120, 290, 290, 236, 120,
3392 /* 1700 */ 243, 248, 250, 120, 260, 263, 290, 269, 272, 275,
3393 /* 1710 */ 290, 282, 284, 182, 290, 189, 290, 27, 235, 290,
3394 /* 1720 */ 200, 40, 170, 172, 202, 120, 181, 120, 188, 191,
3395 /* 1730 */ 193, 204, 120, 206, 290, 208, 120, 216, 290, 210,
3396 /* 1740 */ 290, 226, 290, 120, 290, 120, 225, 120, 290, 290,
3397 /* 1750 */ 236, 120, 243, 120, 250, 290, 260, 263, 290, 269,
3398 /* 1760 */ 272, 275, 280, 282, 284, 261, 290, 264, 290, 27,
3399 /* 1770 */ 235, 290, 267, 40, 170, 172, 270, 120, 181, 120,
3400 /* 1780 */ 188, 191, 193, 273, 120, 341, 290, 348, 120, 216,
3401 /* 1790 */ 290, 290, 290, 290, 290, 120, 290, 120, 225, 120,
3402 /* 1800 */ 290, 290, 236, 290, 243, 290, 250, 290, 260, 263,
3403 /* 1810 */ 290, 269, 272, 275, 291, 282, 284, 290, 290, 290,
3404 /* 1820 */ 290, 27, 235, 290, 290, 40, 170, 172, 290, 290,
3405 /* 1830 */ 181, 290, 188, 191, 193, 290, 290, 290, 290, 290,
3406 /* 1840 */ 290, 216, 290, 290, 290, 290, 290, 290, 290, 290,
3407 /* 1850 */ 225, 290, 290, 290, 236, 290, 243, 297, 250, 290,
3408 /* 1860 */ 260, 263, 290, 269, 272, 275, 290, 282, 284, 290,
3409 /* 1870 */ 290, 290, 290, 27, 235, 290, 290, 40, 170, 172,
3410 /* 1880 */ 290, 290, 181, 290, 188, 191, 193, 290, 290, 290,
3411 /* 1890 */ 290, 290, 290, 216, 290, 290, 290, 290, 290, 290,
3412 /* 1900 */ 290, 290, 225, 290, 290, 290, 236, 302, 243, 290,
3413 /* 1910 */ 250, 290, 260, 263, 290, 269, 272, 275, 290, 282,
3414 /* 1920 */ 284, 290, 290, 290, 290, 27, 235, 290, 290, 40,
3415 /* 1930 */ 170, 172, 290, 290, 181, 290, 188, 191, 193, 290,
3416 /* 1940 */ 290, 290, 290, 290, 290, 216, 290, 314, 290, 290,
3417 /* 1950 */ 290, 290, 290, 290, 225, 290, 290, 290, 236, 290,
3418 /* 1960 */ 243, 290, 250, 290, 260, 263, 290, 269, 272, 275,
3419 /* 1970 */ 290, 282, 284, 290, 290, 290, 290, 27, 235, 290,
3420 /* 1980 */ 290, 40, 170, 172, 290, 290, 181, 329, 188, 191,
3421 /* 1990 */ 193, 290, 290, 290, 290, 290, 290, 216, 290, 290,
3422 /* 2000 */ 290, 290, 290, 290, 290, 290, 225, 290, 290, 290,
3423 /* 2010 */ 236, 290, 243, 290, 250, 290, 260, 263, 290, 269,
3424 /* 2020 */ 272, 275, 290, 282, 284, 290, 290, 290, 290, 27,
3425 /* 2030 */ 235, 290, 290, 40, 170, 172, 290, 336, 181, 290,
3426 /* 2040 */ 188, 191, 193, 290, 290, 290, 290, 290, 290, 216,
3427 /* 2050 */ 290, 290, 290, 290, 290, 290, 290, 290, 225, 290,
3428 /* 2060 */ 290, 290, 236, 290, 243, 290, 250, 290, 260, 263,
3429 /* 2070 */ 290, 269, 272, 275, 290, 282, 284, 290, 290, 290,
3430 /* 2080 */ 290, 27, 235, 290, 290, 40, 170, 172, 290, 345,
3431 /* 2090 */ 181, 290, 188, 191, 193, 290, 290, 290, 290, 290,
3432 /* 2100 */ 290, 216, 290, 290, 290, 290, 290, 290, 290, 290,
3433 /* 2110 */ 225, 290, 290, 290, 236, 290, 243, 290, 250, 290,
3434 /* 2120 */ 260, 263, 290, 269, 272, 275, 290, 282, 284, 290,
3435 /* 2130 */ 290, 290, 290, 27, 235, 290, 290, 40, 170, 172,
3436 /* 2140 */ 290, 352, 181, 290, 188, 191, 193, 290, 290, 290,
3437 /* 2150 */ 290, 290, 290, 216, 290, 290, 290, 290, 290, 290,
3438 /* 2160 */ 290, 290, 225, 290, 290, 290, 236, 290, 243, 290,
3439 /* 2170 */ 250, 290, 260, 263, 290, 269, 272, 275, 290, 282,
3440 /* 2180 */ 284, 290, 290, 290, 290, 27, 235, 355, 290, 40,
3441 /* 2190 */ 170, 172, 290, 290, 181, 290, 188, 191, 193, 290,
3442 /* 2200 */ 290, 290, 290, 290, 290, 216, 290, 290, 290, 290,
3443 /* 2210 */ 290, 290, 290, 290, 225, 290, 290, 290, 236, 290,
3444 /* 2220 */ 243, 290, 250, 290, 260, 263, 290, 269, 272, 275,
3445 /* 2230 */ 290, 282, 284, 290, 290, 290, 290, 27, 235, 290,
3446 /* 2240 */ 290, 40, 170, 172, 290, 290, 181, 290, 188, 191,
3447 /* 2250 */ 193, 290, 290, 290, 290, 290, 290, 216, 290, 290,
3448 /* 2260 */ 290, 290, 290, 290, 290, 290, 225, 290, 290, 290,
3449 /* 2270 */ 236, 290, 243, 290, 250, 290, 260, 263, 290, 269,
3450 /* 2280 */ 272, 275, 290, 282, 284, 290, 290, 290, 47, 44,
3451 /* 2290 */ 290, 106, 290, 101, 290, 290, 103, 290, 47, 44,
3452 /* 2300 */ 290, 106, 290, 101, 290, 121, 103, 290, 290, 290,
3453 /* 2310 */ 290, 290, 290, 290, 290, 121, 290, 290, 290, 290,
3454 /* 2320 */ 290, 122, 123, 124, 125, 126, 127, 290, 290, 290,
3455 /* 2330 */ 290, 122, 123, 124, 125, 126, 127, 290, 290, 290,
3456 /* 2340 */ 290, 290, 290, 290, 290, 290, 290, 157, 158, 159,
3457 /* 2350 */ 160, 161, 162, 163, 112, 290, 290, 150, 151, 152,
3458 /* 2360 */ 153, 154, 155, 156, 112, 290, 290, 166, 290, 47,
3459 /* 2370 */ 44, 290, 106, 290, 101, 290, 164, 103, 290, 47,
3460 /* 2380 */ 44, 290, 106, 290, 101, 290, 121, 103, 290, 290,
3461 /* 2390 */ 290, 290, 290, 290, 290, 290, 121, 290, 290, 290,
3462 /* 2400 */ 290, 290, 122, 123, 124, 125, 126, 127, 138, 290,
3463 /* 2410 */ 290, 290, 122, 123, 124, 125, 126, 127, 290, 290,
3464 /* 2420 */ 290, 290, 290, 290, 47, 44, 290, 106, 290, 101,
3465 /* 2430 */ 290, 290, 103, 290, 290, 112, 290, 290, 290, 47,
3466 /* 2440 */ 44, 149, 106, 290, 101, 112, 290, 103, 290, 290,
3467 /* 2450 */ 290, 290, 290, 290, 290, 290, 121, 148, 123, 124,
3468 /* 2460 */ 125, 126, 127, 47, 44, 290, 106, 290, 101, 290,
3469 /* 2470 */ 136, 103, 122, 133, 124, 125, 126, 127, 47, 44,
3470 /* 2480 */ 121, 106, 290, 101, 290, 290, 103, 290, 290, 290,
3471 /* 2490 */ 112, 290, 108, 290, 290, 121, 122, 117, 124, 125,
3472 /* 2500 */ 126, 127, 290, 290, 290, 112, 290, 290, 290, 290,
3473 /* 2510 */ 290, 122, 117, 124, 125, 126, 127, 47, 44, 290,
3474 /* 2520 */ 106, 290, 101, 47, 44, 103, 106, 290, 101, 112,
3475 /* 2530 */ 290, 103, 290, 290, 121, 290, 290, 290, 290, 290,
3476 /* 2540 */ 121, 290, 290, 290, 112, 113, 290, 290, 304, 290,
3477 /* 2550 */ 122, 133, 124, 125, 126, 127, 122, 123, 124, 125,
3478 /* 2560 */ 126, 127, 47, 44, 290, 106, 290, 101, 290, 290,
3479 /* 2570 */ 103, 290, 290, 47, 44, 290, 106, 290, 101, 121,
3480 /* 2580 */ 290, 103, 290, 112, 290, 290, 290, 290, 290, 112,
3481 /* 2590 */ 121, 290, 290, 290, 290, 122, 117, 124, 125, 126,
3482 /* 2600 */ 127, 290, 290, 290, 290, 290, 122, 133, 124, 125,
3483 /* 2610 */ 126, 127, 290, 290, 290, 290, 290, 290, 290, 290,
3484 /* 2620 */ 290, 290, 290, 290, 290, 290, 290, 290, 112, 290,
3485 /* 2630 */ 290, 290, 290, 290, 290, 290, 290, 290, 290, 112,
3486 };
3487 static VVCODETYPE vv_lookahead[] = {
3488 /* 0 */ 3, 4, 2, 6, 7, 8, 9, 10, 11, 12,
3489 /* 10 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3490 /* 20 */ 23, 24, 25, 26, 27, 28, 29, 30, 0, 32,
3491 /* 30 */ 26, 27, 28, 29, 30, 38, 18, 19, 20, 21,
3492 /* 40 */ 22, 23, 24, 25, 26, 27, 28, 29, 30, 32,
3493 /* 50 */ 50, 54, 117, 118, 119, 3, 4, 2, 6, 7,
3494 /* 60 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
3495 /* 70 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
3496 /* 80 */ 28, 29, 30, 31, 32, 3, 4, 32, 6, 7,
3497 /* 90 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
3498 /* 100 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
3499 /* 110 */ 28, 29, 30, 32, 32, 3, 4, 32, 6, 7,
3500 /* 120 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
3501 /* 130 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
3502 /* 140 */ 28, 29, 30, 31, 32, 24, 25, 26, 27, 28,
3503 /* 150 */ 29, 30, 2, 3, 72, 118, 119, 3, 3, 4,
3504 /* 160 */ 126, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3505 /* 170 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3506 /* 180 */ 25, 26, 27, 28, 29, 30, 5, 32, 3, 4,
3507 /* 190 */ 50, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3508 /* 200 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3509 /* 210 */ 25, 26, 27, 28, 29, 30, 5, 32, 3, 4,
3510 /* 220 */ 50, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3511 /* 230 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
3512 /* 240 */ 25, 26, 27, 28, 29, 30, 21, 22, 23, 24,
3513 /* 250 */ 25, 26, 27, 28, 29, 30, 54, 55, 56, 57,
3514 /* 260 */ 58, 59, 50, 2, 5, 50, 120, 121, 126, 3,
3515 /* 270 */ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
3516 /* 280 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3517 /* 290 */ 24, 25, 26, 27, 28, 29, 30, 3, 4, 50,
3518 /* 300 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
3519 /* 310 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
3520 /* 320 */ 26, 27, 28, 29, 30, 116, 5, 38, 38, 5,
3521 /* 330 */ 116, 32, 123, 58, 59, 38, 116, 128, 129, 125,
3522 /* 340 */ 50, 127, 128, 54, 54, 125, 52, 127, 128, 88,
3523 /* 350 */ 3, 4, 32, 6, 7, 8, 9, 10, 11, 12,
3524 /* 360 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3525 /* 370 */ 23, 24, 25, 26, 27, 28, 29, 30, 32, 32,
3526 /* 380 */ 3, 4, 1, 6, 7, 8, 9, 10, 11, 12,
3527 /* 390 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3528 /* 400 */ 23, 24, 25, 26, 27, 28, 29, 30, 32, 32,
3529 /* 410 */ 3, 4, 38, 6, 7, 8, 9, 10, 11, 12,
3530 /* 420 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3531 /* 430 */ 23, 24, 25, 26, 27, 28, 29, 30, 116, 38,
3532 /* 440 */ 32, 116, 116, 62, 116, 123, 119, 116, 29, 38,
3533 /* 450 */ 128, 129, 126, 128, 128, 32, 128, 50, 127, 128,
3534 /* 460 */ 79, 3, 4, 52, 6, 7, 8, 9, 10, 11,
3535 /* 470 */ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
3536 /* 480 */ 22, 23, 24, 25, 26, 27, 28, 29, 30, 3,
3537 /* 490 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
3538 /* 500 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3539 /* 510 */ 24, 25, 26, 27, 28, 29, 30, 32, 32, 3,
3540 /* 520 */ 4, 63, 6, 7, 8, 9, 10, 11, 12, 13,
3541 /* 530 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3542 /* 540 */ 24, 25, 26, 27, 28, 29, 30, 38, 32, 3,
3543 /* 550 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
3544 /* 560 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3545 /* 570 */ 24, 25, 26, 27, 28, 29, 30, 32, 32, 3,
3546 /* 580 */ 4, 124, 6, 7, 8, 9, 10, 11, 12, 13,
3547 /* 590 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3548 /* 600 */ 24, 25, 26, 27, 28, 29, 30, 32, 32, 3,
3549 /* 610 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
3550 /* 620 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3551 /* 630 */ 24, 25, 26, 27, 28, 29, 30, 69, 32, 3,
3552 /* 640 */ 4, 1, 6, 7, 8, 9, 10, 11, 12, 13,
3553 /* 650 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3554 /* 660 */ 24, 25, 26, 27, 28, 29, 30, 38, 32, 3,
3555 /* 670 */ 4, 32, 6, 7, 8, 9, 10, 11, 12, 13,
3556 /* 680 */ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
3557 /* 690 */ 24, 25, 26, 27, 28, 29, 30, 3, 4, 32,
3558 /* 700 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
3559 /* 710 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
3560 /* 720 */ 26, 27, 28, 29, 30, 90, 91, 92, 93, 94,
3561 /* 730 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
3562 /* 740 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
3563 /* 750 */ 115, 4, 32, 6, 7, 8, 9, 10, 11, 12,
3564 /* 760 */ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
3565 /* 770 */ 23, 24, 25, 26, 27, 28, 29, 30, 6, 7,
3566 /* 780 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
3567 /* 790 */ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
3568 /* 800 */ 28, 29, 30, 92, 93, 94, 95, 96, 97, 98,
3569 /* 810 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
3570 /* 820 */ 109, 110, 111, 112, 113, 114, 115, 92, 93, 94,
3571 /* 830 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
3572 /* 840 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
3573 /* 850 */ 115, 7, 8, 9, 10, 11, 12, 13, 14, 15,
3574 /* 860 */ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
3575 /* 870 */ 26, 27, 28, 29, 30, 92, 93, 94, 95, 96,
3576 /* 880 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3577 /* 890 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 92,
3578 /* 900 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
3579 /* 910 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
3580 /* 920 */ 113, 114, 115, 92, 93, 94, 95, 96, 97, 98,
3581 /* 930 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
3582 /* 940 */ 109, 110, 111, 112, 113, 114, 115, 92, 93, 94,
3583 /* 950 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
3584 /* 960 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
3585 /* 970 */ 115, 92, 93, 94, 95, 96, 97, 98, 99, 100,
3586 /* 980 */ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
3587 /* 990 */ 111, 112, 113, 114, 115, 92, 93, 94, 95, 96,
3588 /* 1000 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3589 /* 1010 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 92,
3590 /* 1020 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
3591 /* 1030 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
3592 /* 1040 */ 113, 114, 115, 92, 93, 94, 95, 96, 97, 98,
3593 /* 1050 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
3594 /* 1060 */ 109, 110, 111, 112, 113, 114, 115, 92, 93, 94,
3595 /* 1070 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
3596 /* 1080 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
3597 /* 1090 */ 115, 92, 93, 94, 95, 96, 97, 98, 99, 100,
3598 /* 1100 */ 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
3599 /* 1110 */ 111, 112, 113, 114, 115, 92, 93, 94, 95, 96,
3600 /* 1120 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
3601 /* 1130 */ 107, 108, 109, 110, 111, 112, 113, 114, 115, 92,
3602 /* 1140 */ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
3603 /* 1150 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
3604 /* 1160 */ 113, 114, 115, 92, 93, 94, 95, 96, 97, 98,
3605 /* 1170 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
3606 /* 1180 */ 109, 110, 111, 112, 113, 114, 115, 93, 94, 95,
3607 /* 1190 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
3608 /* 1200 */ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
3609 /* 1210 */ 31, 32, 33, 34, 35, 36, 37, 116, 32, 40,
3610 /* 1220 */ 116, 42, 43, 44, 116, 116, 116, 32, 32, 128,
3611 /* 1230 */ 51, 32, 128, 129, 1, 32, 128, 128, 128, 60,
3612 /* 1240 */ 0, 1, 32, 64, 32, 66, 32, 68, 2, 70,
3613 /* 1250 */ 71, 32, 73, 74, 75, 32, 77, 78, 93, 94,
3614 /* 1260 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
3615 /* 1270 */ 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
3616 /* 1280 */ 115, 31, 32, 33, 34, 35, 36, 37, 116, 1,
3617 /* 1290 */ 40, 1, 42, 43, 44, 62, 1, 116, 52, 116,
3618 /* 1300 */ 128, 51, 62, 116, 1, 116, 2, 32, 2, 128,
3619 /* 1310 */ 60, 128, 79, 61, 64, 128, 66, 128, 68, 79,
3620 /* 1320 */ 70, 71, 121, 73, 74, 75, 32, 77, 78, 116,
3621 /* 1330 */ 32, 116, 45, 31, 32, 33, 116, 35, 36, 37,
3622 /* 1340 */ 122, 128, 40, 128, 42, 43, 44, 32, 128, 32,
3623 /* 1350 */ 62, 38, 62, 51, 1, 3, 52, 62, 52, 1,
3624 /* 1360 */ 32, 1, 60, 1, 32, 1, 64, 79, 66, 79,
3625 /* 1370 */ 68, 32, 70, 71, 79, 73, 74, 75, 32, 77,
3626 /* 1380 */ 78, 32, 9, 10, 11, 12, 13, 14, 15, 16,
3627 /* 1390 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
3628 /* 1400 */ 27, 28, 29, 30, 1, 31, 32, 116, 33, 35,
3629 /* 1410 */ 36, 37, 32, 39, 40, 62, 42, 43, 44, 128,
3630 /* 1420 */ 62, 130, 62, 116, 62, 51, 62, 130, 1, 130,
3631 /* 1430 */ 1, 130, 79, 130, 60, 128, 130, 79, 64, 79,
3632 /* 1440 */ 66, 79, 68, 79, 70, 71, 1, 73, 74, 75,
3633 /* 1450 */ 1, 77, 78, 130, 130, 130, 130, 31, 32, 24,
3634 /* 1460 */ 130, 35, 36, 37, 130, 30, 40, 41, 42, 43,
3635 /* 1470 */ 44, 130, 1, 116, 130, 116, 130, 51, 130, 130,
3636 /* 1480 */ 45, 46, 47, 48, 49, 128, 60, 128, 130, 62,
3637 /* 1490 */ 64, 62, 66, 1, 68, 130, 70, 71, 1, 73,
3638 /* 1500 */ 74, 75, 1, 77, 78, 130, 79, 62, 79, 31,
3639 /* 1510 */ 32, 62, 130, 35, 36, 37, 130, 1, 40, 130,
3640 /* 1520 */ 42, 43, 44, 116, 79, 130, 130, 116, 79, 51,
3641 /* 1530 */ 130, 53, 130, 62, 130, 128, 130, 130, 60, 128,
3642 /* 1540 */ 130, 130, 64, 130, 66, 130, 68, 130, 70, 71,
3643 /* 1550 */ 79, 73, 74, 75, 62, 77, 78, 116, 130, 62,
3644 /* 1560 */ 130, 31, 32, 62, 130, 35, 36, 37, 130, 128,
3645 /* 1570 */ 40, 79, 42, 43, 44, 116, 79, 130, 62, 130,
3646 /* 1580 */ 79, 51, 130, 130, 130, 130, 130, 128, 130, 130,
3647 /* 1590 */ 60, 61, 130, 130, 64, 79, 66, 1, 68, 116,
3648 /* 1600 */ 70, 71, 130, 73, 74, 75, 130, 77, 78, 116,
3649 /* 1610 */ 130, 128, 130, 31, 32, 116, 116, 35, 36, 37,
3650 /* 1620 */ 116, 128, 40, 116, 42, 43, 44, 128, 128, 130,
3651 /* 1630 */ 130, 116, 128, 51, 130, 128, 130, 116, 130, 116,
3652 /* 1640 */ 130, 130, 60, 128, 130, 130, 64, 65, 66, 128,
3653 /* 1650 */ 68, 128, 70, 71, 130, 73, 74, 75, 62, 77,
3654 /* 1660 */ 78, 116, 130, 130, 130, 31, 32, 116, 116, 35,
3655 /* 1670 */ 36, 37, 116, 128, 40, 79, 42, 43, 44, 128,
3656 /* 1680 */ 128, 130, 130, 116, 128, 51, 130, 116, 130, 130,
3657 /* 1690 */ 130, 116, 130, 130, 60, 128, 130, 130, 64, 128,
3658 /* 1700 */ 66, 67, 68, 128, 70, 71, 130, 73, 74, 75,
3659 /* 1710 */ 130, 77, 78, 116, 130, 116, 130, 31, 32, 130,
3660 /* 1720 */ 116, 35, 36, 37, 116, 128, 40, 128, 42, 43,
3661 /* 1730 */ 44, 116, 128, 116, 130, 116, 128, 51, 130, 116,
3662 /* 1740 */ 130, 116, 130, 128, 130, 128, 60, 128, 130, 130,
3663 /* 1750 */ 64, 128, 66, 128, 68, 130, 70, 71, 130, 73,
3664 /* 1760 */ 74, 75, 76, 77, 78, 116, 130, 116, 130, 31,
3665 /* 1770 */ 32, 130, 116, 35, 36, 37, 116, 128, 40, 128,
3666 /* 1780 */ 42, 43, 44, 116, 128, 116, 130, 116, 128, 51,
3667 /* 1790 */ 130, 130, 130, 130, 130, 128, 130, 128, 60, 128,
3668 /* 1800 */ 130, 130, 64, 130, 66, 130, 68, 130, 70, 71,
3669 /* 1810 */ 130, 73, 74, 75, 76, 77, 78, 130, 130, 130,
3670 /* 1820 */ 130, 31, 32, 130, 130, 35, 36, 37, 130, 130,
3671 /* 1830 */ 40, 130, 42, 43, 44, 130, 130, 130, 130, 130,
3672 /* 1840 */ 130, 51, 130, 130, 130, 130, 130, 130, 130, 130,
3673 /* 1850 */ 60, 130, 130, 130, 64, 130, 66, 67, 68, 130,
3674 /* 1860 */ 70, 71, 130, 73, 74, 75, 130, 77, 78, 130,
3675 /* 1870 */ 130, 130, 130, 31, 32, 130, 130, 35, 36, 37,
3676 /* 1880 */ 130, 130, 40, 130, 42, 43, 44, 130, 130, 130,
3677 /* 1890 */ 130, 130, 130, 51, 130, 130, 130, 130, 130, 130,
3678 /* 1900 */ 130, 130, 60, 130, 130, 130, 64, 65, 66, 130,
3679 /* 1910 */ 68, 130, 70, 71, 130, 73, 74, 75, 130, 77,
3680 /* 1920 */ 78, 130, 130, 130, 130, 31, 32, 130, 130, 35,
3681 /* 1930 */ 36, 37, 130, 130, 40, 130, 42, 43, 44, 130,
3682 /* 1940 */ 130, 130, 130, 130, 130, 51, 130, 53, 130, 130,
3683 /* 1950 */ 130, 130, 130, 130, 60, 130, 130, 130, 64, 130,
3684 /* 1960 */ 66, 130, 68, 130, 70, 71, 130, 73, 74, 75,
3685 /* 1970 */ 130, 77, 78, 130, 130, 130, 130, 31, 32, 130,
3686 /* 1980 */ 130, 35, 36, 37, 130, 130, 40, 41, 42, 43,
3687 /* 1990 */ 44, 130, 130, 130, 130, 130, 130, 51, 130, 130,
3688 /* 2000 */ 130, 130, 130, 130, 130, 130, 60, 130, 130, 130,
3689 /* 2010 */ 64, 130, 66, 130, 68, 130, 70, 71, 130, 73,
3690 /* 2020 */ 74, 75, 130, 77, 78, 130, 130, 130, 130, 31,
3691 /* 2030 */ 32, 130, 130, 35, 36, 37, 130, 39, 40, 130,
3692 /* 2040 */ 42, 43, 44, 130, 130, 130, 130, 130, 130, 51,
3693 /* 2050 */ 130, 130, 130, 130, 130, 130, 130, 130, 60, 130,
3694 /* 2060 */ 130, 130, 64, 130, 66, 130, 68, 130, 70, 71,
3695 /* 2070 */ 130, 73, 74, 75, 130, 77, 78, 130, 130, 130,
3696 /* 2080 */ 130, 31, 32, 130, 130, 35, 36, 37, 130, 39,
3697 /* 2090 */ 40, 130, 42, 43, 44, 130, 130, 130, 130, 130,
3698 /* 2100 */ 130, 51, 130, 130, 130, 130, 130, 130, 130, 130,
3699 /* 2110 */ 60, 130, 130, 130, 64, 130, 66, 130, 68, 130,
3700 /* 2120 */ 70, 71, 130, 73, 74, 75, 130, 77, 78, 130,
3701 /* 2130 */ 130, 130, 130, 31, 32, 130, 130, 35, 36, 37,
3702 /* 2140 */ 130, 39, 40, 130, 42, 43, 44, 130, 130, 130,
3703 /* 2150 */ 130, 130, 130, 51, 130, 130, 130, 130, 130, 130,
3704 /* 2160 */ 130, 130, 60, 130, 130, 130, 64, 130, 66, 130,
3705 /* 2170 */ 68, 130, 70, 71, 130, 73, 74, 75, 130, 77,
3706 /* 2180 */ 78, 130, 130, 130, 130, 31, 32, 33, 130, 35,
3707 /* 2190 */ 36, 37, 130, 130, 40, 130, 42, 43, 44, 130,
3708 /* 2200 */ 130, 130, 130, 130, 130, 51, 130, 130, 130, 130,
3709 /* 2210 */ 130, 130, 130, 130, 60, 130, 130, 130, 64, 130,
3710 /* 2220 */ 66, 130, 68, 130, 70, 71, 130, 73, 74, 75,
3711 /* 2230 */ 130, 77, 78, 130, 130, 130, 130, 31, 32, 130,
3712 /* 2240 */ 130, 35, 36, 37, 130, 130, 40, 130, 42, 43,
3713 /* 2250 */ 44, 130, 130, 130, 130, 130, 130, 51, 130, 130,
3714 /* 2260 */ 130, 130, 130, 130, 130, 130, 60, 130, 130, 130,
3715 /* 2270 */ 64, 130, 66, 130, 68, 130, 70, 71, 130, 73,
3716 /* 2280 */ 74, 75, 130, 77, 78, 130, 130, 130, 21, 22,
3717 /* 2290 */ 130, 24, 130, 26, 130, 130, 29, 130, 21, 22,
3718 /* 2300 */ 130, 24, 130, 26, 130, 38, 29, 130, 130, 130,
3719 /* 2310 */ 130, 130, 130, 130, 130, 38, 130, 130, 130, 130,
3720 /* 2320 */ 130, 54, 55, 56, 57, 58, 59, 130, 130, 130,
3721 /* 2330 */ 130, 54, 55, 56, 57, 58, 59, 130, 130, 130,
3722 /* 2340 */ 130, 130, 130, 130, 130, 130, 130, 80, 81, 82,
3723 /* 2350 */ 83, 84, 85, 86, 87, 130, 130, 80, 81, 82,
3724 /* 2360 */ 83, 84, 85, 86, 87, 130, 130, 19, 130, 21,
3725 /* 2370 */ 22, 130, 24, 130, 26, 130, 18, 29, 130, 21,
3726 /* 2380 */ 22, 130, 24, 130, 26, 130, 38, 29, 130, 130,
3727 /* 2390 */ 130, 130, 130, 130, 130, 130, 38, 130, 130, 130,
3728 /* 2400 */ 130, 130, 54, 55, 56, 57, 58, 59, 5, 130,
3729 /* 2410 */ 130, 130, 54, 55, 56, 57, 58, 59, 130, 130,
3730 /* 2420 */ 130, 130, 130, 130, 21, 22, 130, 24, 130, 26,
3731 /* 2430 */ 130, 130, 29, 130, 130, 87, 130, 130, 130, 21,
3732 /* 2440 */ 22, 38, 24, 130, 26, 87, 130, 29, 130, 130,
3733 /* 2450 */ 130, 130, 130, 130, 130, 130, 38, 54, 55, 56,
3734 /* 2460 */ 57, 58, 59, 21, 22, 130, 24, 130, 26, 130,
3735 /* 2470 */ 52, 29, 54, 55, 56, 57, 58, 59, 21, 22,
3736 /* 2480 */ 38, 24, 130, 26, 130, 130, 29, 130, 130, 130,
3737 /* 2490 */ 87, 130, 50, 130, 130, 38, 54, 55, 56, 57,
3738 /* 2500 */ 58, 59, 130, 130, 130, 87, 130, 130, 130, 130,
3739 /* 2510 */ 130, 54, 55, 56, 57, 58, 59, 21, 22, 130,
3740 /* 2520 */ 24, 130, 26, 21, 22, 29, 24, 130, 26, 87,
3741 /* 2530 */ 130, 29, 130, 130, 38, 130, 130, 130, 130, 130,
3742 /* 2540 */ 38, 130, 130, 130, 87, 88, 130, 130, 52, 130,
3743 /* 2550 */ 54, 55, 56, 57, 58, 59, 54, 55, 56, 57,
3744 /* 2560 */ 58, 59, 21, 22, 130, 24, 130, 26, 130, 130,
3745 /* 2570 */ 29, 130, 130, 21, 22, 130, 24, 130, 26, 38,
3746 /* 2580 */ 130, 29, 130, 87, 130, 130, 130, 130, 130, 87,
3747 /* 2590 */ 38, 130, 130, 130, 130, 54, 55, 56, 57, 58,
3748 /* 2600 */ 59, 130, 130, 130, 130, 130, 54, 55, 56, 57,
3749 /* 2610 */ 58, 59, 130, 130, 130, 130, 130, 130, 130, 130,
3750 /* 2620 */ 130, 130, 130, 130, 130, 130, 130, 130, 87, 130,
3751 /* 2630 */ 130, 130, 130, 130, 130, 130, 130, 130, 130, 87,
3752 };
3753 #define VV_SHIFT_USE_DFLT (-4)
3754 static short vv_shift_ofst[] = {
3755 /* 0 */ 381, 28, 1240, -4, -4, -4, -4, -4, -4, -4,
3756 /* 10 */ -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
3757 /* 20 */ -4, -4, -4, -4, -4, -4, 2206, 2502, 155, 1288,
3758 /* 30 */ 1290, 1179, 17, -4, 81, 1295, 1353, 1302, 85, -4,
3759 /* 40 */ 2502, 185, -4, 2502, 2502, 121, 2502, 2502, 121, 2348,
3760 /* 50 */ 225, 2358, 225, 2502, 225, 2502, 1373, 2502, 1373, 2502,
3761 /* 60 */ 121, 2502, 4, 2502, 844, 2502, 18, 2267, 18, 2277,
3762 /* 70 */ 18, 2502, 18, 2502, 18, 2502, 18, 2502, 18, 2502,
3763 /* 80 */ 18, 2502, 18, 2502, -4, 2502, 747, 154, 2502, 4,
3764 /* 90 */ -4, -4, 2403, 215, -4, 2502, 266, 2502, 772, 2418,
3765 /* 100 */ 666, 2502, 4, 2502, 294, -4, 2442, 666, -4, 0,
3766 /* 110 */ -4, 2541, 2457, -4, 261, -4, -4, 181, 2502, 666,
3767 /* 120 */ -4, -4, -4, -4, -4, -4, -4, -4, -4, 1246,
3768 /* 130 */ -4, 2552, -4, 211, 2502, 666, -4, -4, 289, 140,
3769 /* 140 */ -4, 170, 212, 259, 290, -4, 249, -4, 321, 324,
3770 /* 150 */ -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
3771 /* 160 */ -4, -4, -4, -4, 2502, 225, 2502, 225, 121, 121,
3772 /* 170 */ 299, -4, 297, 150, 2502, 52, 381, 1233, 1374, 320,
3773 /* 180 */ -4, 2502, 347, 1358, 1360, 1426, 346, -4, 2502, 377,
3774 /* 190 */ -4, 376, -4, 374, 55, -4, 374, -4, 1435, 2502,
3775 /* 200 */ 666, 2502, 666, 2502, 666, 2502, 666, 2502, 666, 2502,
3776 /* 210 */ 407, -4, 374, -4, -4, -4, 401, 419, 411, 408,
3777 /* 220 */ 381, 1362, 1478, 423, -4, 2502, 694, 2496, 1304, 459,
3778 /* 230 */ 381, 1364, 1530, 485, -4, -4, 509, 519, 1427, 1429,
3779 /* 240 */ 1582, 545, -4, 2502, -3, 381, 1445, 1634, 575, -4,
3780 /* 250 */ 579, 381, 2502, 458, -4, 640, 568, 639, -4, -4,
3781 /* 260 */ 2502, 486, -4, 2502, 82, -4, 2502, 516, -4, 2502,
3782 /* 270 */ 546, -4, 2502, 576, -4, 275, 667, 381, 1449, 1686,
3783 /* 280 */ 720, -4, 1186, -4, 1195, -4, -4, 1196, 381, 1471,
3784 /* 290 */ 1738, 1199, -4, 1203, 381, 1492, 1790, 1210, -4, 1212,
3785 /* 300 */ 1214, 1842, 1219, -4, 1223, 1303, 1252, 1275, -4, 1306,
3786 /* 310 */ 1294, 381, 1497, 1894, 1298, -4, 629, -4, 1287, 202,
3787 /* 320 */ -4, -4, -4, -4, -4, -4, -4, -4, 1946, 1315,
3788 /* 330 */ -4, 2502, 606, 381, 1501, 1998, 1317, -4, 1313, 1352,
3789 /* 340 */ 2502, 112, 381, 1516, 2050, 1328, -4, 2502, 636, 381,
3790 /* 350 */ 1596, 2102, 1332, -4, 2154, 1339, -4, 1250, 1346, -4,
3791 /* 360 */ 1349, 1403, 1375, 1380, -4,
3792 };
3793 #define VV_REDUCE_USE_DFLT (-66)
3794 static short vv_reduce_ofst[] = {
3795 /* 0 */ 635, -66, 1094, -66, -66, -66, -66, -66, -66, -66,
3796 /* 10 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
3797 /* 20 */ -66, -66, -66, -66, -66, -66, -66, 325, -66, 711,
3798 /* 30 */ 1094, -66, -66, -66, -66, 735, 1094, -66, -66, -66,
3799 /* 40 */ 1101, -66, -66, 1108, 1109, -66, 1110, 1172, -66, 1181,
3800 /* 50 */ -66, 1183, -66, 1187, -66, 1189, -66, 1213, -66, 1215,
3801 /* 60 */ -66, 1220, -66, 1291, -66, 1407, -66, 1411, -66, 1441,
3802 /* 70 */ -66, 1459, -66, 1483, -66, 1493, -66, 1499, -66, 1500,
3803 /* 80 */ -66, 1504, -66, 1507, -66, 1515, -66, -66, 1521, -66,
3804 /* 90 */ -66, -66, 326, -66, -66, 1523, -66, 1545, -66, 209,
3805 /* 100 */ -66, 1551, -66, 1552, -66, -66, 214, -66, -66, -66,
3806 /* 110 */ -66, 331, 220, -66, -66, -66, -66, -66, 1556, -66,
3807 /* 120 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
3808 /* 130 */ -66, 1104, -66, -66, 1567, -66, -66, -66, 34, -66,
3809 /* 140 */ -66, -66, -66, -66, 142, -66, -66, -66, -66, -66,
3810 /* 150 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
3811 /* 160 */ -66, -66, -66, -66, 328, -66, 1571, -66, -66, -66,
3812 /* 170 */ -66, -66, -66, -66, 1575, -66, 783, 1094, -66, -66,
3813 /* 180 */ -66, 1597, -66, 807, 1094, -66, -66, -66, 1599, -66,
3814 /* 190 */ -66, -66, -66, -65, -66, -66, 37, -66, -66, 1604,
3815 /* 200 */ -66, 1608, -66, 1615, -66, 1617, -66, 1619, -66, 1623,
3816 /* 210 */ -66, -66, 327, -66, -66, -66, -66, -66, 146, -66,
3817 /* 220 */ 831, 1094, -66, -66, -66, 1625, -66, 322, -66, -66,
3818 /* 230 */ 855, 1094, -66, -66, -66, -66, -66, -66, 879, 1094,
3819 /* 240 */ -66, -66, -66, 1307, 457, 903, 1094, -66, -66, -66,
3820 /* 250 */ -66, 1165, 1357, -66, -66, -66, -66, -66, -66, -66,
3821 /* 260 */ 1649, -66, -66, 1651, -66, -66, 1656, -66, -66, 1660,
3822 /* 270 */ -66, -66, 1667, -66, -66, -66, -66, 927, 1094, -66,
3823 /* 280 */ -66, -66, -66, -66, -66, -66, -66, -66, 951, 1094,
3824 /* 290 */ -66, -66, -66, -66, 975, 1094, -66, -66, -66, -66,
3825 /* 300 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
3826 /* 310 */ -66, 999, 1094, -66, -66, -66, 1201, -66, -66, 1218,
3827 /* 320 */ -66, -66, -66, -66, -66, -66, -66, -66, -66, -66,
3828 /* 330 */ -66, 1359, -66, 1023, 1094, -66, -66, -66, -66, -66,
3829 /* 340 */ 1669, -66, 1047, 1094, -66, -66, -66, 1671, -66, 1071,
3830 /* 350 */ 1094, -66, -66, -66, -66, -66, -66, -66, -66, -66,
3831 /* 360 */ -66, -66, -66, -66, -66,
3832 };
3833 static VVACTIONTYPE vv_default[] = {
3834 /* 0 */ 523, 523, 523, 367, 369, 370, 371, 372, 373, 374,
3835 /* 10 */ 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
3836 /* 20 */ 385, 386, 387, 388, 389, 390, 523, 523, 523, 523,
3837 /* 30 */ 523, 523, 523, 391, 523, 523, 523, 523, 523, 393,
3838 /* 40 */ 523, 523, 396, 523, 523, 450, 523, 523, 451, 523,
3839 /* 50 */ 454, 523, 456, 523, 458, 523, 459, 523, 460, 523,
3840 /* 60 */ 461, 523, 462, 523, 463, 523, 464, 523, 480, 523,
3841 /* 70 */ 479, 523, 481, 523, 482, 523, 483, 523, 484, 523,
3842 /* 80 */ 485, 523, 486, 523, 487, 523, 488, 523, 523, 489,
3843 /* 90 */ 491, 492, 523, 523, 498, 523, 523, 523, 499, 523,
3844 /* 100 */ 514, 523, 490, 523, 523, 493, 523, 508, 494, 523,
3845 /* 110 */ 495, 523, 523, 496, 523, 497, 506, 518, 523, 507,
3846 /* 120 */ 509, 516, 517, 518, 519, 520, 521, 522, 505, 523,
3847 /* 130 */ 510, 523, 512, 518, 523, 515, 511, 513, 523, 523,
3848 /* 140 */ 500, 523, 523, 523, 523, 501, 523, 502, 517, 516,
3849 /* 150 */ 466, 468, 470, 472, 474, 476, 478, 465, 467, 469,
3850 /* 160 */ 471, 473, 475, 477, 523, 457, 523, 455, 453, 452,
3851 /* 170 */ 523, 397, 523, 523, 523, 523, 523, 523, 523, 523,
3852 /* 180 */ 398, 523, 523, 523, 523, 523, 523, 402, 523, 523,
3853 /* 190 */ 404, 523, 405, 523, 523, 406, 523, 407, 523, 523,
3854 /* 200 */ 409, 523, 410, 523, 411, 523, 412, 523, 413, 523,
3855 /* 210 */ 523, 415, 523, 414, 416, 408, 523, 523, 523, 523,
3856 /* 220 */ 523, 523, 523, 523, 417, 523, 523, 523, 523, 510,
3857 /* 230 */ 523, 523, 523, 523, 429, 431, 523, 523, 523, 523,
3858 /* 240 */ 523, 523, 433, 523, 523, 523, 523, 523, 523, 435,
3859 /* 250 */ 523, 523, 523, 523, 432, 523, 523, 523, 439, 449,
3860 /* 260 */ 523, 523, 440, 523, 523, 441, 523, 523, 442, 523,
3861 /* 270 */ 523, 443, 523, 523, 444, 523, 523, 523, 523, 523,
3862 /* 280 */ 523, 445, 523, 447, 523, 448, 368, 523, 523, 523,
3863 /* 290 */ 523, 523, 446, 523, 523, 523, 523, 523, 436, 523,
3864 /* 300 */ 523, 523, 523, 434, 511, 523, 523, 523, 430, 523,
3865 /* 310 */ 523, 523, 523, 523, 523, 418, 523, 419, 421, 523,
3866 /* 320 */ 422, 423, 424, 425, 426, 427, 428, 420, 523, 523,
3867 /* 330 */ 403, 523, 523, 523, 523, 523, 523, 399, 523, 523,
3868 /* 340 */ 523, 523, 523, 523, 523, 523, 400, 523, 523, 523,
3869 /* 350 */ 523, 523, 523, 401, 523, 523, 394, 523, 523, 392,
3870 /* 360 */ 523, 523, 523, 523, 395,
3871 };
3872 #define VV_SZ_ACTTAB (sizeof(vv_action)/sizeof(vv_action[0]))
3873
3874 /* The next table maps tokens into fallback tokens. If a construct
3875 ** like the following:
3876 **
3877 ** %fallback ID X Y Z.
3878 **
3879 ** appears in the grammer, then ID becomes a fallback token for X, Y,
3880 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser
3881 ** but it does not parse, the type of the token is changed to ID and
3882 ** the parse is retried before an error is thrown.
3883 */
3884 #ifdef VVFALLBACK
3885 static const VVCODETYPE vvFallback[] = {
3886 };
3887 #endif /* VVFALLBACK */
3888
3889 /* The following structure represents a single element of the
3890 ** parser's stack. Information stored includes:
3891 **
3892 ** + The state number for the parser at this level of the stack.
3893 **
3894 ** + The value of the token stored at this level of the stack.
3895 ** (In other words, the "major" token.)
3896 **
3897 ** + The semantic value stored at this level of the stack. This is
3898 ** the information used by the action routines in the grammar.
3899 ** It is sometimes called the "minor" token.
3900 */
3901 struct vvStackEntry {
3902 int stateno; /* The state-number */
3903 int major; /* The major token value. This is the code
3904 ** number for the token at this stack level */
3905 VVMINORTYPE minor; /* The user-supplied minor token value. This
3906 ** is the value of the token */
3907 };
3908 typedef struct vvStackEntry vvStackEntry;
3909
3910 /* The state of the parser is completely contained in an instance of
3911 ** the following structure */
3912 struct vvParser {
3913 int vvidx; /* Index of top element in stack */
3914 int vverrcnt; /* Shifts left before out of the error */
3915 phvolt_ARG_SDECL /* A place to hold %extra_argument */
3916 vvStackEntry vvstack[VVSTACKDEPTH]; /* The parser's stack */
3917 };
3918 typedef struct vvParser vvParser;
3919
3920 #ifndef NDEBUG
3921 #include <stdio.h>
3922 static FILE *vvTraceFILE = 0;
3923 static char *vvTracePrompt = 0;
3924 #endif /* NDEBUG */
3925
3926 #ifndef NDEBUG
3927 /*
3928 ** Turn parser tracing on by giving a stream to which to write the trace
3929 ** and a prompt to preface each trace message. Tracing is turned off
3930 ** by making either argument NULL
3931 **
3932 ** Inputs:
3933 ** <ul>
3934 ** <li> A FILE* to which trace output should be written.
3935 ** If NULL, then tracing is turned off.
3936 ** <li> A prefix string written at the beginning of every
3937 ** line of trace output. If NULL, then tracing is
3938 ** turned off.
3939 ** </ul>
3940 **
3941 ** Outputs:
3942 ** None.
3943 */
phvolt_Trace(FILE * TraceFILE,char * zTracePrompt)3944 void phvolt_Trace(FILE *TraceFILE, char *zTracePrompt){
3945 vvTraceFILE = TraceFILE;
3946 vvTracePrompt = zTracePrompt;
3947 if( vvTraceFILE==0 ) vvTracePrompt = 0;
3948 else if( vvTracePrompt==0 ) vvTraceFILE = 0;
3949 }
3950 #endif /* NDEBUG */
3951
3952 #ifndef NDEBUG
3953 /* For tracing shifts, the names of all terminals and nonterminals
3954 ** are required. The following table supplies these names */
3955 static const char *vvTokenName[] = {
3956 "$", "OPEN_DELIMITER", "COMMA", "IN",
3957 "QUESTION", "COLON", "RANGE", "AND",
3958 "OR", "IS", "EQUALS", "NOTEQUALS",
3959 "LESS", "GREATER", "GREATEREQUAL", "LESSEQUAL",
3960 "IDENTICAL", "NOTIDENTICAL", "DIVIDE", "TIMES",
3961 "MOD", "PLUS", "MINUS", "CONCAT",
3962 "SBRACKET_OPEN", "PIPE", "NOT", "INCR",
3963 "DECR", "PARENTHESES_OPEN", "DOT", "IF",
3964 "CLOSE_DELIMITER", "ENDIF", "ELSE", "ELSEIF",
3965 "ELSEFOR", "FOR", "IDENTIFIER", "ENDFOR",
3966 "SWITCH", "ENDSWITCH", "CASE", "DEFAULT",
3967 "SET", "ASSIGN", "ADD_ASSIGN", "SUB_ASSIGN",
3968 "MUL_ASSIGN", "DIV_ASSIGN", "SBRACKET_CLOSE", "MACRO",
3969 "PARENTHESES_CLOSE", "ENDMACRO", "INTEGER", "STRING",
3970 "DOUBLE", "NULL", "FALSE", "TRUE",
3971 "CALL", "ENDCALL", "OPEN_EDELIMITER", "CLOSE_EDELIMITER",
3972 "BLOCK", "ENDBLOCK", "CACHE", "ENDCACHE",
3973 "RAW", "ENDRAW", "EXTENDS", "INCLUDE",
3974 "WITH", "DO", "RETURN", "AUTOESCAPE",
3975 "ENDAUTOESCAPE", "BREAK", "CONTINUE", "RAW_FRAGMENT",
3976 "DEFINED", "EMPTY", "EVEN", "ODD",
3977 "NUMERIC", "SCALAR", "ITERABLE", "CBRACKET_OPEN",
3978 "CBRACKET_CLOSE", "error", "program", "volt_language",
3979 "statement_list", "statement", "raw_fragment", "if_statement",
3980 "elseif_statement", "elsefor_statement", "for_statement", "switch_statement",
3981 "case_clause", "set_statement", "echo_statement", "block_statement",
3982 "cache_statement", "extends_statement", "include_statement", "do_statement",
3983 "return_statement", "autoescape_statement", "raw_statement", "break_statement",
3984 "continue_statement", "macro_statement", "empty_statement", "macro_call_statement",
3985 "expr", "set_assignments", "set_assignment", "assignable_expr",
3986 "macro_parameters", "macro_parameter", "macro_parameter_default", "argument_list",
3987 "cache_lifetime", "array_list", "slice_offset", "array_item",
3988 "function_call", "argument_item",
3989 };
3990 #endif /* NDEBUG */
3991
3992 #ifndef NDEBUG
3993 /* For tracing reduce actions, the names of all rules are required.
3994 */
3995 static const char *vvRuleName[] = {
3996 /* 0 */ "program ::= volt_language",
3997 /* 1 */ "volt_language ::= statement_list",
3998 /* 2 */ "statement_list ::= statement_list statement",
3999 /* 3 */ "statement_list ::= statement",
4000 /* 4 */ "statement ::= raw_fragment",
4001 /* 5 */ "statement ::= if_statement",
4002 /* 6 */ "statement ::= elseif_statement",
4003 /* 7 */ "statement ::= elsefor_statement",
4004 /* 8 */ "statement ::= for_statement",
4005 /* 9 */ "statement ::= switch_statement",
4006 /* 10 */ "statement ::= case_clause",
4007 /* 11 */ "statement ::= set_statement",
4008 /* 12 */ "statement ::= echo_statement",
4009 /* 13 */ "statement ::= block_statement",
4010 /* 14 */ "statement ::= cache_statement",
4011 /* 15 */ "statement ::= extends_statement",
4012 /* 16 */ "statement ::= include_statement",
4013 /* 17 */ "statement ::= do_statement",
4014 /* 18 */ "statement ::= return_statement",
4015 /* 19 */ "statement ::= autoescape_statement",
4016 /* 20 */ "statement ::= raw_statement",
4017 /* 21 */ "statement ::= break_statement",
4018 /* 22 */ "statement ::= continue_statement",
4019 /* 23 */ "statement ::= macro_statement",
4020 /* 24 */ "statement ::= empty_statement",
4021 /* 25 */ "statement ::= macro_call_statement",
4022 /* 26 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
4023 /* 27 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
4024 /* 28 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ELSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
4025 /* 29 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ELSE CLOSE_DELIMITER OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
4026 /* 30 */ "if_statement ::= OPEN_DELIMITER IF expr CLOSE_DELIMITER OPEN_DELIMITER ELSE CLOSE_DELIMITER OPEN_DELIMITER ENDIF CLOSE_DELIMITER",
4027 /* 31 */ "elseif_statement ::= OPEN_DELIMITER ELSEIF expr CLOSE_DELIMITER",
4028 /* 32 */ "elsefor_statement ::= OPEN_DELIMITER ELSEFOR CLOSE_DELIMITER",
4029 /* 33 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER IN expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
4030 /* 34 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER IN expr IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
4031 /* 35 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER COMMA IDENTIFIER IN expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
4032 /* 36 */ "for_statement ::= OPEN_DELIMITER FOR IDENTIFIER COMMA IDENTIFIER IN expr IF expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDFOR CLOSE_DELIMITER",
4033 /* 37 */ "switch_statement ::= OPEN_DELIMITER SWITCH expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDSWITCH CLOSE_DELIMITER",
4034 /* 38 */ "switch_statement ::= OPEN_DELIMITER SWITCH expr CLOSE_DELIMITER OPEN_DELIMITER ENDSWITCH CLOSE_DELIMITER",
4035 /* 39 */ "case_clause ::= OPEN_DELIMITER CASE expr CLOSE_DELIMITER",
4036 /* 40 */ "case_clause ::= OPEN_DELIMITER DEFAULT CLOSE_DELIMITER",
4037 /* 41 */ "set_statement ::= OPEN_DELIMITER SET set_assignments CLOSE_DELIMITER",
4038 /* 42 */ "set_assignments ::= set_assignments COMMA set_assignment",
4039 /* 43 */ "set_assignments ::= set_assignment",
4040 /* 44 */ "set_assignment ::= assignable_expr ASSIGN expr",
4041 /* 45 */ "set_assignment ::= assignable_expr ADD_ASSIGN expr",
4042 /* 46 */ "set_assignment ::= assignable_expr SUB_ASSIGN expr",
4043 /* 47 */ "set_assignment ::= assignable_expr MUL_ASSIGN expr",
4044 /* 48 */ "set_assignment ::= assignable_expr DIV_ASSIGN expr",
4045 /* 49 */ "assignable_expr ::= IDENTIFIER",
4046 /* 50 */ "assignable_expr ::= assignable_expr SBRACKET_OPEN expr SBRACKET_CLOSE",
4047 /* 51 */ "assignable_expr ::= assignable_expr DOT assignable_expr",
4048 /* 52 */ "macro_statement ::= OPEN_DELIMITER MACRO IDENTIFIER PARENTHESES_OPEN PARENTHESES_CLOSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDMACRO CLOSE_DELIMITER",
4049 /* 53 */ "macro_statement ::= OPEN_DELIMITER MACRO IDENTIFIER PARENTHESES_OPEN macro_parameters PARENTHESES_CLOSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDMACRO CLOSE_DELIMITER",
4050 /* 54 */ "macro_parameters ::= macro_parameters COMMA macro_parameter",
4051 /* 55 */ "macro_parameters ::= macro_parameter",
4052 /* 56 */ "macro_parameter ::= IDENTIFIER",
4053 /* 57 */ "macro_parameter ::= IDENTIFIER ASSIGN macro_parameter_default",
4054 /* 58 */ "macro_parameter_default ::= INTEGER",
4055 /* 59 */ "macro_parameter_default ::= STRING",
4056 /* 60 */ "macro_parameter_default ::= DOUBLE",
4057 /* 61 */ "macro_parameter_default ::= NULL",
4058 /* 62 */ "macro_parameter_default ::= FALSE",
4059 /* 63 */ "macro_parameter_default ::= TRUE",
4060 /* 64 */ "macro_call_statement ::= OPEN_DELIMITER CALL expr PARENTHESES_OPEN argument_list PARENTHESES_CLOSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDCALL CLOSE_DELIMITER",
4061 /* 65 */ "macro_call_statement ::= OPEN_DELIMITER CALL expr PARENTHESES_OPEN PARENTHESES_CLOSE CLOSE_DELIMITER OPEN_DELIMITER ENDCALL CLOSE_DELIMITER",
4062 /* 66 */ "empty_statement ::= OPEN_DELIMITER CLOSE_DELIMITER",
4063 /* 67 */ "echo_statement ::= OPEN_EDELIMITER expr CLOSE_EDELIMITER",
4064 /* 68 */ "block_statement ::= OPEN_DELIMITER BLOCK IDENTIFIER CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDBLOCK CLOSE_DELIMITER",
4065 /* 69 */ "block_statement ::= OPEN_DELIMITER BLOCK IDENTIFIER CLOSE_DELIMITER OPEN_DELIMITER ENDBLOCK CLOSE_DELIMITER",
4066 /* 70 */ "cache_statement ::= OPEN_DELIMITER CACHE expr CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDCACHE CLOSE_DELIMITER",
4067 /* 71 */ "cache_statement ::= OPEN_DELIMITER CACHE expr cache_lifetime CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDCACHE CLOSE_DELIMITER",
4068 /* 72 */ "cache_lifetime ::= INTEGER",
4069 /* 73 */ "cache_lifetime ::= IDENTIFIER",
4070 /* 74 */ "raw_statement ::= OPEN_DELIMITER RAW CLOSE_DELIMITER statement OPEN_DELIMITER ENDRAW CLOSE_DELIMITER",
4071 /* 75 */ "extends_statement ::= OPEN_DELIMITER EXTENDS expr CLOSE_DELIMITER",
4072 /* 76 */ "include_statement ::= OPEN_DELIMITER INCLUDE expr CLOSE_DELIMITER",
4073 /* 77 */ "include_statement ::= OPEN_DELIMITER INCLUDE expr WITH expr CLOSE_DELIMITER",
4074 /* 78 */ "do_statement ::= OPEN_DELIMITER DO expr CLOSE_DELIMITER",
4075 /* 79 */ "return_statement ::= OPEN_DELIMITER RETURN expr CLOSE_DELIMITER",
4076 /* 80 */ "autoescape_statement ::= OPEN_DELIMITER AUTOESCAPE FALSE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDAUTOESCAPE CLOSE_DELIMITER",
4077 /* 81 */ "autoescape_statement ::= OPEN_DELIMITER AUTOESCAPE TRUE CLOSE_DELIMITER statement_list OPEN_DELIMITER ENDAUTOESCAPE CLOSE_DELIMITER",
4078 /* 82 */ "break_statement ::= OPEN_DELIMITER BREAK CLOSE_DELIMITER",
4079 /* 83 */ "continue_statement ::= OPEN_DELIMITER CONTINUE CLOSE_DELIMITER",
4080 /* 84 */ "raw_fragment ::= RAW_FRAGMENT",
4081 /* 85 */ "expr ::= MINUS expr",
4082 /* 86 */ "expr ::= PLUS expr",
4083 /* 87 */ "expr ::= expr MINUS expr",
4084 /* 88 */ "expr ::= expr PLUS expr",
4085 /* 89 */ "expr ::= expr TIMES expr",
4086 /* 90 */ "expr ::= expr TIMES TIMES expr",
4087 /* 91 */ "expr ::= expr DIVIDE expr",
4088 /* 92 */ "expr ::= expr DIVIDE DIVIDE expr",
4089 /* 93 */ "expr ::= expr MOD expr",
4090 /* 94 */ "expr ::= expr AND expr",
4091 /* 95 */ "expr ::= expr OR expr",
4092 /* 96 */ "expr ::= expr CONCAT expr",
4093 /* 97 */ "expr ::= expr PIPE expr",
4094 /* 98 */ "expr ::= expr RANGE expr",
4095 /* 99 */ "expr ::= expr EQUALS expr",
4096 /* 100 */ "expr ::= expr NOTEQUALS DEFINED",
4097 /* 101 */ "expr ::= expr IS DEFINED",
4098 /* 102 */ "expr ::= expr NOTEQUALS EMPTY",
4099 /* 103 */ "expr ::= expr IS EMPTY",
4100 /* 104 */ "expr ::= expr NOTEQUALS EVEN",
4101 /* 105 */ "expr ::= expr IS EVEN",
4102 /* 106 */ "expr ::= expr NOTEQUALS ODD",
4103 /* 107 */ "expr ::= expr IS ODD",
4104 /* 108 */ "expr ::= expr NOTEQUALS NUMERIC",
4105 /* 109 */ "expr ::= expr IS NUMERIC",
4106 /* 110 */ "expr ::= expr NOTEQUALS SCALAR",
4107 /* 111 */ "expr ::= expr IS SCALAR",
4108 /* 112 */ "expr ::= expr NOTEQUALS ITERABLE",
4109 /* 113 */ "expr ::= expr IS ITERABLE",
4110 /* 114 */ "expr ::= expr IS expr",
4111 /* 115 */ "expr ::= expr NOTEQUALS expr",
4112 /* 116 */ "expr ::= expr IDENTICAL expr",
4113 /* 117 */ "expr ::= expr NOTIDENTICAL expr",
4114 /* 118 */ "expr ::= expr LESS expr",
4115 /* 119 */ "expr ::= expr GREATER expr",
4116 /* 120 */ "expr ::= expr GREATEREQUAL expr",
4117 /* 121 */ "expr ::= expr LESSEQUAL expr",
4118 /* 122 */ "expr ::= expr DOT expr",
4119 /* 123 */ "expr ::= expr IN expr",
4120 /* 124 */ "expr ::= expr NOT IN expr",
4121 /* 125 */ "expr ::= NOT expr",
4122 /* 126 */ "expr ::= expr INCR",
4123 /* 127 */ "expr ::= expr DECR",
4124 /* 128 */ "expr ::= PARENTHESES_OPEN expr PARENTHESES_CLOSE",
4125 /* 129 */ "expr ::= SBRACKET_OPEN SBRACKET_CLOSE",
4126 /* 130 */ "expr ::= SBRACKET_OPEN array_list SBRACKET_CLOSE",
4127 /* 131 */ "expr ::= CBRACKET_OPEN CBRACKET_CLOSE",
4128 /* 132 */ "expr ::= CBRACKET_OPEN array_list CBRACKET_CLOSE",
4129 /* 133 */ "expr ::= expr SBRACKET_OPEN expr SBRACKET_CLOSE",
4130 /* 134 */ "expr ::= expr QUESTION expr COLON expr",
4131 /* 135 */ "expr ::= expr SBRACKET_OPEN COLON slice_offset SBRACKET_CLOSE",
4132 /* 136 */ "expr ::= expr SBRACKET_OPEN slice_offset COLON SBRACKET_CLOSE",
4133 /* 137 */ "expr ::= expr SBRACKET_OPEN slice_offset COLON slice_offset SBRACKET_CLOSE",
4134 /* 138 */ "slice_offset ::= INTEGER",
4135 /* 139 */ "slice_offset ::= IDENTIFIER",
4136 /* 140 */ "array_list ::= array_list COMMA array_item",
4137 /* 141 */ "array_list ::= array_item",
4138 /* 142 */ "array_item ::= STRING COLON expr",
4139 /* 143 */ "array_item ::= expr",
4140 /* 144 */ "expr ::= function_call",
4141 /* 145 */ "function_call ::= expr PARENTHESES_OPEN argument_list PARENTHESES_CLOSE",
4142 /* 146 */ "function_call ::= expr PARENTHESES_OPEN PARENTHESES_CLOSE",
4143 /* 147 */ "argument_list ::= argument_list COMMA argument_item",
4144 /* 148 */ "argument_list ::= argument_item",
4145 /* 149 */ "argument_item ::= expr",
4146 /* 150 */ "argument_item ::= STRING COLON expr",
4147 /* 151 */ "expr ::= IDENTIFIER",
4148 /* 152 */ "expr ::= INTEGER",
4149 /* 153 */ "expr ::= STRING",
4150 /* 154 */ "expr ::= DOUBLE",
4151 /* 155 */ "expr ::= NULL",
4152 /* 156 */ "expr ::= FALSE",
4153 /* 157 */ "expr ::= TRUE",
4154 };
4155 #endif /* NDEBUG */
4156
4157 /*
4158 ** This function returns the symbolic name associated with a token
4159 ** value.
4160 */
phvolt_TokenName(int tokenType)4161 const char *phvolt_TokenName(int tokenType){
4162 #ifndef NDEBUG
4163 if( tokenType>0 && tokenType<(sizeof(vvTokenName)/sizeof(vvTokenName[0])) ){
4164 return vvTokenName[tokenType];
4165 }else{
4166 return "Unknown";
4167 }
4168 #else
4169 return "";
4170 #endif
4171 }
4172
4173 /*
4174 ** This function allocates a new parser.
4175 ** The only argument is a pointer to a function which works like
4176 ** malloc.
4177 **
4178 ** Inputs:
4179 ** A pointer to the function used to allocate memory.
4180 **
4181 ** Outputs:
4182 ** A pointer to a parser. This pointer is used in subsequent calls
4183 ** to phvolt_ and phvolt_Free.
4184 */
phvolt_Alloc(void * (* mallocProc)(size_t))4185 void *phvolt_Alloc(void *(*mallocProc)(size_t)){
4186 vvParser *pParser;
4187 pParser = (vvParser*)(*mallocProc)( (size_t)sizeof(vvParser) );
4188 if( pParser ){
4189 pParser->vvidx = -1;
4190 }
4191 return pParser;
4192 }
4193
4194 /* The following function deletes the value associated with a
4195 ** symbol. The symbol can be either a terminal or nonterminal.
4196 ** "vvmajor" is the symbol code, and "vvpminor" is a pointer to
4197 ** the value.
4198 */
vv_destructor(VVCODETYPE vvmajor,VVMINORTYPE * vvpminor)4199 static void vv_destructor(VVCODETYPE vvmajor, VVMINORTYPE *vvpminor){
4200 switch( vvmajor ){
4201 /* Here is inserted the actions which take place when a
4202 ** terminal or non-terminal is destroyed. This can happen
4203 ** when the symbol is popped from the stack during a
4204 ** reduce or during error processing or when a parser is
4205 ** being destroyed before it is finished parsing.
4206 **
4207 ** Note: during a reduce, the only symbols destroyed are those
4208 ** which appear on the RHS of the rule, but which are not used
4209 ** inside the C code.
4210 */
4211 case 1:
4212 case 2:
4213 case 3:
4214 case 4:
4215 case 5:
4216 case 6:
4217 case 7:
4218 case 8:
4219 case 9:
4220 case 10:
4221 case 11:
4222 case 12:
4223 case 13:
4224 case 14:
4225 case 15:
4226 case 16:
4227 case 17:
4228 case 18:
4229 case 19:
4230 case 20:
4231 case 21:
4232 case 22:
4233 case 23:
4234 case 24:
4235 case 25:
4236 case 26:
4237 case 27:
4238 case 28:
4239 case 29:
4240 case 30:
4241 case 31:
4242 case 32:
4243 case 33:
4244 case 34:
4245 case 35:
4246 case 36:
4247 case 37:
4248 case 38:
4249 case 39:
4250 case 40:
4251 case 41:
4252 case 42:
4253 case 43:
4254 case 44:
4255 case 45:
4256 case 46:
4257 case 47:
4258 case 48:
4259 case 49:
4260 case 50:
4261 case 51:
4262 case 52:
4263 case 53:
4264 case 54:
4265 case 55:
4266 case 56:
4267 case 57:
4268 case 58:
4269 case 59:
4270 case 60:
4271 case 61:
4272 case 62:
4273 case 63:
4274 case 64:
4275 case 65:
4276 case 66:
4277 case 67:
4278 case 68:
4279 case 69:
4280 case 70:
4281 case 71:
4282 case 72:
4283 case 73:
4284 case 74:
4285 case 75:
4286 case 76:
4287 case 77:
4288 case 78:
4289 case 79:
4290 case 80:
4291 case 81:
4292 case 82:
4293 case 83:
4294 case 84:
4295 case 85:
4296 case 86:
4297 case 87:
4298 case 88:
4299 // 151 "parser.php7.lemon"
4300 {
4301 if ((vvpminor->vv0)) {
4302 if ((vvpminor->vv0)->free_flag) {
4303 efree((vvpminor->vv0)->token);
4304 }
4305 efree((vvpminor->vv0));
4306 }
4307 }
4308 // 1217 "parser.php7.c"
4309 break;
4310 case 92:
4311 case 93:
4312 case 94:
4313 case 95:
4314 case 96:
4315 case 97:
4316 case 98:
4317 case 99:
4318 case 100:
4319 case 101:
4320 case 102:
4321 case 103:
4322 case 104:
4323 case 105:
4324 case 106:
4325 case 107:
4326 case 108:
4327 case 109:
4328 case 110:
4329 case 111:
4330 case 112:
4331 case 113:
4332 case 114:
4333 case 115:
4334 case 116:
4335 case 117:
4336 case 118:
4337 case 120:
4338 case 121:
4339 case 123:
4340 case 124:
4341 case 125:
4342 case 126:
4343 case 127:
4344 case 128:
4345 case 129:
4346 // 168 "parser.php7.lemon"
4347 {
4348 zval_ptr_dtor(&(vvpminor->vv186));
4349 }
4350 // 1259 "parser.php7.c"
4351 break;
4352 default: break; /* If no destructor action specified: do nothing */
4353 }
4354 }
4355
4356 /*
4357 ** Pop the parser's stack once.
4358 **
4359 ** If there is a destructor routine associated with the token which
4360 ** is popped from the stack, then call it.
4361 **
4362 ** Return the major token number for the symbol popped.
4363 */
vv_pop_parser_stack(vvParser * pParser)4364 static int vv_pop_parser_stack(vvParser *pParser){
4365 VVCODETYPE vvmajor;
4366 vvStackEntry *vvtos = &pParser->vvstack[pParser->vvidx];
4367
4368 if( pParser->vvidx<0 ) return 0;
4369 #ifndef NDEBUG
4370 if( vvTraceFILE && pParser->vvidx>=0 ){
4371 fprintf(vvTraceFILE,"%sPopping %s\n",
4372 vvTracePrompt,
4373 vvTokenName[vvtos->major]);
4374 }
4375 #endif
4376 vvmajor = vvtos->major;
4377 vv_destructor( vvmajor, &vvtos->minor);
4378 pParser->vvidx--;
4379 return vvmajor;
4380 }
4381
4382 /*
4383 ** Deallocate and destroy a parser. Destructors are all called for
4384 ** all stack elements before shutting the parser down.
4385 **
4386 ** Inputs:
4387 ** <ul>
4388 ** <li> A pointer to the parser. This should be a pointer
4389 ** obtained from phvolt_Alloc.
4390 ** <li> A pointer to a function used to reclaim memory obtained
4391 ** from malloc.
4392 ** </ul>
4393 */
phvolt_Free(void * p,void (* freeProc)(void *))4394 void phvolt_Free(
4395 void *p, /* The parser to be deleted */
4396 void (*freeProc)(void*) /* Function used to reclaim memory */
4397 ){
4398 vvParser *pParser = (vvParser*)p;
4399 if( pParser==0 ) return;
4400 while( pParser->vvidx>=0 ) vv_pop_parser_stack(pParser);
4401 (*freeProc)((void*)pParser);
4402 }
4403
4404 /*
4405 ** Find the appropriate action for a parser given the terminal
4406 ** look-ahead token iLookAhead.
4407 **
4408 ** If the look-ahead token is VVNOCODE, then check to see if the action is
4409 ** independent of the look-ahead. If it is, return the action, otherwise
4410 ** return VV_NO_ACTION.
4411 */
vv_find_shift_action(vvParser * pParser,int iLookAhead)4412 static int vv_find_shift_action(
4413 vvParser *pParser, /* The parser */
4414 int iLookAhead /* The look-ahead token */
4415 ){
4416 int i;
4417 int stateno = pParser->vvstack[pParser->vvidx].stateno;
4418
4419 /* if( pParser->vvidx<0 ) return VV_NO_ACTION; */
4420 i = vv_shift_ofst[stateno];
4421 if( i==VV_SHIFT_USE_DFLT ){
4422 return vv_default[stateno];
4423 }
4424 if( iLookAhead==VVNOCODE ){
4425 return VV_NO_ACTION;
4426 }
4427 i += iLookAhead;
4428 if( i<0 || i>=VV_SZ_ACTTAB || vv_lookahead[i]!=iLookAhead ){
4429 #ifdef VVFALLBACK
4430 int iFallback; /* Fallback token */
4431 if( iLookAhead<sizeof(vvFallback)/sizeof(vvFallback[0])
4432 && (iFallback = vvFallback[iLookAhead])!=0 ){
4433 #ifndef NDEBUG
4434 if( vvTraceFILE ){
4435 fprintf(vvTraceFILE, "%sFALLBACK %s => %s\n",
4436 vvTracePrompt, vvTokenName[iLookAhead], vvTokenName[iFallback]);
4437 }
4438 #endif
4439 return vv_find_shift_action(pParser, iFallback);
4440 }
4441 #endif
4442 return vv_default[stateno];
4443 }else{
4444 return vv_action[i];
4445 }
4446 }
4447
4448 /*
4449 ** Find the appropriate action for a parser given the non-terminal
4450 ** look-ahead token iLookAhead.
4451 **
4452 ** If the look-ahead token is VVNOCODE, then check to see if the action is
4453 ** independent of the look-ahead. If it is, return the action, otherwise
4454 ** return VV_NO_ACTION.
4455 */
vv_find_reduce_action(vvParser * pParser,int iLookAhead)4456 static int vv_find_reduce_action(
4457 vvParser *pParser, /* The parser */
4458 int iLookAhead /* The look-ahead token */
4459 ){
4460 int i;
4461 int stateno = pParser->vvstack[pParser->vvidx].stateno;
4462
4463 i = vv_reduce_ofst[stateno];
4464 if( i==VV_REDUCE_USE_DFLT ){
4465 return vv_default[stateno];
4466 }
4467 if( iLookAhead==VVNOCODE ){
4468 return VV_NO_ACTION;
4469 }
4470 i += iLookAhead;
4471 if( i<0 || i>=VV_SZ_ACTTAB || vv_lookahead[i]!=iLookAhead ){
4472 return vv_default[stateno];
4473 }else{
4474 return vv_action[i];
4475 }
4476 }
4477
4478 /*
4479 ** Perform a shift action.
4480 */
vv_shift(vvParser * vvpParser,int vvNewState,int vvMajor,VVMINORTYPE * vvpMinor)4481 static void vv_shift(
4482 vvParser *vvpParser, /* The parser to be shifted */
4483 int vvNewState, /* The new state to shift in */
4484 int vvMajor, /* The major token to shift in */
4485 VVMINORTYPE *vvpMinor /* Pointer ot the minor token to shift in */
4486 ){
4487 vvStackEntry *vvtos;
4488 vvpParser->vvidx++;
4489 if( vvpParser->vvidx>=VVSTACKDEPTH ){
4490 phvolt_ARG_FETCH;
4491 vvpParser->vvidx--;
4492 #ifndef NDEBUG
4493 if( vvTraceFILE ){
4494 fprintf(vvTraceFILE,"%sStack Overflow!\n",vvTracePrompt);
4495 }
4496 #endif
4497 while( vvpParser->vvidx>=0 ) vv_pop_parser_stack(vvpParser);
4498 /* Here code is inserted which will execute if the parser
4499 ** stack every overflows */
4500 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument var */
4501 return;
4502 }
4503 vvtos = &vvpParser->vvstack[vvpParser->vvidx];
4504 vvtos->stateno = vvNewState;
4505 vvtos->major = vvMajor;
4506 vvtos->minor = *vvpMinor;
4507 #ifndef NDEBUG
4508 if( vvTraceFILE && vvpParser->vvidx>0 ){
4509 int i;
4510 fprintf(vvTraceFILE,"%sShift %d\n",vvTracePrompt,vvNewState);
4511 fprintf(vvTraceFILE,"%sStack:",vvTracePrompt);
4512 for(i=1; i<=vvpParser->vvidx; i++)
4513 fprintf(vvTraceFILE," %s",vvTokenName[vvpParser->vvstack[i].major]);
4514 fprintf(vvTraceFILE,"\n");
4515 }
4516 #endif
4517 }
4518
4519 /* The following table contains information about every rule that
4520 ** is used during the reduce.
4521 */
4522 static struct {
4523 VVCODETYPE lhs; /* Symbol on the left-hand side of the rule */
4524 unsigned char nrhs; /* Number of right-hand side symbols in the rule */
4525 } vvRuleInfo[] = {
4526 { 90, 1 },
4527 { 91, 1 },
4528 { 92, 2 },
4529 { 92, 1 },
4530 { 93, 1 },
4531 { 93, 1 },
4532 { 93, 1 },
4533 { 93, 1 },
4534 { 93, 1 },
4535 { 93, 1 },
4536 { 93, 1 },
4537 { 93, 1 },
4538 { 93, 1 },
4539 { 93, 1 },
4540 { 93, 1 },
4541 { 93, 1 },
4542 { 93, 1 },
4543 { 93, 1 },
4544 { 93, 1 },
4545 { 93, 1 },
4546 { 93, 1 },
4547 { 93, 1 },
4548 { 93, 1 },
4549 { 93, 1 },
4550 { 93, 1 },
4551 { 93, 1 },
4552 { 95, 8 },
4553 { 95, 7 },
4554 { 95, 12 },
4555 { 95, 11 },
4556 { 95, 10 },
4557 { 96, 4 },
4558 { 97, 3 },
4559 { 98, 10 },
4560 { 98, 12 },
4561 { 98, 12 },
4562 { 98, 14 },
4563 { 99, 8 },
4564 { 99, 7 },
4565 { 100, 4 },
4566 { 100, 3 },
4567 { 101, 4 },
4568 { 117, 3 },
4569 { 117, 1 },
4570 { 118, 3 },
4571 { 118, 3 },
4572 { 118, 3 },
4573 { 118, 3 },
4574 { 118, 3 },
4575 { 119, 1 },
4576 { 119, 4 },
4577 { 119, 3 },
4578 { 113, 10 },
4579 { 113, 11 },
4580 { 120, 3 },
4581 { 120, 1 },
4582 { 121, 1 },
4583 { 121, 3 },
4584 { 122, 1 },
4585 { 122, 1 },
4586 { 122, 1 },
4587 { 122, 1 },
4588 { 122, 1 },
4589 { 122, 1 },
4590 { 115, 11 },
4591 { 115, 9 },
4592 { 114, 2 },
4593 { 102, 3 },
4594 { 103, 8 },
4595 { 103, 7 },
4596 { 104, 8 },
4597 { 104, 9 },
4598 { 124, 1 },
4599 { 124, 1 },
4600 { 110, 7 },
4601 { 105, 4 },
4602 { 106, 4 },
4603 { 106, 6 },
4604 { 107, 4 },
4605 { 108, 4 },
4606 { 109, 8 },
4607 { 109, 8 },
4608 { 111, 3 },
4609 { 112, 3 },
4610 { 94, 1 },
4611 { 116, 2 },
4612 { 116, 2 },
4613 { 116, 3 },
4614 { 116, 3 },
4615 { 116, 3 },
4616 { 116, 4 },
4617 { 116, 3 },
4618 { 116, 4 },
4619 { 116, 3 },
4620 { 116, 3 },
4621 { 116, 3 },
4622 { 116, 3 },
4623 { 116, 3 },
4624 { 116, 3 },
4625 { 116, 3 },
4626 { 116, 3 },
4627 { 116, 3 },
4628 { 116, 3 },
4629 { 116, 3 },
4630 { 116, 3 },
4631 { 116, 3 },
4632 { 116, 3 },
4633 { 116, 3 },
4634 { 116, 3 },
4635 { 116, 3 },
4636 { 116, 3 },
4637 { 116, 3 },
4638 { 116, 3 },
4639 { 116, 3 },
4640 { 116, 3 },
4641 { 116, 3 },
4642 { 116, 3 },
4643 { 116, 3 },
4644 { 116, 3 },
4645 { 116, 3 },
4646 { 116, 3 },
4647 { 116, 3 },
4648 { 116, 3 },
4649 { 116, 3 },
4650 { 116, 4 },
4651 { 116, 2 },
4652 { 116, 2 },
4653 { 116, 2 },
4654 { 116, 3 },
4655 { 116, 2 },
4656 { 116, 3 },
4657 { 116, 2 },
4658 { 116, 3 },
4659 { 116, 4 },
4660 { 116, 5 },
4661 { 116, 5 },
4662 { 116, 5 },
4663 { 116, 6 },
4664 { 126, 1 },
4665 { 126, 1 },
4666 { 125, 3 },
4667 { 125, 1 },
4668 { 127, 3 },
4669 { 127, 1 },
4670 { 116, 1 },
4671 { 128, 4 },
4672 { 128, 3 },
4673 { 123, 3 },
4674 { 123, 1 },
4675 { 129, 1 },
4676 { 129, 3 },
4677 { 116, 1 },
4678 { 116, 1 },
4679 { 116, 1 },
4680 { 116, 1 },
4681 { 116, 1 },
4682 { 116, 1 },
4683 { 116, 1 },
4684 };
4685
4686 static void vv_accept(vvParser*); /* Forward Declaration */
4687
4688 /*
4689 ** Perform a reduce action and the shift that must immediately
4690 ** follow the reduce.
4691 */
vv_reduce(vvParser * vvpParser,int vvruleno)4692 static void vv_reduce(
4693 vvParser *vvpParser, /* The parser */
4694 int vvruleno /* Number of the rule by which to reduce */
4695 ){
4696 int vvgoto; /* The next state */
4697 int vvact; /* The next action */
4698 VVMINORTYPE vvgotominor; /* The LHS of the rule reduced */
4699 vvStackEntry *vvmsp; /* The top of the parser's stack */
4700 int vvsize; /* Amount to pop the stack */
4701 phvolt_ARG_FETCH;
4702 vvmsp = &vvpParser->vvstack[vvpParser->vvidx];
4703 #ifndef NDEBUG
4704 if( vvTraceFILE && vvruleno>=0
4705 && vvruleno<sizeof(vvRuleName)/sizeof(vvRuleName[0]) ){
4706 fprintf(vvTraceFILE, "%sReduce [%s].\n", vvTracePrompt,
4707 vvRuleName[vvruleno]);
4708 }
4709 #endif /* NDEBUG */
4710
4711 switch( vvruleno ){
4712 /* Beginning here are the reduction cases. A typical example
4713 ** follows:
4714 ** case 0:
4715 ** // <lineno> <grammarfile>
4716 ** { ... } // User supplied code
4717 ** // <lineno> <thisfile>
4718 ** break;
4719 */
4720 case 0:
4721 // 160 "parser.php7.lemon"
4722 {
4723 ZVAL_ZVAL(&status->ret, &vvmsp[0].minor.vv186, 1, 1);
4724 }
4725 // 1634 "parser.php7.c"
4726 break;
4727 case 1:
4728 case 4:
4729 case 5:
4730 case 6:
4731 case 7:
4732 case 8:
4733 case 9:
4734 case 10:
4735 case 11:
4736 case 12:
4737 case 13:
4738 case 14:
4739 case 15:
4740 case 16:
4741 case 17:
4742 case 18:
4743 case 19:
4744 case 20:
4745 case 21:
4746 case 22:
4747 case 23:
4748 case 24:
4749 case 25:
4750 case 144:
4751 // 164 "parser.php7.lemon"
4752 {
4753 vvgotominor.vv186 = vvmsp[0].minor.vv186;
4754 }
4755 // 1664 "parser.php7.c"
4756 break;
4757 case 2:
4758 // 172 "parser.php7.lemon"
4759 {
4760 phvolt_ret_zval_list(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, &vvmsp[0].minor.vv186);
4761 }
4762 // 1671 "parser.php7.c"
4763 break;
4764 case 3:
4765 case 43:
4766 case 55:
4767 case 141:
4768 case 148:
4769 // 176 "parser.php7.lemon"
4770 {
4771 phvolt_ret_zval_list(&vvgotominor.vv186, NULL, &vvmsp[0].minor.vv186);
4772 }
4773 // 1682 "parser.php7.c"
4774 break;
4775 case 26:
4776 // 277 "parser.php7.lemon"
4777 {
4778 phvolt_ret_if_statement(&vvgotominor.vv186, &vvmsp[-5].minor.vv186, &vvmsp[-3].minor.vv186, NULL, status->scanner_state);
4779 vv_destructor(1,&vvmsp[-7].minor);
4780 vv_destructor(31,&vvmsp[-6].minor);
4781 vv_destructor(32,&vvmsp[-4].minor);
4782 vv_destructor(1,&vvmsp[-2].minor);
4783 vv_destructor(33,&vvmsp[-1].minor);
4784 vv_destructor(32,&vvmsp[0].minor);
4785 }
4786 // 1695 "parser.php7.c"
4787 break;
4788 case 27:
4789 // 282 "parser.php7.lemon"
4790 {
4791 phvolt_ret_if_statement(&vvgotominor.vv186, &vvmsp[-4].minor.vv186, NULL, NULL, status->scanner_state);
4792 vv_destructor(1,&vvmsp[-6].minor);
4793 vv_destructor(31,&vvmsp[-5].minor);
4794 vv_destructor(32,&vvmsp[-3].minor);
4795 vv_destructor(1,&vvmsp[-2].minor);
4796 vv_destructor(33,&vvmsp[-1].minor);
4797 vv_destructor(32,&vvmsp[0].minor);
4798 }
4799 // 1708 "parser.php7.c"
4800 break;
4801 case 28:
4802 // 287 "parser.php7.lemon"
4803 {
4804 phvolt_ret_if_statement(&vvgotominor.vv186, &vvmsp[-9].minor.vv186, &vvmsp[-7].minor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
4805 vv_destructor(1,&vvmsp[-11].minor);
4806 vv_destructor(31,&vvmsp[-10].minor);
4807 vv_destructor(32,&vvmsp[-8].minor);
4808 vv_destructor(1,&vvmsp[-6].minor);
4809 vv_destructor(34,&vvmsp[-5].minor);
4810 vv_destructor(32,&vvmsp[-4].minor);
4811 vv_destructor(1,&vvmsp[-2].minor);
4812 vv_destructor(33,&vvmsp[-1].minor);
4813 vv_destructor(32,&vvmsp[0].minor);
4814 }
4815 // 1724 "parser.php7.c"
4816 break;
4817 case 29:
4818 // 292 "parser.php7.lemon"
4819 {
4820 phvolt_ret_if_statement(&vvgotominor.vv186, &vvmsp[-8].minor.vv186, &vvmsp[-6].minor.vv186, NULL, status->scanner_state);
4821 vv_destructor(1,&vvmsp[-10].minor);
4822 vv_destructor(31,&vvmsp[-9].minor);
4823 vv_destructor(32,&vvmsp[-7].minor);
4824 vv_destructor(1,&vvmsp[-5].minor);
4825 vv_destructor(34,&vvmsp[-4].minor);
4826 vv_destructor(32,&vvmsp[-3].minor);
4827 vv_destructor(1,&vvmsp[-2].minor);
4828 vv_destructor(33,&vvmsp[-1].minor);
4829 vv_destructor(32,&vvmsp[0].minor);
4830 }
4831 // 1740 "parser.php7.c"
4832 break;
4833 case 30:
4834 // 297 "parser.php7.lemon"
4835 {
4836 phvolt_ret_if_statement(&vvgotominor.vv186, &vvmsp[-7].minor.vv186, NULL, NULL, status->scanner_state);
4837 vv_destructor(1,&vvmsp[-9].minor);
4838 vv_destructor(31,&vvmsp[-8].minor);
4839 vv_destructor(32,&vvmsp[-6].minor);
4840 vv_destructor(1,&vvmsp[-5].minor);
4841 vv_destructor(34,&vvmsp[-4].minor);
4842 vv_destructor(32,&vvmsp[-3].minor);
4843 vv_destructor(1,&vvmsp[-2].minor);
4844 vv_destructor(33,&vvmsp[-1].minor);
4845 vv_destructor(32,&vvmsp[0].minor);
4846 }
4847 // 1756 "parser.php7.c"
4848 break;
4849 case 31:
4850 // 305 "parser.php7.lemon"
4851 {
4852 phvolt_ret_elseif_statement(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
4853 vv_destructor(1,&vvmsp[-3].minor);
4854 vv_destructor(35,&vvmsp[-2].minor);
4855 vv_destructor(32,&vvmsp[0].minor);
4856 }
4857 // 1766 "parser.php7.c"
4858 break;
4859 case 32:
4860 // 313 "parser.php7.lemon"
4861 {
4862 phvolt_ret_elsefor_statement(&vvgotominor.vv186, status->scanner_state);
4863 vv_destructor(1,&vvmsp[-2].minor);
4864 vv_destructor(36,&vvmsp[-1].minor);
4865 vv_destructor(32,&vvmsp[0].minor);
4866 }
4867 // 1776 "parser.php7.c"
4868 break;
4869 case 33:
4870 // 321 "parser.php7.lemon"
4871 {
4872 phvolt_ret_for_statement(&vvgotominor.vv186, vvmsp[-7].minor.vv0, NULL, &vvmsp[-5].minor.vv186, NULL, &vvmsp[-3].minor.vv186, status->scanner_state);
4873 vv_destructor(1,&vvmsp[-9].minor);
4874 vv_destructor(37,&vvmsp[-8].minor);
4875 vv_destructor(3,&vvmsp[-6].minor);
4876 vv_destructor(32,&vvmsp[-4].minor);
4877 vv_destructor(1,&vvmsp[-2].minor);
4878 vv_destructor(39,&vvmsp[-1].minor);
4879 vv_destructor(32,&vvmsp[0].minor);
4880 }
4881 // 1790 "parser.php7.c"
4882 break;
4883 case 34:
4884 // 325 "parser.php7.lemon"
4885 {
4886 phvolt_ret_for_statement(&vvgotominor.vv186, vvmsp[-9].minor.vv0, NULL, &vvmsp[-7].minor.vv186, &vvmsp[-5].minor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
4887 vv_destructor(1,&vvmsp[-11].minor);
4888 vv_destructor(37,&vvmsp[-10].minor);
4889 vv_destructor(3,&vvmsp[-8].minor);
4890 vv_destructor(31,&vvmsp[-6].minor);
4891 vv_destructor(32,&vvmsp[-4].minor);
4892 vv_destructor(1,&vvmsp[-2].minor);
4893 vv_destructor(39,&vvmsp[-1].minor);
4894 vv_destructor(32,&vvmsp[0].minor);
4895 }
4896 // 1805 "parser.php7.c"
4897 break;
4898 case 35:
4899 // 329 "parser.php7.lemon"
4900 {
4901 phvolt_ret_for_statement(&vvgotominor.vv186, vvmsp[-7].minor.vv0, vvmsp[-9].minor.vv0, &vvmsp[-5].minor.vv186, NULL, &vvmsp[-3].minor.vv186, status->scanner_state);
4902 vv_destructor(1,&vvmsp[-11].minor);
4903 vv_destructor(37,&vvmsp[-10].minor);
4904 vv_destructor(2,&vvmsp[-8].minor);
4905 vv_destructor(3,&vvmsp[-6].minor);
4906 vv_destructor(32,&vvmsp[-4].minor);
4907 vv_destructor(1,&vvmsp[-2].minor);
4908 vv_destructor(39,&vvmsp[-1].minor);
4909 vv_destructor(32,&vvmsp[0].minor);
4910 }
4911 // 1820 "parser.php7.c"
4912 break;
4913 case 36:
4914 // 333 "parser.php7.lemon"
4915 {
4916 phvolt_ret_for_statement(&vvgotominor.vv186, vvmsp[-9].minor.vv0, vvmsp[-11].minor.vv0, &vvmsp[-7].minor.vv186, &vvmsp[-5].minor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
4917 vv_destructor(1,&vvmsp[-13].minor);
4918 vv_destructor(37,&vvmsp[-12].minor);
4919 vv_destructor(2,&vvmsp[-10].minor);
4920 vv_destructor(3,&vvmsp[-8].minor);
4921 vv_destructor(31,&vvmsp[-6].minor);
4922 vv_destructor(32,&vvmsp[-4].minor);
4923 vv_destructor(1,&vvmsp[-2].minor);
4924 vv_destructor(39,&vvmsp[-1].minor);
4925 vv_destructor(32,&vvmsp[0].minor);
4926 }
4927 // 1836 "parser.php7.c"
4928 break;
4929 case 37:
4930 // 342 "parser.php7.lemon"
4931 {
4932 phvolt_ret_switch_statement(&vvgotominor.vv186, &vvmsp[-5].minor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
4933 vv_destructor(1,&vvmsp[-7].minor);
4934 vv_destructor(40,&vvmsp[-6].minor);
4935 vv_destructor(32,&vvmsp[-4].minor);
4936 vv_destructor(1,&vvmsp[-2].minor);
4937 vv_destructor(41,&vvmsp[-1].minor);
4938 vv_destructor(32,&vvmsp[0].minor);
4939 }
4940 // 1849 "parser.php7.c"
4941 break;
4942 case 38:
4943 // 347 "parser.php7.lemon"
4944 {
4945 phvolt_ret_switch_statement(&vvgotominor.vv186, &vvmsp[-4].minor.vv186, NULL, status->scanner_state);
4946 vv_destructor(1,&vvmsp[-6].minor);
4947 vv_destructor(40,&vvmsp[-5].minor);
4948 vv_destructor(32,&vvmsp[-3].minor);
4949 vv_destructor(1,&vvmsp[-2].minor);
4950 vv_destructor(41,&vvmsp[-1].minor);
4951 vv_destructor(32,&vvmsp[0].minor);
4952 }
4953 // 1862 "parser.php7.c"
4954 break;
4955 case 39:
4956 // 356 "parser.php7.lemon"
4957 {
4958 phvolt_ret_case_clause(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
4959 vv_destructor(1,&vvmsp[-3].minor);
4960 vv_destructor(42,&vvmsp[-2].minor);
4961 vv_destructor(32,&vvmsp[0].minor);
4962 }
4963 // 1872 "parser.php7.c"
4964 break;
4965 case 40:
4966 // 361 "parser.php7.lemon"
4967 {
4968 phvolt_ret_case_clause(&vvgotominor.vv186, NULL, status->scanner_state);
4969 vv_destructor(1,&vvmsp[-2].minor);
4970 vv_destructor(43,&vvmsp[-1].minor);
4971 vv_destructor(32,&vvmsp[0].minor);
4972 }
4973 // 1882 "parser.php7.c"
4974 break;
4975 case 41:
4976 // 369 "parser.php7.lemon"
4977 {
4978 phvolt_ret_set_statement(&vvgotominor.vv186, &vvmsp[-1].minor.vv186);
4979 vv_destructor(1,&vvmsp[-3].minor);
4980 vv_destructor(44,&vvmsp[-2].minor);
4981 vv_destructor(32,&vvmsp[0].minor);
4982 }
4983 // 1892 "parser.php7.c"
4984 break;
4985 case 42:
4986 case 54:
4987 case 140:
4988 case 147:
4989 // 377 "parser.php7.lemon"
4990 {
4991 phvolt_ret_zval_list(&vvgotominor.vv186, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186);
4992 vv_destructor(2,&vvmsp[-1].minor);
4993 }
4994 // 1903 "parser.php7.c"
4995 break;
4996 case 44:
4997 // 389 "parser.php7.lemon"
4998 {
4999 phvolt_ret_set_assignment(&vvgotominor.vv186, &vvmsp[-2].minor.vv186, PHVOLT_T_ASSIGN, &vvmsp[0].minor.vv186, status->scanner_state);
5000 vv_destructor(45,&vvmsp[-1].minor);
5001 }
5002 // 1911 "parser.php7.c"
5003 break;
5004 case 45:
5005 // 393 "parser.php7.lemon"
5006 {
5007 phvolt_ret_set_assignment(&vvgotominor.vv186, &vvmsp[-2].minor.vv186, PHVOLT_T_ADD_ASSIGN, &vvmsp[0].minor.vv186, status->scanner_state);
5008 vv_destructor(46,&vvmsp[-1].minor);
5009 }
5010 // 1919 "parser.php7.c"
5011 break;
5012 case 46:
5013 // 397 "parser.php7.lemon"
5014 {
5015 phvolt_ret_set_assignment(&vvgotominor.vv186, &vvmsp[-2].minor.vv186, PHVOLT_T_SUB_ASSIGN, &vvmsp[0].minor.vv186, status->scanner_state);
5016 vv_destructor(47,&vvmsp[-1].minor);
5017 }
5018 // 1927 "parser.php7.c"
5019 break;
5020 case 47:
5021 // 401 "parser.php7.lemon"
5022 {
5023 phvolt_ret_set_assignment(&vvgotominor.vv186, &vvmsp[-2].minor.vv186, PHVOLT_T_MUL_ASSIGN, &vvmsp[0].minor.vv186, status->scanner_state);
5024 vv_destructor(48,&vvmsp[-1].minor);
5025 }
5026 // 1935 "parser.php7.c"
5027 break;
5028 case 48:
5029 // 405 "parser.php7.lemon"
5030 {
5031 phvolt_ret_set_assignment(&vvgotominor.vv186, &vvmsp[-2].minor.vv186, PHVOLT_T_DIV_ASSIGN, &vvmsp[0].minor.vv186, status->scanner_state);
5032 vv_destructor(49,&vvmsp[-1].minor);
5033 }
5034 // 1943 "parser.php7.c"
5035 break;
5036 case 49:
5037 case 73:
5038 case 139:
5039 case 151:
5040 // 409 "parser.php7.lemon"
5041 {
5042 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_IDENTIFIER, vvmsp[0].minor.vv0, status->scanner_state);
5043 }
5044 // 1953 "parser.php7.c"
5045 break;
5046 case 50:
5047 case 133:
5048 // 413 "parser.php7.lemon"
5049 {
5050 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ARRAYACCESS, &vvmsp[-3].minor.vv186, &vvmsp[-1].minor.vv186, NULL, status->scanner_state);
5051 vv_destructor(24,&vvmsp[-2].minor);
5052 vv_destructor(50,&vvmsp[0].minor);
5053 }
5054 // 1963 "parser.php7.c"
5055 break;
5056 case 51:
5057 case 122:
5058 // 417 "parser.php7.lemon"
5059 {
5060 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_DOT, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5061 vv_destructor(30,&vvmsp[-1].minor);
5062 }
5063 // 1972 "parser.php7.c"
5064 break;
5065 case 52:
5066 // 425 "parser.php7.lemon"
5067 {
5068 phvolt_ret_macro_statement(&vvgotominor.vv186, vvmsp[-7].minor.vv0, NULL, &vvmsp[-3].minor.vv186, status->scanner_state);
5069 vv_destructor(1,&vvmsp[-9].minor);
5070 vv_destructor(51,&vvmsp[-8].minor);
5071 vv_destructor(29,&vvmsp[-6].minor);
5072 vv_destructor(52,&vvmsp[-5].minor);
5073 vv_destructor(32,&vvmsp[-4].minor);
5074 vv_destructor(1,&vvmsp[-2].minor);
5075 vv_destructor(53,&vvmsp[-1].minor);
5076 vv_destructor(32,&vvmsp[0].minor);
5077 }
5078 // 1987 "parser.php7.c"
5079 break;
5080 case 53:
5081 // 429 "parser.php7.lemon"
5082 {
5083 phvolt_ret_macro_statement(&vvgotominor.vv186, vvmsp[-8].minor.vv0, &vvmsp[-6].minor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
5084 vv_destructor(1,&vvmsp[-10].minor);
5085 vv_destructor(51,&vvmsp[-9].minor);
5086 vv_destructor(29,&vvmsp[-7].minor);
5087 vv_destructor(52,&vvmsp[-5].minor);
5088 vv_destructor(32,&vvmsp[-4].minor);
5089 vv_destructor(1,&vvmsp[-2].minor);
5090 vv_destructor(53,&vvmsp[-1].minor);
5091 vv_destructor(32,&vvmsp[0].minor);
5092 }
5093 // 2002 "parser.php7.c"
5094 break;
5095 case 56:
5096 // 449 "parser.php7.lemon"
5097 {
5098 phvolt_ret_macro_parameter(&vvgotominor.vv186, vvmsp[0].minor.vv0, NULL, status->scanner_state);
5099 }
5100 // 2009 "parser.php7.c"
5101 break;
5102 case 57:
5103 // 453 "parser.php7.lemon"
5104 {
5105 phvolt_ret_macro_parameter(&vvgotominor.vv186, vvmsp[-2].minor.vv0, &vvmsp[0].minor.vv186, status->scanner_state);
5106 vv_destructor(45,&vvmsp[-1].minor);
5107 }
5108 // 2017 "parser.php7.c"
5109 break;
5110 case 58:
5111 case 72:
5112 case 138:
5113 case 152:
5114 // 457 "parser.php7.lemon"
5115 {
5116 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_INTEGER, vvmsp[0].minor.vv0, status->scanner_state);
5117 }
5118 // 2027 "parser.php7.c"
5119 break;
5120 case 59:
5121 case 153:
5122 // 461 "parser.php7.lemon"
5123 {
5124 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_STRING, vvmsp[0].minor.vv0, status->scanner_state);
5125 }
5126 // 2035 "parser.php7.c"
5127 break;
5128 case 60:
5129 case 154:
5130 // 465 "parser.php7.lemon"
5131 {
5132 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_DOUBLE, vvmsp[0].minor.vv0, status->scanner_state);
5133 }
5134 // 2043 "parser.php7.c"
5135 break;
5136 case 61:
5137 case 155:
5138 // 469 "parser.php7.lemon"
5139 {
5140 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_NULL, NULL, status->scanner_state);
5141 vv_destructor(57,&vvmsp[0].minor);
5142 }
5143 // 2052 "parser.php7.c"
5144 break;
5145 case 62:
5146 case 156:
5147 // 473 "parser.php7.lemon"
5148 {
5149 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_FALSE, NULL, status->scanner_state);
5150 vv_destructor(58,&vvmsp[0].minor);
5151 }
5152 // 2061 "parser.php7.c"
5153 break;
5154 case 63:
5155 case 157:
5156 // 477 "parser.php7.lemon"
5157 {
5158 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_TRUE, NULL, status->scanner_state);
5159 vv_destructor(59,&vvmsp[0].minor);
5160 }
5161 // 2070 "parser.php7.c"
5162 break;
5163 case 64:
5164 // 485 "parser.php7.lemon"
5165 {
5166 phvolt_ret_macro_call_statement(&vvgotominor.vv186, &vvmsp[-8].minor.vv186, &vvmsp[-6].minor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
5167 vv_destructor(1,&vvmsp[-10].minor);
5168 vv_destructor(60,&vvmsp[-9].minor);
5169 vv_destructor(29,&vvmsp[-7].minor);
5170 vv_destructor(52,&vvmsp[-5].minor);
5171 vv_destructor(32,&vvmsp[-4].minor);
5172 vv_destructor(1,&vvmsp[-2].minor);
5173 vv_destructor(61,&vvmsp[-1].minor);
5174 vv_destructor(32,&vvmsp[0].minor);
5175 }
5176 // 2085 "parser.php7.c"
5177 break;
5178 case 65:
5179 // 489 "parser.php7.lemon"
5180 {
5181 phvolt_ret_macro_call_statement(&vvgotominor.vv186, &vvmsp[-6].minor.vv186, NULL, NULL, status->scanner_state);
5182 vv_destructor(1,&vvmsp[-8].minor);
5183 vv_destructor(60,&vvmsp[-7].minor);
5184 vv_destructor(29,&vvmsp[-5].minor);
5185 vv_destructor(52,&vvmsp[-4].minor);
5186 vv_destructor(32,&vvmsp[-3].minor);
5187 vv_destructor(1,&vvmsp[-2].minor);
5188 vv_destructor(61,&vvmsp[-1].minor);
5189 vv_destructor(32,&vvmsp[0].minor);
5190 }
5191 // 2100 "parser.php7.c"
5192 break;
5193 case 66:
5194 // 497 "parser.php7.lemon"
5195 {
5196 phvolt_ret_empty_statement(&vvgotominor.vv186, status->scanner_state);
5197 vv_destructor(1,&vvmsp[-1].minor);
5198 vv_destructor(32,&vvmsp[0].minor);
5199 }
5200 // 2109 "parser.php7.c"
5201 break;
5202 case 67:
5203 // 505 "parser.php7.lemon"
5204 {
5205 phvolt_ret_echo_statement(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
5206 vv_destructor(62,&vvmsp[-2].minor);
5207 vv_destructor(63,&vvmsp[0].minor);
5208 }
5209 // 2118 "parser.php7.c"
5210 break;
5211 case 68:
5212 // 513 "parser.php7.lemon"
5213 {
5214 phvolt_ret_block_statement(&vvgotominor.vv186, vvmsp[-5].minor.vv0, &vvmsp[-3].minor.vv186, status->scanner_state);
5215 vv_destructor(1,&vvmsp[-7].minor);
5216 vv_destructor(64,&vvmsp[-6].minor);
5217 vv_destructor(32,&vvmsp[-4].minor);
5218 vv_destructor(1,&vvmsp[-2].minor);
5219 vv_destructor(65,&vvmsp[-1].minor);
5220 vv_destructor(32,&vvmsp[0].minor);
5221 }
5222 // 2131 "parser.php7.c"
5223 break;
5224 case 69:
5225 // 517 "parser.php7.lemon"
5226 {
5227 phvolt_ret_block_statement(&vvgotominor.vv186, vvmsp[-4].minor.vv0, NULL, status->scanner_state);
5228 vv_destructor(1,&vvmsp[-6].minor);
5229 vv_destructor(64,&vvmsp[-5].minor);
5230 vv_destructor(32,&vvmsp[-3].minor);
5231 vv_destructor(1,&vvmsp[-2].minor);
5232 vv_destructor(65,&vvmsp[-1].minor);
5233 vv_destructor(32,&vvmsp[0].minor);
5234 }
5235 // 2144 "parser.php7.c"
5236 break;
5237 case 70:
5238 // 525 "parser.php7.lemon"
5239 {
5240 phvolt_ret_cache_statement(&vvgotominor.vv186, &vvmsp[-5].minor.vv186, NULL, &vvmsp[-3].minor.vv186, status->scanner_state);
5241 vv_destructor(1,&vvmsp[-7].minor);
5242 vv_destructor(66,&vvmsp[-6].minor);
5243 vv_destructor(32,&vvmsp[-4].minor);
5244 vv_destructor(1,&vvmsp[-2].minor);
5245 vv_destructor(67,&vvmsp[-1].minor);
5246 vv_destructor(32,&vvmsp[0].minor);
5247 }
5248 // 2157 "parser.php7.c"
5249 break;
5250 case 71:
5251 // 529 "parser.php7.lemon"
5252 {
5253 phvolt_ret_cache_statement(&vvgotominor.vv186, &vvmsp[-6].minor.vv186, &vvmsp[-5].minor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
5254 vv_destructor(1,&vvmsp[-8].minor);
5255 vv_destructor(66,&vvmsp[-7].minor);
5256 vv_destructor(32,&vvmsp[-4].minor);
5257 vv_destructor(1,&vvmsp[-2].minor);
5258 vv_destructor(67,&vvmsp[-1].minor);
5259 vv_destructor(32,&vvmsp[0].minor);
5260 }
5261 // 2170 "parser.php7.c"
5262 break;
5263 case 74:
5264 // 549 "parser.php7.lemon"
5265 {
5266 phvolt_ret_raw_statement(&vvgotominor.vv186, &vvmsp[-3].minor.vv186, status->scanner_state);
5267 vv_destructor(1,&vvmsp[-6].minor);
5268 vv_destructor(68,&vvmsp[-5].minor);
5269 vv_destructor(32,&vvmsp[-4].minor);
5270 vv_destructor(1,&vvmsp[-2].minor);
5271 vv_destructor(69,&vvmsp[-1].minor);
5272 vv_destructor(32,&vvmsp[0].minor);
5273 }
5274 // 2183 "parser.php7.c"
5275 break;
5276 case 75:
5277 // 557 "parser.php7.lemon"
5278 {
5279 phvolt_ret_extends_statement(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
5280 vv_destructor(1,&vvmsp[-3].minor);
5281 vv_destructor(70,&vvmsp[-2].minor);
5282 vv_destructor(32,&vvmsp[0].minor);
5283 }
5284 // 2193 "parser.php7.c"
5285 break;
5286 case 76:
5287 // 565 "parser.php7.lemon"
5288 {
5289 phvolt_ret_include_statement(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, NULL, status->scanner_state);
5290 vv_destructor(1,&vvmsp[-3].minor);
5291 vv_destructor(71,&vvmsp[-2].minor);
5292 vv_destructor(32,&vvmsp[0].minor);
5293 }
5294 // 2203 "parser.php7.c"
5295 break;
5296 case 77:
5297 // 569 "parser.php7.lemon"
5298 {
5299 phvolt_ret_include_statement(&vvgotominor.vv186, &vvmsp[-3].minor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
5300 vv_destructor(1,&vvmsp[-5].minor);
5301 vv_destructor(71,&vvmsp[-4].minor);
5302 vv_destructor(72,&vvmsp[-2].minor);
5303 vv_destructor(32,&vvmsp[0].minor);
5304 }
5305 // 2214 "parser.php7.c"
5306 break;
5307 case 78:
5308 // 577 "parser.php7.lemon"
5309 {
5310 phvolt_ret_do_statement(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
5311 vv_destructor(1,&vvmsp[-3].minor);
5312 vv_destructor(73,&vvmsp[-2].minor);
5313 vv_destructor(32,&vvmsp[0].minor);
5314 }
5315 // 2224 "parser.php7.c"
5316 break;
5317 case 79:
5318 // 585 "parser.php7.lemon"
5319 {
5320 phvolt_ret_return_statement(&vvgotominor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
5321 vv_destructor(1,&vvmsp[-3].minor);
5322 vv_destructor(74,&vvmsp[-2].minor);
5323 vv_destructor(32,&vvmsp[0].minor);
5324 }
5325 // 2234 "parser.php7.c"
5326 break;
5327 case 80:
5328 // 593 "parser.php7.lemon"
5329 {
5330 phvolt_ret_autoescape_statement(&vvgotominor.vv186, 0, &vvmsp[-3].minor.vv186, status->scanner_state);
5331 vv_destructor(1,&vvmsp[-7].minor);
5332 vv_destructor(75,&vvmsp[-6].minor);
5333 vv_destructor(58,&vvmsp[-5].minor);
5334 vv_destructor(32,&vvmsp[-4].minor);
5335 vv_destructor(1,&vvmsp[-2].minor);
5336 vv_destructor(76,&vvmsp[-1].minor);
5337 vv_destructor(32,&vvmsp[0].minor);
5338 }
5339 // 2248 "parser.php7.c"
5340 break;
5341 case 81:
5342 // 597 "parser.php7.lemon"
5343 {
5344 phvolt_ret_autoescape_statement(&vvgotominor.vv186, 1, &vvmsp[-3].minor.vv186, status->scanner_state);
5345 vv_destructor(1,&vvmsp[-7].minor);
5346 vv_destructor(75,&vvmsp[-6].minor);
5347 vv_destructor(59,&vvmsp[-5].minor);
5348 vv_destructor(32,&vvmsp[-4].minor);
5349 vv_destructor(1,&vvmsp[-2].minor);
5350 vv_destructor(76,&vvmsp[-1].minor);
5351 vv_destructor(32,&vvmsp[0].minor);
5352 }
5353 // 2262 "parser.php7.c"
5354 break;
5355 case 82:
5356 // 605 "parser.php7.lemon"
5357 {
5358 phvolt_ret_break_statement(&vvgotominor.vv186, status->scanner_state);
5359 vv_destructor(1,&vvmsp[-2].minor);
5360 vv_destructor(77,&vvmsp[-1].minor);
5361 vv_destructor(32,&vvmsp[0].minor);
5362 }
5363 // 2272 "parser.php7.c"
5364 break;
5365 case 83:
5366 // 613 "parser.php7.lemon"
5367 {
5368 phvolt_ret_continue_statement(&vvgotominor.vv186, status->scanner_state);
5369 vv_destructor(1,&vvmsp[-2].minor);
5370 vv_destructor(78,&vvmsp[-1].minor);
5371 vv_destructor(32,&vvmsp[0].minor);
5372 }
5373 // 2282 "parser.php7.c"
5374 break;
5375 case 84:
5376 // 621 "parser.php7.lemon"
5377 {
5378 phvolt_ret_literal_zval(&vvgotominor.vv186, PHVOLT_T_RAW_FRAGMENT, vvmsp[0].minor.vv0, status->scanner_state);
5379 }
5380 // 2289 "parser.php7.c"
5381 break;
5382 case 85:
5383 // 629 "parser.php7.lemon"
5384 {
5385 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_MINUS, NULL, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5386 vv_destructor(22,&vvmsp[-1].minor);
5387 }
5388 // 2297 "parser.php7.c"
5389 break;
5390 case 86:
5391 // 633 "parser.php7.lemon"
5392 {
5393 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_PLUS, NULL, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5394 vv_destructor(21,&vvmsp[-1].minor);
5395 }
5396 // 2305 "parser.php7.c"
5397 break;
5398 case 87:
5399 // 637 "parser.php7.lemon"
5400 {
5401 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_SUB, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5402 vv_destructor(22,&vvmsp[-1].minor);
5403 }
5404 // 2313 "parser.php7.c"
5405 break;
5406 case 88:
5407 // 641 "parser.php7.lemon"
5408 {
5409 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ADD, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5410 vv_destructor(21,&vvmsp[-1].minor);
5411 }
5412 // 2321 "parser.php7.c"
5413 break;
5414 case 89:
5415 // 645 "parser.php7.lemon"
5416 {
5417 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_MUL, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5418 vv_destructor(19,&vvmsp[-1].minor);
5419 }
5420 // 2329 "parser.php7.c"
5421 break;
5422 case 90:
5423 // 649 "parser.php7.lemon"
5424 {
5425 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_POW, &vvmsp[-3].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5426 vv_destructor(19,&vvmsp[-2].minor);
5427 vv_destructor(19,&vvmsp[-1].minor);
5428 }
5429 // 2338 "parser.php7.c"
5430 break;
5431 case 91:
5432 // 653 "parser.php7.lemon"
5433 {
5434 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_DIV, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5435 vv_destructor(18,&vvmsp[-1].minor);
5436 }
5437 // 2346 "parser.php7.c"
5438 break;
5439 case 92:
5440 // 657 "parser.php7.lemon"
5441 {
5442 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_MOD, &vvmsp[-3].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5443 vv_destructor(18,&vvmsp[-2].minor);
5444 vv_destructor(18,&vvmsp[-1].minor);
5445 }
5446 // 2355 "parser.php7.c"
5447 break;
5448 case 93:
5449 // 661 "parser.php7.lemon"
5450 {
5451 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_MOD, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5452 vv_destructor(20,&vvmsp[-1].minor);
5453 }
5454 // 2363 "parser.php7.c"
5455 break;
5456 case 94:
5457 // 665 "parser.php7.lemon"
5458 {
5459 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_AND, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5460 vv_destructor(7,&vvmsp[-1].minor);
5461 }
5462 // 2371 "parser.php7.c"
5463 break;
5464 case 95:
5465 // 669 "parser.php7.lemon"
5466 {
5467 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_OR, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5468 vv_destructor(8,&vvmsp[-1].minor);
5469 }
5470 // 2379 "parser.php7.c"
5471 break;
5472 case 96:
5473 // 673 "parser.php7.lemon"
5474 {
5475 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_CONCAT, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5476 vv_destructor(23,&vvmsp[-1].minor);
5477 }
5478 // 2387 "parser.php7.c"
5479 break;
5480 case 97:
5481 // 677 "parser.php7.lemon"
5482 {
5483 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_PIPE, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5484 vv_destructor(25,&vvmsp[-1].minor);
5485 }
5486 // 2395 "parser.php7.c"
5487 break;
5488 case 98:
5489 // 681 "parser.php7.lemon"
5490 {
5491 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_RANGE, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5492 vv_destructor(6,&vvmsp[-1].minor);
5493 }
5494 // 2403 "parser.php7.c"
5495 break;
5496 case 99:
5497 // 685 "parser.php7.lemon"
5498 {
5499 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_EQUALS, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5500 vv_destructor(10,&vvmsp[-1].minor);
5501 }
5502 // 2411 "parser.php7.c"
5503 break;
5504 case 100:
5505 // 689 "parser.php7.lemon"
5506 {
5507 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_ISSET, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5508 vv_destructor(11,&vvmsp[-1].minor);
5509 vv_destructor(80,&vvmsp[0].minor);
5510 }
5511 // 2420 "parser.php7.c"
5512 break;
5513 case 101:
5514 // 693 "parser.php7.lemon"
5515 {
5516 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ISSET, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5517 vv_destructor(9,&vvmsp[-1].minor);
5518 vv_destructor(80,&vvmsp[0].minor);
5519 }
5520 // 2429 "parser.php7.c"
5521 break;
5522 case 102:
5523 // 697 "parser.php7.lemon"
5524 {
5525 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_ISEMPTY, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5526 vv_destructor(11,&vvmsp[-1].minor);
5527 vv_destructor(81,&vvmsp[0].minor);
5528 }
5529 // 2438 "parser.php7.c"
5530 break;
5531 case 103:
5532 // 701 "parser.php7.lemon"
5533 {
5534 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ISEMPTY, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5535 vv_destructor(9,&vvmsp[-1].minor);
5536 vv_destructor(81,&vvmsp[0].minor);
5537 }
5538 // 2447 "parser.php7.c"
5539 break;
5540 case 104:
5541 // 705 "parser.php7.lemon"
5542 {
5543 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_ISEVEN, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5544 vv_destructor(11,&vvmsp[-1].minor);
5545 vv_destructor(82,&vvmsp[0].minor);
5546 }
5547 // 2456 "parser.php7.c"
5548 break;
5549 case 105:
5550 // 709 "parser.php7.lemon"
5551 {
5552 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ISEVEN, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5553 vv_destructor(9,&vvmsp[-1].minor);
5554 vv_destructor(82,&vvmsp[0].minor);
5555 }
5556 // 2465 "parser.php7.c"
5557 break;
5558 case 106:
5559 // 713 "parser.php7.lemon"
5560 {
5561 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_ISODD, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5562 vv_destructor(11,&vvmsp[-1].minor);
5563 vv_destructor(83,&vvmsp[0].minor);
5564 }
5565 // 2474 "parser.php7.c"
5566 break;
5567 case 107:
5568 // 717 "parser.php7.lemon"
5569 {
5570 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ISODD, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5571 vv_destructor(9,&vvmsp[-1].minor);
5572 vv_destructor(83,&vvmsp[0].minor);
5573 }
5574 // 2483 "parser.php7.c"
5575 break;
5576 case 108:
5577 // 721 "parser.php7.lemon"
5578 {
5579 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_ISNUMERIC, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5580 vv_destructor(11,&vvmsp[-1].minor);
5581 vv_destructor(84,&vvmsp[0].minor);
5582 }
5583 // 2492 "parser.php7.c"
5584 break;
5585 case 109:
5586 // 725 "parser.php7.lemon"
5587 {
5588 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ISNUMERIC, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5589 vv_destructor(9,&vvmsp[-1].minor);
5590 vv_destructor(84,&vvmsp[0].minor);
5591 }
5592 // 2501 "parser.php7.c"
5593 break;
5594 case 110:
5595 // 729 "parser.php7.lemon"
5596 {
5597 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_ISSCALAR, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5598 vv_destructor(11,&vvmsp[-1].minor);
5599 vv_destructor(85,&vvmsp[0].minor);
5600 }
5601 // 2510 "parser.php7.c"
5602 break;
5603 case 111:
5604 // 733 "parser.php7.lemon"
5605 {
5606 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ISSCALAR, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5607 vv_destructor(9,&vvmsp[-1].minor);
5608 vv_destructor(85,&vvmsp[0].minor);
5609 }
5610 // 2519 "parser.php7.c"
5611 break;
5612 case 112:
5613 // 737 "parser.php7.lemon"
5614 {
5615 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_ISITERABLE, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5616 vv_destructor(11,&vvmsp[-1].minor);
5617 vv_destructor(86,&vvmsp[0].minor);
5618 }
5619 // 2528 "parser.php7.c"
5620 break;
5621 case 113:
5622 // 741 "parser.php7.lemon"
5623 {
5624 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ISITERABLE, &vvmsp[-2].minor.vv186, NULL, NULL, status->scanner_state);
5625 vv_destructor(9,&vvmsp[-1].minor);
5626 vv_destructor(86,&vvmsp[0].minor);
5627 }
5628 // 2537 "parser.php7.c"
5629 break;
5630 case 114:
5631 // 745 "parser.php7.lemon"
5632 {
5633 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_IS, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5634 vv_destructor(9,&vvmsp[-1].minor);
5635 }
5636 // 2545 "parser.php7.c"
5637 break;
5638 case 115:
5639 // 749 "parser.php7.lemon"
5640 {
5641 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOTEQUALS, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5642 vv_destructor(11,&vvmsp[-1].minor);
5643 }
5644 // 2553 "parser.php7.c"
5645 break;
5646 case 116:
5647 // 753 "parser.php7.lemon"
5648 {
5649 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_IDENTICAL, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5650 vv_destructor(16,&vvmsp[-1].minor);
5651 }
5652 // 2561 "parser.php7.c"
5653 break;
5654 case 117:
5655 // 757 "parser.php7.lemon"
5656 {
5657 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOTIDENTICAL, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5658 vv_destructor(17,&vvmsp[-1].minor);
5659 }
5660 // 2569 "parser.php7.c"
5661 break;
5662 case 118:
5663 // 761 "parser.php7.lemon"
5664 {
5665 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_LESS, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5666 vv_destructor(12,&vvmsp[-1].minor);
5667 }
5668 // 2577 "parser.php7.c"
5669 break;
5670 case 119:
5671 // 765 "parser.php7.lemon"
5672 {
5673 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_GREATER, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5674 vv_destructor(13,&vvmsp[-1].minor);
5675 }
5676 // 2585 "parser.php7.c"
5677 break;
5678 case 120:
5679 // 769 "parser.php7.lemon"
5680 {
5681 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_GREATEREQUAL, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5682 vv_destructor(14,&vvmsp[-1].minor);
5683 }
5684 // 2593 "parser.php7.c"
5685 break;
5686 case 121:
5687 // 773 "parser.php7.lemon"
5688 {
5689 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_LESSEQUAL, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5690 vv_destructor(15,&vvmsp[-1].minor);
5691 }
5692 // 2601 "parser.php7.c"
5693 break;
5694 case 123:
5695 // 781 "parser.php7.lemon"
5696 {
5697 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_IN, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5698 vv_destructor(3,&vvmsp[-1].minor);
5699 }
5700 // 2609 "parser.php7.c"
5701 break;
5702 case 124:
5703 // 785 "parser.php7.lemon"
5704 {
5705 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT_IN, &vvmsp[-3].minor.vv186, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5706 vv_destructor(26,&vvmsp[-2].minor);
5707 vv_destructor(3,&vvmsp[-1].minor);
5708 }
5709 // 2618 "parser.php7.c"
5710 break;
5711 case 125:
5712 // 789 "parser.php7.lemon"
5713 {
5714 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_NOT, NULL, &vvmsp[0].minor.vv186, NULL, status->scanner_state);
5715 vv_destructor(26,&vvmsp[-1].minor);
5716 }
5717 // 2626 "parser.php7.c"
5718 break;
5719 case 126:
5720 // 793 "parser.php7.lemon"
5721 {
5722 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_INCR, &vvmsp[-1].minor.vv186, NULL, NULL, status->scanner_state);
5723 vv_destructor(27,&vvmsp[0].minor);
5724 }
5725 // 2634 "parser.php7.c"
5726 break;
5727 case 127:
5728 // 797 "parser.php7.lemon"
5729 {
5730 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_DECR, &vvmsp[-1].minor.vv186, NULL, NULL, status->scanner_state);
5731 vv_destructor(28,&vvmsp[0].minor);
5732 }
5733 // 2642 "parser.php7.c"
5734 break;
5735 case 128:
5736 // 801 "parser.php7.lemon"
5737 {
5738 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ENCLOSED, &vvmsp[-1].minor.vv186, NULL, NULL, status->scanner_state);
5739 vv_destructor(29,&vvmsp[-2].minor);
5740 vv_destructor(52,&vvmsp[0].minor);
5741 }
5742 // 2651 "parser.php7.c"
5743 break;
5744 case 129:
5745 // 805 "parser.php7.lemon"
5746 {
5747 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ARRAY, NULL, NULL, NULL, status->scanner_state);
5748 vv_destructor(24,&vvmsp[-1].minor);
5749 vv_destructor(50,&vvmsp[0].minor);
5750 }
5751 // 2660 "parser.php7.c"
5752 break;
5753 case 130:
5754 // 809 "parser.php7.lemon"
5755 {
5756 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ARRAY, &vvmsp[-1].minor.vv186, NULL, NULL, status->scanner_state);
5757 vv_destructor(24,&vvmsp[-2].minor);
5758 vv_destructor(50,&vvmsp[0].minor);
5759 }
5760 // 2669 "parser.php7.c"
5761 break;
5762 case 131:
5763 // 813 "parser.php7.lemon"
5764 {
5765 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ARRAY, NULL, NULL, NULL, status->scanner_state);
5766 vv_destructor(87,&vvmsp[-1].minor);
5767 vv_destructor(88,&vvmsp[0].minor);
5768 }
5769 // 2678 "parser.php7.c"
5770 break;
5771 case 132:
5772 // 817 "parser.php7.lemon"
5773 {
5774 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_ARRAY, &vvmsp[-1].minor.vv186, NULL, NULL, status->scanner_state);
5775 vv_destructor(87,&vvmsp[-2].minor);
5776 vv_destructor(88,&vvmsp[0].minor);
5777 }
5778 // 2687 "parser.php7.c"
5779 break;
5780 case 134:
5781 // 825 "parser.php7.lemon"
5782 {
5783 phvolt_ret_expr(&vvgotominor.vv186, PHVOLT_T_TERNARY, &vvmsp[-2].minor.vv186, &vvmsp[0].minor.vv186, &vvmsp[-4].minor.vv186, status->scanner_state);
5784 vv_destructor(4,&vvmsp[-3].minor);
5785 vv_destructor(5,&vvmsp[-1].minor);
5786 }
5787 // 2696 "parser.php7.c"
5788 break;
5789 case 135:
5790 // 829 "parser.php7.lemon"
5791 {
5792 phvolt_ret_slice(&vvgotominor.vv186, &vvmsp[-4].minor.vv186, NULL, &vvmsp[-1].minor.vv186, status->scanner_state);
5793 vv_destructor(24,&vvmsp[-3].minor);
5794 vv_destructor(5,&vvmsp[-2].minor);
5795 vv_destructor(50,&vvmsp[0].minor);
5796 }
5797 // 2706 "parser.php7.c"
5798 break;
5799 case 136:
5800 // 833 "parser.php7.lemon"
5801 {
5802 phvolt_ret_slice(&vvgotominor.vv186, &vvmsp[-4].minor.vv186, &vvmsp[-2].minor.vv186, NULL, status->scanner_state);
5803 vv_destructor(24,&vvmsp[-3].minor);
5804 vv_destructor(5,&vvmsp[-1].minor);
5805 vv_destructor(50,&vvmsp[0].minor);
5806 }
5807 // 2716 "parser.php7.c"
5808 break;
5809 case 137:
5810 // 837 "parser.php7.lemon"
5811 {
5812 phvolt_ret_slice(&vvgotominor.vv186, &vvmsp[-5].minor.vv186, &vvmsp[-3].minor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
5813 vv_destructor(24,&vvmsp[-4].minor);
5814 vv_destructor(5,&vvmsp[-2].minor);
5815 vv_destructor(50,&vvmsp[0].minor);
5816 }
5817 // 2726 "parser.php7.c"
5818 break;
5819 case 142:
5820 case 150:
5821 // 869 "parser.php7.lemon"
5822 {
5823 phvolt_ret_named_item(&vvgotominor.vv186, vvmsp[-2].minor.vv0, &vvmsp[0].minor.vv186, status->scanner_state);
5824 vv_destructor(5,&vvmsp[-1].minor);
5825 }
5826 // 2735 "parser.php7.c"
5827 break;
5828 case 143:
5829 case 149:
5830 // 873 "parser.php7.lemon"
5831 {
5832 phvolt_ret_named_item(&vvgotominor.vv186, NULL, &vvmsp[0].minor.vv186, status->scanner_state);
5833 }
5834 // 2743 "parser.php7.c"
5835 break;
5836 case 145:
5837 // 885 "parser.php7.lemon"
5838 {
5839 phvolt_ret_func_call(&vvgotominor.vv186, &vvmsp[-3].minor.vv186, &vvmsp[-1].minor.vv186, status->scanner_state);
5840 vv_destructor(29,&vvmsp[-2].minor);
5841 vv_destructor(52,&vvmsp[0].minor);
5842 }
5843 // 2752 "parser.php7.c"
5844 break;
5845 case 146:
5846 // 889 "parser.php7.lemon"
5847 {
5848 phvolt_ret_func_call(&vvgotominor.vv186, &vvmsp[-2].minor.vv186, NULL, status->scanner_state);
5849 vv_destructor(29,&vvmsp[-1].minor);
5850 vv_destructor(52,&vvmsp[0].minor);
5851 }
5852 // 2761 "parser.php7.c"
5853 break;
5854 };
5855 vvgoto = vvRuleInfo[vvruleno].lhs;
5856 vvsize = vvRuleInfo[vvruleno].nrhs;
5857 vvpParser->vvidx -= vvsize;
5858 vvact = vv_find_reduce_action(vvpParser,vvgoto);
5859 if( vvact < VVNSTATE ){
5860 vv_shift(vvpParser,vvact,vvgoto,&vvgotominor);
5861 }else if( vvact == VVNSTATE + VVNRULE + 1 ){
5862 vv_accept(vvpParser);
5863 }
5864 }
5865
5866 /*
5867 ** The following code executes when the parse fails
5868 */
vv_parse_failed(vvParser * vvpParser)5869 static void vv_parse_failed(
5870 vvParser *vvpParser /* The parser */
5871 ){
5872 phvolt_ARG_FETCH;
5873 #ifndef NDEBUG
5874 if( vvTraceFILE ){
5875 fprintf(vvTraceFILE,"%sFail!\n",vvTracePrompt);
5876 }
5877 #endif
5878 while( vvpParser->vvidx>=0 ) vv_pop_parser_stack(vvpParser);
5879 /* Here code is inserted which will be executed whenever the
5880 ** parser fails */
5881 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument variable */
5882 }
5883
5884 /*
5885 ** The following code executes when a syntax error first occurs.
5886 */
vv_syntax_error(vvParser * vvpParser,int vvmajor,VVMINORTYPE vvminor)5887 static void vv_syntax_error(
5888 vvParser *vvpParser, /* The parser */
5889 int vvmajor, /* The major type of the error token */
5890 VVMINORTYPE vvminor /* The minor type of the error token */
5891 ){
5892 phvolt_ARG_FETCH;
5893 #define VTOKEN (vvminor.vv0)
5894 // 46 "parser.php7.lemon"
5895
5896 {
5897
5898 smart_str error_str = {0};
5899
5900 char *token_name = NULL;
5901 const phvolt_token_names *tokens = phvolt_tokens;
5902 int token_len = 0;
5903 int active_token = status->scanner_state->active_token;
5904
5905 if (status->scanner_state->start_length) {
5906
5907 if (active_token) {
5908
5909 do {
5910 if (tokens->code == active_token) {
5911 token_name = tokens->name;
5912 token_len = tokens->len;
5913 break;
5914 }
5915 ++tokens;
5916 } while (tokens[0].code != 0);
5917
5918 }
5919
5920 smart_str_appendl(&error_str, "Syntax error, unexpected token ", sizeof("Syntax error, unexpected token ") - 1);
5921 if (!token_name) {
5922 smart_str_appendl(&error_str, "UNKNOWN", sizeof("UNKNOWN") - 1);
5923 } else {
5924 smart_str_appendl(&error_str, token_name, token_len);
5925 }
5926
5927 if (status->token->value) {
5928 smart_str_appendc(&error_str, '(');
5929 smart_str_appendl(&error_str, status->token->value, status->token->len);
5930 smart_str_appendc(&error_str, ')');
5931 }
5932
5933 smart_str_appendl(&error_str, " in ", sizeof(" in ") - 1);
5934 smart_str_appendl(&error_str, Z_STRVAL_P(status->scanner_state->active_file), Z_STRLEN_P(status->scanner_state->active_file));
5935 smart_str_appendl(&error_str, " on line ", sizeof(" on line ") - 1);
5936
5937 {
5938 char stmp[MAX_LENGTH_OF_LONG + 1];
5939 int str_len;
5940 str_len = slprintf(stmp, sizeof(stmp), "%ld", status->scanner_state->active_line);
5941 smart_str_appendl(&error_str, stmp, str_len);
5942 }
5943
5944 } else {
5945
5946 smart_str_appendl(&error_str, "Syntax error, unexpected EOF in ", sizeof("Syntax error, unexpected EOF in ") - 1);
5947 smart_str_appendl(&error_str, Z_STRVAL_P(status->scanner_state->active_file), Z_STRLEN_P(status->scanner_state->active_file));
5948
5949 /* Report unclosed 'if' blocks */
5950 if ((status->scanner_state->if_level + status->scanner_state->old_if_level) > 0) {
5951 if ((status->scanner_state->if_level + status->scanner_state->old_if_level) == 1) {
5952 smart_str_appendl(&error_str, ", there is one 'if' block without close", sizeof(", there is one 'if' block without close") - 1);
5953 } else {
5954 smart_str_appendl(&error_str, ", there are ", sizeof(", there are ") - 1);
5955 {
5956 char stmp[MAX_LENGTH_OF_LONG + 1];
5957 int str_len;
5958 str_len = slprintf(stmp, sizeof(stmp), "%ld", status->scanner_state->if_level + status->scanner_state->old_if_level);
5959 smart_str_appendl(&error_str, stmp, str_len);
5960 }
5961 smart_str_appendl(&error_str, " 'if' blocks without close", sizeof(" 'if' blocks without close") - 1);
5962 }
5963 }
5964
5965 /* Report unclosed 'for' blocks */
5966 if (status->scanner_state->for_level > 0) {
5967 if (status->scanner_state->for_level == 1) {
5968 smart_str_appendl(&error_str, ", there is one 'for' block without close", sizeof(", there is one 'for' block without close") - 1);
5969 } else {
5970 smart_str_appendl(&error_str, ", there are ", sizeof(", there are ") - 1);
5971 {
5972 char stmp[MAX_LENGTH_OF_LONG + 1];
5973 int str_len;
5974 str_len = slprintf(stmp, sizeof(stmp), "%ld", status->scanner_state->if_level);
5975 smart_str_appendl(&error_str, stmp, str_len);
5976 }
5977 smart_str_appendl(&error_str, " 'for' blocks without close", sizeof(" 'for' blocks without close") - 1);
5978 }
5979 }
5980
5981 /* Report unclosed 'switch' blocks */
5982 if (status->scanner_state->switch_level > 0) {
5983 smart_str_appendl(&error_str, ", there is a 'switch' block without 'endswitch'", sizeof(", there is a 'switch' block without 'endswitch'") - 1);
5984 }
5985 }
5986
5987 smart_str_0(&error_str);
5988
5989 if (error_str.s) {
5990 status->syntax_error = estrndup(ZSTR_VAL(error_str.s), ZSTR_LEN(error_str.s));
5991 status->syntax_error_len = ZSTR_LEN(error_str.s);
5992 } else {
5993 status->syntax_error = NULL;
5994 }
5995 }
5996
5997 status->status = PHVOLT_PARSING_FAILED;
5998
5999 // 2908 "parser.php7.c"
6000 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument variable */
6001 }
6002
6003 /*
6004 ** The following is executed when the parser accepts
6005 */
vv_accept(vvParser * vvpParser)6006 static void vv_accept(
6007 vvParser *vvpParser /* The parser */
6008 ){
6009 phvolt_ARG_FETCH;
6010 #ifndef NDEBUG
6011 if( vvTraceFILE ){
6012 fprintf(vvTraceFILE,"%sAccept!\n",vvTracePrompt);
6013 }
6014 #endif
6015 while( vvpParser->vvidx>=0 ) vv_pop_parser_stack(vvpParser);
6016 /* Here code is inserted which will be executed whenever the
6017 ** parser accepts */
6018 phvolt_ARG_STORE; /* Suppress warning about unused %extra_argument variable */
6019 }
6020
6021 /* The main parser program.
6022 ** The first argument is a pointer to a structure obtained from
6023 ** "phvolt_Alloc" which describes the current state of the parser.
6024 ** The second argument is the major token number. The third is
6025 ** the minor token. The fourth optional argument is whatever the
6026 ** user wants (and specified in the grammar) and is available for
6027 ** use by the action routines.
6028 **
6029 ** Inputs:
6030 ** <ul>
6031 ** <li> A pointer to the parser (an opaque structure.)
6032 ** <li> The major token number.
6033 ** <li> The minor token number.
6034 ** <li> An option argument of a grammar-specified type.
6035 ** </ul>
6036 **
6037 ** Outputs:
6038 ** None.
6039 */
phvolt_(void * vvp,int vvmajor,phvolt_TOKENTYPE vvminor phvolt_ARG_PDECL)6040 void phvolt_(
6041 void *vvp, /* The parser */
6042 int vvmajor, /* The major token code number */
6043 phvolt_TOKENTYPE vvminor /* The value for the token */
6044 phvolt_ARG_PDECL /* Optional %extra_argument parameter */
6045 ){
6046 VVMINORTYPE vvminorunion;
6047 int vvact; /* The parser action. */
6048 int vvendofinput; /* True if we are at the end of input */
6049 int vverrorhit = 0; /* True if vvmajor has invoked an error */
6050 vvParser *vvpParser; /* The parser */
6051
6052 /* (re)initialize the parser, if necessary */
6053 vvpParser = (vvParser*)vvp;
6054 if( vvpParser->vvidx<0 ){
6055 if( vvmajor==0 ) return;
6056 vvpParser->vvidx = 0;
6057 vvpParser->vverrcnt = -1;
6058 vvpParser->vvstack[0].stateno = 0;
6059 vvpParser->vvstack[0].major = 0;
6060 }
6061 vvminorunion.vv0 = vvminor;
6062 vvendofinput = (vvmajor==0);
6063 phvolt_ARG_STORE;
6064
6065 #ifndef NDEBUG
6066 if( vvTraceFILE ){
6067 fprintf(vvTraceFILE,"%sInput %s\n",vvTracePrompt,vvTokenName[vvmajor]);
6068 }
6069 #endif
6070
6071 do{
6072 vvact = vv_find_shift_action(vvpParser,vvmajor);
6073 if( vvact<VVNSTATE ){
6074 vv_shift(vvpParser,vvact,vvmajor,&vvminorunion);
6075 vvpParser->vverrcnt--;
6076 if( vvendofinput && vvpParser->vvidx>=0 ){
6077 vvmajor = 0;
6078 }else{
6079 vvmajor = VVNOCODE;
6080 }
6081 }else if( vvact < VVNSTATE + VVNRULE ){
6082 vv_reduce(vvpParser,vvact-VVNSTATE);
6083 }else if( vvact == VV_ERROR_ACTION ){
6084 int vvmx;
6085 #ifndef NDEBUG
6086 if( vvTraceFILE ){
6087 fprintf(vvTraceFILE,"%sSyntax Error!\n",vvTracePrompt);
6088 }
6089 #endif
6090 #ifdef VVERRORSYMBOL
6091 /* A syntax error has occurred.
6092 ** The response to an error depends upon whether or not the
6093 ** grammar defines an error token "ERROR".
6094 **
6095 ** This is what we do if the grammar does define ERROR:
6096 **
6097 ** * Call the %syntax_error function.
6098 **
6099 ** * Begin popping the stack until we enter a state where
6100 ** it is legal to shift the error symbol, then shift
6101 ** the error symbol.
6102 **
6103 ** * Set the error count to three.
6104 **
6105 ** * Begin accepting and shifting new tokens. No new error
6106 ** processing will occur until three tokens have been
6107 ** shifted successfully.
6108 **
6109 */
6110 if( vvpParser->vverrcnt<0 ){
6111 vv_syntax_error(vvpParser,vvmajor,vvminorunion);
6112 }
6113 vvmx = vvpParser->vvstack[vvpParser->vvidx].major;
6114 if( vvmx==VVERRORSYMBOL || vverrorhit ){
6115 #ifndef NDEBUG
6116 if( vvTraceFILE ){
6117 fprintf(vvTraceFILE,"%sDiscard input token %s\n",
6118 vvTracePrompt,vvTokenName[vvmajor]);
6119 }
6120 #endif
6121 vv_destructor(vvmajor,&vvminorunion);
6122 vvmajor = VVNOCODE;
6123 }else{
6124 while(
6125 vvpParser->vvidx >= 0 &&
6126 vvmx != VVERRORSYMBOL &&
6127 (vvact = vv_find_shift_action(vvpParser,VVERRORSYMBOL)) >= VVNSTATE
6128 ){
6129 vv_pop_parser_stack(vvpParser);
6130 }
6131 if( vvpParser->vvidx < 0 || vvmajor==0 ){
6132 vv_destructor(vvmajor,&vvminorunion);
6133 vv_parse_failed(vvpParser);
6134 vvmajor = VVNOCODE;
6135 }else if( vvmx!=VVERRORSYMBOL ){
6136 VVMINORTYPE u2;
6137 u2.VVERRSYMDT = 0;
6138 vv_shift(vvpParser,vvact,VVERRORSYMBOL,&u2);
6139 }
6140 }
6141 vvpParser->vverrcnt = 3;
6142 vverrorhit = 1;
6143 #else /* VVERRORSYMBOL is not defined */
6144 /* This is what we do if the grammar does not define ERROR:
6145 **
6146 ** * Report an error message, and throw away the input token.
6147 **
6148 ** * If the input token is $, then fail the parse.
6149 **
6150 ** As before, subsequent error messages are suppressed until
6151 ** three input tokens have been successfully shifted.
6152 */
6153 if( vvpParser->vverrcnt<=0 ){
6154 vv_syntax_error(vvpParser,vvmajor,vvminorunion);
6155 }
6156 vvpParser->vverrcnt = 3;
6157 vv_destructor(vvmajor,&vvminorunion);
6158 if( vvendofinput ){
6159 vv_parse_failed(vvpParser);
6160 }
6161 vvmajor = VVNOCODE;
6162 #endif
6163 }else{
6164 vv_accept(vvpParser);
6165 vvmajor = VVNOCODE;
6166 }
6167 }while( vvmajor!=VVNOCODE && vvpParser->vvidx>=0 );
6168 return;
6169 }
6170 #endif
6171
6172 /*
6173 +------------------------------------------------------------------------+
6174 | Phalcon Framework |
6175 +------------------------------------------------------------------------+
6176 | Copyright (c) 2011-present Phalcon Team (http://www.phalconphp.com) |
6177 +------------------------------------------------------------------------+
6178 | This source file is subject to the New BSD License that is bundled |
6179 | with this package in the file docs/LICENSE.txt. |
6180 | |
6181 | If you did not receive a copy of the license and are unable to |
6182 | obtain it through the world-wide-web, please send an email |
6183 | to license@phalconphp.com so we can send you a copy immediately. |
6184 +------------------------------------------------------------------------+
6185 | Authors: Andres Gutierrez <andres@phalconphp.com> |
6186 | Eduar Carvajal <eduar@phalconphp.com> |
6187 +------------------------------------------------------------------------+
6188 */
6189
6190 const phvolt_token_names phvolt_tokens[] =
6191 {
6192 { SL("INTEGER"), PHVOLT_T_INTEGER },
6193 { SL("DOUBLE"), PHVOLT_T_DOUBLE },
6194 { SL("STRING"), PHVOLT_T_STRING },
6195 { SL("IDENTIFIER"), PHVOLT_T_IDENTIFIER },
6196 { SL("MINUS"), PHVOLT_T_MINUS },
6197 { SL("+"), PHVOLT_T_ADD },
6198 { SL("-"), PHVOLT_T_SUB },
6199 { SL("*"), PHVOLT_T_MUL },
6200 { SL("/"), PHVOLT_T_DIV },
6201 { SL("%%"), PHVOLT_T_MOD },
6202 { SL("!"), PHVOLT_T_NOT },
6203 { SL("~"), PHVOLT_T_CONCAT },
6204 { SL("AND"), PHVOLT_T_AND },
6205 { SL("OR"), PHVOLT_T_OR },
6206 { SL("DOT"), PHVOLT_T_DOT },
6207 { SL("COMMA"), PHVOLT_T_COMMA },
6208 { SL("EQUALS"), PHVOLT_T_EQUALS },
6209 { SL("NOT EQUALS"), PHVOLT_T_NOTEQUALS },
6210 { SL("IDENTICAL"), PHVOLT_T_IDENTICAL },
6211 { SL("NOT IDENTICAL"), PHVOLT_T_NOTIDENTICAL },
6212 { SL("NOT"), PHVOLT_T_NOT },
6213 { SL("RANGE"), PHVOLT_T_RANGE },
6214 { SL("COLON"), PHVOLT_T_COLON },
6215 { SL("QUESTION MARK"), PHVOLT_T_QUESTION },
6216 { SL("<"), PHVOLT_T_LESS },
6217 { SL("<="), PHVOLT_T_LESSEQUAL },
6218 { SL(">"), PHVOLT_T_GREATER },
6219 { SL(">="), PHVOLT_T_GREATEREQUAL },
6220 { SL("("), PHVOLT_T_PARENTHESES_OPEN },
6221 { SL(")"), PHVOLT_T_PARENTHESES_CLOSE },
6222 { SL("["), PHVOLT_T_SBRACKET_OPEN },
6223 { SL("]"), PHVOLT_T_SBRACKET_CLOSE },
6224 { SL("{"), PHVOLT_T_CBRACKET_OPEN },
6225 { SL("}"), PHVOLT_T_CBRACKET_CLOSE },
6226 { SL("{%"), PHVOLT_T_OPEN_DELIMITER },
6227 { SL("%}"), PHVOLT_T_CLOSE_DELIMITER },
6228 { SL("{{"), PHVOLT_T_OPEN_EDELIMITER },
6229 { SL("}}"), PHVOLT_T_CLOSE_EDELIMITER },
6230 { SL("IF"), PHVOLT_T_IF },
6231 { SL("ELSE"), PHVOLT_T_ELSE },
6232 { SL("ELSEIF"), PHVOLT_T_ELSEIF },
6233 { SL("ELSEFOR"), PHVOLT_T_ELSEFOR },
6234 { SL("ENDIF"), PHVOLT_T_ENDIF },
6235 { SL("FOR"), PHVOLT_T_FOR },
6236 { SL("SWITCH"), PHVOLT_T_SWITCH },
6237 { SL("CASE"), PHVOLT_T_CASE },
6238 { SL("DEFAULT"), PHVOLT_T_DEFAULT },
6239 { SL("ENDSWITCH"), PHVOLT_T_ENDSWITCH },
6240 { SL("IN"), PHVOLT_T_IN },
6241 { SL("ENDFOR"), PHVOLT_T_ENDFOR },
6242 { SL("SET"), PHVOLT_T_SET },
6243 { SL("ASSIGN"), PHVOLT_T_ASSIGN },
6244 { SL("+="), PHVOLT_T_ADD_ASSIGN },
6245 { SL("-="), PHVOLT_T_SUB_ASSIGN },
6246 { SL("*="), PHVOLT_T_MUL_ASSIGN },
6247 { SL("/="), PHVOLT_T_DIV_ASSIGN },
6248 { SL("++"), PHVOLT_T_INCR },
6249 { SL("--"), PHVOLT_T_DECR },
6250 { SL("BLOCK"), PHVOLT_T_BLOCK },
6251 { SL("ENDBLOCK"), PHVOLT_T_ENDBLOCK },
6252 { SL("CACHE"), PHVOLT_T_CACHE },
6253 { SL("ENDCACHE"), PHVOLT_T_ENDCACHE },
6254 { SL("EXTENDS"), PHVOLT_T_EXTENDS },
6255 { SL("IS"), PHVOLT_T_IS },
6256 { SL("DEFINED"), PHVOLT_T_DEFINED },
6257 { SL("EMPTY"), PHVOLT_T_EMPTY },
6258 { SL("EVEN"), PHVOLT_T_EVEN },
6259 { SL("ODD"), PHVOLT_T_ODD },
6260 { SL("NUMERIC"), PHVOLT_T_NUMERIC },
6261 { SL("SCALAR"), PHVOLT_T_SCALAR },
6262 { SL("ITERABLE"), PHVOLT_T_ITERABLE },
6263 { SL("INCLUDE"), PHVOLT_T_INCLUDE },
6264 { SL("DO"), PHVOLT_T_DO },
6265 { SL("WHITESPACE"), PHVOLT_T_IGNORE },
6266 { SL("AUTOESCAPE"), PHVOLT_T_AUTOESCAPE },
6267 { SL("ENDAUTOESCAPE"), PHVOLT_T_ENDAUTOESCAPE },
6268 { SL("CONTINUE"), PHVOLT_T_CONTINUE },
6269 { SL("BREAK"), PHVOLT_T_BREAK },
6270 { SL("WITH"), PHVOLT_T_WITH },
6271 { SL("RETURN"), PHVOLT_T_RETURN },
6272 { SL("MACRO"), PHVOLT_T_MACRO },
6273 { SL("ENDMACRO"), PHVOLT_T_ENDMACRO },
6274 { SL("CALL"), PHVOLT_T_CALL },
6275 { SL("WITH"), PHVOLT_T_WITH },
6276 { NULL, 0, 0 }
6277 };
6278
6279 /**
6280 * Wrapper to alloc memory within the parser
6281 */
phvolt_wrapper_alloc(size_t bytes)6282 static void *phvolt_wrapper_alloc(size_t bytes){
6283 return emalloc(bytes);
6284 }
6285
6286 /**
6287 * Wrapper to free memory within the parser
6288 */
phvolt_wrapper_free(void * pointer)6289 static void phvolt_wrapper_free(void *pointer){
6290 efree(pointer);
6291 }
6292
6293 /**
6294 * Creates a parser_token to be passed to the parser
6295 */
phvolt_parse_with_token(void * phvolt_parser,int opcode,int parsercode,phvolt_scanner_token * token,phvolt_parser_status * parser_status)6296 static void phvolt_parse_with_token(void* phvolt_parser, int opcode, int parsercode, phvolt_scanner_token *token, phvolt_parser_status *parser_status){
6297
6298 phvolt_parser_token *pToken;
6299
6300 pToken = emalloc(sizeof(phvolt_parser_token));
6301 pToken->opcode = opcode;
6302 pToken->token = token->value;
6303 pToken->token_len = token->len;
6304 pToken->free_flag = 1;
6305
6306 phvolt_(phvolt_parser, parsercode, pToken, parser_status);
6307
6308 token->value = NULL;
6309 token->len = 0;
6310 }
6311
6312 /**
6313 * Creates an error message
6314 */
phvolt_create_error_msg(phvolt_parser_status * parser_status,char * message)6315 static void phvolt_create_error_msg(phvolt_parser_status *parser_status, char *message){
6316
6317 unsigned int length = (128 + Z_STRLEN_P(parser_status->scanner_state->active_file));
6318 char *str = emalloc(sizeof(char) * length);
6319
6320 snprintf(str, length, "%s in %s on line %d", message, Z_STRVAL_P(parser_status->scanner_state->active_file), parser_status->scanner_state->active_line);
6321 str[length - 1] = '\0';
6322
6323 parser_status->syntax_error = estrndup(str, strlen(str));
6324 efree(str);
6325 }
6326
6327 /**
6328 * Creates an error message when it's triggered by the scanner
6329 */
phvolt_scanner_error_msg(phvolt_parser_status * parser_status,zval ** error_msg TSRMLS_DC)6330 static void phvolt_scanner_error_msg(phvolt_parser_status *parser_status, zval **error_msg TSRMLS_DC){
6331
6332 char *error, *error_part;
6333 int length;
6334 phvolt_scanner_state *state = parser_status->scanner_state;
6335
6336 #if PHP_VERSION_ID < 70000
6337 MAKE_STD_ZVAL(*error_msg);
6338 #else
6339 ZVAL_NULL(*error_msg);
6340 #endif
6341
6342 if (state->start) {
6343 error = emalloc(sizeof(char) * 72 + state->start_length + Z_STRLEN_P(state->active_file));
6344 if (state->start_length > 16) {
6345 length = 72 + Z_STRLEN_P(state->active_file);
6346 error_part = estrndup(state->start, 16);
6347 snprintf(error, length, "Scanning error before '%s...' in %s on line %d", error_part, Z_STRVAL_P(state->active_file), state->active_line);
6348 error[length - 1] = '\0';
6349 efree(error_part);
6350 } else {
6351 length = 48 + state->start_length + Z_STRLEN_P(state->active_file);
6352 snprintf(error, length, "Scanning error before '%s' in %s on line %d", state->start, Z_STRVAL_P(state->active_file), state->active_line);
6353 }
6354 } else {
6355 error = emalloc(sizeof(char) * (32 + Z_STRLEN_P(state->active_file)));
6356 length = 32 + Z_STRLEN_P(state->active_file);
6357 snprintf(error, length, "Scanning error near to EOF in %s", Z_STRVAL_P(state->active_file));
6358 }
6359
6360 error[length - 1] = '\0';
6361 #if PHP_VERSION_ID < 70000
6362 ZVAL_STRING(*error_msg, error, 1);
6363 #else
6364 ZVAL_STRING(*error_msg, error);
6365 #endif
6366
6367 efree(error);
6368 }
6369
6370 /**
6371 * Receives the volt code tokenizes and parses it
6372 */
phvolt_parse_view(zval * result,zval * view_code,zval * template_path TSRMLS_DC)6373 int phvolt_parse_view(zval *result, zval *view_code, zval *template_path TSRMLS_DC){
6374
6375 #if PHP_VERSION_ID < 70000
6376 zval *error_msg = NULL;
6377 #else
6378 zval em, *error_msg = &em;
6379 #endif
6380
6381 ZVAL_NULL(result);
6382
6383 #if PHP_VERSION_ID >= 70000
6384 ZVAL_NULL(error_msg);
6385 #endif
6386
6387 if (Z_TYPE_P(view_code) != IS_STRING) {
6388 ZEPHIR_THROW_EXCEPTION_STRW(phalcon_mvc_view_exception_ce, "View code must be a string");
6389 return FAILURE;
6390 }
6391
6392 if (phvolt_internal_parse_view(&result, view_code, template_path, &error_msg TSRMLS_CC) == FAILURE) {
6393 ZEPHIR_THROW_EXCEPTION_STRW(phalcon_mvc_view_exception_ce, Z_STRVAL_P(error_msg));
6394 #if PHP_VERSION_ID < 70000
6395 zval_ptr_dtor(&error_msg);
6396 #else
6397 zval_dtor(error_msg);
6398 #endif
6399 return FAILURE;
6400 }
6401
6402 return SUCCESS;
6403 }
6404
6405 /**
6406 * Checks whether the token has only blank characters
6407 */
phvolt_is_blank_string(phvolt_scanner_token * token)6408 int phvolt_is_blank_string(phvolt_scanner_token *token){
6409
6410 char *marker = token->value;
6411 unsigned int ch, i;
6412
6413 for (i = 0; i < token->len; i++) {
6414 ch = *marker;
6415 if (ch != ' ' && ch != '\t' && ch != '\n' && ch != '\r' && ch != 11) {
6416 return 0;
6417 }
6418 marker++;
6419 }
6420
6421 return 1;
6422 }
6423
6424 /**
6425 * Parses a volt template returning an intermediate array representation
6426 */
phvolt_internal_parse_view(zval ** result,zval * view_code,zval * template_path,zval ** error_msg TSRMLS_DC)6427 int phvolt_internal_parse_view(zval **result, zval *view_code, zval *template_path, zval **error_msg TSRMLS_DC) {
6428
6429 char *error;
6430 phvolt_scanner_state *state;
6431 phvolt_scanner_token token;
6432 int scanner_status, status = SUCCESS;
6433 phvolt_parser_status *parser_status = NULL;
6434 void* phvolt_parser;
6435
6436 /** Check if the view has code */
6437 if (!Z_STRVAL_P(view_code)) {
6438 #if PHP_VERSION_ID < 70000
6439 MAKE_STD_ZVAL(*error_msg);
6440 ZVAL_STRING(*error_msg, "View code cannot be null", 1);
6441 #else
6442 ZVAL_STRING(*error_msg, "View code cannot be null");
6443 #endif
6444 return FAILURE;
6445 }
6446
6447 if (!Z_STRLEN_P(view_code)) {
6448 array_init(*result);
6449 return SUCCESS;
6450 }
6451
6452 /** Start the reentrant parser */
6453 phvolt_parser = phvolt_Alloc(phvolt_wrapper_alloc);
6454 if (unlikely(!phvolt_parser)) {
6455 #if PHP_VERSION_ID < 70000
6456 MAKE_STD_ZVAL(*error_msg);
6457 ZVAL_STRING(*error_msg, "Memory allocation error", 1);
6458 #else
6459 ZVAL_STRING(*error_msg, "Memory allocation error");
6460 #endif
6461 return FAILURE;
6462 }
6463
6464 parser_status = emalloc(sizeof(phvolt_parser_status));
6465 state = emalloc(sizeof(phvolt_scanner_state));
6466
6467 parser_status->status = PHVOLT_PARSING_OK;
6468 parser_status->scanner_state = state;
6469 #if PHP_VERSION_ID < 70000
6470 parser_status->ret = NULL;
6471 #else
6472 ZVAL_UNDEF(&parser_status->ret);
6473 #endif
6474 parser_status->token = &token;
6475 parser_status->syntax_error = NULL;
6476
6477 /** Initialize the scanner state */
6478 state->active_token = 0;
6479 state->start = Z_STRVAL_P(view_code);
6480 state->mode = PHVOLT_MODE_RAW;
6481 state->raw_buffer = emalloc(sizeof(char) * PHVOLT_RAW_BUFFER_SIZE);
6482 state->raw_buffer_size = PHVOLT_RAW_BUFFER_SIZE;
6483 state->raw_buffer_cursor = 0;
6484 state->active_file = template_path;
6485 state->active_line = 1;
6486 state->statement_position = 0;
6487 state->extends_mode = 0;
6488 state->block_level = 0;
6489 state->macro_level = 0;
6490 state->start_length = 0;
6491 state->old_if_level = 0;
6492 state->if_level = 0;
6493 state->for_level = 0;
6494 state->switch_level = 0;
6495 state->whitespace_control = 0;
6496 state->forced_raw_state = 0;
6497
6498 state->end = state->start;
6499
6500 token.value = NULL;
6501 token.len = 0;
6502
6503 while (0 <= (scanner_status = phvolt_get_token(state, &token))) {
6504
6505 state->active_token = token.opcode;
6506
6507 state->start_length = (Z_STRVAL_P(view_code) + Z_STRLEN_P(view_code) - state->start);
6508
6509 switch (token.opcode) {
6510
6511 case PHVOLT_T_IGNORE:
6512 break;
6513
6514 case PHVOLT_T_ADD:
6515 phvolt_(phvolt_parser, PHVOLT_PLUS, NULL, parser_status);
6516 break;
6517 case PHVOLT_T_SUB:
6518 phvolt_(phvolt_parser, PHVOLT_MINUS, NULL, parser_status);
6519 break;
6520 case PHVOLT_T_MUL:
6521 phvolt_(phvolt_parser, PHVOLT_TIMES, NULL, parser_status);
6522 break;
6523 case PHVOLT_T_DIV:
6524 phvolt_(phvolt_parser, PHVOLT_DIVIDE, NULL, parser_status);
6525 break;
6526 case PHVOLT_T_MOD:
6527 phvolt_(phvolt_parser, PHVOLT_MOD, NULL, parser_status);
6528 break;
6529 case PHVOLT_T_AND:
6530 phvolt_(phvolt_parser, PHVOLT_AND, NULL, parser_status);
6531 break;
6532 case PHVOLT_T_OR:
6533 phvolt_(phvolt_parser, PHVOLT_OR, NULL, parser_status);
6534 break;
6535 case PHVOLT_T_IS:
6536 phvolt_(phvolt_parser, PHVOLT_IS, NULL, parser_status);
6537 break;
6538 case PHVOLT_T_EQUALS:
6539 phvolt_(phvolt_parser, PHVOLT_EQUALS, NULL, parser_status);
6540 break;
6541 case PHVOLT_T_NOTEQUALS:
6542 phvolt_(phvolt_parser, PHVOLT_NOTEQUALS, NULL, parser_status);
6543 break;
6544 case PHVOLT_T_LESS:
6545 phvolt_(phvolt_parser, PHVOLT_LESS, NULL, parser_status);
6546 break;
6547 case PHVOLT_T_GREATER:
6548 phvolt_(phvolt_parser, PHVOLT_GREATER, NULL, parser_status);
6549 break;
6550 case PHVOLT_T_GREATEREQUAL:
6551 phvolt_(phvolt_parser, PHVOLT_GREATEREQUAL, NULL, parser_status);
6552 break;
6553 case PHVOLT_T_LESSEQUAL:
6554 phvolt_(phvolt_parser, PHVOLT_LESSEQUAL, NULL, parser_status);
6555 break;
6556 case PHVOLT_T_IDENTICAL:
6557 phvolt_(phvolt_parser, PHVOLT_IDENTICAL, NULL, parser_status);
6558 break;
6559 case PHVOLT_T_NOTIDENTICAL:
6560 phvolt_(phvolt_parser, PHVOLT_NOTIDENTICAL, NULL, parser_status);
6561 break;
6562 case PHVOLT_T_NOT:
6563 phvolt_(phvolt_parser, PHVOLT_NOT, NULL, parser_status);
6564 break;
6565 case PHVOLT_T_DOT:
6566 phvolt_(phvolt_parser, PHVOLT_DOT, NULL, parser_status);
6567 break;
6568 case PHVOLT_T_CONCAT:
6569 phvolt_(phvolt_parser, PHVOLT_CONCAT, NULL, parser_status);
6570 break;
6571 case PHVOLT_T_RANGE:
6572 phvolt_(phvolt_parser, PHVOLT_RANGE, NULL, parser_status);
6573 break;
6574 case PHVOLT_T_PIPE:
6575 phvolt_(phvolt_parser, PHVOLT_PIPE, NULL, parser_status);
6576 break;
6577 case PHVOLT_T_COMMA:
6578 phvolt_(phvolt_parser, PHVOLT_COMMA, NULL, parser_status);
6579 break;
6580 case PHVOLT_T_COLON:
6581 phvolt_(phvolt_parser, PHVOLT_COLON, NULL, parser_status);
6582 break;
6583 case PHVOLT_T_QUESTION:
6584 phvolt_(phvolt_parser, PHVOLT_QUESTION, NULL, parser_status);
6585 break;
6586
6587 case PHVOLT_T_PARENTHESES_OPEN:
6588 phvolt_(phvolt_parser, PHVOLT_PARENTHESES_OPEN, NULL, parser_status);
6589 break;
6590 case PHVOLT_T_PARENTHESES_CLOSE:
6591 phvolt_(phvolt_parser, PHVOLT_PARENTHESES_CLOSE, NULL, parser_status);
6592 break;
6593 case PHVOLT_T_SBRACKET_OPEN:
6594 phvolt_(phvolt_parser, PHVOLT_SBRACKET_OPEN, NULL, parser_status);
6595 break;
6596 case PHVOLT_T_SBRACKET_CLOSE:
6597 phvolt_(phvolt_parser, PHVOLT_SBRACKET_CLOSE, NULL, parser_status);
6598 break;
6599 case PHVOLT_T_CBRACKET_OPEN:
6600 phvolt_(phvolt_parser, PHVOLT_CBRACKET_OPEN, NULL, parser_status);
6601 break;
6602 case PHVOLT_T_CBRACKET_CLOSE:
6603 phvolt_(phvolt_parser, PHVOLT_CBRACKET_CLOSE, NULL, parser_status);
6604 break;
6605
6606 case PHVOLT_T_OPEN_DELIMITER:
6607 phvolt_(phvolt_parser, PHVOLT_OPEN_DELIMITER, NULL, parser_status);
6608 break;
6609 case PHVOLT_T_CLOSE_DELIMITER:
6610 phvolt_(phvolt_parser, PHVOLT_CLOSE_DELIMITER, NULL, parser_status);
6611 break;
6612
6613 case PHVOLT_T_OPEN_EDELIMITER:
6614 if (state->extends_mode == 1 && state->block_level == 0) {
6615 phvolt_create_error_msg(parser_status, "Child templates only may contain blocks");
6616 parser_status->status = PHVOLT_PARSING_FAILED;
6617 break;
6618 }
6619 phvolt_(phvolt_parser, PHVOLT_OPEN_EDELIMITER, NULL, parser_status);
6620 break;
6621 case PHVOLT_T_CLOSE_EDELIMITER:
6622 phvolt_(phvolt_parser, PHVOLT_CLOSE_EDELIMITER, NULL, parser_status);
6623 break;
6624
6625 case PHVOLT_T_NULL:
6626 phvolt_(phvolt_parser, PHVOLT_NULL, NULL, parser_status);
6627 break;
6628 case PHVOLT_T_TRUE:
6629 phvolt_(phvolt_parser, PHVOLT_TRUE, NULL, parser_status);
6630 break;
6631 case PHVOLT_T_FALSE:
6632 phvolt_(phvolt_parser, PHVOLT_FALSE, NULL, parser_status);
6633 break;
6634
6635 case PHVOLT_T_INTEGER:
6636 phvolt_parse_with_token(phvolt_parser, PHVOLT_T_INTEGER, PHVOLT_INTEGER, &token, parser_status);
6637 break;
6638 case PHVOLT_T_DOUBLE:
6639 phvolt_parse_with_token(phvolt_parser, PHVOLT_T_DOUBLE, PHVOLT_DOUBLE, &token, parser_status);
6640 break;
6641 case PHVOLT_T_STRING:
6642 phvolt_parse_with_token(phvolt_parser, PHVOLT_T_STRING, PHVOLT_STRING, &token, parser_status);
6643 break;
6644 case PHVOLT_T_IDENTIFIER:
6645 phvolt_parse_with_token(phvolt_parser, PHVOLT_T_IDENTIFIER, PHVOLT_IDENTIFIER, &token, parser_status);
6646 break;
6647
6648 case PHVOLT_T_IF:
6649 if (state->extends_mode == 1 && state->block_level == 0){
6650 phvolt_create_error_msg(parser_status, "Child templates only may contain blocks");
6651 parser_status->status = PHVOLT_PARSING_FAILED;
6652 break;
6653 } else {
6654 state->if_level++;
6655 state->block_level++;
6656 }
6657 phvolt_(phvolt_parser, PHVOLT_IF, NULL, parser_status);
6658 break;
6659
6660 case PHVOLT_T_ELSE:
6661 if (state->if_level == 0 && state->for_level > 0) {
6662 phvolt_(phvolt_parser, PHVOLT_ELSEFOR, NULL, parser_status);
6663 } else {
6664 phvolt_(phvolt_parser, PHVOLT_ELSE, NULL, parser_status);
6665 }
6666 break;
6667
6668 case PHVOLT_T_ELSEFOR:
6669 phvolt_(phvolt_parser, PHVOLT_ELSEFOR, NULL, parser_status);
6670 break;
6671
6672 case PHVOLT_T_ELSEIF:
6673 if (state->if_level == 0) {
6674 phvolt_create_error_msg(parser_status, "Unexpected ENDIF");
6675 parser_status->status = PHVOLT_PARSING_FAILED;
6676 break;
6677 }
6678 phvolt_(phvolt_parser, PHVOLT_ELSEIF, NULL, parser_status);
6679 break;
6680
6681 case PHVOLT_T_ENDIF:
6682 state->block_level--;
6683 state->if_level--;
6684 phvolt_(phvolt_parser, PHVOLT_ENDIF, NULL, parser_status);
6685 break;
6686
6687 case PHVOLT_T_FOR:
6688 if (state->extends_mode == 1 && state->block_level == 0){
6689 phvolt_create_error_msg(parser_status, "Child templates only may contain blocks");
6690 parser_status->status = PHVOLT_PARSING_FAILED;
6691 break;
6692 } else {
6693 state->old_if_level = state->if_level;
6694 state->if_level = 0;
6695 state->for_level++;
6696 state->block_level++;
6697 }
6698 phvolt_(phvolt_parser, PHVOLT_FOR, NULL, parser_status);
6699 break;
6700
6701 case PHVOLT_T_IN:
6702 phvolt_(phvolt_parser, PHVOLT_IN, NULL, parser_status);
6703 break;
6704
6705 case PHVOLT_T_ENDFOR:
6706 state->block_level--;
6707 state->for_level--;
6708 state->if_level = state->old_if_level;
6709 phvolt_(phvolt_parser, PHVOLT_ENDFOR, NULL, parser_status);
6710 break;
6711
6712 case PHVOLT_T_SWITCH:
6713 if (state->extends_mode == 1 && state->block_level == 0){
6714 phvolt_create_error_msg(parser_status, "Child templates only may contain blocks");
6715 parser_status->status = PHVOLT_PARSING_FAILED;
6716 break;
6717 } else if (state->switch_level > 0) {
6718 phvolt_create_error_msg(parser_status, "A nested switch detected. There is no nested switch-case statements support");
6719 parser_status->status = PHVOLT_PARSING_FAILED;
6720 break;
6721 } else {
6722 state->switch_level = 1;
6723 state->block_level++;
6724 }
6725 phvolt_(phvolt_parser, PHVOLT_SWITCH, NULL, parser_status);
6726 break;
6727
6728 case PHVOLT_T_CASE:
6729 if (state->switch_level == 0) {
6730 phvolt_create_error_msg(parser_status, "Unexpected CASE");
6731 parser_status->status = PHVOLT_PARSING_FAILED;
6732 break;
6733 }
6734 phvolt_(phvolt_parser, PHVOLT_CASE, NULL, parser_status);
6735 break;
6736
6737 /* only for switch-case statements */
6738 case PHVOLT_T_DEFAULT:
6739 if (state->switch_level != 0) {
6740 phvolt_(phvolt_parser, PHVOLT_DEFAULT, NULL, parser_status);
6741 } else {
6742 // TODO: Make this better
6743
6744 // {
6745 // phvolt_parser_token *pToken;
6746 // unsigned int length = 8; // "default" + \0
6747 // char *token = emalloc(sizeof(char) * length);
6748
6749 // snprintf(token, length, "default");
6750 // token[length - 1] = '\0';
6751
6752 // pToken = emalloc(sizeof(phvolt_parser_token));
6753 // pToken->opcode = PHVOLT_T_IDENTIFIER;
6754 // pToken->token = token;
6755 // pToken->token_len = strlen(token);
6756 // pToken->free_flag = 1;
6757
6758 // phvolt_(phvolt_parser, PHVOLT_IDENTIFIER, pToken, parser_status);
6759
6760 // efree(pToken);
6761 // efree(token);
6762 // }
6763
6764 //token.value = "default";
6765 //token.len = strlen("default") + 1;
6766 //printf("token->value: '%s', token->len: %d, token->opcode: %d\n", token.value, token.len, token.opcode);
6767 phvolt_parse_with_token(phvolt_parser, PHVOLT_T_IDENTIFIER, PHVOLT_IDENTIFIER, &token, parser_status);
6768 }
6769
6770 break;
6771
6772 case PHVOLT_T_ENDSWITCH:
6773 if (state->switch_level == 0) {
6774 phvolt_create_error_msg(parser_status, "Unexpected ENDSWITCH");
6775 parser_status->status = PHVOLT_PARSING_FAILED;
6776 break;
6777 } else {
6778 state->switch_level = 0;
6779 state->block_level--;
6780 }
6781
6782 phvolt_(phvolt_parser, PHVOLT_ENDSWITCH, NULL, parser_status);
6783 break;
6784
6785 case PHVOLT_T_RAW_FRAGMENT:
6786 if (token.len > 0) {
6787 if (state->extends_mode == 1 && state->block_level == 0){
6788 if (!phvolt_is_blank_string(&token)) {
6789 phvolt_create_error_msg(parser_status, "Child templates only may contain blocks");
6790 parser_status->status = PHVOLT_PARSING_FAILED;
6791 }
6792 efree(token.value);
6793 break;
6794 } else {
6795 if (!phvolt_is_blank_string(&token)) {
6796 state->statement_position++;
6797 }
6798 }
6799 phvolt_parse_with_token(phvolt_parser, PHVOLT_T_RAW_FRAGMENT, PHVOLT_RAW_FRAGMENT, &token, parser_status);
6800 } else {
6801 efree(token.value);
6802 }
6803 break;
6804
6805 case PHVOLT_T_SET:
6806 if (state->extends_mode == 1 && state->block_level == 0){
6807 phvolt_create_error_msg(parser_status, "Child templates only may contain blocks");
6808 parser_status->status = PHVOLT_PARSING_FAILED;
6809 break;
6810 }
6811 phvolt_(phvolt_parser, PHVOLT_SET, NULL, parser_status);
6812 break;
6813 case PHVOLT_T_ASSIGN:
6814 phvolt_(phvolt_parser, PHVOLT_ASSIGN, NULL, parser_status);
6815 break;
6816 case PHVOLT_T_ADD_ASSIGN:
6817 phvolt_(phvolt_parser, PHVOLT_ADD_ASSIGN, NULL, parser_status);
6818 break;
6819 case PHVOLT_T_SUB_ASSIGN:
6820 phvolt_(phvolt_parser, PHVOLT_SUB_ASSIGN, NULL, parser_status);
6821 break;
6822 case PHVOLT_T_MUL_ASSIGN:
6823 phvolt_(phvolt_parser, PHVOLT_MUL_ASSIGN, NULL, parser_status);
6824 break;
6825 case PHVOLT_T_DIV_ASSIGN:
6826 phvolt_(phvolt_parser, PHVOLT_DIV_ASSIGN, NULL, parser_status);
6827 break;
6828
6829 case PHVOLT_T_INCR:
6830 phvolt_(phvolt_parser, PHVOLT_INCR, NULL, parser_status);
6831 break;
6832 case PHVOLT_T_DECR:
6833 phvolt_(phvolt_parser, PHVOLT_DECR, NULL, parser_status);
6834 break;
6835
6836 case PHVOLT_T_BLOCK:
6837 if (state->block_level > 0) {
6838 phvolt_create_error_msg(parser_status, "Embedding blocks into other blocks is not supported");
6839 parser_status->status = PHVOLT_PARSING_FAILED;
6840 break;
6841 } else {
6842 state->block_level++;
6843 }
6844 phvolt_(phvolt_parser, PHVOLT_BLOCK, NULL, parser_status);
6845 break;
6846 case PHVOLT_T_ENDBLOCK:
6847 state->block_level--;
6848 phvolt_(phvolt_parser, PHVOLT_ENDBLOCK, NULL, parser_status);
6849 break;
6850
6851 case PHVOLT_T_MACRO:
6852 if (state->macro_level > 0) {
6853 phvolt_create_error_msg(parser_status, "Embedding macros into other macros is not allowed");
6854 parser_status->status = PHVOLT_PARSING_FAILED;
6855 break;
6856 } else {
6857 state->macro_level++;
6858 }
6859 phvolt_(phvolt_parser, PHVOLT_MACRO, NULL, parser_status);
6860 break;
6861 case PHVOLT_T_ENDMACRO:
6862 state->macro_level--;
6863 phvolt_(phvolt_parser, PHVOLT_ENDMACRO, NULL, parser_status);
6864 break;
6865
6866 case PHVOLT_T_CALL:
6867 phvolt_(phvolt_parser, PHVOLT_CALL, NULL, parser_status);
6868 break;
6869 case PHVOLT_T_ENDCALL:
6870 phvolt_(phvolt_parser, PHVOLT_ENDCALL, NULL, parser_status);
6871 break;
6872
6873 case PHVOLT_T_CACHE:
6874 phvolt_(phvolt_parser, PHVOLT_CACHE, NULL, parser_status);
6875 break;
6876 case PHVOLT_T_ENDCACHE:
6877 phvolt_(phvolt_parser, PHVOLT_ENDCACHE, NULL, parser_status);
6878 break;
6879
6880 case PHVOLT_T_RAW:
6881 phvolt_(phvolt_parser, PHVOLT_RAW, NULL, parser_status);
6882 state->forced_raw_state++;
6883 break;
6884 case PHVOLT_T_ENDRAW:
6885 phvolt_(phvolt_parser, PHVOLT_ENDRAW, NULL, parser_status);
6886 state->forced_raw_state--;
6887 break;
6888
6889 case PHVOLT_T_INCLUDE:
6890 phvolt_(phvolt_parser, PHVOLT_INCLUDE, NULL, parser_status);
6891 break;
6892
6893 case PHVOLT_T_WITH:
6894 phvolt_(phvolt_parser, PHVOLT_WITH, NULL, parser_status);
6895 break;
6896
6897 case PHVOLT_T_DEFINED:
6898 phvolt_(phvolt_parser, PHVOLT_DEFINED, NULL, parser_status);
6899 break;
6900
6901 case PHVOLT_T_EMPTY:
6902 phvolt_(phvolt_parser, PHVOLT_EMPTY, NULL, parser_status);
6903 break;
6904
6905 case PHVOLT_T_EVEN:
6906 phvolt_(phvolt_parser, PHVOLT_EVEN, NULL, parser_status);
6907 break;
6908
6909 case PHVOLT_T_ODD:
6910 phvolt_(phvolt_parser, PHVOLT_ODD, NULL, parser_status);
6911 break;
6912
6913 case PHVOLT_T_NUMERIC:
6914 phvolt_(phvolt_parser, PHVOLT_NUMERIC, NULL, parser_status);
6915 break;
6916
6917 case PHVOLT_T_SCALAR:
6918 phvolt_(phvolt_parser, PHVOLT_SCALAR, NULL, parser_status);
6919 break;
6920
6921 case PHVOLT_T_ITERABLE:
6922 phvolt_(phvolt_parser, PHVOLT_ITERABLE, NULL, parser_status);
6923 break;
6924
6925 case PHVOLT_T_DO:
6926 phvolt_(phvolt_parser, PHVOLT_DO, NULL, parser_status);
6927 break;
6928 case PHVOLT_T_RETURN:
6929 phvolt_(phvolt_parser, PHVOLT_RETURN, NULL, parser_status);
6930 break;
6931
6932 case PHVOLT_T_AUTOESCAPE:
6933 phvolt_(phvolt_parser, PHVOLT_AUTOESCAPE, NULL, parser_status);
6934 break;
6935
6936 case PHVOLT_T_ENDAUTOESCAPE:
6937 phvolt_(phvolt_parser, PHVOLT_ENDAUTOESCAPE, NULL, parser_status);
6938 break;
6939
6940 case PHVOLT_T_BREAK:
6941 phvolt_(phvolt_parser, PHVOLT_BREAK, NULL, parser_status);
6942 break;
6943
6944 case PHVOLT_T_CONTINUE:
6945 phvolt_(phvolt_parser, PHVOLT_CONTINUE, NULL, parser_status);
6946 break;
6947
6948 case PHVOLT_T_EXTENDS:
6949 if (state->statement_position != 1) {
6950 phvolt_create_error_msg(parser_status, "Extends statement must be placed at the first line in the template");
6951 parser_status->status = PHVOLT_PARSING_FAILED;
6952 break;
6953 } else {
6954 state->extends_mode = 1;
6955 }
6956 phvolt_(phvolt_parser, PHVOLT_EXTENDS, NULL, parser_status);
6957 break;
6958
6959 default:
6960 parser_status->status = PHVOLT_PARSING_FAILED;
6961 error = emalloc(sizeof(char) * (48 + Z_STRLEN_P(state->active_file)));
6962 snprintf(error, 48 + Z_STRLEN_P(state->active_file) + state->active_line, "Scanner: unknown opcode %d on in %s line %d", token.opcode, Z_STRVAL_P(state->active_file), state->active_line);
6963 #if PHP_VERSION_ID < 70000
6964 if (!*error_msg) {
6965 MAKE_STD_ZVAL(*error_msg);
6966 ZVAL_STRING(*error_msg, error, 1);
6967 }
6968 #else
6969 if (Z_TYPE_P(*error_msg) == IS_NULL) {
6970 ZVAL_STRING((*error_msg), error);
6971 }
6972 #endif
6973 efree(error);
6974 break;
6975 }
6976
6977 if (parser_status->status != PHVOLT_PARSING_OK) {
6978 status = FAILURE;
6979 break;
6980 }
6981
6982 state->end = state->start;
6983 }
6984
6985 if (status != FAILURE) {
6986 switch (scanner_status) {
6987 case PHVOLT_SCANNER_RETCODE_ERR:
6988 case PHVOLT_SCANNER_RETCODE_IMPOSSIBLE:
6989 if (!*error_msg) {
6990 phvolt_scanner_error_msg(parser_status, error_msg TSRMLS_CC);
6991 } else {
6992 if (Z_TYPE_P(*error_msg) == IS_NULL) {
6993 phvolt_scanner_error_msg(parser_status, error_msg TSRMLS_CC);
6994 }
6995 }
6996 status = FAILURE;
6997 break;
6998 default:
6999 phvolt_(phvolt_parser, 0, NULL, parser_status);
7000 }
7001 }
7002
7003 state->active_token = 0;
7004 state->start = NULL;
7005 efree(state->raw_buffer);
7006
7007 if (parser_status->status != PHVOLT_PARSING_OK) {
7008 status = FAILURE;
7009 if (parser_status->syntax_error) {
7010 #if PHP_VERSION_ID < 70000
7011 if (!*error_msg) {
7012 MAKE_STD_ZVAL(*error_msg);
7013 ZVAL_STRING(*error_msg, parser_status->syntax_error, 1);
7014 }
7015 #else
7016 ZVAL_STRING(*error_msg, parser_status->syntax_error);
7017 #endif
7018 efree(parser_status->syntax_error);
7019 }
7020 }
7021
7022 phvolt_Free(phvolt_parser, phvolt_wrapper_free);
7023
7024 if (status != FAILURE) {
7025 if (parser_status->status == PHVOLT_PARSING_OK) {
7026 #if PHP_VERSION_ID < 70000
7027 if (parser_status->ret) {
7028 ZVAL_ZVAL(*result, parser_status->ret, 0, 0);
7029 ZVAL_NULL(parser_status->ret);
7030 zval_ptr_dtor(&parser_status->ret);
7031 } else {
7032 array_init(*result);
7033 }
7034 #else
7035 if (Z_TYPE(parser_status->ret) != IS_UNDEF) {
7036 ZVAL_ZVAL(*result, &parser_status->ret, 1, 1);
7037 } else {
7038 array_init(*result);
7039 }
7040 #endif
7041 }
7042 }
7043
7044 efree(parser_status);
7045 efree(state);
7046
7047 return status;
7048 }
7049