1 /* A Bison parser, made by GNU Bison 3.8.2. */
2
3 /* Bison implementation for Yacc-like parsers in C
4
5 Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6 Inc.
7
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <https://www.gnu.org/licenses/>. */
20
21 /* As a special exception, you may create a larger work that contains
22 part or all of the Bison parser skeleton and distribute that work
23 under terms of your choice, so long as that work isn't itself a
24 parser generator using the skeleton or a modified version thereof
25 as a parser skeleton. Alternatively, if you modify or redistribute
26 the parser skeleton itself, you may (at your option) remove this
27 special exception, which will cause the skeleton and the resulting
28 Bison output files to be licensed under the GNU General Public
29 License without this special exception.
30
31 This special exception was added by the Free Software Foundation in
32 version 2.2 of Bison. */
33
34 /* C LALR(1) parser skeleton written by Richard Stallman, by
35 simplifying the original so-called "semantic" parser. */
36
37 /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38 especially those whose name start with YY_ or yy_. They are
39 private implementation details that can be changed or removed. */
40
41 /* All symbols defined below should begin with yy or YY, to avoid
42 infringing on user name space. This should be done even for local
43 variables, as they might otherwise be expanded by user macros.
44 There are some unavoidable exceptions within include files to
45 define necessary library symbols; they are noted "INFRINGES ON
46 USER NAME SPACE" below. */
47
48 /* Identify Bison output, and Bison version. */
49 #define YYBISON 30802
50
51 /* Bison version string. */
52 #define YYBISON_VERSION "3.8.2"
53
54 /* Skeleton name. */
55 #define YYSKELETON_NAME "yacc.c"
56
57 /* Pure parsers. */
58 #define YYPURE 2
59
60 /* Push parsers. */
61 #define YYPUSH 0
62
63 /* Pull parsers. */
64 #define YYPULL 1
65
66 /* First part of user prologue. */
67
68 // GENERATED FILE - DO NOT EDIT.
69 // Generated by generate_parser.py from glslang.y
70 //
71 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
72 // Use of this source code is governed by a BSD-style license that can be
73 // found in the LICENSE file.
74 //
75 // glslang.y:
76 // Parser for the OpenGL shading language.
77
78 // Ignore errors in auto-generated code.
79 #if defined(__GNUC__)
80 # pragma GCC diagnostic ignored "-Wunused-function"
81 # pragma GCC diagnostic ignored "-Wunused-variable"
82 # pragma GCC diagnostic ignored "-Wswitch-enum"
83 #elif defined(_MSC_VER)
84 # pragma warning(disable : 4065)
85 # pragma warning(disable : 4189)
86 # pragma warning(disable : 4244)
87 # pragma warning(disable : 4505)
88 # pragma warning(disable : 4701)
89 # pragma warning(disable : 4702)
90 #endif
91 #if defined(__clang__)
92 # pragma clang diagnostic ignored "-Wunreachable-code"
93 # pragma clang diagnostic ignored "-Wunused-but-set-variable"
94 #endif
95
96 #include "GLSLANG/ShaderLang.h"
97 #include "angle_gl.h"
98 #include "compiler/translator/Declarator.h"
99 #include "compiler/translator/ParseContext.h"
100 #include "compiler/translator/SymbolTable.h"
101
102 #define YYENABLE_NLS 0
103
104 using namespace sh;
105
106 #ifndef YY_CAST
107 # ifdef __cplusplus
108 # define YY_CAST(Type, Val) static_cast<Type>(Val)
109 # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type>(Val)
110 # else
111 # define YY_CAST(Type, Val) ((Type)(Val))
112 # define YY_REINTERPRET_CAST(Type, Val) ((Type)(Val))
113 # endif
114 #endif
115 #ifndef YY_NULLPTR
116 # if defined __cplusplus
117 # if 201103L <= __cplusplus
118 # define YY_NULLPTR nullptr
119 # else
120 # define YY_NULLPTR 0
121 # endif
122 # else
123 # define YY_NULLPTR ((void *)0)
124 # endif
125 #endif
126
127 #include "glslang_tab_autogen.h"
128 /* Symbol kind. */
129 enum yysymbol_kind_t
130 {
131 YYSYMBOL_YYEMPTY = -2,
132 YYSYMBOL_YYEOF = 0, /* "end of file" */
133 YYSYMBOL_YYerror = 1, /* error */
134 YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
135 YYSYMBOL_INVARIANT = 3, /* INVARIANT */
136 YYSYMBOL_PRECISE = 4, /* PRECISE */
137 YYSYMBOL_HIGH_PRECISION = 5, /* HIGH_PRECISION */
138 YYSYMBOL_MEDIUM_PRECISION = 6, /* MEDIUM_PRECISION */
139 YYSYMBOL_LOW_PRECISION = 7, /* LOW_PRECISION */
140 YYSYMBOL_PRECISION = 8, /* PRECISION */
141 YYSYMBOL_ATTRIBUTE = 9, /* ATTRIBUTE */
142 YYSYMBOL_CONST_QUAL = 10, /* CONST_QUAL */
143 YYSYMBOL_BOOL_TYPE = 11, /* BOOL_TYPE */
144 YYSYMBOL_FLOAT_TYPE = 12, /* FLOAT_TYPE */
145 YYSYMBOL_INT_TYPE = 13, /* INT_TYPE */
146 YYSYMBOL_UINT_TYPE = 14, /* UINT_TYPE */
147 YYSYMBOL_BREAK = 15, /* BREAK */
148 YYSYMBOL_CONTINUE = 16, /* CONTINUE */
149 YYSYMBOL_DO = 17, /* DO */
150 YYSYMBOL_ELSE = 18, /* ELSE */
151 YYSYMBOL_FOR = 19, /* FOR */
152 YYSYMBOL_IF = 20, /* IF */
153 YYSYMBOL_DISCARD = 21, /* DISCARD */
154 YYSYMBOL_RETURN = 22, /* RETURN */
155 YYSYMBOL_SWITCH = 23, /* SWITCH */
156 YYSYMBOL_CASE = 24, /* CASE */
157 YYSYMBOL_DEFAULT = 25, /* DEFAULT */
158 YYSYMBOL_BVEC2 = 26, /* BVEC2 */
159 YYSYMBOL_BVEC3 = 27, /* BVEC3 */
160 YYSYMBOL_BVEC4 = 28, /* BVEC4 */
161 YYSYMBOL_IVEC2 = 29, /* IVEC2 */
162 YYSYMBOL_IVEC3 = 30, /* IVEC3 */
163 YYSYMBOL_IVEC4 = 31, /* IVEC4 */
164 YYSYMBOL_VEC2 = 32, /* VEC2 */
165 YYSYMBOL_VEC3 = 33, /* VEC3 */
166 YYSYMBOL_VEC4 = 34, /* VEC4 */
167 YYSYMBOL_UVEC2 = 35, /* UVEC2 */
168 YYSYMBOL_UVEC3 = 36, /* UVEC3 */
169 YYSYMBOL_UVEC4 = 37, /* UVEC4 */
170 YYSYMBOL_MATRIX2 = 38, /* MATRIX2 */
171 YYSYMBOL_MATRIX3 = 39, /* MATRIX3 */
172 YYSYMBOL_MATRIX4 = 40, /* MATRIX4 */
173 YYSYMBOL_IN_QUAL = 41, /* IN_QUAL */
174 YYSYMBOL_OUT_QUAL = 42, /* OUT_QUAL */
175 YYSYMBOL_INOUT_QUAL = 43, /* INOUT_QUAL */
176 YYSYMBOL_UNIFORM = 44, /* UNIFORM */
177 YYSYMBOL_BUFFER = 45, /* BUFFER */
178 YYSYMBOL_VARYING = 46, /* VARYING */
179 YYSYMBOL_MATRIX2x3 = 47, /* MATRIX2x3 */
180 YYSYMBOL_MATRIX3x2 = 48, /* MATRIX3x2 */
181 YYSYMBOL_MATRIX2x4 = 49, /* MATRIX2x4 */
182 YYSYMBOL_MATRIX4x2 = 50, /* MATRIX4x2 */
183 YYSYMBOL_MATRIX3x4 = 51, /* MATRIX3x4 */
184 YYSYMBOL_MATRIX4x3 = 52, /* MATRIX4x3 */
185 YYSYMBOL_SAMPLE = 53, /* SAMPLE */
186 YYSYMBOL_CENTROID = 54, /* CENTROID */
187 YYSYMBOL_FLAT = 55, /* FLAT */
188 YYSYMBOL_SMOOTH = 56, /* SMOOTH */
189 YYSYMBOL_NOPERSPECTIVE = 57, /* NOPERSPECTIVE */
190 YYSYMBOL_PATCH = 58, /* PATCH */
191 YYSYMBOL_READONLY = 59, /* READONLY */
192 YYSYMBOL_WRITEONLY = 60, /* WRITEONLY */
193 YYSYMBOL_COHERENT = 61, /* COHERENT */
194 YYSYMBOL_RESTRICT = 62, /* RESTRICT */
195 YYSYMBOL_VOLATILE = 63, /* VOLATILE */
196 YYSYMBOL_SHARED = 64, /* SHARED */
197 YYSYMBOL_STRUCT = 65, /* STRUCT */
198 YYSYMBOL_VOID_TYPE = 66, /* VOID_TYPE */
199 YYSYMBOL_WHILE = 67, /* WHILE */
200 YYSYMBOL_SAMPLER2D = 68, /* SAMPLER2D */
201 YYSYMBOL_SAMPLERCUBE = 69, /* SAMPLERCUBE */
202 YYSYMBOL_SAMPLER_EXTERNAL_OES = 70, /* SAMPLER_EXTERNAL_OES */
203 YYSYMBOL_SAMPLER2DRECT = 71, /* SAMPLER2DRECT */
204 YYSYMBOL_SAMPLER2DARRAY = 72, /* SAMPLER2DARRAY */
205 YYSYMBOL_ISAMPLER2D = 73, /* ISAMPLER2D */
206 YYSYMBOL_ISAMPLER3D = 74, /* ISAMPLER3D */
207 YYSYMBOL_ISAMPLERCUBE = 75, /* ISAMPLERCUBE */
208 YYSYMBOL_ISAMPLER2DARRAY = 76, /* ISAMPLER2DARRAY */
209 YYSYMBOL_USAMPLER2D = 77, /* USAMPLER2D */
210 YYSYMBOL_USAMPLER3D = 78, /* USAMPLER3D */
211 YYSYMBOL_USAMPLERCUBE = 79, /* USAMPLERCUBE */
212 YYSYMBOL_USAMPLER2DARRAY = 80, /* USAMPLER2DARRAY */
213 YYSYMBOL_SAMPLER2DMS = 81, /* SAMPLER2DMS */
214 YYSYMBOL_ISAMPLER2DMS = 82, /* ISAMPLER2DMS */
215 YYSYMBOL_USAMPLER2DMS = 83, /* USAMPLER2DMS */
216 YYSYMBOL_SAMPLER2DMSARRAY = 84, /* SAMPLER2DMSARRAY */
217 YYSYMBOL_ISAMPLER2DMSARRAY = 85, /* ISAMPLER2DMSARRAY */
218 YYSYMBOL_USAMPLER2DMSARRAY = 86, /* USAMPLER2DMSARRAY */
219 YYSYMBOL_SAMPLER3D = 87, /* SAMPLER3D */
220 YYSYMBOL_SAMPLER3DRECT = 88, /* SAMPLER3DRECT */
221 YYSYMBOL_SAMPLER2DSHADOW = 89, /* SAMPLER2DSHADOW */
222 YYSYMBOL_SAMPLERCUBESHADOW = 90, /* SAMPLERCUBESHADOW */
223 YYSYMBOL_SAMPLER2DARRAYSHADOW = 91, /* SAMPLER2DARRAYSHADOW */
224 YYSYMBOL_SAMPLERVIDEOWEBGL = 92, /* SAMPLERVIDEOWEBGL */
225 YYSYMBOL_SAMPLERCUBEARRAYOES = 93, /* SAMPLERCUBEARRAYOES */
226 YYSYMBOL_SAMPLERCUBEARRAYSHADOWOES = 94, /* SAMPLERCUBEARRAYSHADOWOES */
227 YYSYMBOL_ISAMPLERCUBEARRAYOES = 95, /* ISAMPLERCUBEARRAYOES */
228 YYSYMBOL_USAMPLERCUBEARRAYOES = 96, /* USAMPLERCUBEARRAYOES */
229 YYSYMBOL_SAMPLERCUBEARRAYEXT = 97, /* SAMPLERCUBEARRAYEXT */
230 YYSYMBOL_SAMPLERCUBEARRAYSHADOWEXT = 98, /* SAMPLERCUBEARRAYSHADOWEXT */
231 YYSYMBOL_ISAMPLERCUBEARRAYEXT = 99, /* ISAMPLERCUBEARRAYEXT */
232 YYSYMBOL_USAMPLERCUBEARRAYEXT = 100, /* USAMPLERCUBEARRAYEXT */
233 YYSYMBOL_SAMPLERBUFFER = 101, /* SAMPLERBUFFER */
234 YYSYMBOL_ISAMPLERBUFFER = 102, /* ISAMPLERBUFFER */
235 YYSYMBOL_USAMPLERBUFFER = 103, /* USAMPLERBUFFER */
236 YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 104, /* SAMPLEREXTERNAL2DY2YEXT */
237 YYSYMBOL_IMAGE2D = 105, /* IMAGE2D */
238 YYSYMBOL_IIMAGE2D = 106, /* IIMAGE2D */
239 YYSYMBOL_UIMAGE2D = 107, /* UIMAGE2D */
240 YYSYMBOL_IMAGE3D = 108, /* IMAGE3D */
241 YYSYMBOL_IIMAGE3D = 109, /* IIMAGE3D */
242 YYSYMBOL_UIMAGE3D = 110, /* UIMAGE3D */
243 YYSYMBOL_IMAGE2DARRAY = 111, /* IMAGE2DARRAY */
244 YYSYMBOL_IIMAGE2DARRAY = 112, /* IIMAGE2DARRAY */
245 YYSYMBOL_UIMAGE2DARRAY = 113, /* UIMAGE2DARRAY */
246 YYSYMBOL_IMAGECUBE = 114, /* IMAGECUBE */
247 YYSYMBOL_IIMAGECUBE = 115, /* IIMAGECUBE */
248 YYSYMBOL_UIMAGECUBE = 116, /* UIMAGECUBE */
249 YYSYMBOL_IMAGECUBEARRAYOES = 117, /* IMAGECUBEARRAYOES */
250 YYSYMBOL_IIMAGECUBEARRAYOES = 118, /* IIMAGECUBEARRAYOES */
251 YYSYMBOL_UIMAGECUBEARRAYOES = 119, /* UIMAGECUBEARRAYOES */
252 YYSYMBOL_IMAGECUBEARRAYEXT = 120, /* IMAGECUBEARRAYEXT */
253 YYSYMBOL_IIMAGECUBEARRAYEXT = 121, /* IIMAGECUBEARRAYEXT */
254 YYSYMBOL_UIMAGECUBEARRAYEXT = 122, /* UIMAGECUBEARRAYEXT */
255 YYSYMBOL_IMAGEBUFFER = 123, /* IMAGEBUFFER */
256 YYSYMBOL_IIMAGEBUFFER = 124, /* IIMAGEBUFFER */
257 YYSYMBOL_UIMAGEBUFFER = 125, /* UIMAGEBUFFER */
258 YYSYMBOL_ATOMICUINT = 126, /* ATOMICUINT */
259 YYSYMBOL_PIXELLOCALANGLE = 127, /* PIXELLOCALANGLE */
260 YYSYMBOL_IPIXELLOCALANGLE = 128, /* IPIXELLOCALANGLE */
261 YYSYMBOL_UPIXELLOCALANGLE = 129, /* UPIXELLOCALANGLE */
262 YYSYMBOL_LAYOUT = 130, /* LAYOUT */
263 YYSYMBOL_YUVCSCSTANDARDEXT = 131, /* YUVCSCSTANDARDEXT */
264 YYSYMBOL_YUVCSCSTANDARDEXTCONSTANT = 132, /* YUVCSCSTANDARDEXTCONSTANT */
265 YYSYMBOL_IDENTIFIER = 133, /* IDENTIFIER */
266 YYSYMBOL_TYPE_NAME = 134, /* TYPE_NAME */
267 YYSYMBOL_FLOATCONSTANT = 135, /* FLOATCONSTANT */
268 YYSYMBOL_INTCONSTANT = 136, /* INTCONSTANT */
269 YYSYMBOL_UINTCONSTANT = 137, /* UINTCONSTANT */
270 YYSYMBOL_BOOLCONSTANT = 138, /* BOOLCONSTANT */
271 YYSYMBOL_FIELD_SELECTION = 139, /* FIELD_SELECTION */
272 YYSYMBOL_LEFT_OP = 140, /* LEFT_OP */
273 YYSYMBOL_RIGHT_OP = 141, /* RIGHT_OP */
274 YYSYMBOL_INC_OP = 142, /* INC_OP */
275 YYSYMBOL_DEC_OP = 143, /* DEC_OP */
276 YYSYMBOL_LE_OP = 144, /* LE_OP */
277 YYSYMBOL_GE_OP = 145, /* GE_OP */
278 YYSYMBOL_EQ_OP = 146, /* EQ_OP */
279 YYSYMBOL_NE_OP = 147, /* NE_OP */
280 YYSYMBOL_AND_OP = 148, /* AND_OP */
281 YYSYMBOL_OR_OP = 149, /* OR_OP */
282 YYSYMBOL_XOR_OP = 150, /* XOR_OP */
283 YYSYMBOL_MUL_ASSIGN = 151, /* MUL_ASSIGN */
284 YYSYMBOL_DIV_ASSIGN = 152, /* DIV_ASSIGN */
285 YYSYMBOL_ADD_ASSIGN = 153, /* ADD_ASSIGN */
286 YYSYMBOL_MOD_ASSIGN = 154, /* MOD_ASSIGN */
287 YYSYMBOL_LEFT_ASSIGN = 155, /* LEFT_ASSIGN */
288 YYSYMBOL_RIGHT_ASSIGN = 156, /* RIGHT_ASSIGN */
289 YYSYMBOL_AND_ASSIGN = 157, /* AND_ASSIGN */
290 YYSYMBOL_XOR_ASSIGN = 158, /* XOR_ASSIGN */
291 YYSYMBOL_OR_ASSIGN = 159, /* OR_ASSIGN */
292 YYSYMBOL_SUB_ASSIGN = 160, /* SUB_ASSIGN */
293 YYSYMBOL_LEFT_PAREN = 161, /* LEFT_PAREN */
294 YYSYMBOL_RIGHT_PAREN = 162, /* RIGHT_PAREN */
295 YYSYMBOL_LEFT_BRACKET = 163, /* LEFT_BRACKET */
296 YYSYMBOL_RIGHT_BRACKET = 164, /* RIGHT_BRACKET */
297 YYSYMBOL_LEFT_BRACE = 165, /* LEFT_BRACE */
298 YYSYMBOL_RIGHT_BRACE = 166, /* RIGHT_BRACE */
299 YYSYMBOL_DOT = 167, /* DOT */
300 YYSYMBOL_COMMA = 168, /* COMMA */
301 YYSYMBOL_COLON = 169, /* COLON */
302 YYSYMBOL_EQUAL = 170, /* EQUAL */
303 YYSYMBOL_SEMICOLON = 171, /* SEMICOLON */
304 YYSYMBOL_BANG = 172, /* BANG */
305 YYSYMBOL_DASH = 173, /* DASH */
306 YYSYMBOL_TILDE = 174, /* TILDE */
307 YYSYMBOL_PLUS = 175, /* PLUS */
308 YYSYMBOL_STAR = 176, /* STAR */
309 YYSYMBOL_SLASH = 177, /* SLASH */
310 YYSYMBOL_PERCENT = 178, /* PERCENT */
311 YYSYMBOL_LEFT_ANGLE = 179, /* LEFT_ANGLE */
312 YYSYMBOL_RIGHT_ANGLE = 180, /* RIGHT_ANGLE */
313 YYSYMBOL_VERTICAL_BAR = 181, /* VERTICAL_BAR */
314 YYSYMBOL_CARET = 182, /* CARET */
315 YYSYMBOL_AMPERSAND = 183, /* AMPERSAND */
316 YYSYMBOL_QUESTION = 184, /* QUESTION */
317 YYSYMBOL_YYACCEPT = 185, /* $accept */
318 YYSYMBOL_identifier = 186, /* identifier */
319 YYSYMBOL_variable_identifier = 187, /* variable_identifier */
320 YYSYMBOL_primary_expression = 188, /* primary_expression */
321 YYSYMBOL_postfix_expression = 189, /* postfix_expression */
322 YYSYMBOL_integer_expression = 190, /* integer_expression */
323 YYSYMBOL_function_call = 191, /* function_call */
324 YYSYMBOL_function_call_or_method = 192, /* function_call_or_method */
325 YYSYMBOL_function_call_generic = 193, /* function_call_generic */
326 YYSYMBOL_function_call_header_no_parameters = 194, /* function_call_header_no_parameters */
327 YYSYMBOL_function_call_header_with_parameters = 195, /* function_call_header_with_parameters */
328 YYSYMBOL_function_call_header = 196, /* function_call_header */
329 YYSYMBOL_function_identifier = 197, /* function_identifier */
330 YYSYMBOL_unary_expression = 198, /* unary_expression */
331 YYSYMBOL_unary_operator = 199, /* unary_operator */
332 YYSYMBOL_multiplicative_expression = 200, /* multiplicative_expression */
333 YYSYMBOL_additive_expression = 201, /* additive_expression */
334 YYSYMBOL_shift_expression = 202, /* shift_expression */
335 YYSYMBOL_relational_expression = 203, /* relational_expression */
336 YYSYMBOL_equality_expression = 204, /* equality_expression */
337 YYSYMBOL_and_expression = 205, /* and_expression */
338 YYSYMBOL_exclusive_or_expression = 206, /* exclusive_or_expression */
339 YYSYMBOL_inclusive_or_expression = 207, /* inclusive_or_expression */
340 YYSYMBOL_logical_and_expression = 208, /* logical_and_expression */
341 YYSYMBOL_logical_xor_expression = 209, /* logical_xor_expression */
342 YYSYMBOL_logical_or_expression = 210, /* logical_or_expression */
343 YYSYMBOL_conditional_expression = 211, /* conditional_expression */
344 YYSYMBOL_assignment_expression = 212, /* assignment_expression */
345 YYSYMBOL_assignment_operator = 213, /* assignment_operator */
346 YYSYMBOL_expression = 214, /* expression */
347 YYSYMBOL_constant_expression = 215, /* constant_expression */
348 YYSYMBOL_enter_struct = 216, /* enter_struct */
349 YYSYMBOL_declaration = 217, /* declaration */
350 YYSYMBOL_function_prototype = 218, /* function_prototype */
351 YYSYMBOL_function_declarator = 219, /* function_declarator */
352 YYSYMBOL_function_header_with_parameters = 220, /* function_header_with_parameters */
353 YYSYMBOL_function_header = 221, /* function_header */
354 YYSYMBOL_parameter_declarator = 222, /* parameter_declarator */
355 YYSYMBOL_parameter_declaration = 223, /* parameter_declaration */
356 YYSYMBOL_parameter_type_specifier = 224, /* parameter_type_specifier */
357 YYSYMBOL_init_declarator_list = 225, /* init_declarator_list */
358 YYSYMBOL_single_declaration = 226, /* single_declaration */
359 YYSYMBOL_fully_specified_type = 227, /* fully_specified_type */
360 YYSYMBOL_interpolation_qualifier = 228, /* interpolation_qualifier */
361 YYSYMBOL_type_qualifier = 229, /* type_qualifier */
362 YYSYMBOL_invariant_qualifier = 230, /* invariant_qualifier */
363 YYSYMBOL_precise_qualifier = 231, /* precise_qualifier */
364 YYSYMBOL_single_type_qualifier = 232, /* single_type_qualifier */
365 YYSYMBOL_storage_qualifier = 233, /* storage_qualifier */
366 YYSYMBOL_type_specifier = 234, /* type_specifier */
367 YYSYMBOL_precision_qualifier = 235, /* precision_qualifier */
368 YYSYMBOL_layout_qualifier = 236, /* layout_qualifier */
369 YYSYMBOL_layout_qualifier_id_list = 237, /* layout_qualifier_id_list */
370 YYSYMBOL_layout_qualifier_id = 238, /* layout_qualifier_id */
371 YYSYMBOL_type_specifier_no_prec = 239, /* type_specifier_no_prec */
372 YYSYMBOL_array_specifier = 240, /* array_specifier */
373 YYSYMBOL_type_specifier_nonarray = 241, /* type_specifier_nonarray */
374 YYSYMBOL_struct_specifier = 242, /* struct_specifier */
375 YYSYMBOL_243_1 = 243, /* $@1 */
376 YYSYMBOL_244_2 = 244, /* $@2 */
377 YYSYMBOL_struct_declaration_list = 245, /* struct_declaration_list */
378 YYSYMBOL_struct_declaration = 246, /* struct_declaration */
379 YYSYMBOL_struct_declarator_list = 247, /* struct_declarator_list */
380 YYSYMBOL_struct_declarator = 248, /* struct_declarator */
381 YYSYMBOL_initializer = 249, /* initializer */
382 YYSYMBOL_declaration_statement = 250, /* declaration_statement */
383 YYSYMBOL_statement = 251, /* statement */
384 YYSYMBOL_simple_statement = 252, /* simple_statement */
385 YYSYMBOL_compound_statement_with_scope = 253, /* compound_statement_with_scope */
386 YYSYMBOL_254_3 = 254, /* $@3 */
387 YYSYMBOL_255_4 = 255, /* $@4 */
388 YYSYMBOL_statement_no_new_scope = 256, /* statement_no_new_scope */
389 YYSYMBOL_statement_with_scope = 257, /* statement_with_scope */
390 YYSYMBOL_258_5 = 258, /* $@5 */
391 YYSYMBOL_259_6 = 259, /* $@6 */
392 YYSYMBOL_compound_statement_no_new_scope = 260, /* compound_statement_no_new_scope */
393 YYSYMBOL_statement_list = 261, /* statement_list */
394 YYSYMBOL_expression_statement = 262, /* expression_statement */
395 YYSYMBOL_selection_statement = 263, /* selection_statement */
396 YYSYMBOL_selection_rest_statement = 264, /* selection_rest_statement */
397 YYSYMBOL_switch_statement = 265, /* switch_statement */
398 YYSYMBOL_266_7 = 266, /* $@7 */
399 YYSYMBOL_case_label = 267, /* case_label */
400 YYSYMBOL_condition = 268, /* condition */
401 YYSYMBOL_iteration_statement = 269, /* iteration_statement */
402 YYSYMBOL_270_8 = 270, /* $@8 */
403 YYSYMBOL_271_9 = 271, /* $@9 */
404 YYSYMBOL_272_10 = 272, /* $@10 */
405 YYSYMBOL_for_init_statement = 273, /* for_init_statement */
406 YYSYMBOL_conditionopt = 274, /* conditionopt */
407 YYSYMBOL_for_rest_statement = 275, /* for_rest_statement */
408 YYSYMBOL_jump_statement = 276, /* jump_statement */
409 YYSYMBOL_translation_unit = 277, /* translation_unit */
410 YYSYMBOL_external_declaration = 278, /* external_declaration */
411 YYSYMBOL_function_definition = 279, /* function_definition */
412 YYSYMBOL_280_11 = 280 /* $@11 */
413 };
414 typedef enum yysymbol_kind_t yysymbol_kind_t;
415
416 /* Second part of user prologue. */
417
418 extern int yylex(YYSTYPE *yylval, YYLTYPE *yylloc, void *yyscanner);
419 extern void yyerror(YYLTYPE *yylloc, TParseContext *context, void *scanner, const char *reason);
420
421 #define YYLLOC_DEFAULT(Current, Rhs, N) \
422 do \
423 { \
424 if (N) \
425 { \
426 (Current).first_file = YYRHSLOC(Rhs, 1).first_file; \
427 (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \
428 (Current).last_file = YYRHSLOC(Rhs, N).last_file; \
429 (Current).last_line = YYRHSLOC(Rhs, N).last_line; \
430 } \
431 else \
432 { \
433 (Current).first_file = YYRHSLOC(Rhs, 0).last_file; \
434 (Current).first_line = YYRHSLOC(Rhs, 0).last_line; \
435 (Current).last_file = YYRHSLOC(Rhs, 0).last_file; \
436 (Current).last_line = YYRHSLOC(Rhs, 0).last_line; \
437 } \
438 } while (0)
439
440 #define VERTEX_ONLY(S, L) \
441 do \
442 { \
443 if (context->getShaderType() != GL_VERTEX_SHADER) \
444 { \
445 context->error(L, " supported in vertex shaders only", S); \
446 } \
447 } while (0)
448
449 #define COMPUTE_ONLY(S, L) \
450 do \
451 { \
452 if (context->getShaderType() != GL_COMPUTE_SHADER) \
453 { \
454 context->error(L, " supported in compute shaders only", S); \
455 } \
456 } while (0)
457
458 #define ES2_ONLY(S, L) \
459 do \
460 { \
461 if (context->getShaderVersion() != 100) \
462 { \
463 context->error(L, " supported in GLSL ES 1.00 only", S); \
464 } \
465 } while (0)
466
467 #define ES3_OR_NEWER(TOKEN, LINE, REASON) \
468 do \
469 { \
470 if (context->getShaderVersion() < 300) \
471 { \
472 context->error(LINE, REASON " supported in GLSL ES 3.00 and above only", TOKEN); \
473 } \
474 } while (0)
475
476 #define ES3_1_OR_NEWER(TOKEN, LINE, REASON) \
477 do \
478 { \
479 if (context->getShaderVersion() < 310) \
480 { \
481 context->error(LINE, REASON " supported in GLSL ES 3.10 and above only", TOKEN); \
482 } \
483 } while (0)
484
485 #ifdef short
486 # undef short
487 #endif
488
489 /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
490 <limits.h> and (if available) <stdint.h> are included
491 so that the code can choose integer types of a good width. */
492
493 #ifndef __PTRDIFF_MAX__
494 # include <limits.h> /* INFRINGES ON USER NAME SPACE */
495 # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
496 # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
497 # define YY_STDINT_H
498 # endif
499 #endif
500
501 /* Narrow types that promote to a signed type and that can represent a
502 signed or unsigned integer of at least N bits. In tables they can
503 save space and decrease cache pressure. Promoting to a signed type
504 helps avoid bugs in integer arithmetic. */
505
506 #ifdef __INT_LEAST8_MAX__
507 typedef __INT_LEAST8_TYPE__ yytype_int8;
508 #elif defined YY_STDINT_H
509 typedef int_least8_t yytype_int8;
510 #else
511 typedef signed char yytype_int8;
512 #endif
513
514 #ifdef __INT_LEAST16_MAX__
515 typedef __INT_LEAST16_TYPE__ yytype_int16;
516 #elif defined YY_STDINT_H
517 typedef int_least16_t yytype_int16;
518 #else
519 typedef short yytype_int16;
520 #endif
521
522 /* Work around bug in HP-UX 11.23, which defines these macros
523 incorrectly for preprocessor constants. This workaround can likely
524 be removed in 2023, as HPE has promised support for HP-UX 11.23
525 (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
526 <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
527 #ifdef __hpux
528 # undef UINT_LEAST8_MAX
529 # undef UINT_LEAST16_MAX
530 # define UINT_LEAST8_MAX 255
531 # define UINT_LEAST16_MAX 65535
532 #endif
533
534 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
535 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
536 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H && UINT_LEAST8_MAX <= INT_MAX)
537 typedef uint_least8_t yytype_uint8;
538 #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
539 typedef unsigned char yytype_uint8;
540 #else
541 typedef short yytype_uint8;
542 #endif
543
544 #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
545 typedef __UINT_LEAST16_TYPE__ yytype_uint16;
546 #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H && UINT_LEAST16_MAX <= INT_MAX)
547 typedef uint_least16_t yytype_uint16;
548 #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
549 typedef unsigned short yytype_uint16;
550 #else
551 typedef int yytype_uint16;
552 #endif
553
554 #ifndef YYPTRDIFF_T
555 # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
556 # define YYPTRDIFF_T __PTRDIFF_TYPE__
557 # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
558 # elif defined PTRDIFF_MAX
559 # ifndef ptrdiff_t
560 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
561 # endif
562 # define YYPTRDIFF_T ptrdiff_t
563 # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
564 # else
565 # define YYPTRDIFF_T long
566 # define YYPTRDIFF_MAXIMUM LONG_MAX
567 # endif
568 #endif
569
570 #ifndef YYSIZE_T
571 # ifdef __SIZE_TYPE__
572 # define YYSIZE_T __SIZE_TYPE__
573 # elif defined size_t
574 # define YYSIZE_T size_t
575 # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
576 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
577 # define YYSIZE_T size_t
578 # else
579 # define YYSIZE_T unsigned
580 # endif
581 #endif
582
583 #define YYSIZE_MAXIMUM \
584 YY_CAST(YYPTRDIFF_T, (YYPTRDIFF_MAXIMUM < YY_CAST(YYSIZE_T, -1) ? YYPTRDIFF_MAXIMUM \
585 : YY_CAST(YYSIZE_T, -1)))
586
587 #define YYSIZEOF(X) YY_CAST(YYPTRDIFF_T, sizeof(X))
588
589 /* Stored state numbers (used for stacks). */
590 typedef yytype_int16 yy_state_t;
591
592 /* State numbers in computations. */
593 typedef int yy_state_fast_t;
594
595 #ifndef YY_
596 # if defined YYENABLE_NLS && YYENABLE_NLS
597 # if ENABLE_NLS
598 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
599 # define YY_(Msgid) dgettext("bison-runtime", Msgid)
600 # endif
601 # endif
602 # ifndef YY_
603 # define YY_(Msgid) Msgid
604 # endif
605 #endif
606
607 #ifndef YY_ATTRIBUTE_PURE
608 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
609 # define YY_ATTRIBUTE_PURE __attribute__((__pure__))
610 # else
611 # define YY_ATTRIBUTE_PURE
612 # endif
613 #endif
614
615 #ifndef YY_ATTRIBUTE_UNUSED
616 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
617 # define YY_ATTRIBUTE_UNUSED __attribute__((__unused__))
618 # else
619 # define YY_ATTRIBUTE_UNUSED
620 # endif
621 #endif
622
623 /* Suppress unused-variable warnings by "using" E. */
624 #if !defined lint || defined __GNUC__
625 # define YY_USE(E) ((void)(E))
626 #else
627 # define YY_USE(E) /* empty */
628 #endif
629
630 /* Suppress an incorrect diagnostic about yylval being uninitialized. */
631 #if defined __GNUC__ && !defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
632 # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
633 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
634 _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuninitialized\"")
635 # else
636 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
637 _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuninitialized\"") \
638 _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
639 # endif
640 # define YY_IGNORE_MAYBE_UNINITIALIZED_END _Pragma("GCC diagnostic pop")
641 #else
642 # define YY_INITIAL_VALUE(Value) Value
643 #endif
644 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
645 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
646 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
647 #endif
648 #ifndef YY_INITIAL_VALUE
649 # define YY_INITIAL_VALUE(Value) /* Nothing. */
650 #endif
651
652 #if defined __cplusplus && defined __GNUC__ && !defined __ICC && 6 <= __GNUC__
653 # define YY_IGNORE_USELESS_CAST_BEGIN \
654 _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wuseless-cast\"")
655 # define YY_IGNORE_USELESS_CAST_END _Pragma("GCC diagnostic pop")
656 #endif
657 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
658 # define YY_IGNORE_USELESS_CAST_BEGIN
659 # define YY_IGNORE_USELESS_CAST_END
660 #endif
661
662 #define YY_ASSERT(E) ((void)(0 && (E)))
663
664 #if !defined yyoverflow
665
666 /* The parser invokes alloca or malloc; define the necessary symbols. */
667
668 # ifdef YYSTACK_USE_ALLOCA
669 # if YYSTACK_USE_ALLOCA
670 # ifdef __GNUC__
671 # define YYSTACK_ALLOC __builtin_alloca
672 # elif defined __BUILTIN_VA_ARG_INCR
673 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
674 # elif defined _AIX
675 # define YYSTACK_ALLOC __alloca
676 # elif defined _MSC_VER
677 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
678 # define alloca _alloca
679 # else
680 # define YYSTACK_ALLOC alloca
681 # if !defined _ALLOCA_H && !defined EXIT_SUCCESS
682 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
683 /* Use EXIT_SUCCESS as a witness for stdlib.h. */
684 # ifndef EXIT_SUCCESS
685 # define EXIT_SUCCESS 0
686 # endif
687 # endif
688 # endif
689 # endif
690 # endif
691
692 # ifdef YYSTACK_ALLOC
693 /* Pacify GCC's 'empty if-body' warning. */
694 # define YYSTACK_FREE(Ptr) \
695 do \
696 { /* empty */ \
697 ; \
698 } while (0)
699 # ifndef YYSTACK_ALLOC_MAXIMUM
700 /* The OS might guarantee only one guard page at the bottom of the stack,
701 and a page size can be as small as 4096 bytes. So we cannot safely
702 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
703 to allow for a few compiler-allocated temporary stack slots. */
704 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
705 # endif
706 # else
707 # define YYSTACK_ALLOC YYMALLOC
708 # define YYSTACK_FREE YYFREE
709 # ifndef YYSTACK_ALLOC_MAXIMUM
710 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
711 # endif
712 # if (defined __cplusplus && !defined EXIT_SUCCESS && \
713 !((defined YYMALLOC || defined malloc) && (defined YYFREE || defined free)))
714 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
715 # ifndef EXIT_SUCCESS
716 # define EXIT_SUCCESS 0
717 # endif
718 # endif
719 # ifndef YYMALLOC
720 # define YYMALLOC malloc
721 # if !defined malloc && !defined EXIT_SUCCESS
722 void *malloc(YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
723 # endif
724 # endif
725 # ifndef YYFREE
726 # define YYFREE free
727 # if !defined free && !defined EXIT_SUCCESS
728 void free(void *); /* INFRINGES ON USER NAME SPACE */
729 # endif
730 # endif
731 # endif
732 #endif /* !defined yyoverflow */
733
734 #if (!defined yyoverflow && \
735 (!defined __cplusplus || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL && \
736 defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
737
738 /* A type that is properly aligned for any stack member. */
739 union yyalloc
740 {
741 yy_state_t yyss_alloc;
742 YYSTYPE yyvs_alloc;
743 YYLTYPE yyls_alloc;
744 };
745
746 /* The size of the maximum gap between one aligned stack and the next. */
747 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF(union yyalloc) - 1)
748
749 /* The size of an array large to enough to hold all stacks, each with
750 N elements. */
751 # define YYSTACK_BYTES(N) \
752 ((N) * (YYSIZEOF(yy_state_t) + YYSIZEOF(YYSTYPE) + YYSIZEOF(YYLTYPE)) + \
753 2 * YYSTACK_GAP_MAXIMUM)
754
755 # define YYCOPY_NEEDED 1
756
757 /* Relocate STACK from its old location to the new one. The
758 local variables YYSIZE and YYSTACKSIZE give the old and new number of
759 elements in the stack, and YYPTR gives the new location of the
760 stack. Advance YYPTR to a properly aligned location for the next
761 stack. */
762 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
763 do \
764 { \
765 YYPTRDIFF_T yynewbytes; \
766 YYCOPY(&yyptr->Stack_alloc, Stack, yysize); \
767 Stack = &yyptr->Stack_alloc; \
768 yynewbytes = yystacksize * YYSIZEOF(*Stack) + YYSTACK_GAP_MAXIMUM; \
769 yyptr += yynewbytes / YYSIZEOF(*yyptr); \
770 } while (0)
771
772 #endif
773
774 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
775 /* Copy COUNT objects from SRC to DST. The source and destination do
776 not overlap. */
777 # ifndef YYCOPY
778 # if defined __GNUC__ && 1 < __GNUC__
779 # define YYCOPY(Dst, Src, Count) \
780 __builtin_memcpy(Dst, Src, YY_CAST(YYSIZE_T, (Count)) * sizeof(*(Src)))
781 # else
782 # define YYCOPY(Dst, Src, Count) \
783 do \
784 { \
785 YYPTRDIFF_T yyi; \
786 for (yyi = 0; yyi < (Count); yyi++) \
787 (Dst)[yyi] = (Src)[yyi]; \
788 } while (0)
789 # endif
790 # endif
791 #endif /* !YYCOPY_NEEDED */
792
793 /* YYFINAL -- State number of the termination state. */
794 #define YYFINAL 167
795 /* YYLAST -- Last index in YYTABLE. */
796 #define YYLAST 3566
797
798 /* YYNTOKENS -- Number of terminals. */
799 #define YYNTOKENS 185
800 /* YYNNTS -- Number of nonterminals. */
801 #define YYNNTS 96
802 /* YYNRULES -- Number of rules. */
803 #define YYNRULES 329
804 /* YYNSTATES -- Number of states. */
805 #define YYNSTATES 453
806
807 /* YYMAXUTOK -- Last valid token kind. */
808 #define YYMAXUTOK 439
809
810 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
811 as returned by yylex, with out-of-bounds checking. */
812 #define YYTRANSLATE(YYX) \
813 (0 <= (YYX) && (YYX) <= YYMAXUTOK ? YY_CAST(yysymbol_kind_t, yytranslate[YYX]) \
814 : YYSYMBOL_YYUNDEF)
815
816 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
817 as returned by yylex. */
818 static const yytype_uint8 yytranslate[] = {
819 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
820 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
821 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
822 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
823 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
824 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
825 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
826 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
827 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
828 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
829 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
830 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
831 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
832 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
833 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
834 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
835 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
836 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
837 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
838 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
839 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
840 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
841 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
842 182, 183, 184};
843
844 #if YYDEBUG
845 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
846 static const yytype_int16 yyrline[] = {
847 0, 259, 259, 260, 263, 270, 273, 278, 283, 288, 293, 302, 308, 311, 314, 317,
848 320, 323, 329, 336, 342, 345, 353, 356, 362, 365, 371, 375, 382, 390, 393, 396,
849 402, 405, 408, 411, 418, 419, 420, 421, 429, 430, 433, 436, 443, 444, 447, 453,
850 454, 458, 465, 466, 469, 472, 475, 481, 482, 485, 491, 492, 499, 500, 507, 508,
851 515, 516, 522, 523, 529, 530, 536, 537, 543, 544, 550, 551, 552, 553, 557, 558,
852 559, 563, 567, 571, 575, 582, 585, 591, 598, 605, 608, 611, 615, 619, 623, 627,
853 631, 638, 645, 648, 655, 668, 691, 701, 704, 710, 714, 718, 722, 729, 735, 738,
854 742, 746, 751, 758, 762, 766, 770, 775, 782, 786, 792, 795, 798, 808, 812, 819,
855 825, 831, 835, 839, 842, 845, 849, 857, 862, 866, 869, 872, 875, 878, 882, 892,
856 895, 899, 902, 905, 908, 911, 914, 918, 925, 932, 935, 938, 944, 951, 954, 960,
857 963, 966, 969, 975, 978, 985, 990, 997, 1005, 1019, 1022, 1025, 1028, 1031, 1034, 1038,
858 1042, 1046, 1050, 1054, 1058, 1062, 1066, 1070, 1074, 1078, 1082, 1086, 1090, 1094, 1098, 1102,
859 1106, 1110, 1114, 1118, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1151, 1159, 1169, 1172, 1175,
860 1178, 1181, 1184, 1187, 1195, 1203, 1213, 1216, 1219, 1222, 1225, 1228, 1231, 1239, 1247, 1257,
861 1260, 1263, 1266, 1274, 1282, 1289, 1299, 1306, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334,
862 1337, 1340, 1343, 1346, 1349, 1357, 1365, 1373, 1381, 1389, 1397, 1407, 1417, 1427, 1430, 1437,
863 1444, 1451, 1454, 1464, 1464, 1467, 1467, 1473, 1476, 1482, 1485, 1492, 1496, 1502, 1505, 1511,
864 1515, 1519, 1520, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1536, 1540, 1540, 1540, 1547, 1548,
865 1552, 1552, 1553, 1553, 1558, 1562, 1569, 1573, 1580, 1581, 1588, 1594, 1598, 1607, 1607, 1614,
866 1617, 1623, 1627, 1633, 1633, 1638, 1638, 1642, 1642, 1650, 1653, 1659, 1662, 1668, 1672, 1679,
867 1682, 1685, 1688, 1691, 1699, 1705, 1711, 1714, 1720, 1720};
868 #endif
869
870 /** Accessing symbol of state STATE. */
871 #define YY_ACCESSING_SYMBOL(State) YY_CAST(yysymbol_kind_t, yystos[State])
872
873 #if YYDEBUG || 0
874 /* The user-facing name of the symbol whose (internal) number is
875 YYSYMBOL. No bounds checking. */
876 static const char *yysymbol_name(yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
877
878 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
879 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
880 static const char *const yytname[] = {"\"end of file\"",
881 "error",
882 "\"invalid token\"",
883 "INVARIANT",
884 "PRECISE",
885 "HIGH_PRECISION",
886 "MEDIUM_PRECISION",
887 "LOW_PRECISION",
888 "PRECISION",
889 "ATTRIBUTE",
890 "CONST_QUAL",
891 "BOOL_TYPE",
892 "FLOAT_TYPE",
893 "INT_TYPE",
894 "UINT_TYPE",
895 "BREAK",
896 "CONTINUE",
897 "DO",
898 "ELSE",
899 "FOR",
900 "IF",
901 "DISCARD",
902 "RETURN",
903 "SWITCH",
904 "CASE",
905 "DEFAULT",
906 "BVEC2",
907 "BVEC3",
908 "BVEC4",
909 "IVEC2",
910 "IVEC3",
911 "IVEC4",
912 "VEC2",
913 "VEC3",
914 "VEC4",
915 "UVEC2",
916 "UVEC3",
917 "UVEC4",
918 "MATRIX2",
919 "MATRIX3",
920 "MATRIX4",
921 "IN_QUAL",
922 "OUT_QUAL",
923 "INOUT_QUAL",
924 "UNIFORM",
925 "BUFFER",
926 "VARYING",
927 "MATRIX2x3",
928 "MATRIX3x2",
929 "MATRIX2x4",
930 "MATRIX4x2",
931 "MATRIX3x4",
932 "MATRIX4x3",
933 "SAMPLE",
934 "CENTROID",
935 "FLAT",
936 "SMOOTH",
937 "NOPERSPECTIVE",
938 "PATCH",
939 "READONLY",
940 "WRITEONLY",
941 "COHERENT",
942 "RESTRICT",
943 "VOLATILE",
944 "SHARED",
945 "STRUCT",
946 "VOID_TYPE",
947 "WHILE",
948 "SAMPLER2D",
949 "SAMPLERCUBE",
950 "SAMPLER_EXTERNAL_OES",
951 "SAMPLER2DRECT",
952 "SAMPLER2DARRAY",
953 "ISAMPLER2D",
954 "ISAMPLER3D",
955 "ISAMPLERCUBE",
956 "ISAMPLER2DARRAY",
957 "USAMPLER2D",
958 "USAMPLER3D",
959 "USAMPLERCUBE",
960 "USAMPLER2DARRAY",
961 "SAMPLER2DMS",
962 "ISAMPLER2DMS",
963 "USAMPLER2DMS",
964 "SAMPLER2DMSARRAY",
965 "ISAMPLER2DMSARRAY",
966 "USAMPLER2DMSARRAY",
967 "SAMPLER3D",
968 "SAMPLER3DRECT",
969 "SAMPLER2DSHADOW",
970 "SAMPLERCUBESHADOW",
971 "SAMPLER2DARRAYSHADOW",
972 "SAMPLERVIDEOWEBGL",
973 "SAMPLERCUBEARRAYOES",
974 "SAMPLERCUBEARRAYSHADOWOES",
975 "ISAMPLERCUBEARRAYOES",
976 "USAMPLERCUBEARRAYOES",
977 "SAMPLERCUBEARRAYEXT",
978 "SAMPLERCUBEARRAYSHADOWEXT",
979 "ISAMPLERCUBEARRAYEXT",
980 "USAMPLERCUBEARRAYEXT",
981 "SAMPLERBUFFER",
982 "ISAMPLERBUFFER",
983 "USAMPLERBUFFER",
984 "SAMPLEREXTERNAL2DY2YEXT",
985 "IMAGE2D",
986 "IIMAGE2D",
987 "UIMAGE2D",
988 "IMAGE3D",
989 "IIMAGE3D",
990 "UIMAGE3D",
991 "IMAGE2DARRAY",
992 "IIMAGE2DARRAY",
993 "UIMAGE2DARRAY",
994 "IMAGECUBE",
995 "IIMAGECUBE",
996 "UIMAGECUBE",
997 "IMAGECUBEARRAYOES",
998 "IIMAGECUBEARRAYOES",
999 "UIMAGECUBEARRAYOES",
1000 "IMAGECUBEARRAYEXT",
1001 "IIMAGECUBEARRAYEXT",
1002 "UIMAGECUBEARRAYEXT",
1003 "IMAGEBUFFER",
1004 "IIMAGEBUFFER",
1005 "UIMAGEBUFFER",
1006 "ATOMICUINT",
1007 "PIXELLOCALANGLE",
1008 "IPIXELLOCALANGLE",
1009 "UPIXELLOCALANGLE",
1010 "LAYOUT",
1011 "YUVCSCSTANDARDEXT",
1012 "YUVCSCSTANDARDEXTCONSTANT",
1013 "IDENTIFIER",
1014 "TYPE_NAME",
1015 "FLOATCONSTANT",
1016 "INTCONSTANT",
1017 "UINTCONSTANT",
1018 "BOOLCONSTANT",
1019 "FIELD_SELECTION",
1020 "LEFT_OP",
1021 "RIGHT_OP",
1022 "INC_OP",
1023 "DEC_OP",
1024 "LE_OP",
1025 "GE_OP",
1026 "EQ_OP",
1027 "NE_OP",
1028 "AND_OP",
1029 "OR_OP",
1030 "XOR_OP",
1031 "MUL_ASSIGN",
1032 "DIV_ASSIGN",
1033 "ADD_ASSIGN",
1034 "MOD_ASSIGN",
1035 "LEFT_ASSIGN",
1036 "RIGHT_ASSIGN",
1037 "AND_ASSIGN",
1038 "XOR_ASSIGN",
1039 "OR_ASSIGN",
1040 "SUB_ASSIGN",
1041 "LEFT_PAREN",
1042 "RIGHT_PAREN",
1043 "LEFT_BRACKET",
1044 "RIGHT_BRACKET",
1045 "LEFT_BRACE",
1046 "RIGHT_BRACE",
1047 "DOT",
1048 "COMMA",
1049 "COLON",
1050 "EQUAL",
1051 "SEMICOLON",
1052 "BANG",
1053 "DASH",
1054 "TILDE",
1055 "PLUS",
1056 "STAR",
1057 "SLASH",
1058 "PERCENT",
1059 "LEFT_ANGLE",
1060 "RIGHT_ANGLE",
1061 "VERTICAL_BAR",
1062 "CARET",
1063 "AMPERSAND",
1064 "QUESTION",
1065 "$accept",
1066 "identifier",
1067 "variable_identifier",
1068 "primary_expression",
1069 "postfix_expression",
1070 "integer_expression",
1071 "function_call",
1072 "function_call_or_method",
1073 "function_call_generic",
1074 "function_call_header_no_parameters",
1075 "function_call_header_with_parameters",
1076 "function_call_header",
1077 "function_identifier",
1078 "unary_expression",
1079 "unary_operator",
1080 "multiplicative_expression",
1081 "additive_expression",
1082 "shift_expression",
1083 "relational_expression",
1084 "equality_expression",
1085 "and_expression",
1086 "exclusive_or_expression",
1087 "inclusive_or_expression",
1088 "logical_and_expression",
1089 "logical_xor_expression",
1090 "logical_or_expression",
1091 "conditional_expression",
1092 "assignment_expression",
1093 "assignment_operator",
1094 "expression",
1095 "constant_expression",
1096 "enter_struct",
1097 "declaration",
1098 "function_prototype",
1099 "function_declarator",
1100 "function_header_with_parameters",
1101 "function_header",
1102 "parameter_declarator",
1103 "parameter_declaration",
1104 "parameter_type_specifier",
1105 "init_declarator_list",
1106 "single_declaration",
1107 "fully_specified_type",
1108 "interpolation_qualifier",
1109 "type_qualifier",
1110 "invariant_qualifier",
1111 "precise_qualifier",
1112 "single_type_qualifier",
1113 "storage_qualifier",
1114 "type_specifier",
1115 "precision_qualifier",
1116 "layout_qualifier",
1117 "layout_qualifier_id_list",
1118 "layout_qualifier_id",
1119 "type_specifier_no_prec",
1120 "array_specifier",
1121 "type_specifier_nonarray",
1122 "struct_specifier",
1123 "$@1",
1124 "$@2",
1125 "struct_declaration_list",
1126 "struct_declaration",
1127 "struct_declarator_list",
1128 "struct_declarator",
1129 "initializer",
1130 "declaration_statement",
1131 "statement",
1132 "simple_statement",
1133 "compound_statement_with_scope",
1134 "$@3",
1135 "$@4",
1136 "statement_no_new_scope",
1137 "statement_with_scope",
1138 "$@5",
1139 "$@6",
1140 "compound_statement_no_new_scope",
1141 "statement_list",
1142 "expression_statement",
1143 "selection_statement",
1144 "selection_rest_statement",
1145 "switch_statement",
1146 "$@7",
1147 "case_label",
1148 "condition",
1149 "iteration_statement",
1150 "$@8",
1151 "$@9",
1152 "$@10",
1153 "for_init_statement",
1154 "conditionopt",
1155 "for_rest_statement",
1156 "jump_statement",
1157 "translation_unit",
1158 "external_declaration",
1159 "function_definition",
1160 "$@11",
1161 YY_NULLPTR};
1162
yysymbol_name(yysymbol_kind_t yysymbol)1163 static const char *yysymbol_name(yysymbol_kind_t yysymbol)
1164 {
1165 return yytname[yysymbol];
1166 }
1167 #endif
1168
1169 #define YYPACT_NINF (-397)
1170
1171 #define yypact_value_is_default(Yyn) ((Yyn) == YYPACT_NINF)
1172
1173 #define YYTABLE_NINF (-289)
1174
1175 #define yytable_value_is_error(Yyn) 0
1176
1177 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1178 STATE-NUM. */
1179 static const yytype_int16 yypact[] = {
1180 3052, -397, -397, -397, -397, -397, 105, -397, -397, -397, -397, -397, -397, -397, -397, -397,
1181 -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
1182 -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
1183 -397, -397, -397, -397, -94, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
1184 -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
1185 -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
1186 -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
1187 -397, -397, -397, -132, -397, -397, -397, -81, -41, -49, 3184, -90, -397, -86, -397, 1609,
1188 -397, -397, -397, -397, -397, -397, -397, -397, -39, -397, 2920, -397, -397, 3432, -397, -397,
1189 -397, -31, -47, -397, -26, -397, 3184, -397, -397, -397, 3184, 3, 3, -397, -35, -135,
1190 -114, -397, 3184, -397, -397, 1734, -10, -397, -397, -6, 3184, -397, -397, -9, -93, -397,
1191 438, -397, -397, -397, -397, -39, -97, -397, 2193, -87, -397, -397, 3184, 3, 2497, -397,
1192 -397, 7, -397, -397, -397, -397, -397, 2193, 2193, 2193, -397, -397, -397, -397, -397, -397,
1193 -397, -78, -397, -397, -397, 12, -69, 2344, 8, -397, 2193, -33, -96, -116, -124, 5,
1194 -12, -7, -4, 31, 30, -123, -397, 17, -397, 1888, -397, 2638, 3184, 19, -397, -47,
1195 13, 14, -397, 22, 25, 16, 2042, 28, 2193, 32, 44, 37, -397, -397, 40, -397,
1196 -397, -80, -397, -81, 45, -397, -397, -397, -397, 611, -397, -397, -397, -397, -397, -397,
1197 -10, 2193, -83, -397, -397, 2193, 3, -39, -76, -397, -111, -397, -397, -397, -62, -397,
1198 -397, 2193, 3308, -397, -397, 2193, 46, -397, -397, -397, 2193, 2193, 2193, 2193, 2193, 2193,
1199 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, -397, -397,
1200 47, -397, 2779, -397, -397, -397, -397, -397, 48, -397, 2193, -397, -397, -48, 2193, 43,
1201 -397, -397, -397, 784, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, 2193,
1202 2193, -397, -397, -397, -397, 2193, -397, -43, -10, 3, -397, -122, -397, -397, 51, 41,
1203 -397, 55, -397, -397, -397, -397, -397, -33, -33, -96, -96, -116, -116, -116, -116, -124,
1204 -124, 5, -12, -7, -4, 31, 30, -11, -397, -397, 150, -26, 1130, 1303, -60, -397,
1205 -59, -397, 1456, 784, -397, -397, -397, -397, -397, -397, -109, -397, 2193, 57, -397, -397,
1206 -397, -397, 1456, 48, -397, 41, 3, 3184, 58, 56, -397, -397, 2193, -397, 50, 61,
1207 206, -397, 60, 59, 957, -397, -55, 2193, 957, 48, -397, 2193, -397, -397, -397, 63,
1208 41, -397, -397, -397, -397};
1209
1210 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1211 Performed when YYTABLE does not specify something else to do. Zero
1212 means the default is an error. */
1213 static const yytype_int16 yydefact[] = {
1214 0, 127, 128, 153, 154, 155, 0, 135, 137, 173, 170, 171, 172, 177, 178, 179, 180, 181, 182,
1215 174, 175, 176, 183, 184, 185, 186, 187, 188, 138, 139, 140, 143, 144, 136, 189, 190, 191, 192,
1216 193, 194, 151, 141, 123, 122, 124, 142, 145, 146, 147, 148, 149, 150, 0, 169, 196, 198, 229,
1217 231, 199, 205, 206, 207, 208, 214, 215, 216, 217, 200, 209, 218, 201, 210, 219, 197, 223, 224,
1218 225, 228, 202, 226, 211, 220, 203, 227, 212, 221, 204, 213, 222, 230, 232, 233, 234, 235, 236,
1219 237, 238, 239, 240, 241, 242, 243, 244, 246, 248, 245, 247, 249, 250, 251, 252, 253, 254, 255,
1220 256, 0, 195, 258, 327, 328, 0, 99, 98, 0, 110, 115, 132, 0, 133, 134, 125, 129, 120,
1221 131, 130, 152, 163, 257, 0, 324, 326, 0, 2, 3, 261, 0, 0, 89, 0, 97, 0, 106,
1222 100, 108, 0, 109, 0, 90, 2, 116, 0, 95, 0, 126, 121, 0, 164, 1, 325, 0, 0,
1223 259, 162, 159, 0, 157, 0, 329, 101, 105, 107, 103, 111, 102, 0, 117, 88, 96, 0, 0,
1224 0, 263, 10, 4, 8, 6, 7, 9, 31, 0, 0, 0, 165, 38, 37, 39, 36, 5, 12,
1225 32, 14, 19, 20, 0, 0, 25, 0, 40, 0, 44, 47, 50, 55, 58, 60, 62, 64, 66,
1226 68, 70, 87, 0, 29, 0, 91, 0, 0, 0, 156, 0, 0, 0, 309, 0, 0, 0, 0,
1227 0, 0, 0, 0, 283, 292, 296, 40, 72, 85, 0, 272, 0, 152, 275, 294, 274, 273, 0,
1228 276, 277, 278, 279, 280, 281, 104, 0, 112, 271, 119, 0, 0, 269, 0, 267, 0, 264, 33,
1229 34, 0, 16, 17, 0, 0, 23, 22, 0, 169, 26, 28, 35, 0, 0, 0, 0, 0, 0,
1230 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 167, 0, 262, 0,
1231 160, 161, 158, 320, 319, 290, 311, 0, 323, 321, 0, 0, 0, 304, 307, 282, 0, 75, 76,
1232 78, 77, 80, 81, 82, 83, 84, 79, 74, 0, 0, 297, 293, 295, 114, 0, 118, 0, 270,
1233 0, 265, 0, 92, 11, 0, 18, 30, 15, 21, 27, 41, 42, 43, 46, 45, 48, 49, 53,
1234 54, 51, 52, 56, 57, 59, 61, 63, 65, 67, 69, 0, 168, 260, 0, 0, 0, 0, 0,
1235 322, 0, 303, 0, 284, 73, 86, 113, 266, 268, 93, 0, 13, 0, 0, 289, 291, 314, 313,
1236 316, 290, 301, 305, 0, 0, 0, 0, 94, 71, 0, 315, 0, 0, 300, 298, 0, 0, 0,
1237 285, 0, 317, 0, 290, 302, 0, 287, 308, 286, 0, 318, 312, 299, 306, 310};
1238
1239 /* YYPGOTO[NTERM-NUM]. */
1240 static const yytype_int16 yypgoto[] = {
1241 -397, -51, -397, -397, -397, -397, -397, -397, -64, -397, -397, -397, -397, 42, -397, -142,
1242 -140, -175, -143, -84, -75, -85, -82, -77, -73, -397, -151, -179, -397, -188, -202, -397,
1243 9, 10, -397, -397, -397, 77, 89, 90, -397, -397, -375, -397, -118, -397, -397, -121,
1244 -397, -120, 239, -397, -397, 15, 0, -144, -397, -397, -397, -397, -152, -182, -32, -113,
1245 -261, -150, -254, -377, -185, -397, -397, -187, -396, -397, -397, -145, -72, -141, -397, -397,
1246 -397, -397, -397, -166, -397, -397, -397, -397, -397, -397, -397, -397, -397, 117, -397, -397};
1247
1248 /* YYDEFGOTO[NTERM-NUM]. */
1249 static const yytype_int16 yydefgoto[] = {
1250 0, 279, 207, 208, 209, 366, 210, 211, 212, 213, 214, 215, 216, 254, 218, 219,
1251 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 255, 256, 351, 257, 231, 162,
1252 258, 259, 120, 121, 122, 151, 152, 153, 123, 124, 125, 126, 127, 128, 129, 130,
1253 131, 132, 133, 134, 174, 175, 232, 166, 136, 137, 236, 170, 190, 191, 280, 281,
1254 276, 261, 262, 263, 264, 339, 425, 445, 394, 395, 396, 446, 265, 266, 267, 433,
1255 268, 434, 269, 424, 270, 402, 328, 397, 418, 430, 431, 271, 138, 139, 140, 148};
1256
1257 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
1258 positive, shift that token. If negative, reduce the rule whose
1259 number is the opposite. If YYTABLE_NINF, syntax error. */
1260 static const yytype_int16 yytable[] = {
1261 135, 145, 155, 177, 154, 275, 163, 164, 283, 118, 119, 355, 356, 286, 230, 185, 358, 172, 235,
1262 415, 305, 306, 363, 432, 303, 304, 316, 422, 165, 146, 155, 320, 154, 163, 155, 184, 295, 272,
1263 274, 142, 143, 165, 189, 422, 188, 450, 335, 158, 143, 409, 189, 186, 188, 283, 233, 307, 308,
1264 187, 333, 444, 364, 317, 426, 444, 287, 288, 165, 163, 278, 238, 189, 144, 188, 273, 159, 239,
1265 233, 301, 156, 302, 233, 157, 230, 277, 322, 289, 173, 357, 352, 290, 147, 353, 361, 292, 275,
1266 362, 406, 230, 275, 293, 365, 367, 419, 420, 181, 182, 352, 447, 352, 352, 3, 4, 5, 352,
1267 371, 189, 189, 188, 188, 150, 352, 149, 135, 399, 165, 361, 183, 135, 407, 391, 379, 380, 381,
1268 382, 171, 360, 142, 143, 135, 176, 283, 169, 398, 298, 299, 300, 400, 118, 119, 355, 135, 309,
1269 310, 233, 135, 323, 324, 352, 412, 375, 376, 237, 135, 377, 378, 234, 383, 384, -30, 296, 135,
1270 311, 404, 405, 291, 312, 260, 313, 275, 314, 315, 318, 451, 329, 326, 327, 330, 331, 135, 334,
1271 135, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 336, 189, 338, 188, 337, -29, 217, -24,
1272 352, 350, 392, 401, -288, 421, 411, -31, 413, 428, 410, 436, 439, 437, 440, 441, 251, 370, 385,
1273 387, 443, 421, 179, 388, 427, 452, 135, 135, 386, 389, 178, 438, 284, 285, 390, 180, 141, 359,
1274 416, 408, 442, 414, 448, 429, 449, 325, 168, 417, 0, 0, 0, 297, 0, 0, 0, 275, 260,
1275 0, 403, 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 423,
1276 0, 0, 0, 0, 0, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, 163, 164,
1277 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
1278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 372, 373,
1279 374, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 0, 0,
1280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, 0,
1281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260, 260, 0,
1282 0, 0, 0, 260, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1283 260, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 260,
1284 0, 0, 0, 260, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 240, 241, 242,
1285 0, 243, 244, 245, 246, 247, 248, 249, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
1286 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
1287 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 250, 54, 55, 56, 57, 58, 59, 60,
1288 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78,
1289 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
1290 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
1291 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200, 0, 0, 0, 0, 0, 0, 0,
1292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 251, 252, 0, 0, 0,
1293 0, 253, 203, 204, 205, 206, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 240,
1294 241, 242, 0, 243, 244, 245, 246, 247, 248, 249, 13, 14, 15, 16, 17, 18, 19, 20, 21,
1295 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1296 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 250, 54, 55, 56, 57, 58,
1297 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76,
1298 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
1299 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1300 115, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200, 0, 0, 0, 0, 0,
1301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 251, 354, 0,
1302 0, 0, 0, 253, 203, 204, 205, 206, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1303 12, 240, 241, 242, 0, 243, 244, 245, 246, 247, 248, 249, 13, 14, 15, 16, 17, 18, 19,
1304 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
1305 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 250, 54, 55, 56,
1306 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 74,
1307 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
1308 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
1309 113, 114, 115, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200, 0, 0, 0,
1310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 251,
1311 0, 0, 0, 0, 0, 253, 203, 204, 205, 206, 1, 2, 3, 4, 5, 6, 7, 8, 9,
1312 10, 11, 12, 240, 241, 242, 0, 243, 244, 245, 246, 247, 248, 249, 13, 14, 15, 16, 17,
1313 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
1314 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 250, 54,
1315 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1316 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
1317 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
1318 111, 112, 113, 114, 115, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200, 0,
1319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0,
1320 0, 176, 0, 0, 0, 0, 0, 253, 203, 204, 205, 206, 1, 2, 3, 4, 5, 6, 7,
1321 8, 9, 10, 11, 12, 240, 241, 242, 0, 243, 244, 245, 246, 247, 248, 249, 13, 14, 15,
1322 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1323 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
1324 250, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
1325 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
1326 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
1327 109, 110, 111, 112, 113, 114, 115, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199,
1328 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201,
1329 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 203, 204, 205, 206, 1, 2, 3, 4, 5,
1330 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
1331 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
1332 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
1333 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
1334 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
1335 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1336 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0,
1337 0, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4,
1338 5, 201, 7, 8, 9, 10, 11, 12, 0, 0, 0, 253, 203, 204, 205, 206, 0, 0, 0,
1339 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1340 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
1341 51, 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1342 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1343 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
1344 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 192, 193, 117, 194, 195, 196, 197, 198,
1345 0, 0, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3,
1346 4, 5, 201, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 203, 204, 205, 206, 0, 0,
1347 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
1348 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
1349 50, 51, 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1350 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
1351 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1352 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, 160, 117, 0, 9, 10, 11,
1353 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18, 19,
1354 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 161, 34, 35, 36, 37, 38,
1355 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 0, 54, 55, 56,
1356 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 74,
1357 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
1358 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
1359 113, 114, 0, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200, 0, 0, 0,
1360 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 202, 9,
1361 10, 11, 12, 0, 0, 0, 203, 204, 205, 206, 0, 0, 0, 0, 13, 14, 15, 16, 17,
1362 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 34, 35, 36,
1363 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 0, 54,
1364 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1365 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
1366 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
1367 111, 112, 113, 114, 0, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200, 0,
1368 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0,
1369 319, 9, 10, 11, 12, 0, 0, 0, 203, 204, 205, 206, 0, 0, 0, 0, 13, 14, 15,
1370 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 34,
1371 35, 36, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53,
1372 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
1373 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
1374 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
1375 109, 110, 111, 112, 113, 114, 0, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199,
1376 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201,
1377 9, 10, 11, 12, 0, 0, 0, 0, 0, 332, 203, 204, 205, 206, 0, 13, 14, 15, 16,
1378 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 34, 35,
1379 36, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 0,
1380 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
1381 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
1382 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
1383 110, 111, 112, 113, 114, 0, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200,
1384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 9,
1385 10, 11, 12, 0, 0, 0, 0, 0, 0, 203, 204, 205, 206, 0, 13, 14, 15, 16, 17,
1386 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 34, 35, 36,
1387 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 294, 0, 54,
1388 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1389 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
1390 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
1391 111, 112, 113, 114, 0, 116, 192, 193, 117, 194, 195, 196, 197, 198, 0, 0, 199, 200, 0,
1392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 201, 7, 8,
1393 9, 10, 11, 12, 0, 0, 0, 0, 203, 204, 205, 206, 0, 0, 0, 13, 14, 15, 16,
1394 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1395 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 0,
1396 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
1397 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
1398 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
1399 110, 111, 112, 113, 114, 115, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1400 1, 2, 3, 4, 5, 0, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0,
1401 0, 0, 0, 282, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
1402 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
1403 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1404 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1405 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1406 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, 117, 0,
1407 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 7, 8, 9, 10, 11,
1408 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, 13, 14, 15, 16, 17, 18, 19,
1409 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
1410 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 0, 54, 55, 56,
1411 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 74,
1412 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
1413 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
1414 113, 114, 115, 116, 0, 0, 117, 0, 0, 0, 0, 0, 0, 167, 0, 0, 1, 2, 3,
1415 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1416 393, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
1417 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
1418 50, 51, 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
1419 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
1420 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1421 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, 117, 1, 2, 3, 4,
1422 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1423 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1424 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
1425 51, 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1426 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1427 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
1428 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, 117, 1, 2, 3, 4, 5,
1429 0, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,
1430 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
1431 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
1432 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
1433 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
1434 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1435 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 0, 0, 117, 9, 10, 11, 12, 0, 0,
1436 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
1437 23, 24, 25, 26, 27, 0, 0, 0, 0, 0, 0, 34, 35, 36, 37, 38, 39, 0, 0,
1438 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 53, 0, 54, 55, 56, 57, 58, 59,
1439 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 0, 74, 75, 76, 77,
1440 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
1441 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 0,
1442 116, 0, 368, 117, 9, 10, 11, 12, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1443 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 0, 0, 0, 0,
1444 0, 0, 34, 35, 36, 37, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1445 0, 52, 53, 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1446 69, 70, 71, 72, 73, 0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1447 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
1448 106, 107, 108, 109, 110, 111, 112, 113, 114, 0, 116, 0, 0, 117};
1449
1450 static const yytype_int16 yycheck[] = {
1451 0, 52, 122, 148, 122, 184, 127, 127, 190, 0, 0, 265, 273, 201, 165, 159, 277, 64, 170,
1452 396, 144, 145, 133, 419, 140, 141, 149, 402, 163, 161, 150, 233, 150, 154, 154, 170, 215, 181,
1453 182, 133, 134, 163, 162, 418, 162, 441, 248, 133, 134, 171, 170, 165, 170, 235, 163, 179, 180,
1454 171, 246, 436, 171, 184, 171, 440, 142, 143, 163, 188, 188, 162, 190, 165, 190, 170, 125, 168,
1455 163, 173, 168, 175, 163, 171, 233, 170, 236, 163, 133, 170, 168, 167, 171, 171, 168, 162, 273,
1456 171, 357, 248, 277, 168, 162, 289, 162, 162, 155, 156, 168, 162, 168, 168, 5, 6, 7, 168,
1457 293, 235, 236, 235, 236, 168, 168, 162, 122, 171, 163, 168, 161, 127, 171, 317, 305, 306, 307,
1458 308, 165, 279, 133, 134, 138, 165, 322, 141, 330, 176, 177, 178, 334, 138, 138, 403, 150, 146,
1459 147, 163, 154, 136, 137, 168, 169, 301, 302, 170, 162, 303, 304, 171, 309, 310, 161, 161, 170,
1460 183, 351, 352, 162, 182, 176, 181, 357, 148, 150, 164, 443, 161, 171, 171, 161, 171, 188, 161,
1461 190, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 169, 322, 166, 322, 161, 161, 165, 162,
1462 168, 170, 164, 169, 165, 402, 164, 161, 67, 161, 363, 162, 171, 166, 162, 18, 165, 290, 311,
1463 313, 170, 418, 154, 314, 412, 171, 235, 236, 312, 315, 150, 428, 199, 200, 316, 154, 6, 278,
1464 397, 361, 434, 395, 439, 418, 440, 239, 138, 397, -1, -1, -1, 218, -1, -1, -1, 443, 265,
1465 -1, 339, -1, -1, -1, -1, -1, -1, -1, 233, -1, -1, -1, -1, -1, -1, -1, -1, 402,
1466 -1, -1, -1, -1, -1, 248, -1, -1, -1, -1, -1, -1, -1, -1, -1, 418, -1, 423, 423,
1467 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322,
1468 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 339, 298, 299,
1469 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
1470 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 422, -1, -1, -1, -1, -1, -1, -1, -1,
1471 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, 397, -1,
1472 -1, -1, -1, 402, 403, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1473 418, -1, -1, -1, -1, 423, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 436,
1474 -1, -1, -1, 440, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
1475 -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
1476 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
1477 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1478 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93,
1479 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
1480 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
1481 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, -1, -1, -1, -1, -1, -1, -1,
1482 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, -1, -1, 165, 166, -1, -1, -1,
1483 -1, 171, 172, 173, 174, 175, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1484 16, 17, -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1485 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
1486 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
1487 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89, 90, 91,
1488 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
1489 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
1490 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, -1, -1, -1, -1, -1,
1491 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, -1, -1, 165, 166, -1,
1492 -1, -1, -1, 171, 172, 173, 174, 175, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
1493 14, 15, 16, 17, -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
1494 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
1495 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
1496 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89,
1497 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
1498 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
1499 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, -1, -1, -1,
1500 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, -1, -1, 165,
1501 -1, -1, -1, -1, -1, 171, 172, 173, 174, 175, 3, 4, 5, 6, 7, 8, 9, 10, 11,
1502 12, 13, 14, 15, 16, 17, -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
1503 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
1504 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
1505 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
1506 -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1507 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
1508 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, -1,
1509 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, -1,
1510 -1, 165, -1, -1, -1, -1, -1, 171, 172, 173, 174, 175, 3, 4, 5, 6, 7, 8, 9,
1511 10, 11, 12, 13, 14, 15, 16, 17, -1, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
1512 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1513 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1514 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
1515 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1516 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
1517 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142,
1518 143, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161,
1519 -1, -1, -1, -1, -1, -1, -1, -1, -1, 171, 172, 173, 174, 175, 3, 4, 5, 6, 7,
1520 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26,
1521 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
1522 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1523 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1524 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
1525 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
1526 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1,
1527 -1, 142, 143, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 6,
1528 7, 161, 9, 10, 11, 12, 13, 14, -1, -1, -1, 171, 172, 173, 174, 175, -1, -1, -1,
1529 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1530 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1531 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1532 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1533 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1534 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
1535 -1, -1, 142, 143, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
1536 6, 7, 161, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, 172, 173, 174, 175, -1, -1,
1537 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
1538 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
1539 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1540 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
1541 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
1542 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, 133, 134, -1, 11, 12, 13,
1543 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32,
1544 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, 171, 47, 48, 49, 50, 51,
1545 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, -1, 68, 69, 70,
1546 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89,
1547 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
1548 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
1549 128, 129, -1, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, -1, -1, -1,
1550 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, -1, 164, 11,
1551 12, 13, 14, -1, -1, -1, 172, 173, 174, 175, -1, -1, -1, -1, 26, 27, 28, 29, 30,
1552 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, 47, 48, 49,
1553 50, 51, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, -1, 68,
1554 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
1555 -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1556 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
1557 126, 127, 128, 129, -1, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, -1,
1558 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, -1, -1,
1559 164, 11, 12, 13, 14, -1, -1, -1, 172, 173, 174, 175, -1, -1, -1, -1, 26, 27, 28,
1560 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, 47,
1561 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 66,
1562 -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
1563 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1564 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
1565 124, 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142,
1566 143, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161,
1567 11, 12, 13, 14, -1, -1, -1, -1, -1, 171, 172, 173, 174, 175, -1, 26, 27, 28, 29,
1568 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, 47, 48,
1569 49, 50, 51, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, -1,
1570 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1571 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
1572 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1573 125, 126, 127, 128, 129, -1, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143,
1574 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 161, 11,
1575 12, 13, 14, -1, -1, -1, -1, -1, -1, 172, 173, 174, 175, -1, 26, 27, 28, 29, 30,
1576 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, 47, 48, 49,
1577 50, 51, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, -1, 68,
1578 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
1579 -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1580 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
1581 126, 127, 128, 129, -1, 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, -1,
1582 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, 161, 9, 10,
1583 11, 12, 13, 14, -1, -1, -1, -1, 172, 173, 174, 175, -1, -1, -1, 26, 27, 28, 29,
1584 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
1585 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1,
1586 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1587 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
1588 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1589 125, 126, 127, 128, 129, 130, 131, -1, -1, 134, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1590 3, 4, 5, 6, 7, -1, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1,
1591 -1, -1, -1, 166, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1592 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
1593 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
1594 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97,
1595 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
1596 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, 134, -1,
1597 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, -1, 9, 10, 11, 12, 13,
1598 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 166, 26, 27, 28, 29, 30, 31, 32,
1599 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
1600 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, -1, 68, 69, 70,
1601 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89,
1602 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
1603 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
1604 128, 129, 130, 131, -1, -1, 134, -1, -1, -1, -1, -1, -1, 0, -1, -1, 3, 4, 5,
1605 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1606 166, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
1607 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
1608 63, 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1609 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
1610 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
1611 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, 134, 3, 4, 5, 6,
1612 7, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1613 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1614 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1615 64, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1616 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1617 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1618 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, 134, 3, 4, 5, 6, 7,
1619 -1, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26,
1620 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
1621 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1622 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
1623 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
1624 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
1625 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, -1, -1, 134, 11, 12, 13, 14, -1, -1,
1626 -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1627 36, 37, 38, 39, 40, -1, -1, -1, -1, -1, -1, 47, 48, 49, 50, 51, 52, -1, -1,
1628 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 65, 66, -1, 68, 69, 70, 71, 72, 73,
1629 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, -1, 89, 90, 91, 92,
1630 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
1631 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, -1,
1632 131, -1, 133, 134, 11, 12, 13, 14, 139, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1633 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, -1, -1, -1, -1,
1634 -1, -1, 47, 48, 49, 50, 51, 52, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1635 -1, 65, 66, -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
1636 83, 84, 85, 86, 87, -1, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
1637 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1638 121, 122, 123, 124, 125, 126, 127, 128, 129, -1, 131, -1, -1, 134};
1639
1640 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
1641 state STATE-NUM. */
1642 static const yytype_int16 yystos[] = {
1643 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 26, 27, 28, 29, 30, 31,
1644 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
1645 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70,
1646 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 89, 90,
1647 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
1648 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
1649 129, 130, 131, 134, 217, 218, 219, 220, 221, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
1650 235, 236, 239, 241, 242, 277, 278, 279, 235, 133, 134, 165, 186, 161, 171, 280, 162, 168, 222,
1651 223, 224, 229, 234, 168, 171, 133, 186, 133, 171, 216, 232, 234, 163, 240, 0, 278, 239, 244,
1652 165, 64, 133, 237, 238, 165, 260, 223, 222, 224, 186, 186, 161, 170, 240, 165, 171, 229, 234,
1653 245, 246, 132, 133, 135, 136, 137, 138, 139, 142, 143, 161, 164, 172, 173, 174, 175, 187, 188,
1654 189, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
1655 209, 210, 211, 215, 239, 163, 171, 245, 243, 170, 162, 168, 15, 16, 17, 19, 20, 21, 22,
1656 23, 24, 25, 67, 165, 166, 171, 198, 211, 212, 214, 217, 218, 239, 250, 251, 252, 253, 261,
1657 262, 263, 265, 267, 269, 276, 240, 170, 240, 212, 249, 170, 234, 186, 247, 248, 166, 246, 198,
1658 198, 214, 142, 143, 163, 167, 162, 162, 168, 66, 212, 161, 198, 176, 177, 178, 173, 175, 140,
1659 141, 144, 145, 179, 180, 146, 147, 183, 182, 181, 148, 150, 149, 184, 164, 164, 215, 166, 245,
1660 136, 137, 238, 171, 171, 271, 161, 161, 171, 171, 214, 161, 215, 169, 161, 166, 254, 151, 152,
1661 153, 154, 155, 156, 157, 158, 159, 160, 170, 213, 168, 171, 166, 251, 249, 170, 249, 247, 240,
1662 168, 171, 133, 171, 162, 190, 214, 133, 139, 193, 212, 198, 198, 198, 200, 200, 201, 201, 202,
1663 202, 202, 202, 203, 203, 204, 205, 206, 207, 208, 209, 214, 164, 166, 257, 258, 259, 272, 214,
1664 171, 214, 169, 270, 261, 212, 212, 249, 171, 248, 171, 240, 164, 169, 67, 260, 252, 250, 262,
1665 273, 162, 162, 214, 227, 229, 268, 255, 171, 212, 161, 268, 274, 275, 257, 264, 266, 186, 162,
1666 166, 214, 171, 162, 18, 253, 170, 252, 256, 260, 162, 214, 256, 257, 249, 171};
1667
1668 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
1669 static const yytype_int16 yyr1[] = {
1670 0, 185, 186, 186, 187, 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 189, 190,
1671 191, 192, 192, 193, 193, 194, 194, 195, 195, 196, 197, 197, 197, 198, 198, 198, 198, 199, 199,
1672 199, 199, 200, 200, 200, 200, 201, 201, 201, 202, 202, 202, 203, 203, 203, 203, 203, 204, 204,
1673 204, 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, 210, 210, 211, 211, 212, 212, 213, 213,
1674 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 215, 216, 217, 217, 217, 217, 217, 217,
1675 217, 217, 218, 219, 219, 220, 220, 221, 222, 222, 223, 223, 223, 223, 224, 225, 225, 225, 225,
1676 225, 226, 226, 226, 226, 226, 227, 227, 228, 228, 228, 229, 229, 230, 231, 232, 232, 232, 232,
1677 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1678 234, 235, 235, 235, 236, 237, 237, 238, 238, 238, 238, 239, 239, 240, 240, 240, 240, 241, 241,
1679 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
1680 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
1681 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
1682 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
1683 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, 243, 242, 244, 242, 245, 245, 246,
1684 246, 247, 247, 248, 248, 249, 250, 251, 251, 252, 252, 252, 252, 252, 252, 252, 253, 254, 255,
1685 253, 256, 256, 258, 257, 259, 257, 260, 260, 261, 261, 262, 262, 263, 264, 264, 266, 265, 267,
1686 267, 268, 268, 270, 269, 271, 269, 272, 269, 273, 273, 274, 274, 275, 275, 276, 276, 276, 276,
1687 276, 277, 277, 278, 278, 280, 279};
1688
1689 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
1690 static const yytype_int8 yyr2[] = {
1691 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 4, 1, 3, 2, 2, 1, 1, 1, 3, 2, 2, 2, 1, 2, 3, 2, 1,
1692 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, 3,
1693 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 5, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2,
1694 2, 4, 5, 6, 7, 2, 3, 2, 1, 1, 2, 3, 3, 2, 3, 2, 1, 2, 1, 1, 1, 3, 4, 6, 5, 1, 2, 3, 5, 4,
1695 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1696 1, 1, 1, 1, 1, 1, 4, 1, 3, 1, 3, 3, 1, 1, 2, 2, 3, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1697 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1698 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1699 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 6, 0, 5, 1, 2, 3, 4, 1, 3, 1,
1700 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 5, 1, 1, 0, 2, 0, 2, 2, 3, 1, 2, 1, 2, 5, 3,
1701 1, 0, 6, 3, 2, 1, 4, 0, 6, 0, 8, 0, 7, 1, 1, 1, 0, 2, 3, 2, 2, 2, 3, 2, 1, 2, 1, 1, 0, 3};
1702
1703 enum
1704 {
1705 YYENOMEM = -2
1706 };
1707
1708 #define yyerrok (yyerrstatus = 0)
1709 #define yyclearin (yychar = YYEMPTY)
1710
1711 #define YYACCEPT goto yyacceptlab
1712 #define YYABORT goto yyabortlab
1713 #define YYERROR goto yyerrorlab
1714 #define YYNOMEM goto yyexhaustedlab
1715
1716 #define YYRECOVERING() (!!yyerrstatus)
1717
1718 #define YYBACKUP(Token, Value) \
1719 do \
1720 if (yychar == YYEMPTY) \
1721 { \
1722 yychar = (Token); \
1723 yylval = (Value); \
1724 YYPOPSTACK(yylen); \
1725 yystate = *yyssp; \
1726 goto yybackup; \
1727 } \
1728 else \
1729 { \
1730 yyerror(&yylloc, context, scanner, YY_("syntax error: cannot back up")); \
1731 YYERROR; \
1732 } \
1733 while (0)
1734
1735 /* Backward compatibility with an undocumented macro.
1736 Use YYerror or YYUNDEF. */
1737 #define YYERRCODE YYUNDEF
1738
1739 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
1740 If N is 0, then set CURRENT to the empty location which ends
1741 the previous symbol: RHS[0] (always defined). */
1742
1743 #ifndef YYLLOC_DEFAULT
1744 # define YYLLOC_DEFAULT(Current, Rhs, N) \
1745 do \
1746 if (N) \
1747 { \
1748 (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \
1749 (Current).first_column = YYRHSLOC(Rhs, 1).first_column; \
1750 (Current).last_line = YYRHSLOC(Rhs, N).last_line; \
1751 (Current).last_column = YYRHSLOC(Rhs, N).last_column; \
1752 } \
1753 else \
1754 { \
1755 (Current).first_line = (Current).last_line = YYRHSLOC(Rhs, 0).last_line; \
1756 (Current).first_column = (Current).last_column = YYRHSLOC(Rhs, 0).last_column; \
1757 } \
1758 while (0)
1759 #endif
1760
1761 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
1762
1763 /* Enable debugging if requested. */
1764 #if YYDEBUG
1765
1766 # ifndef YYFPRINTF
1767 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1768 # define YYFPRINTF fprintf
1769 # endif
1770
1771 # define YYDPRINTF(Args) \
1772 do \
1773 { \
1774 if (yydebug) \
1775 YYFPRINTF Args; \
1776 } while (0)
1777
1778 /* YYLOCATION_PRINT -- Print the location on the stream.
1779 This macro was not mandated originally: define only if we know
1780 we won't break user code: when these are the locations we know. */
1781
1782 # ifndef YYLOCATION_PRINT
1783
1784 # if defined YY_LOCATION_PRINT
1785
1786 /* Temporary convenience wrapper in case some people defined the
1787 undocumented and private YY_LOCATION_PRINT macros. */
1788 # define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc))
1789
1790 # elif defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
1791
1792 /* Print *YYLOCP on YYO. Private, do not rely on its existence. */
1793
1794 YY_ATTRIBUTE_UNUSED
yy_location_print_(FILE * yyo,YYLTYPE const * const yylocp)1795 static int yy_location_print_(FILE *yyo, YYLTYPE const *const yylocp)
1796 {
1797 int res = 0;
1798 int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
1799 if (0 <= yylocp->first_line)
1800 {
1801 res += YYFPRINTF(yyo, "%d", yylocp->first_line);
1802 if (0 <= yylocp->first_column)
1803 res += YYFPRINTF(yyo, ".%d", yylocp->first_column);
1804 }
1805 if (0 <= yylocp->last_line)
1806 {
1807 if (yylocp->first_line < yylocp->last_line)
1808 {
1809 res += YYFPRINTF(yyo, "-%d", yylocp->last_line);
1810 if (0 <= end_col)
1811 res += YYFPRINTF(yyo, ".%d", end_col);
1812 }
1813 else if (0 <= end_col && yylocp->first_column < end_col)
1814 res += YYFPRINTF(yyo, "-%d", end_col);
1815 }
1816 return res;
1817 }
1818
1819 # define YYLOCATION_PRINT yy_location_print_
1820
1821 /* Temporary convenience wrapper in case some people defined the
1822 undocumented and private YY_LOCATION_PRINT macros. */
1823 # define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc))
1824
1825 # else
1826
1827 # define YYLOCATION_PRINT(File, Loc) ((void)0)
1828 /* Temporary convenience wrapper in case some people defined the
1829 undocumented and private YY_LOCATION_PRINT macros. */
1830 # define YY_LOCATION_PRINT YYLOCATION_PRINT
1831
1832 # endif
1833 # endif /* !defined YYLOCATION_PRINT */
1834
1835 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
1836 do \
1837 { \
1838 if (yydebug) \
1839 { \
1840 YYFPRINTF(stderr, "%s ", Title); \
1841 yy_symbol_print(stderr, Kind, Value, Location, context, scanner); \
1842 YYFPRINTF(stderr, "\n"); \
1843 } \
1844 } while (0)
1845
1846 /*-----------------------------------.
1847 | Print this symbol's value on YYO. |
1848 `-----------------------------------*/
1849
yy_symbol_value_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep,YYLTYPE const * const yylocationp,TParseContext * context,void * scanner)1850 static void yy_symbol_value_print(FILE *yyo,
1851 yysymbol_kind_t yykind,
1852 YYSTYPE const *const yyvaluep,
1853 YYLTYPE const *const yylocationp,
1854 TParseContext *context,
1855 void *scanner)
1856 {
1857 FILE *yyoutput = yyo;
1858 YY_USE(yyoutput);
1859 YY_USE(yylocationp);
1860 YY_USE(context);
1861 YY_USE(scanner);
1862 if (!yyvaluep)
1863 return;
1864 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1865 YY_USE(yykind);
1866 YY_IGNORE_MAYBE_UNINITIALIZED_END
1867 }
1868
1869 /*---------------------------.
1870 | Print this symbol on YYO. |
1871 `---------------------------*/
1872
yy_symbol_print(FILE * yyo,yysymbol_kind_t yykind,YYSTYPE const * const yyvaluep,YYLTYPE const * const yylocationp,TParseContext * context,void * scanner)1873 static void yy_symbol_print(FILE *yyo,
1874 yysymbol_kind_t yykind,
1875 YYSTYPE const *const yyvaluep,
1876 YYLTYPE const *const yylocationp,
1877 TParseContext *context,
1878 void *scanner)
1879 {
1880 YYFPRINTF(yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name(yykind));
1881
1882 YYLOCATION_PRINT(yyo, yylocationp);
1883 YYFPRINTF(yyo, ": ");
1884 yy_symbol_value_print(yyo, yykind, yyvaluep, yylocationp, context, scanner);
1885 YYFPRINTF(yyo, ")");
1886 }
1887
1888 /*------------------------------------------------------------------.
1889 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1890 | TOP (included). |
1891 `------------------------------------------------------------------*/
1892
yy_stack_print(yy_state_t * yybottom,yy_state_t * yytop)1893 static void yy_stack_print(yy_state_t *yybottom, yy_state_t *yytop)
1894 {
1895 YYFPRINTF(stderr, "Stack now");
1896 for (; yybottom <= yytop; yybottom++)
1897 {
1898 int yybot = *yybottom;
1899 YYFPRINTF(stderr, " %d", yybot);
1900 }
1901 YYFPRINTF(stderr, "\n");
1902 }
1903
1904 # define YY_STACK_PRINT(Bottom, Top) \
1905 do \
1906 { \
1907 if (yydebug) \
1908 yy_stack_print((Bottom), (Top)); \
1909 } while (0)
1910
1911 /*------------------------------------------------.
1912 | Report that the YYRULE is going to be reduced. |
1913 `------------------------------------------------*/
1914
yy_reduce_print(yy_state_t * yyssp,YYSTYPE * yyvsp,YYLTYPE * yylsp,int yyrule,TParseContext * context,void * scanner)1915 static void yy_reduce_print(yy_state_t *yyssp,
1916 YYSTYPE *yyvsp,
1917 YYLTYPE *yylsp,
1918 int yyrule,
1919 TParseContext *context,
1920 void *scanner)
1921 {
1922 int yylno = yyrline[yyrule];
1923 int yynrhs = yyr2[yyrule];
1924 int yyi;
1925 YYFPRINTF(stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno);
1926 /* The symbols being reduced. */
1927 for (yyi = 0; yyi < yynrhs; yyi++)
1928 {
1929 YYFPRINTF(stderr, " $%d = ", yyi + 1);
1930 yy_symbol_print(stderr, YY_ACCESSING_SYMBOL(+yyssp[yyi + 1 - yynrhs]),
1931 &yyvsp[(yyi + 1) - (yynrhs)], &(yylsp[(yyi + 1) - (yynrhs)]), context,
1932 scanner);
1933 YYFPRINTF(stderr, "\n");
1934 }
1935 }
1936
1937 # define YY_REDUCE_PRINT(Rule) \
1938 do \
1939 { \
1940 if (yydebug) \
1941 yy_reduce_print(yyssp, yyvsp, yylsp, Rule, context, scanner); \
1942 } while (0)
1943
1944 /* Nonzero means print parse trace. It is left uninitialized so that
1945 multiple parsers can coexist. */
1946 int yydebug;
1947 #else /* !YYDEBUG */
1948 # define YYDPRINTF(Args) ((void)0)
1949 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
1950 # define YY_STACK_PRINT(Bottom, Top)
1951 # define YY_REDUCE_PRINT(Rule)
1952 #endif /* !YYDEBUG */
1953
1954 /* YYINITDEPTH -- initial size of the parser's stacks. */
1955 #ifndef YYINITDEPTH
1956 # define YYINITDEPTH 200
1957 #endif
1958
1959 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1960 if the built-in stack extension method is used).
1961
1962 Do not make this value too large; the results are undefined if
1963 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1964 evaluated with infinite-precision integer arithmetic. */
1965
1966 #ifndef YYMAXDEPTH
1967 # define YYMAXDEPTH 10000
1968 #endif
1969
1970 /*-----------------------------------------------.
1971 | Release the memory associated to this symbol. |
1972 `-----------------------------------------------*/
1973
yydestruct(const char * yymsg,yysymbol_kind_t yykind,YYSTYPE * yyvaluep,YYLTYPE * yylocationp,TParseContext * context,void * scanner)1974 static void yydestruct(const char *yymsg,
1975 yysymbol_kind_t yykind,
1976 YYSTYPE *yyvaluep,
1977 YYLTYPE *yylocationp,
1978 TParseContext *context,
1979 void *scanner)
1980 {
1981 YY_USE(yyvaluep);
1982 YY_USE(yylocationp);
1983 YY_USE(context);
1984 YY_USE(scanner);
1985 if (!yymsg)
1986 yymsg = "Deleting";
1987 YY_SYMBOL_PRINT(yymsg, yykind, yyvaluep, yylocationp);
1988
1989 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1990 YY_USE(yykind);
1991 YY_IGNORE_MAYBE_UNINITIALIZED_END
1992 }
1993
1994 /*----------.
1995 | yyparse. |
1996 `----------*/
1997
yyparse(TParseContext * context,void * scanner)1998 int yyparse(TParseContext *context, void *scanner)
1999 {
2000 /* Lookahead token kind. */
2001 int yychar;
2002
2003 /* The semantic value of the lookahead symbol. */
2004 /* Default value used for initialization, for pacifying older GCCs
2005 or non-GCC compilers. */
2006 YY_INITIAL_VALUE(static YYSTYPE yyval_default;)
2007 YYSTYPE yylval YY_INITIAL_VALUE(= yyval_default);
2008
2009 /* Location data for the lookahead symbol. */
2010 static YYLTYPE yyloc_default
2011 #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
2012 = {1, 1, 1, 1}
2013 #endif
2014 ;
2015 YYLTYPE yylloc = yyloc_default;
2016
2017 /* Number of syntax errors so far. */
2018 int yynerrs = 0;
2019
2020 yy_state_fast_t yystate = 0;
2021 /* Number of tokens to shift before error messages enabled. */
2022 int yyerrstatus = 0;
2023
2024 /* Refer to the stacks through separate pointers, to allow yyoverflow
2025 to reallocate them elsewhere. */
2026
2027 /* Their size. */
2028 YYPTRDIFF_T yystacksize = YYINITDEPTH;
2029
2030 /* The state stack: array, bottom, top. */
2031 yy_state_t yyssa[YYINITDEPTH];
2032 yy_state_t *yyss = yyssa;
2033 yy_state_t *yyssp = yyss;
2034
2035 /* The semantic value stack: array, bottom, top. */
2036 YYSTYPE yyvsa[YYINITDEPTH];
2037 YYSTYPE *yyvs = yyvsa;
2038 YYSTYPE *yyvsp = yyvs;
2039
2040 /* The location stack: array, bottom, top. */
2041 YYLTYPE yylsa[YYINITDEPTH];
2042 YYLTYPE *yyls = yylsa;
2043 YYLTYPE *yylsp = yyls;
2044
2045 int yyn;
2046 /* The return value of yyparse. */
2047 int yyresult;
2048 /* Lookahead symbol kind. */
2049 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
2050 /* The variables used to return semantic value and location from the
2051 action routines. */
2052 YYSTYPE yyval;
2053 YYLTYPE yyloc;
2054
2055 /* The locations where the error started and ended. */
2056 YYLTYPE yyerror_range[3];
2057
2058 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
2059
2060 /* The number of symbols on the RHS of the reduced rule.
2061 Keep to zero when no symbol should be popped. */
2062 int yylen = 0;
2063
2064 YYDPRINTF((stderr, "Starting parse\n"));
2065
2066 yychar = YYEMPTY; /* Cause a token to be read. */
2067
2068 yylsp[0] = yylloc;
2069 goto yysetstate;
2070
2071 /*------------------------------------------------------------.
2072 | yynewstate -- push a new state, which is found in yystate. |
2073 `------------------------------------------------------------*/
2074 yynewstate:
2075 /* In all cases, when you get here, the value and location stacks
2076 have just been pushed. So pushing a state here evens the stacks. */
2077 yyssp++;
2078
2079 /*--------------------------------------------------------------------.
2080 | yysetstate -- set current state (the top of the stack) to yystate. |
2081 `--------------------------------------------------------------------*/
2082 yysetstate:
2083 YYDPRINTF((stderr, "Entering state %d\n", yystate));
2084 YY_ASSERT(0 <= yystate && yystate < YYNSTATES);
2085 YY_IGNORE_USELESS_CAST_BEGIN
2086 *yyssp = YY_CAST(yy_state_t, yystate);
2087 YY_IGNORE_USELESS_CAST_END
2088 YY_STACK_PRINT(yyss, yyssp);
2089
2090 if (yyss + yystacksize - 1 <= yyssp)
2091 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
2092 YYNOMEM;
2093 #else
2094 {
2095 /* Get the current used size of the three stacks, in elements. */
2096 YYPTRDIFF_T yysize = yyssp - yyss + 1;
2097
2098 # if defined yyoverflow
2099 {
2100 /* Give user a chance to reallocate the stack. Use copies of
2101 these so that the &'s don't force the real ones into
2102 memory. */
2103 yy_state_t *yyss1 = yyss;
2104 YYSTYPE *yyvs1 = yyvs;
2105 YYLTYPE *yyls1 = yyls;
2106
2107 /* Each stack pointer address is followed by the size of the
2108 data in use in that stack, in bytes. This used to be a
2109 conditional around just the two extra args, but that might
2110 be undefined if yyoverflow is a macro. */
2111 yyoverflow(YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF(*yyssp), &yyvs1,
2112 yysize * YYSIZEOF(*yyvsp), &yyls1, yysize * YYSIZEOF(*yylsp), &yystacksize);
2113 yyss = yyss1;
2114 yyvs = yyvs1;
2115 yyls = yyls1;
2116 }
2117 # else /* defined YYSTACK_RELOCATE */
2118 /* Extend the stack our own way. */
2119 if (YYMAXDEPTH <= yystacksize)
2120 YYNOMEM;
2121 yystacksize *= 2;
2122 if (YYMAXDEPTH < yystacksize)
2123 yystacksize = YYMAXDEPTH;
2124
2125 {
2126 yy_state_t *yyss1 = yyss;
2127 union yyalloc *yyptr = YY_CAST(
2128 union yyalloc *, YYSTACK_ALLOC(YY_CAST(YYSIZE_T, YYSTACK_BYTES(yystacksize))));
2129 if (!yyptr)
2130 YYNOMEM;
2131 YYSTACK_RELOCATE(yyss_alloc, yyss);
2132 YYSTACK_RELOCATE(yyvs_alloc, yyvs);
2133 YYSTACK_RELOCATE(yyls_alloc, yyls);
2134 # undef YYSTACK_RELOCATE
2135 if (yyss1 != yyssa)
2136 YYSTACK_FREE(yyss1);
2137 }
2138 # endif
2139
2140 yyssp = yyss + yysize - 1;
2141 yyvsp = yyvs + yysize - 1;
2142 yylsp = yyls + yysize - 1;
2143
2144 YY_IGNORE_USELESS_CAST_BEGIN
2145 YYDPRINTF((stderr, "Stack size increased to %ld\n", YY_CAST(long, yystacksize)));
2146 YY_IGNORE_USELESS_CAST_END
2147
2148 if (yyss + yystacksize - 1 <= yyssp)
2149 YYABORT;
2150 }
2151 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2152
2153 if (yystate == YYFINAL)
2154 YYACCEPT;
2155
2156 goto yybackup;
2157
2158 /*-----------.
2159 | yybackup. |
2160 `-----------*/
2161 yybackup:
2162 /* Do appropriate processing given the current state. Read a
2163 lookahead token if we need one and don't already have one. */
2164
2165 /* First try to decide what to do without reference to lookahead token. */
2166 yyn = yypact[yystate];
2167 if (yypact_value_is_default(yyn))
2168 goto yydefault;
2169
2170 /* Not known => get a lookahead token if don't already have one. */
2171
2172 /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
2173 if (yychar == YYEMPTY)
2174 {
2175 YYDPRINTF((stderr, "Reading a token\n"));
2176 yychar = yylex(&yylval, &yylloc, scanner);
2177 }
2178
2179 if (yychar <= YYEOF)
2180 {
2181 yychar = YYEOF;
2182 yytoken = YYSYMBOL_YYEOF;
2183 YYDPRINTF((stderr, "Now at end of input.\n"));
2184 }
2185 else if (yychar == YYerror)
2186 {
2187 /* The scanner already issued an error message, process directly
2188 to error recovery. But do not keep the error token as
2189 lookahead, it is too special and may lead us to an endless
2190 loop in error recovery. */
2191 yychar = YYUNDEF;
2192 yytoken = YYSYMBOL_YYerror;
2193 yyerror_range[1] = yylloc;
2194 goto yyerrlab1;
2195 }
2196 else
2197 {
2198 yytoken = YYTRANSLATE(yychar);
2199 YY_SYMBOL_PRINT("Next token is", yytoken, &yylval, &yylloc);
2200 }
2201
2202 /* If the proper action on seeing token YYTOKEN is to reduce or to
2203 detect an error, take that action. */
2204 yyn += yytoken;
2205 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2206 goto yydefault;
2207 yyn = yytable[yyn];
2208 if (yyn <= 0)
2209 {
2210 if (yytable_value_is_error(yyn))
2211 goto yyerrlab;
2212 yyn = -yyn;
2213 goto yyreduce;
2214 }
2215
2216 /* Count tokens shifted since error; after three, turn off error
2217 status. */
2218 if (yyerrstatus)
2219 yyerrstatus--;
2220
2221 /* Shift the lookahead token. */
2222 YY_SYMBOL_PRINT("Shifting", yytoken, &yylval, &yylloc);
2223 yystate = yyn;
2224 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2225 *++yyvsp = yylval;
2226 YY_IGNORE_MAYBE_UNINITIALIZED_END
2227 *++yylsp = yylloc;
2228
2229 /* Discard the shifted token. */
2230 yychar = YYEMPTY;
2231 goto yynewstate;
2232
2233 /*-----------------------------------------------------------.
2234 | yydefault -- do the default action for the current state. |
2235 `-----------------------------------------------------------*/
2236 yydefault:
2237 yyn = yydefact[yystate];
2238 if (yyn == 0)
2239 goto yyerrlab;
2240 goto yyreduce;
2241
2242 /*-----------------------------.
2243 | yyreduce -- do a reduction. |
2244 `-----------------------------*/
2245 yyreduce:
2246 /* yyn is the number of a rule to reduce with. */
2247 yylen = yyr2[yyn];
2248
2249 /* If YYLEN is nonzero, implement the default value of the action:
2250 '$$ = $1'.
2251
2252 Otherwise, the following line sets YYVAL to garbage.
2253 This behavior is undocumented and Bison
2254 users should not rely upon it. Assigning to YYVAL
2255 unconditionally makes the parser a bit smaller, and it avoids a
2256 GCC warning that YYVAL may be used uninitialized. */
2257 yyval = yyvsp[1 - yylen];
2258
2259 /* Default location. */
2260 YYLLOC_DEFAULT(yyloc, (yylsp - yylen), yylen);
2261 yyerror_range[1] = yyloc;
2262 YY_REDUCE_PRINT(yyn);
2263 switch (yyn)
2264 {
2265 case 4: /* variable_identifier: IDENTIFIER */
2266 {
2267 // The symbol table search was done in the lexical phase
2268 (yyval.interm.intermTypedNode) = context->parseVariableIdentifier(
2269 (yylsp[0]), ImmutableString((yyvsp[0].lex).string), (yyvsp[0].lex).symbol);
2270 }
2271 break;
2272
2273 case 5: /* primary_expression: variable_identifier */
2274 {
2275 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2276 }
2277 break;
2278
2279 case 6: /* primary_expression: INTCONSTANT */
2280 {
2281 TConstantUnion *unionArray = new TConstantUnion[1];
2282 unionArray->setIConst((yyvsp[0].lex).i);
2283 (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
2284 }
2285 break;
2286
2287 case 7: /* primary_expression: UINTCONSTANT */
2288 {
2289 TConstantUnion *unionArray = new TConstantUnion[1];
2290 unionArray->setUConst((yyvsp[0].lex).u);
2291 (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
2292 }
2293 break;
2294
2295 case 8: /* primary_expression: FLOATCONSTANT */
2296 {
2297 TConstantUnion *unionArray = new TConstantUnion[1];
2298 unionArray->setFConst((yyvsp[0].lex).f);
2299 (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
2300 }
2301 break;
2302
2303 case 9: /* primary_expression: BOOLCONSTANT */
2304 {
2305 TConstantUnion *unionArray = new TConstantUnion[1];
2306 unionArray->setBConst((yyvsp[0].lex).b);
2307 (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
2308 }
2309 break;
2310
2311 case 10: /* primary_expression: YUVCSCSTANDARDEXTCONSTANT */
2312 {
2313 if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
2314 {
2315 context->error((yylsp[0]), "unsupported value",
2316 ImmutableString((yyvsp[0].lex).string));
2317 }
2318 TConstantUnion *unionArray = new TConstantUnion[1];
2319 unionArray->setYuvCscStandardEXTConst(
2320 getYuvCscStandardEXT(ImmutableString((yyvsp[0].lex).string)));
2321 (yyval.interm.intermTypedNode) = context->addScalarLiteral(unionArray, (yylsp[0]));
2322 }
2323 break;
2324
2325 case 11: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */
2326 {
2327 (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
2328 }
2329 break;
2330
2331 case 12: /* postfix_expression: primary_expression */
2332 {
2333 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2334 }
2335 break;
2336
2337 case 13: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression
2338 RIGHT_BRACKET */
2339 {
2340 (yyval.interm.intermTypedNode) =
2341 context->addIndexExpression((yyvsp[-3].interm.intermTypedNode), (yylsp[-2]),
2342 (yyvsp[-1].interm.intermTypedNode));
2343 }
2344 break;
2345
2346 case 14: /* postfix_expression: function_call */
2347 {
2348 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2349 }
2350 break;
2351
2352 case 15: /* postfix_expression: postfix_expression DOT FIELD_SELECTION */
2353 {
2354 (yyval.interm.intermTypedNode) = context->addFieldSelectionExpression(
2355 (yyvsp[-2].interm.intermTypedNode), (yylsp[-1]),
2356 ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
2357 }
2358 break;
2359
2360 case 16: /* postfix_expression: postfix_expression INC_OP */
2361 {
2362 (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
2363 EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
2364 }
2365 break;
2366
2367 case 17: /* postfix_expression: postfix_expression DEC_OP */
2368 {
2369 (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
2370 EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode), (yylsp[0]));
2371 }
2372 break;
2373
2374 case 18: /* integer_expression: expression */
2375 {
2376 context->checkIsScalarInteger((yyvsp[0].interm.intermTypedNode), "[]");
2377 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2378 }
2379 break;
2380
2381 case 19: /* function_call: function_call_or_method */
2382 {
2383 (yyval.interm.intermTypedNode) =
2384 context->addFunctionCallOrMethod((yyvsp[0].interm.functionLookup), (yylsp[0]));
2385 }
2386 break;
2387
2388 case 20: /* function_call_or_method: function_call_generic */
2389 {
2390 (yyval.interm.functionLookup) = (yyvsp[0].interm.functionLookup);
2391 }
2392 break;
2393
2394 case 21: /* function_call_or_method: postfix_expression DOT function_call_generic */
2395 {
2396 ES3_OR_NEWER("", (yylsp[0]), "methods");
2397 (yyval.interm.functionLookup) = (yyvsp[0].interm.functionLookup);
2398 (yyval.interm.functionLookup)->setThisNode((yyvsp[-2].interm.intermTypedNode));
2399 }
2400 break;
2401
2402 case 22: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */
2403 {
2404 (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
2405 }
2406 break;
2407
2408 case 23: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */
2409 {
2410 (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
2411 }
2412 break;
2413
2414 case 24: /* function_call_header_no_parameters: function_call_header VOID_TYPE */
2415 {
2416 (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
2417 }
2418 break;
2419
2420 case 25: /* function_call_header_no_parameters: function_call_header */
2421 {
2422 (yyval.interm.functionLookup) = (yyvsp[0].interm.functionLookup);
2423 }
2424 break;
2425
2426 case 26: /* function_call_header_with_parameters: function_call_header assignment_expression
2427 */
2428 {
2429 (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
2430 (yyval.interm.functionLookup)->addArgument((yyvsp[0].interm.intermTypedNode));
2431 }
2432 break;
2433
2434 case 27: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA
2435 assignment_expression */
2436 {
2437 (yyval.interm.functionLookup) = (yyvsp[-2].interm.functionLookup);
2438 (yyval.interm.functionLookup)->addArgument((yyvsp[0].interm.intermTypedNode));
2439 }
2440 break;
2441
2442 case 28: /* function_call_header: function_identifier LEFT_PAREN */
2443 {
2444 (yyval.interm.functionLookup) = (yyvsp[-1].interm.functionLookup);
2445 }
2446 break;
2447
2448 case 29: /* function_identifier: type_specifier_no_prec */
2449 {
2450 (yyval.interm.functionLookup) = context->addConstructorFunc((yyvsp[0].interm.type));
2451 }
2452 break;
2453
2454 case 30: /* function_identifier: IDENTIFIER */
2455 {
2456 (yyval.interm.functionLookup) = context->addNonConstructorFunc(
2457 ImmutableString((yyvsp[0].lex).string), (yyvsp[0].lex).symbol);
2458 }
2459 break;
2460
2461 case 31: /* function_identifier: FIELD_SELECTION */
2462 {
2463 (yyval.interm.functionLookup) = context->addNonConstructorFunc(
2464 ImmutableString((yyvsp[0].lex).string), (yyvsp[0].lex).symbol);
2465 }
2466 break;
2467
2468 case 32: /* unary_expression: postfix_expression */
2469 {
2470 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2471 }
2472 break;
2473
2474 case 33: /* unary_expression: INC_OP unary_expression */
2475 {
2476 (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
2477 EOpPreIncrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2478 }
2479 break;
2480
2481 case 34: /* unary_expression: DEC_OP unary_expression */
2482 {
2483 (yyval.interm.intermTypedNode) = context->addUnaryMathLValue(
2484 EOpPreDecrement, (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2485 }
2486 break;
2487
2488 case 35: /* unary_expression: unary_operator unary_expression */
2489 {
2490 (yyval.interm.intermTypedNode) = context->addUnaryMath(
2491 (yyvsp[-1].interm.op), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2492 }
2493 break;
2494
2495 case 36: /* unary_operator: PLUS */
2496 {
2497 (yyval.interm.op) = EOpPositive;
2498 }
2499 break;
2500
2501 case 37: /* unary_operator: DASH */
2502 {
2503 (yyval.interm.op) = EOpNegative;
2504 }
2505 break;
2506
2507 case 38: /* unary_operator: BANG */
2508 {
2509 (yyval.interm.op) = EOpLogicalNot;
2510 }
2511 break;
2512
2513 case 39: /* unary_operator: TILDE */
2514 {
2515 ES3_OR_NEWER("~", (yyloc), "bit-wise operator");
2516 (yyval.interm.op) = EOpBitwiseNot;
2517 }
2518 break;
2519
2520 case 40: /* multiplicative_expression: unary_expression */
2521 {
2522 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2523 }
2524 break;
2525
2526 case 41: /* multiplicative_expression: multiplicative_expression STAR unary_expression */
2527 {
2528 (yyval.interm.intermTypedNode) =
2529 context->addBinaryMath(EOpMul, (yyvsp[-2].interm.intermTypedNode),
2530 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2531 }
2532 break;
2533
2534 case 42: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */
2535 {
2536 (yyval.interm.intermTypedNode) =
2537 context->addBinaryMath(EOpDiv, (yyvsp[-2].interm.intermTypedNode),
2538 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2539 }
2540 break;
2541
2542 case 43: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */
2543 {
2544 ES3_OR_NEWER("%", (yylsp[-1]), "integer modulus operator");
2545 (yyval.interm.intermTypedNode) =
2546 context->addBinaryMath(EOpIMod, (yyvsp[-2].interm.intermTypedNode),
2547 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2548 }
2549 break;
2550
2551 case 44: /* additive_expression: multiplicative_expression */
2552 {
2553 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2554 }
2555 break;
2556
2557 case 45: /* additive_expression: additive_expression PLUS multiplicative_expression */
2558 {
2559 (yyval.interm.intermTypedNode) =
2560 context->addBinaryMath(EOpAdd, (yyvsp[-2].interm.intermTypedNode),
2561 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2562 }
2563 break;
2564
2565 case 46: /* additive_expression: additive_expression DASH multiplicative_expression */
2566 {
2567 (yyval.interm.intermTypedNode) =
2568 context->addBinaryMath(EOpSub, (yyvsp[-2].interm.intermTypedNode),
2569 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2570 }
2571 break;
2572
2573 case 47: /* shift_expression: additive_expression */
2574 {
2575 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2576 }
2577 break;
2578
2579 case 48: /* shift_expression: shift_expression LEFT_OP additive_expression */
2580 {
2581 ES3_OR_NEWER("<<", (yylsp[-1]), "bit-wise operator");
2582 (yyval.interm.intermTypedNode) =
2583 context->addBinaryMath(EOpBitShiftLeft, (yyvsp[-2].interm.intermTypedNode),
2584 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2585 }
2586 break;
2587
2588 case 49: /* shift_expression: shift_expression RIGHT_OP additive_expression */
2589 {
2590 ES3_OR_NEWER(">>", (yylsp[-1]), "bit-wise operator");
2591 (yyval.interm.intermTypedNode) =
2592 context->addBinaryMath(EOpBitShiftRight, (yyvsp[-2].interm.intermTypedNode),
2593 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2594 }
2595 break;
2596
2597 case 50: /* relational_expression: shift_expression */
2598 {
2599 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2600 }
2601 break;
2602
2603 case 51: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */
2604 {
2605 (yyval.interm.intermTypedNode) =
2606 context->addBinaryMathBooleanResult(EOpLessThan, (yyvsp[-2].interm.intermTypedNode),
2607 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2608 }
2609 break;
2610
2611 case 52: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */
2612 {
2613 (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
2614 EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode),
2615 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2616 }
2617 break;
2618
2619 case 53: /* relational_expression: relational_expression LE_OP shift_expression */
2620 {
2621 (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
2622 EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode),
2623 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2624 }
2625 break;
2626
2627 case 54: /* relational_expression: relational_expression GE_OP shift_expression */
2628 {
2629 (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
2630 EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode),
2631 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2632 }
2633 break;
2634
2635 case 55: /* equality_expression: relational_expression */
2636 {
2637 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2638 }
2639 break;
2640
2641 case 56: /* equality_expression: equality_expression EQ_OP relational_expression */
2642 {
2643 (yyval.interm.intermTypedNode) =
2644 context->addBinaryMathBooleanResult(EOpEqual, (yyvsp[-2].interm.intermTypedNode),
2645 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2646 }
2647 break;
2648
2649 case 57: /* equality_expression: equality_expression NE_OP relational_expression */
2650 {
2651 (yyval.interm.intermTypedNode) =
2652 context->addBinaryMathBooleanResult(EOpNotEqual, (yyvsp[-2].interm.intermTypedNode),
2653 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2654 }
2655 break;
2656
2657 case 58: /* and_expression: equality_expression */
2658 {
2659 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2660 }
2661 break;
2662
2663 case 59: /* and_expression: and_expression AMPERSAND equality_expression */
2664 {
2665 ES3_OR_NEWER("&", (yylsp[-1]), "bit-wise operator");
2666 (yyval.interm.intermTypedNode) =
2667 context->addBinaryMath(EOpBitwiseAnd, (yyvsp[-2].interm.intermTypedNode),
2668 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2669 }
2670 break;
2671
2672 case 60: /* exclusive_or_expression: and_expression */
2673 {
2674 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2675 }
2676 break;
2677
2678 case 61: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */
2679 {
2680 ES3_OR_NEWER("^", (yylsp[-1]), "bit-wise operator");
2681 (yyval.interm.intermTypedNode) =
2682 context->addBinaryMath(EOpBitwiseXor, (yyvsp[-2].interm.intermTypedNode),
2683 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2684 }
2685 break;
2686
2687 case 62: /* inclusive_or_expression: exclusive_or_expression */
2688 {
2689 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2690 }
2691 break;
2692
2693 case 63: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR
2694 exclusive_or_expression */
2695 {
2696 ES3_OR_NEWER("|", (yylsp[-1]), "bit-wise operator");
2697 (yyval.interm.intermTypedNode) =
2698 context->addBinaryMath(EOpBitwiseOr, (yyvsp[-2].interm.intermTypedNode),
2699 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2700 }
2701 break;
2702
2703 case 64: /* logical_and_expression: inclusive_or_expression */
2704 {
2705 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2706 }
2707 break;
2708
2709 case 65: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */
2710 {
2711 (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
2712 EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode),
2713 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2714 }
2715 break;
2716
2717 case 66: /* logical_xor_expression: logical_and_expression */
2718 {
2719 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2720 }
2721 break;
2722
2723 case 67: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */
2724 {
2725 (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
2726 EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode),
2727 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2728 }
2729 break;
2730
2731 case 68: /* logical_or_expression: logical_xor_expression */
2732 {
2733 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2734 }
2735 break;
2736
2737 case 69: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */
2738 {
2739 (yyval.interm.intermTypedNode) = context->addBinaryMathBooleanResult(
2740 EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode),
2741 (yylsp[-1]));
2742 }
2743 break;
2744
2745 case 70: /* conditional_expression: logical_or_expression */
2746 {
2747 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2748 }
2749 break;
2750
2751 case 71: /* conditional_expression: logical_or_expression QUESTION expression COLON
2752 assignment_expression */
2753 {
2754 (yyval.interm.intermTypedNode) = context->addTernarySelection(
2755 (yyvsp[-4].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode),
2756 (yyvsp[0].interm.intermTypedNode), (yylsp[-3]));
2757 }
2758 break;
2759
2760 case 72: /* assignment_expression: conditional_expression */
2761 {
2762 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2763 }
2764 break;
2765
2766 case 73: /* assignment_expression: unary_expression assignment_operator
2767 assignment_expression */
2768 {
2769 (yyval.interm.intermTypedNode) =
2770 context->addAssign((yyvsp[-1].interm.op), (yyvsp[-2].interm.intermTypedNode),
2771 (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2772 }
2773 break;
2774
2775 case 74: /* assignment_operator: EQUAL */
2776 {
2777 (yyval.interm.op) = EOpAssign;
2778 }
2779 break;
2780
2781 case 75: /* assignment_operator: MUL_ASSIGN */
2782 {
2783 (yyval.interm.op) = EOpMulAssign;
2784 }
2785 break;
2786
2787 case 76: /* assignment_operator: DIV_ASSIGN */
2788 {
2789 (yyval.interm.op) = EOpDivAssign;
2790 }
2791 break;
2792
2793 case 77: /* assignment_operator: MOD_ASSIGN */
2794 {
2795 ES3_OR_NEWER("%=", (yyloc), "integer modulus operator");
2796 (yyval.interm.op) = EOpIModAssign;
2797 }
2798 break;
2799
2800 case 78: /* assignment_operator: ADD_ASSIGN */
2801 {
2802 (yyval.interm.op) = EOpAddAssign;
2803 }
2804 break;
2805
2806 case 79: /* assignment_operator: SUB_ASSIGN */
2807 {
2808 (yyval.interm.op) = EOpSubAssign;
2809 }
2810 break;
2811
2812 case 80: /* assignment_operator: LEFT_ASSIGN */
2813 {
2814 ES3_OR_NEWER("<<=", (yyloc), "bit-wise operator");
2815 (yyval.interm.op) = EOpBitShiftLeftAssign;
2816 }
2817 break;
2818
2819 case 81: /* assignment_operator: RIGHT_ASSIGN */
2820 {
2821 ES3_OR_NEWER(">>=", (yyloc), "bit-wise operator");
2822 (yyval.interm.op) = EOpBitShiftRightAssign;
2823 }
2824 break;
2825
2826 case 82: /* assignment_operator: AND_ASSIGN */
2827 {
2828 ES3_OR_NEWER("&=", (yyloc), "bit-wise operator");
2829 (yyval.interm.op) = EOpBitwiseAndAssign;
2830 }
2831 break;
2832
2833 case 83: /* assignment_operator: XOR_ASSIGN */
2834 {
2835 ES3_OR_NEWER("^=", (yyloc), "bit-wise operator");
2836 (yyval.interm.op) = EOpBitwiseXorAssign;
2837 }
2838 break;
2839
2840 case 84: /* assignment_operator: OR_ASSIGN */
2841 {
2842 ES3_OR_NEWER("|=", (yyloc), "bit-wise operator");
2843 (yyval.interm.op) = EOpBitwiseOrAssign;
2844 }
2845 break;
2846
2847 case 85: /* expression: assignment_expression */
2848 {
2849 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2850 }
2851 break;
2852
2853 case 86: /* expression: expression COMMA assignment_expression */
2854 {
2855 (yyval.interm.intermTypedNode) = context->addComma(
2856 (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yylsp[-1]));
2857 }
2858 break;
2859
2860 case 87: /* constant_expression: conditional_expression */
2861 {
2862 context->checkIsConst((yyvsp[0].interm.intermTypedNode));
2863 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
2864 }
2865 break;
2866
2867 case 88: /* enter_struct: IDENTIFIER LEFT_BRACE */
2868 {
2869 context->enterStructDeclaration((yylsp[-1]), ImmutableString((yyvsp[-1].lex).string));
2870 (yyval.lex) = (yyvsp[-1].lex);
2871 }
2872 break;
2873
2874 case 89: /* declaration: function_prototype SEMICOLON */
2875 {
2876 (yyval.interm.intermNode) = context->addFunctionPrototypeDeclaration(
2877 *((yyvsp[-1].interm).function), (yylsp[-1]));
2878 }
2879 break;
2880
2881 case 90: /* declaration: init_declarator_list SEMICOLON */
2882 {
2883 (yyval.interm.intermNode) = (yyvsp[-1].interm).intermDeclaration;
2884 }
2885 break;
2886
2887 case 91: /* declaration: PRECISION precision_qualifier type_specifier_no_prec SEMICOLON */
2888 {
2889 context->parseDefaultPrecisionQualifier((yyvsp[-2].interm.precision),
2890 (yyvsp[-1].interm.type), (yylsp[-3]));
2891 (yyval.interm.intermNode) = nullptr;
2892 }
2893 break;
2894
2895 case 92: /* declaration: type_qualifier enter_struct struct_declaration_list RIGHT_BRACE
2896 SEMICOLON */
2897 {
2898 ES3_OR_NEWER(ImmutableString((yyvsp[-3].lex).string), (yylsp[-4]), "interface blocks");
2899 (yyval.interm.intermNode) = context->addInterfaceBlock(
2900 *(yyvsp[-4].interm.typeQualifierBuilder), (yylsp[-3]),
2901 ImmutableString((yyvsp[-3].lex).string), (yyvsp[-2].interm.fieldList),
2902 kEmptyImmutableString, (yyloc), NULL, (yyloc));
2903 }
2904 break;
2905
2906 case 93: /* declaration: type_qualifier enter_struct struct_declaration_list RIGHT_BRACE
2907 IDENTIFIER SEMICOLON */
2908 {
2909 ES3_OR_NEWER(ImmutableString((yyvsp[-4].lex).string), (yylsp[-5]), "interface blocks");
2910 (yyval.interm.intermNode) = context->addInterfaceBlock(
2911 *(yyvsp[-5].interm.typeQualifierBuilder), (yylsp[-4]),
2912 ImmutableString((yyvsp[-4].lex).string), (yyvsp[-3].interm.fieldList),
2913 ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]), NULL, (yyloc));
2914 }
2915 break;
2916
2917 case 94: /* declaration: type_qualifier enter_struct struct_declaration_list RIGHT_BRACE
2918 IDENTIFIER array_specifier SEMICOLON */
2919 {
2920 ES3_OR_NEWER(ImmutableString((yyvsp[-5].lex).string), (yylsp[-6]), "interface blocks");
2921 (yyval.interm.intermNode) = context->addInterfaceBlock(
2922 *(yyvsp[-6].interm.typeQualifierBuilder), (yylsp[-5]),
2923 ImmutableString((yyvsp[-5].lex).string), (yyvsp[-4].interm.fieldList),
2924 ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[-1].interm.arraySizes),
2925 (yylsp[-1]));
2926 }
2927 break;
2928
2929 case 95: /* declaration: type_qualifier SEMICOLON */
2930 {
2931 context->parseGlobalLayoutQualifier(*(yyvsp[-1].interm.typeQualifierBuilder));
2932 (yyval.interm.intermNode) = nullptr;
2933 }
2934 break;
2935
2936 case 96: /* declaration: type_qualifier IDENTIFIER SEMICOLON */
2937 {
2938 (yyval.interm.intermNode) = context->parseGlobalQualifierDeclaration(
2939 *(yyvsp[-2].interm.typeQualifierBuilder), (yylsp[-1]),
2940 ImmutableString((yyvsp[-1].lex).string), (yyvsp[-1].lex).symbol);
2941 }
2942 break;
2943
2944 case 97: /* function_prototype: function_declarator RIGHT_PAREN */
2945 {
2946 (yyval.interm).function =
2947 context->parseFunctionDeclarator((yylsp[0]), (yyvsp[-1].interm.function));
2948 context->exitFunctionDeclaration();
2949 }
2950 break;
2951
2952 case 98: /* function_declarator: function_header */
2953 {
2954 (yyval.interm.function) = (yyvsp[0].interm.function);
2955 }
2956 break;
2957
2958 case 99: /* function_declarator: function_header_with_parameters */
2959 {
2960 (yyval.interm.function) = (yyvsp[0].interm.function);
2961 }
2962 break;
2963
2964 case 100: /* function_header_with_parameters: function_header parameter_declaration */
2965 {
2966 // Add the parameter
2967 (yyval.interm.function) = (yyvsp[-1].interm.function);
2968 if ((yyvsp[0].interm.param).type.getBasicType() != EbtVoid)
2969 {
2970 (yyvsp[-1].interm.function)
2971 ->addParameter((yyvsp[0].interm.param).createVariable(&context->symbolTable));
2972 }
2973 else
2974 {
2975 // Remember that void was seen, so error can be generated if another parameter is
2976 // seen.
2977 (yyvsp[-1].interm.function)->setHasVoidParameter();
2978 }
2979 }
2980 break;
2981
2982 case 101: /* function_header_with_parameters: function_header_with_parameters COMMA
2983 parameter_declaration */
2984 {
2985 (yyval.interm.function) = (yyvsp[-2].interm.function);
2986 // Only first parameter of one-parameter functions can be void
2987 // The check for named parameters not being void is done in parameter_declarator
2988 if ((yyvsp[0].interm.param).type.getBasicType() == EbtVoid)
2989 {
2990 // This parameter > first is void
2991 context->error((yylsp[-1]), "cannot be a parameter type except for '(void)'",
2992 "void");
2993 }
2994 else
2995 {
2996 if ((yyvsp[-2].interm.function)->hasVoidParameter())
2997 {
2998 // Only first parameter of one-parameter functions can be void. This check
2999 // prevents (void, non_void) parameters.
3000 context->error((yylsp[-1]), "cannot be a parameter type except for '(void)'",
3001 "void");
3002 }
3003 (yyvsp[-2].interm.function)
3004 ->addParameter((yyvsp[0].interm.param).createVariable(&context->symbolTable));
3005 }
3006 }
3007 break;
3008
3009 case 102: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */
3010 {
3011 (yyval.interm.function) = context->parseFunctionHeader(
3012 (yyvsp[-2].interm.type), ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]));
3013
3014 context->symbolTable.push();
3015 context->enterFunctionDeclaration();
3016 }
3017 break;
3018
3019 case 103: /* parameter_declarator: type_specifier identifier */
3020 {
3021 (yyval.interm.param) = context->parseParameterDeclarator(
3022 (yyvsp[-1].interm.type), ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
3023 }
3024 break;
3025
3026 case 104: /* parameter_declarator: type_specifier identifier array_specifier */
3027 {
3028 (yyval.interm.param) = context->parseParameterArrayDeclarator(
3029 (yyvsp[-2].interm.type), ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]),
3030 (yyvsp[0].interm.arraySizes), (yylsp[0]));
3031 }
3032 break;
3033
3034 case 105: /* parameter_declaration: type_qualifier parameter_declarator */
3035 {
3036 (yyval.interm.param) = (yyvsp[0].interm.param);
3037 context->parseParameterQualifier((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder),
3038 (yyval.interm.param).type);
3039 }
3040 break;
3041
3042 case 106: /* parameter_declaration: parameter_declarator */
3043 {
3044 (yyval.interm.param) = (yyvsp[0].interm.param);
3045 (yyval.interm.param).type.setQualifier(EvqParamIn);
3046 }
3047 break;
3048
3049 case 107: /* parameter_declaration: type_qualifier parameter_type_specifier */
3050 {
3051 (yyval.interm.param) = context->parseParameterDeclarator(
3052 (yyvsp[0].interm.type), kEmptyImmutableString, (yylsp[0]));
3053 context->parseParameterQualifier((yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder),
3054 (yyval.interm.param).type);
3055 }
3056 break;
3057
3058 case 108: /* parameter_declaration: parameter_type_specifier */
3059 {
3060 (yyval.interm.param) = context->parseParameterDeclarator(
3061 (yyvsp[0].interm.type), kEmptyImmutableString, (yylsp[0]));
3062 (yyval.interm.param).type.setQualifier(EvqParamIn);
3063 }
3064 break;
3065
3066 case 109: /* parameter_type_specifier: type_specifier */
3067 {
3068 (yyval.interm.type) = (yyvsp[0].interm.type);
3069 }
3070 break;
3071
3072 case 110: /* init_declarator_list: single_declaration */
3073 {
3074 (yyval.interm) = (yyvsp[0].interm);
3075 }
3076 break;
3077
3078 case 111: /* init_declarator_list: init_declarator_list COMMA identifier */
3079 {
3080 (yyval.interm) = (yyvsp[-2].interm);
3081 context->parseDeclarator((yyval.interm).type, (yylsp[0]),
3082 ImmutableString((yyvsp[0].lex).string),
3083 (yyval.interm).intermDeclaration);
3084 }
3085 break;
3086
3087 case 112: /* init_declarator_list: init_declarator_list COMMA identifier array_specifier */
3088 {
3089 (yyval.interm) = (yyvsp[-3].interm);
3090 context->parseArrayDeclarator(
3091 (yyval.interm).type, (yylsp[-1]), ImmutableString((yyvsp[-1].lex).string),
3092 (yylsp[0]), *((yyvsp[0].interm.arraySizes)), (yyval.interm).intermDeclaration);
3093 }
3094 break;
3095
3096 case 113: /* init_declarator_list: init_declarator_list COMMA identifier array_specifier
3097 EQUAL initializer */
3098 {
3099 ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
3100 (yyval.interm) = (yyvsp[-5].interm);
3101 context->parseArrayInitDeclarator(
3102 (yyval.interm).type, (yylsp[-3]), ImmutableString((yyvsp[-3].lex).string),
3103 (yylsp[-2]), *((yyvsp[-2].interm.arraySizes)), (yylsp[-1]),
3104 (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
3105 }
3106 break;
3107
3108 case 114: /* init_declarator_list: init_declarator_list COMMA identifier EQUAL initializer
3109 */
3110 {
3111 (yyval.interm) = (yyvsp[-4].interm);
3112 context->parseInitDeclarator(
3113 (yyval.interm).type, (yylsp[-2]), ImmutableString((yyvsp[-2].lex).string),
3114 (yylsp[-1]), (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
3115 }
3116 break;
3117
3118 case 115: /* single_declaration: fully_specified_type */
3119 {
3120 (yyval.interm).type = (yyvsp[0].interm.type);
3121 (yyval.interm).intermDeclaration = context->parseSingleDeclaration(
3122 (yyval.interm).type, (yylsp[0]), kEmptyImmutableString);
3123 }
3124 break;
3125
3126 case 116: /* single_declaration: fully_specified_type identifier */
3127 {
3128 (yyval.interm).type = (yyvsp[-1].interm.type);
3129 (yyval.interm).intermDeclaration = context->parseSingleDeclaration(
3130 (yyval.interm).type, (yylsp[0]), ImmutableString((yyvsp[0].lex).string));
3131 }
3132 break;
3133
3134 case 117: /* single_declaration: fully_specified_type identifier array_specifier */
3135 {
3136 (yyval.interm).type = (yyvsp[-2].interm.type);
3137 (yyval.interm).intermDeclaration = context->parseSingleArrayDeclaration(
3138 (yyval.interm).type, (yylsp[-1]), ImmutableString((yyvsp[-1].lex).string),
3139 (yylsp[0]), *((yyvsp[0].interm.arraySizes)));
3140 }
3141 break;
3142
3143 case 118: /* single_declaration: fully_specified_type identifier array_specifier EQUAL
3144 initializer */
3145 {
3146 ES3_OR_NEWER("[]", (yylsp[-2]), "first-class arrays (array initializer)");
3147 (yyval.interm).type = (yyvsp[-4].interm.type);
3148 (yyval.interm).intermDeclaration = context->parseSingleArrayInitDeclaration(
3149 (yyval.interm).type, (yylsp[-3]), ImmutableString((yyvsp[-3].lex).string),
3150 (yylsp[-2]), *((yyvsp[-2].interm.arraySizes)), (yylsp[-1]),
3151 (yyvsp[0].interm.intermTypedNode));
3152 }
3153 break;
3154
3155 case 119: /* single_declaration: fully_specified_type identifier EQUAL initializer */
3156 {
3157 (yyval.interm).type = (yyvsp[-3].interm.type);
3158 (yyval.interm).intermDeclaration = context->parseSingleInitDeclaration(
3159 (yyval.interm).type, (yylsp[-2]), ImmutableString((yyvsp[-2].lex).string),
3160 (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
3161 }
3162 break;
3163
3164 case 120: /* fully_specified_type: type_specifier */
3165 {
3166 context->addFullySpecifiedType(&(yyvsp[0].interm.type));
3167 (yyval.interm.type) = (yyvsp[0].interm.type);
3168 }
3169 break;
3170
3171 case 121: /* fully_specified_type: type_qualifier type_specifier */
3172 {
3173 (yyval.interm.type) = context->addFullySpecifiedType(
3174 *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.type));
3175 }
3176 break;
3177
3178 case 122: /* interpolation_qualifier: SMOOTH */
3179 {
3180 (yyval.interm.qualifier) = EvqSmooth;
3181 }
3182 break;
3183
3184 case 123: /* interpolation_qualifier: FLAT */
3185 {
3186 (yyval.interm.qualifier) = EvqFlat;
3187 }
3188 break;
3189
3190 case 124: /* interpolation_qualifier: NOPERSPECTIVE */
3191 {
3192 if (!context->checkCanUseExtension((yylsp[0]),
3193 TExtension::NV_shader_noperspective_interpolation))
3194 {
3195 context->error((yylsp[0]), "unsupported interpolation qualifier", "noperspective");
3196 }
3197 (yyval.interm.qualifier) = EvqNoPerspective;
3198 }
3199 break;
3200
3201 case 125: /* type_qualifier: single_type_qualifier */
3202 {
3203 (yyval.interm.typeQualifierBuilder) = context->createTypeQualifierBuilder((yylsp[0]));
3204 (yyval.interm.typeQualifierBuilder)
3205 ->appendQualifier((yyvsp[0].interm.qualifierWrapper));
3206 }
3207 break;
3208
3209 case 126: /* type_qualifier: type_qualifier single_type_qualifier */
3210 {
3211 (yyval.interm.typeQualifierBuilder) = (yyvsp[-1].interm.typeQualifierBuilder);
3212 (yyval.interm.typeQualifierBuilder)
3213 ->appendQualifier((yyvsp[0].interm.qualifierWrapper));
3214 }
3215 break;
3216
3217 case 127: /* invariant_qualifier: INVARIANT */
3218 {
3219 // empty
3220 }
3221 break;
3222
3223 case 128: /* precise_qualifier: PRECISE */
3224 {
3225 context->markShaderHasPrecise();
3226 }
3227 break;
3228
3229 case 129: /* single_type_qualifier: storage_qualifier */
3230 {
3231 context->checkLocalVariableConstStorageQualifier(*(yyvsp[0].interm.qualifierWrapper));
3232 (yyval.interm.qualifierWrapper) = (yyvsp[0].interm.qualifierWrapper);
3233 }
3234 break;
3235
3236 case 130: /* single_type_qualifier: layout_qualifier */
3237 {
3238 context->checkIsAtGlobalLevel((yylsp[0]), "layout");
3239 (yyval.interm.qualifierWrapper) =
3240 new TLayoutQualifierWrapper((yyvsp[0].interm.layoutQualifier), (yylsp[0]));
3241 }
3242 break;
3243
3244 case 131: /* single_type_qualifier: precision_qualifier */
3245 {
3246 (yyval.interm.qualifierWrapper) =
3247 new TPrecisionQualifierWrapper((yyvsp[0].interm.precision), (yylsp[0]));
3248 }
3249 break;
3250
3251 case 132: /* single_type_qualifier: interpolation_qualifier */
3252 {
3253 (yyval.interm.qualifierWrapper) =
3254 new TInterpolationQualifierWrapper((yyvsp[0].interm.qualifier), (yylsp[0]));
3255 }
3256 break;
3257
3258 case 133: /* single_type_qualifier: invariant_qualifier */
3259 {
3260 context->checkIsAtGlobalLevel((yylsp[0]), "invariant");
3261 (yyval.interm.qualifierWrapper) = new TInvariantQualifierWrapper((yylsp[0]));
3262 }
3263 break;
3264
3265 case 134: /* single_type_qualifier: precise_qualifier */
3266 {
3267 (yyval.interm.qualifierWrapper) = new TPreciseQualifierWrapper((yylsp[0]));
3268 }
3269 break;
3270
3271 case 135: /* storage_qualifier: ATTRIBUTE */
3272 {
3273 VERTEX_ONLY("attribute", (yylsp[0]));
3274 ES2_ONLY("attribute", (yylsp[0]));
3275 (yyval.interm.qualifierWrapper) =
3276 context->parseGlobalStorageQualifier(EvqAttribute, (yylsp[0]));
3277 }
3278 break;
3279
3280 case 136: /* storage_qualifier: VARYING */
3281 {
3282 ES2_ONLY("varying", (yylsp[0]));
3283 (yyval.interm.qualifierWrapper) = context->parseVaryingQualifier((yylsp[0]));
3284 }
3285 break;
3286
3287 case 137: /* storage_qualifier: CONST_QUAL */
3288 {
3289 (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqConst, (yylsp[0]));
3290 }
3291 break;
3292
3293 case 138: /* storage_qualifier: IN_QUAL */
3294 {
3295 (yyval.interm.qualifierWrapper) = context->parseInQualifier((yylsp[0]));
3296 }
3297 break;
3298
3299 case 139: /* storage_qualifier: OUT_QUAL */
3300 {
3301 (yyval.interm.qualifierWrapper) = context->parseOutQualifier((yylsp[0]));
3302 }
3303 break;
3304
3305 case 140: /* storage_qualifier: INOUT_QUAL */
3306 {
3307 (yyval.interm.qualifierWrapper) = context->parseInOutQualifier((yylsp[0]));
3308 }
3309 break;
3310
3311 case 141: /* storage_qualifier: CENTROID */
3312 {
3313 ES3_OR_NEWER("centroid", (yylsp[0]), "storage qualifier");
3314 (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqCentroid, (yylsp[0]));
3315 }
3316 break;
3317
3318 case 142: /* storage_qualifier: PATCH */
3319 {
3320 constexpr std::array<TExtension, 2u> extensions{
3321 {TExtension::OES_tessellation_shader, TExtension::EXT_tessellation_shader}};
3322 if (context->getShaderVersion() < 320 &&
3323 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3324 {
3325 context->error((yylsp[0]), "unsupported storage qualifier", "patch");
3326 }
3327 (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqPatch, (yylsp[0]));
3328 }
3329 break;
3330
3331 case 143: /* storage_qualifier: UNIFORM */
3332 {
3333 (yyval.interm.qualifierWrapper) =
3334 context->parseGlobalStorageQualifier(EvqUniform, (yylsp[0]));
3335 }
3336 break;
3337
3338 case 144: /* storage_qualifier: BUFFER */
3339 {
3340 ES3_1_OR_NEWER("buffer", (yylsp[0]), "storage qualifier");
3341 (yyval.interm.qualifierWrapper) =
3342 context->parseGlobalStorageQualifier(EvqBuffer, (yylsp[0]));
3343 }
3344 break;
3345
3346 case 145: /* storage_qualifier: READONLY */
3347 {
3348 (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqReadOnly, (yylsp[0]));
3349 }
3350 break;
3351
3352 case 146: /* storage_qualifier: WRITEONLY */
3353 {
3354 (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqWriteOnly, (yylsp[0]));
3355 }
3356 break;
3357
3358 case 147: /* storage_qualifier: COHERENT */
3359 {
3360 (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqCoherent, (yylsp[0]));
3361 }
3362 break;
3363
3364 case 148: /* storage_qualifier: RESTRICT */
3365 {
3366 (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqRestrict, (yylsp[0]));
3367 }
3368 break;
3369
3370 case 149: /* storage_qualifier: VOLATILE */
3371 {
3372 (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqVolatile, (yylsp[0]));
3373 }
3374 break;
3375
3376 case 150: /* storage_qualifier: SHARED */
3377 {
3378 COMPUTE_ONLY("shared", (yylsp[0]));
3379 (yyval.interm.qualifierWrapper) =
3380 context->parseGlobalStorageQualifier(EvqShared, (yylsp[0]));
3381 }
3382 break;
3383
3384 case 151: /* storage_qualifier: SAMPLE */
3385 {
3386 ES3_OR_NEWER("sample", (yylsp[0]), "storage qualifier");
3387 (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqSample, (yylsp[0]));
3388 }
3389 break;
3390
3391 case 152: /* type_specifier: type_specifier_no_prec */
3392 {
3393 (yyval.interm.type) = (yyvsp[0].interm.type);
3394 (yyval.interm.type).precision =
3395 context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).getBasicType());
3396 }
3397 break;
3398
3399 case 153: /* precision_qualifier: HIGH_PRECISION */
3400 {
3401 (yyval.interm.precision) = EbpHigh;
3402 }
3403 break;
3404
3405 case 154: /* precision_qualifier: MEDIUM_PRECISION */
3406 {
3407 (yyval.interm.precision) = EbpMedium;
3408 }
3409 break;
3410
3411 case 155: /* precision_qualifier: LOW_PRECISION */
3412 {
3413 (yyval.interm.precision) = EbpLow;
3414 }
3415 break;
3416
3417 case 156: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */
3418 {
3419 context->checkCanUseLayoutQualifier((yylsp[-3]));
3420 (yyval.interm.layoutQualifier) = (yyvsp[-1].interm.layoutQualifier);
3421 }
3422 break;
3423
3424 case 157: /* layout_qualifier_id_list: layout_qualifier_id */
3425 {
3426 (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
3427 }
3428 break;
3429
3430 case 158: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */
3431 {
3432 (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers(
3433 (yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
3434 }
3435 break;
3436
3437 case 159: /* layout_qualifier_id: IDENTIFIER */
3438 {
3439 (yyval.interm.layoutQualifier) =
3440 context->parseLayoutQualifier(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
3441 }
3442 break;
3443
3444 case 160: /* layout_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */
3445 {
3446 (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
3447 ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
3448 }
3449 break;
3450
3451 case 161: /* layout_qualifier_id: IDENTIFIER EQUAL UINTCONSTANT */
3452 {
3453 (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
3454 ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
3455 }
3456 break;
3457
3458 case 162: /* layout_qualifier_id: SHARED */
3459 {
3460 (yyval.interm.layoutQualifier) =
3461 context->parseLayoutQualifier(ImmutableString("shared"), (yylsp[0]));
3462 }
3463 break;
3464
3465 case 163: /* type_specifier_no_prec: type_specifier_nonarray */
3466 {
3467 (yyval.interm.type)
3468 .initialize((yyvsp[0].interm.typeSpecifierNonArray),
3469 (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
3470 }
3471 break;
3472
3473 case 164: /* type_specifier_no_prec: type_specifier_nonarray array_specifier */
3474 {
3475 (yyval.interm.type)
3476 .initialize((yyvsp[-1].interm.typeSpecifierNonArray),
3477 (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
3478 (yyval.interm.type).setArraySizes((yyvsp[0].interm.arraySizes));
3479 }
3480 break;
3481
3482 case 165: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */
3483 {
3484 ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
3485 (yyval.interm.arraySizes) = new TVector<unsigned int>();
3486 (yyval.interm.arraySizes)->push_back(0u);
3487 }
3488 break;
3489
3490 case 166: /* array_specifier: LEFT_BRACKET constant_expression RIGHT_BRACKET */
3491 {
3492 (yyval.interm.arraySizes) = new TVector<unsigned int>();
3493 unsigned int size =
3494 context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
3495 // Make the type an array even if size check failed.
3496 // This ensures useless error messages regarding a variable's non-arrayness won't
3497 // follow.
3498 (yyval.interm.arraySizes)->push_back(size);
3499 }
3500 break;
3501
3502 case 167: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */
3503 {
3504 ES3_1_OR_NEWER("[]", (yylsp[-1]), "arrays of arrays");
3505 (yyval.interm.arraySizes) = (yyvsp[-2].interm.arraySizes);
3506 (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), 0u);
3507 if (!context->checkIsValidArrayDimension((yylsp[-1]), (yyval.interm.arraySizes)))
3508 {
3509 YYABORT;
3510 }
3511 }
3512 break;
3513
3514 case 168: /* array_specifier: array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET
3515 */
3516 {
3517 ES3_1_OR_NEWER("[]", (yylsp[-2]), "arrays of arrays");
3518 (yyval.interm.arraySizes) = (yyvsp[-3].interm.arraySizes);
3519 unsigned int size =
3520 context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
3521 // Make the type an array even if size check failed.
3522 // This ensures useless error messages regarding a variable's non-arrayness won't
3523 // follow.
3524 (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), size);
3525 if (!context->checkIsValidArrayDimension((yylsp[-2]), (yyval.interm.arraySizes)))
3526 {
3527 YYABORT;
3528 }
3529 }
3530 break;
3531
3532 case 169: /* type_specifier_nonarray: VOID_TYPE */
3533 {
3534 (yyval.interm.typeSpecifierNonArray).initialize(EbtVoid, (yylsp[0]));
3535 }
3536 break;
3537
3538 case 170: /* type_specifier_nonarray: FLOAT_TYPE */
3539 {
3540 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3541 }
3542 break;
3543
3544 case 171: /* type_specifier_nonarray: INT_TYPE */
3545 {
3546 (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3547 }
3548 break;
3549
3550 case 172: /* type_specifier_nonarray: UINT_TYPE */
3551 {
3552 (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3553 }
3554 break;
3555
3556 case 173: /* type_specifier_nonarray: BOOL_TYPE */
3557 {
3558 (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3559 }
3560 break;
3561
3562 case 174: /* type_specifier_nonarray: VEC2 */
3563 {
3564 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3565 (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3566 }
3567 break;
3568
3569 case 175: /* type_specifier_nonarray: VEC3 */
3570 {
3571 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3572 (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3573 }
3574 break;
3575
3576 case 176: /* type_specifier_nonarray: VEC4 */
3577 {
3578 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3579 (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3580 }
3581 break;
3582
3583 case 177: /* type_specifier_nonarray: BVEC2 */
3584 {
3585 (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3586 (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3587 }
3588 break;
3589
3590 case 178: /* type_specifier_nonarray: BVEC3 */
3591 {
3592 (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3593 (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3594 }
3595 break;
3596
3597 case 179: /* type_specifier_nonarray: BVEC4 */
3598 {
3599 (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3600 (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3601 }
3602 break;
3603
3604 case 180: /* type_specifier_nonarray: IVEC2 */
3605 {
3606 (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3607 (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3608 }
3609 break;
3610
3611 case 181: /* type_specifier_nonarray: IVEC3 */
3612 {
3613 (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3614 (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3615 }
3616 break;
3617
3618 case 182: /* type_specifier_nonarray: IVEC4 */
3619 {
3620 (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3621 (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3622 }
3623 break;
3624
3625 case 183: /* type_specifier_nonarray: UVEC2 */
3626 {
3627 (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3628 (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3629 }
3630 break;
3631
3632 case 184: /* type_specifier_nonarray: UVEC3 */
3633 {
3634 (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3635 (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3636 }
3637 break;
3638
3639 case 185: /* type_specifier_nonarray: UVEC4 */
3640 {
3641 (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3642 (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3643 }
3644 break;
3645
3646 case 186: /* type_specifier_nonarray: MATRIX2 */
3647 {
3648 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3649 (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
3650 }
3651 break;
3652
3653 case 187: /* type_specifier_nonarray: MATRIX3 */
3654 {
3655 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3656 (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
3657 }
3658 break;
3659
3660 case 188: /* type_specifier_nonarray: MATRIX4 */
3661 {
3662 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3663 (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
3664 }
3665 break;
3666
3667 case 189: /* type_specifier_nonarray: MATRIX2x3 */
3668 {
3669 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3670 (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
3671 }
3672 break;
3673
3674 case 190: /* type_specifier_nonarray: MATRIX3x2 */
3675 {
3676 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3677 (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
3678 }
3679 break;
3680
3681 case 191: /* type_specifier_nonarray: MATRIX2x4 */
3682 {
3683 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3684 (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
3685 }
3686 break;
3687
3688 case 192: /* type_specifier_nonarray: MATRIX4x2 */
3689 {
3690 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3691 (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
3692 }
3693 break;
3694
3695 case 193: /* type_specifier_nonarray: MATRIX3x4 */
3696 {
3697 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3698 (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
3699 }
3700 break;
3701
3702 case 194: /* type_specifier_nonarray: MATRIX4x3 */
3703 {
3704 (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3705 (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
3706 }
3707 break;
3708
3709 case 195: /* type_specifier_nonarray: YUVCSCSTANDARDEXT */
3710 {
3711 if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
3712 {
3713 context->error((yylsp[0]), "unsupported type", "yuvCscStandardEXT");
3714 }
3715 (yyval.interm.typeSpecifierNonArray).initialize(EbtYuvCscStandardEXT, (yylsp[0]));
3716 }
3717 break;
3718
3719 case 196: /* type_specifier_nonarray: SAMPLER2D */
3720 {
3721 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
3722 }
3723 break;
3724
3725 case 197: /* type_specifier_nonarray: SAMPLER3D */
3726 {
3727 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
3728 }
3729 break;
3730
3731 case 198: /* type_specifier_nonarray: SAMPLERCUBE */
3732 {
3733 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
3734 }
3735 break;
3736
3737 case 199: /* type_specifier_nonarray: SAMPLER2DARRAY */
3738 {
3739 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
3740 }
3741 break;
3742
3743 case 200: /* type_specifier_nonarray: SAMPLER2DMS */
3744 {
3745 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMS, (yylsp[0]));
3746 }
3747 break;
3748
3749 case 201: /* type_specifier_nonarray: SAMPLER2DMSARRAY */
3750 {
3751 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMSArray, (yylsp[0]));
3752 }
3753 break;
3754
3755 case 202: /* type_specifier_nonarray: SAMPLERCUBEARRAYOES */
3756 {
3757 if (context->getShaderVersion() < 320 &&
3758 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3759 {
3760 context->error((yylsp[0]), "unsupported type", "__samplerCubeArray");
3761 }
3762 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArray, (yylsp[0]));
3763 }
3764 break;
3765
3766 case 203: /* type_specifier_nonarray: SAMPLERCUBEARRAYEXT */
3767 {
3768 if (context->getShaderVersion() < 320 &&
3769 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3770 {
3771 context->error((yylsp[0]), "unsupported type", "__samplerCubeArray");
3772 }
3773 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArray, (yylsp[0]));
3774 }
3775 break;
3776
3777 case 204: /* type_specifier_nonarray: SAMPLERBUFFER */
3778 {
3779 constexpr std::array<TExtension, 2u> extensions{
3780 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3781 if (context->getShaderVersion() < 320 &&
3782 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3783 {
3784 context->error((yylsp[0]), "unsupported type", "__samplerBuffer");
3785 }
3786 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerBuffer, (yylsp[0]));
3787 }
3788 break;
3789
3790 case 205: /* type_specifier_nonarray: ISAMPLER2D */
3791 {
3792 (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
3793 }
3794 break;
3795
3796 case 206: /* type_specifier_nonarray: ISAMPLER3D */
3797 {
3798 (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
3799 }
3800 break;
3801
3802 case 207: /* type_specifier_nonarray: ISAMPLERCUBE */
3803 {
3804 (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
3805 }
3806 break;
3807
3808 case 208: /* type_specifier_nonarray: ISAMPLER2DARRAY */
3809 {
3810 (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
3811 }
3812 break;
3813
3814 case 209: /* type_specifier_nonarray: ISAMPLER2DMS */
3815 {
3816 (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMS, (yylsp[0]));
3817 }
3818 break;
3819
3820 case 210: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */
3821 {
3822 (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMSArray, (yylsp[0]));
3823 }
3824 break;
3825
3826 case 211: /* type_specifier_nonarray: ISAMPLERCUBEARRAYOES */
3827 {
3828 if (context->getShaderVersion() < 320 &&
3829 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3830 {
3831 context->error((yylsp[0]), "unsupported type", "__isamplerCubeArray");
3832 }
3833 (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCubeArray, (yylsp[0]));
3834 }
3835 break;
3836
3837 case 212: /* type_specifier_nonarray: ISAMPLERCUBEARRAYEXT */
3838 {
3839 if (context->getShaderVersion() < 320 &&
3840 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3841 {
3842 context->error((yylsp[0]), "unsupported type", "__isamplerCubeArray");
3843 }
3844 (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCubeArray, (yylsp[0]));
3845 }
3846 break;
3847
3848 case 213: /* type_specifier_nonarray: ISAMPLERBUFFER */
3849 {
3850 constexpr std::array<TExtension, 2u> extensions{
3851 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3852 if (context->getShaderVersion() < 320 &&
3853 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3854 {
3855 context->error((yylsp[0]), "unsupported type", "__isamplerBuffer");
3856 }
3857 (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerBuffer, (yylsp[0]));
3858 }
3859 break;
3860
3861 case 214: /* type_specifier_nonarray: USAMPLER2D */
3862 {
3863 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
3864 }
3865 break;
3866
3867 case 215: /* type_specifier_nonarray: USAMPLER3D */
3868 {
3869 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
3870 }
3871 break;
3872
3873 case 216: /* type_specifier_nonarray: USAMPLERCUBE */
3874 {
3875 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
3876 }
3877 break;
3878
3879 case 217: /* type_specifier_nonarray: USAMPLER2DARRAY */
3880 {
3881 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
3882 }
3883 break;
3884
3885 case 218: /* type_specifier_nonarray: USAMPLER2DMS */
3886 {
3887 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMS, (yylsp[0]));
3888 }
3889 break;
3890
3891 case 219: /* type_specifier_nonarray: USAMPLER2DMSARRAY */
3892 {
3893 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMSArray, (yylsp[0]));
3894 }
3895 break;
3896
3897 case 220: /* type_specifier_nonarray: USAMPLERCUBEARRAYOES */
3898 {
3899 if (context->getShaderVersion() < 320 &&
3900 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3901 {
3902 context->error((yylsp[0]), "unsupported type", "__usamplerCubeArray");
3903 }
3904 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCubeArray, (yylsp[0]));
3905 }
3906 break;
3907
3908 case 221: /* type_specifier_nonarray: USAMPLERCUBEARRAYEXT */
3909 {
3910 if (context->getShaderVersion() < 320 &&
3911 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3912 {
3913 context->error((yylsp[0]), "unsupported type", "__usamplerCubeArray");
3914 }
3915 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCubeArray, (yylsp[0]));
3916 }
3917 break;
3918
3919 case 222: /* type_specifier_nonarray: USAMPLERBUFFER */
3920 {
3921 constexpr std::array<TExtension, 2u> extensions{
3922 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3923 if (context->getShaderVersion() < 320 &&
3924 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3925 {
3926 context->error((yylsp[0]), "unsupported type", "__usamplerBuffer");
3927 }
3928 (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerBuffer, (yylsp[0]));
3929 }
3930 break;
3931
3932 case 223: /* type_specifier_nonarray: SAMPLER2DSHADOW */
3933 {
3934 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
3935 }
3936 break;
3937
3938 case 224: /* type_specifier_nonarray: SAMPLERCUBESHADOW */
3939 {
3940 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
3941 }
3942 break;
3943
3944 case 225: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */
3945 {
3946 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
3947 }
3948 break;
3949
3950 case 226: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOWOES */
3951 {
3952 if (context->getShaderVersion() < 320 &&
3953 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3954 {
3955 context->error((yylsp[0]), "unsupported type", "__samplerCubeArrayShadow");
3956 }
3957 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArrayShadow, (yylsp[0]));
3958 }
3959 break;
3960
3961 case 227: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOWEXT */
3962 {
3963 if (context->getShaderVersion() < 320 &&
3964 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3965 {
3966 context->error((yylsp[0]), "unsupported type", "__samplerCubeArrayShadow");
3967 }
3968 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArrayShadow, (yylsp[0]));
3969 }
3970 break;
3971
3972 case 228: /* type_specifier_nonarray: SAMPLERVIDEOWEBGL */
3973 {
3974 if (!context->checkCanUseExtension((yylsp[0]), TExtension::WEBGL_video_texture))
3975 {
3976 context->error((yylsp[0]), "unsupported type", "samplerVideoWEBGL");
3977 }
3978 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerVideoWEBGL, (yylsp[0]));
3979 }
3980 break;
3981
3982 case 229: /* type_specifier_nonarray: SAMPLER_EXTERNAL_OES */
3983 {
3984 constexpr std::array<TExtension, 3u> extensions{
3985 {TExtension::NV_EGL_stream_consumer_external,
3986 TExtension::OES_EGL_image_external_essl3, TExtension::OES_EGL_image_external}};
3987 if (!context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3988 {
3989 context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
3990 }
3991 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternalOES, (yylsp[0]));
3992 }
3993 break;
3994
3995 case 230: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */
3996 {
3997 if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
3998 {
3999 context->error((yylsp[0]), "unsupported type", "__samplerExternal2DY2YEXT");
4000 }
4001 (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternal2DY2YEXT, (yylsp[0]));
4002 }
4003 break;
4004
4005 case 231: /* type_specifier_nonarray: SAMPLER2DRECT */
4006 {
4007 if (!context->checkCanUseExtension((yylsp[0]), TExtension::ARB_texture_rectangle))
4008 {
4009 context->error((yylsp[0]), "unsupported type", "sampler2DRect");
4010 }
4011 (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DRect, (yylsp[0]));
4012 }
4013 break;
4014
4015 case 232: /* type_specifier_nonarray: IMAGE2D */
4016 {
4017 (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
4018 }
4019 break;
4020
4021 case 233: /* type_specifier_nonarray: IIMAGE2D */
4022 {
4023 (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
4024 }
4025 break;
4026
4027 case 234: /* type_specifier_nonarray: UIMAGE2D */
4028 {
4029 (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
4030 }
4031 break;
4032
4033 case 235: /* type_specifier_nonarray: IMAGE3D */
4034 {
4035 (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
4036 }
4037 break;
4038
4039 case 236: /* type_specifier_nonarray: IIMAGE3D */
4040 {
4041 (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
4042 }
4043 break;
4044
4045 case 237: /* type_specifier_nonarray: UIMAGE3D */
4046 {
4047 (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
4048 }
4049 break;
4050
4051 case 238: /* type_specifier_nonarray: IMAGE2DARRAY */
4052 {
4053 (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
4054 }
4055 break;
4056
4057 case 239: /* type_specifier_nonarray: IIMAGE2DARRAY */
4058 {
4059 (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
4060 }
4061 break;
4062
4063 case 240: /* type_specifier_nonarray: UIMAGE2DARRAY */
4064 {
4065 (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
4066 }
4067 break;
4068
4069 case 241: /* type_specifier_nonarray: IMAGECUBE */
4070 {
4071 (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
4072 }
4073 break;
4074
4075 case 242: /* type_specifier_nonarray: IIMAGECUBE */
4076 {
4077 (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
4078 }
4079 break;
4080
4081 case 243: /* type_specifier_nonarray: UIMAGECUBE */
4082 {
4083 (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
4084 }
4085 break;
4086
4087 case 244: /* type_specifier_nonarray: IMAGECUBEARRAYOES */
4088 {
4089 if (context->getShaderVersion() < 320 &&
4090 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4091 {
4092 context->error((yylsp[0]), "unsupported type", "__imageCubeArray");
4093 }
4094 (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCubeArray, (yylsp[0]));
4095 }
4096 break;
4097
4098 case 245: /* type_specifier_nonarray: IMAGECUBEARRAYEXT */
4099 {
4100 if (context->getShaderVersion() < 320 &&
4101 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
4102 {
4103 context->error((yylsp[0]), "unsupported type", "__imageCubeArray");
4104 }
4105 (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCubeArray, (yylsp[0]));
4106 }
4107 break;
4108
4109 case 246: /* type_specifier_nonarray: IIMAGECUBEARRAYOES */
4110 {
4111 if (context->getShaderVersion() < 320 &&
4112 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4113 {
4114 context->error((yylsp[0]), "unsupported type", "__iimageCubeArray");
4115 }
4116 (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCubeArray, (yylsp[0]));
4117 }
4118 break;
4119
4120 case 247: /* type_specifier_nonarray: IIMAGECUBEARRAYEXT */
4121 {
4122 if (context->getShaderVersion() < 320 &&
4123 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
4124 {
4125 context->error((yylsp[0]), "unsupported type", "__iimageCubeArray");
4126 }
4127 (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCubeArray, (yylsp[0]));
4128 }
4129 break;
4130
4131 case 248: /* type_specifier_nonarray: UIMAGECUBEARRAYOES */
4132 {
4133 if (context->getShaderVersion() < 320 &&
4134 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4135 {
4136 context->error((yylsp[0]), "unsupported type", "__uimageCubeArray");
4137 }
4138 (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCubeArray, (yylsp[0]));
4139 }
4140 break;
4141
4142 case 249: /* type_specifier_nonarray: UIMAGECUBEARRAYEXT */
4143 {
4144 if (context->getShaderVersion() < 320 &&
4145 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
4146 {
4147 context->error((yylsp[0]), "unsupported type", "__uimageCubeArray");
4148 }
4149 (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCubeArray, (yylsp[0]));
4150 }
4151 break;
4152
4153 case 250: /* type_specifier_nonarray: IMAGEBUFFER */
4154 {
4155 constexpr std::array<TExtension, 2u> extensions{
4156 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4157 if (context->getShaderVersion() < 320 &&
4158 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4159 {
4160 context->error((yylsp[0]), "unsupported type", "__imageBuffer");
4161 }
4162 (yyval.interm.typeSpecifierNonArray).initialize(EbtImageBuffer, (yylsp[0]));
4163 }
4164 break;
4165
4166 case 251: /* type_specifier_nonarray: IIMAGEBUFFER */
4167 {
4168 constexpr std::array<TExtension, 2u> extensions{
4169 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4170 if (context->getShaderVersion() < 320 &&
4171 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4172 {
4173 context->error((yylsp[0]), "unsupported type", "__iimageBuffer");
4174 }
4175 (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageBuffer, (yylsp[0]));
4176 }
4177 break;
4178
4179 case 252: /* type_specifier_nonarray: UIMAGEBUFFER */
4180 {
4181 constexpr std::array<TExtension, 2u> extensions{
4182 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4183 if (context->getShaderVersion() < 320 &&
4184 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4185 {
4186 context->error((yylsp[0]), "unsupported type", "__uimageBuffer");
4187 }
4188 (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageBuffer, (yylsp[0]));
4189 }
4190 break;
4191
4192 case 253: /* type_specifier_nonarray: ATOMICUINT */
4193 {
4194 (yyval.interm.typeSpecifierNonArray).initialize(EbtAtomicCounter, (yylsp[0]));
4195 }
4196 break;
4197
4198 case 254: /* type_specifier_nonarray: PIXELLOCALANGLE */
4199 {
4200 if (!context->checkCanUseExtension((yylsp[0]),
4201 TExtension::ANGLE_shader_pixel_local_storage))
4202 {
4203 context->error((yylsp[0]), "unsupported type", "__pixelLocalANGLE");
4204 }
4205 (yyval.interm.typeSpecifierNonArray).initialize(EbtPixelLocalANGLE, (yylsp[0]));
4206 }
4207 break;
4208
4209 case 255: /* type_specifier_nonarray: IPIXELLOCALANGLE */
4210 {
4211 if (!context->checkCanUseExtension((yylsp[0]),
4212 TExtension::ANGLE_shader_pixel_local_storage))
4213 {
4214 context->error((yylsp[0]), "unsupported type", "__ipixelLocalANGLE");
4215 }
4216 (yyval.interm.typeSpecifierNonArray).initialize(EbtIPixelLocalANGLE, (yylsp[0]));
4217 }
4218 break;
4219
4220 case 256: /* type_specifier_nonarray: UPIXELLOCALANGLE */
4221 {
4222 if (!context->checkCanUseExtension((yylsp[0]),
4223 TExtension::ANGLE_shader_pixel_local_storage))
4224 {
4225 context->error((yylsp[0]), "unsupported type", "__upixelLocalANGLE");
4226 }
4227 (yyval.interm.typeSpecifierNonArray).initialize(EbtUPixelLocalANGLE, (yylsp[0]));
4228 }
4229 break;
4230
4231 case 257: /* type_specifier_nonarray: struct_specifier */
4232 {
4233 (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
4234 }
4235 break;
4236
4237 case 258: /* type_specifier_nonarray: TYPE_NAME */
4238 {
4239 // This is for user defined type names. The lexical phase looked up the type.
4240 const TStructure *structure = static_cast<const TStructure *>((yyvsp[0].lex).symbol);
4241 // Temporary check until VK and Metal backends support type name like
4242 // gl_DepthRangeParameters.
4243 context->checkIsNotReserved((yylsp[0]), ImmutableString((yyvsp[0].lex).string));
4244 (yyval.interm.typeSpecifierNonArray).initializeStruct(structure, false, (yylsp[0]));
4245 }
4246 break;
4247
4248 case 259: /* $@1: %empty */
4249 {
4250 context->enterStructDeclaration((yylsp[-1]), ImmutableString((yyvsp[-1].lex).string));
4251 }
4252 break;
4253
4254 case 260: /* struct_specifier: STRUCT identifier LEFT_BRACE $@1 struct_declaration_list
4255 RIGHT_BRACE */
4256 {
4257 (yyval.interm.typeSpecifierNonArray) = context->addStructure(
4258 (yylsp[-5]), (yylsp[-4]), ImmutableString((yyvsp[-4].lex).string),
4259 (yyvsp[-1].interm.fieldList));
4260 }
4261 break;
4262
4263 case 261: /* $@2: %empty */
4264 {
4265 context->enterStructDeclaration((yylsp[0]), kEmptyImmutableString);
4266 }
4267 break;
4268
4269 case 262: /* struct_specifier: STRUCT LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */
4270 {
4271 (yyval.interm.typeSpecifierNonArray) = context->addStructure(
4272 (yylsp[-4]), (yyloc), kEmptyImmutableString, (yyvsp[-1].interm.fieldList));
4273 }
4274 break;
4275
4276 case 263: /* struct_declaration_list: struct_declaration */
4277 {
4278 (yyval.interm.fieldList) =
4279 context->addStructFieldList((yyvsp[0].interm.fieldList), (yylsp[0]));
4280 }
4281 break;
4282
4283 case 264: /* struct_declaration_list: struct_declaration_list struct_declaration */
4284 {
4285 (yyval.interm.fieldList) = context->combineStructFieldLists(
4286 (yyvsp[-1].interm.fieldList), (yyvsp[0].interm.fieldList), (yylsp[0]));
4287 }
4288 break;
4289
4290 case 265: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */
4291 {
4292 (yyval.interm.fieldList) = context->addStructDeclaratorList(
4293 (yyvsp[-2].interm.type), (yyvsp[-1].interm.declaratorList));
4294 }
4295 break;
4296
4297 case 266: /* struct_declaration: type_qualifier type_specifier struct_declarator_list
4298 SEMICOLON */
4299 {
4300 // ES3 Only, but errors should be handled elsewhere
4301 (yyval.interm.fieldList) = context->addStructDeclaratorListWithQualifiers(
4302 *(yyvsp[-3].interm.typeQualifierBuilder), &(yyvsp[-2].interm.type),
4303 (yyvsp[-1].interm.declaratorList));
4304 }
4305 break;
4306
4307 case 267: /* struct_declarator_list: struct_declarator */
4308 {
4309 (yyval.interm.declaratorList) = new TDeclaratorList();
4310 (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
4311 }
4312 break;
4313
4314 case 268: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */
4315 {
4316 (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
4317 }
4318 break;
4319
4320 case 269: /* struct_declarator: identifier */
4321 {
4322 (yyval.interm.declarator) =
4323 context->parseStructDeclarator(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
4324 }
4325 break;
4326
4327 case 270: /* struct_declarator: identifier array_specifier */
4328 {
4329 (yyval.interm.declarator) = context->parseStructArrayDeclarator(
4330 ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]), (yyvsp[0].interm.arraySizes));
4331 }
4332 break;
4333
4334 case 271: /* initializer: assignment_expression */
4335 {
4336 (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
4337 }
4338 break;
4339
4340 case 272: /* declaration_statement: declaration */
4341 {
4342 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4343 }
4344 break;
4345
4346 case 273: /* statement: compound_statement_with_scope */
4347 {
4348 (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4349 }
4350 break;
4351
4352 case 274: /* statement: simple_statement */
4353 {
4354 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4355 }
4356 break;
4357
4358 case 275: /* simple_statement: declaration_statement */
4359 {
4360 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4361 }
4362 break;
4363
4364 case 276: /* simple_statement: expression_statement */
4365 {
4366 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4367 }
4368 break;
4369
4370 case 277: /* simple_statement: selection_statement */
4371 {
4372 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4373 }
4374 break;
4375
4376 case 278: /* simple_statement: switch_statement */
4377 {
4378 (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch);
4379 }
4380 break;
4381
4382 case 279: /* simple_statement: case_label */
4383 {
4384 (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase);
4385 }
4386 break;
4387
4388 case 280: /* simple_statement: iteration_statement */
4389 {
4390 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4391 }
4392 break;
4393
4394 case 281: /* simple_statement: jump_statement */
4395 {
4396 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4397 }
4398 break;
4399
4400 case 282: /* compound_statement_with_scope: LEFT_BRACE RIGHT_BRACE */
4401 {
4402 (yyval.interm.intermBlock) = new TIntermBlock();
4403 (yyval.interm.intermBlock)->setLine((yyloc));
4404 }
4405 break;
4406
4407 case 283: /* $@3: %empty */
4408 {
4409 context->symbolTable.push();
4410 }
4411 break;
4412
4413 case 284: /* $@4: %empty */
4414 {
4415 context->symbolTable.pop();
4416 }
4417 break;
4418
4419 case 285: /* compound_statement_with_scope: LEFT_BRACE $@3 statement_list $@4 RIGHT_BRACE */
4420 {
4421 (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
4422 (yyval.interm.intermBlock) = (yyvsp[-2].interm.intermBlock);
4423 }
4424 break;
4425
4426 case 286: /* statement_no_new_scope: compound_statement_no_new_scope */
4427 {
4428 (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4429 }
4430 break;
4431
4432 case 287: /* statement_no_new_scope: simple_statement */
4433 {
4434 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4435 }
4436 break;
4437
4438 case 288: /* $@5: %empty */
4439 {
4440 context->symbolTable.push();
4441 }
4442 break;
4443
4444 case 289: /* statement_with_scope: $@5 compound_statement_no_new_scope */
4445 {
4446 context->symbolTable.pop();
4447 (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4448 }
4449 break;
4450
4451 case 290: /* $@6: %empty */
4452 {
4453 context->symbolTable.push();
4454 }
4455 break;
4456
4457 case 291: /* statement_with_scope: $@6 simple_statement */
4458 {
4459 context->symbolTable.pop();
4460 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4461 }
4462 break;
4463
4464 case 292: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */
4465 {
4466 (yyval.interm.intermBlock) = new TIntermBlock();
4467 (yyval.interm.intermBlock)->setLine((yyloc));
4468 }
4469 break;
4470
4471 case 293: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */
4472 {
4473 (yyvsp[-1].interm.intermBlock)->setLine((yyloc));
4474 (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
4475 }
4476 break;
4477
4478 case 294: /* statement_list: statement */
4479 {
4480 (yyval.interm.intermBlock) = new TIntermBlock();
4481 context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
4482 }
4483 break;
4484
4485 case 295: /* statement_list: statement_list statement */
4486 {
4487 (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
4488 context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
4489 }
4490 break;
4491
4492 case 296: /* expression_statement: SEMICOLON */
4493 {
4494 (yyval.interm.intermNode) = context->addEmptyStatement((yyloc));
4495 }
4496 break;
4497
4498 case 297: /* expression_statement: expression SEMICOLON */
4499 {
4500 context->checkIsValidExpressionStatement((yyloc), (yyvsp[-1].interm.intermTypedNode));
4501 (yyval.interm.intermNode) = (yyvsp[-1].interm.intermTypedNode);
4502 }
4503 break;
4504
4505 case 298: /* selection_statement: IF LEFT_PAREN expression RIGHT_PAREN
4506 selection_rest_statement */
4507 {
4508 (yyval.interm.intermNode) = context->addIfElse((yyvsp[-2].interm.intermTypedNode),
4509 (yyvsp[0].interm.nodePair), (yylsp[-4]));
4510 }
4511 break;
4512
4513 case 299: /* selection_rest_statement: statement_with_scope ELSE statement_with_scope */
4514 {
4515 (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
4516 (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
4517 }
4518 break;
4519
4520 case 300: /* selection_rest_statement: statement_with_scope */
4521 {
4522 (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
4523 (yyval.interm.nodePair).node2 = nullptr;
4524 }
4525 break;
4526
4527 case 301: /* $@7: %empty */
4528 {
4529 context->incrSwitchNestingLevel((yylsp[-3]));
4530 }
4531 break;
4532
4533 case 302: /* switch_statement: SWITCH LEFT_PAREN expression RIGHT_PAREN $@7
4534 compound_statement_with_scope */
4535 {
4536 (yyval.interm.intermSwitch) = context->addSwitch(
4537 (yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
4538 context->decrSwitchNestingLevel();
4539 }
4540 break;
4541
4542 case 303: /* case_label: CASE constant_expression COLON */
4543 {
4544 (yyval.interm.intermCase) =
4545 context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
4546 }
4547 break;
4548
4549 case 304: /* case_label: DEFAULT COLON */
4550 {
4551 (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
4552 }
4553 break;
4554
4555 case 305: /* condition: expression */
4556 {
4557 (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
4558 context->checkIsScalarBool((yyvsp[0].interm.intermTypedNode)->getLine(),
4559 (yyvsp[0].interm.intermTypedNode));
4560 }
4561 break;
4562
4563 case 306: /* condition: fully_specified_type identifier EQUAL initializer */
4564 {
4565 (yyval.interm.intermNode) = context->addConditionInitializer(
4566 (yyvsp[-3].interm.type), ImmutableString((yyvsp[-2].lex).string),
4567 (yyvsp[0].interm.intermTypedNode), (yylsp[-2]));
4568 }
4569 break;
4570
4571 case 307: /* $@8: %empty */
4572 {
4573 context->symbolTable.push();
4574 context->incrLoopNestingLevel((yylsp[-1]));
4575 }
4576 break;
4577
4578 case 308: /* iteration_statement: WHILE LEFT_PAREN $@8 condition RIGHT_PAREN
4579 statement_no_new_scope */
4580 {
4581 context->symbolTable.pop();
4582 (yyval.interm.intermNode) =
4583 context->addLoop(ELoopWhile, 0, (yyvsp[-2].interm.intermNode), 0,
4584 (yyvsp[0].interm.intermNode), (yylsp[-5]));
4585 context->decrLoopNestingLevel();
4586 }
4587 break;
4588
4589 case 309: /* $@9: %empty */
4590 {
4591 context->incrLoopNestingLevel((yylsp[0]));
4592 }
4593 break;
4594
4595 case 310: /* iteration_statement: DO $@9 statement_with_scope WHILE LEFT_PAREN expression
4596 RIGHT_PAREN SEMICOLON */
4597 {
4598 (yyval.interm.intermNode) =
4599 context->addLoop(ELoopDoWhile, 0, (yyvsp[-2].interm.intermTypedNode), 0,
4600 (yyvsp[-5].interm.intermNode), (yylsp[-4]));
4601 context->decrLoopNestingLevel();
4602 }
4603 break;
4604
4605 case 311: /* $@10: %empty */
4606 {
4607 context->symbolTable.push();
4608 context->incrLoopNestingLevel((yylsp[-1]));
4609 }
4610 break;
4611
4612 case 312: /* iteration_statement: FOR LEFT_PAREN $@10 for_init_statement for_rest_statement
4613 RIGHT_PAREN statement_no_new_scope */
4614 {
4615 context->symbolTable.pop();
4616 (yyval.interm.intermNode) = context->addLoop(
4617 ELoopFor, (yyvsp[-3].interm.intermNode), (yyvsp[-2].interm.nodePair).node1,
4618 reinterpret_cast<TIntermTyped *>((yyvsp[-2].interm.nodePair).node2),
4619 (yyvsp[0].interm.intermNode), (yylsp[-6]));
4620 context->decrLoopNestingLevel();
4621 }
4622 break;
4623
4624 case 313: /* for_init_statement: expression_statement */
4625 {
4626 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4627 }
4628 break;
4629
4630 case 314: /* for_init_statement: declaration_statement */
4631 {
4632 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4633 }
4634 break;
4635
4636 case 315: /* conditionopt: condition */
4637 {
4638 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4639 }
4640 break;
4641
4642 case 316: /* conditionopt: %empty */
4643 {
4644 (yyval.interm.intermNode) = nullptr;
4645 }
4646 break;
4647
4648 case 317: /* for_rest_statement: conditionopt SEMICOLON */
4649 {
4650 (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermNode);
4651 (yyval.interm.nodePair).node2 = 0;
4652 }
4653 break;
4654
4655 case 318: /* for_rest_statement: conditionopt SEMICOLON expression */
4656 {
4657 (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
4658 (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
4659 }
4660 break;
4661
4662 case 319: /* jump_statement: CONTINUE SEMICOLON */
4663 {
4664 (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
4665 }
4666 break;
4667
4668 case 320: /* jump_statement: BREAK SEMICOLON */
4669 {
4670 (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
4671 }
4672 break;
4673
4674 case 321: /* jump_statement: RETURN SEMICOLON */
4675 {
4676 (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
4677 }
4678 break;
4679
4680 case 322: /* jump_statement: RETURN expression SEMICOLON */
4681 {
4682 (yyval.interm.intermNode) =
4683 context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
4684 }
4685 break;
4686
4687 case 323: /* jump_statement: DISCARD SEMICOLON */
4688 {
4689 (yyval.interm.intermNode) = context->addBranch(EOpKill, (yylsp[-1]));
4690 }
4691 break;
4692
4693 case 324: /* translation_unit: external_declaration */
4694 {
4695 (yyval.interm.intermBlock) = new TIntermBlock();
4696 (yyval.interm.intermBlock)->setLine((yyloc));
4697 (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
4698 context->setTreeRoot((yyval.interm.intermBlock));
4699 }
4700 break;
4701
4702 case 325: /* translation_unit: translation_unit external_declaration */
4703 {
4704 (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
4705 }
4706 break;
4707
4708 case 326: /* external_declaration: function_definition */
4709 {
4710 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4711 }
4712 break;
4713
4714 case 327: /* external_declaration: declaration */
4715 {
4716 (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4717 }
4718 break;
4719
4720 case 328: /* $@11: %empty */
4721 {
4722 context->parseFunctionDefinitionHeader((yylsp[0]), (yyvsp[0].interm).function,
4723 &((yyvsp[0].interm).intermFunctionPrototype));
4724 }
4725 break;
4726
4727 case 329: /* function_definition: function_prototype $@11 compound_statement_no_new_scope */
4728 {
4729 (yyval.interm.intermNode) =
4730 context->addFunctionDefinition((yyvsp[-2].interm).intermFunctionPrototype,
4731 (yyvsp[0].interm.intermBlock), (yylsp[-2]));
4732 }
4733 break;
4734
4735 default:
4736 break;
4737 }
4738 /* User semantic actions sometimes alter yychar, and that requires
4739 that yytoken be updated with the new translation. We take the
4740 approach of translating immediately before every use of yytoken.
4741 One alternative is translating here after every semantic action,
4742 but that translation would be missed if the semantic action invokes
4743 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4744 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
4745 incorrect destructor might then be invoked immediately. In the
4746 case of YYERROR or YYBACKUP, subsequent parser actions might lead
4747 to an incorrect destructor call or verbose syntax error message
4748 before the lookahead is translated. */
4749 YY_SYMBOL_PRINT("-> $$ =", YY_CAST(yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
4750
4751 YYPOPSTACK(yylen);
4752 yylen = 0;
4753
4754 *++yyvsp = yyval;
4755 *++yylsp = yyloc;
4756
4757 /* Now 'shift' the result of the reduction. Determine what state
4758 that goes to, based on the state we popped back to and the rule
4759 number reduced by. */
4760 {
4761 const int yylhs = yyr1[yyn] - YYNTOKENS;
4762 const int yyi = yypgoto[yylhs] + *yyssp;
4763 yystate =
4764 (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]);
4765 }
4766
4767 goto yynewstate;
4768
4769 /*--------------------------------------.
4770 | yyerrlab -- here on detecting error. |
4771 `--------------------------------------*/
4772 yyerrlab:
4773 /* Make sure we have latest lookahead translation. See comments at
4774 user semantic actions for why this is necessary. */
4775 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE(yychar);
4776 /* If not already recovering from an error, report this error. */
4777 if (!yyerrstatus)
4778 {
4779 ++yynerrs;
4780 yyerror(&yylloc, context, scanner, YY_("syntax error"));
4781 }
4782
4783 yyerror_range[1] = yylloc;
4784 if (yyerrstatus == 3)
4785 {
4786 /* If just tried and failed to reuse lookahead token after an
4787 error, discard it. */
4788
4789 if (yychar <= YYEOF)
4790 {
4791 /* Return failure if at end of input. */
4792 if (yychar == YYEOF)
4793 YYABORT;
4794 }
4795 else
4796 {
4797 yydestruct("Error: discarding", yytoken, &yylval, &yylloc, context, scanner);
4798 yychar = YYEMPTY;
4799 }
4800 }
4801
4802 /* Else will try to reuse lookahead token after shifting the error
4803 token. */
4804 goto yyerrlab1;
4805
4806 /*---------------------------------------------------.
4807 | yyerrorlab -- error raised explicitly by YYERROR. |
4808 `---------------------------------------------------*/
4809 yyerrorlab:
4810 /* Pacify compilers when the user code never invokes YYERROR and the
4811 label yyerrorlab therefore never appears in user code. */
4812 if (0)
4813 YYERROR;
4814 ++yynerrs;
4815
4816 /* Do not reclaim the symbols of the rule whose action triggered
4817 this YYERROR. */
4818 YYPOPSTACK(yylen);
4819 yylen = 0;
4820 YY_STACK_PRINT(yyss, yyssp);
4821 yystate = *yyssp;
4822 goto yyerrlab1;
4823
4824 /*-------------------------------------------------------------.
4825 | yyerrlab1 -- common code for both syntax error and YYERROR. |
4826 `-------------------------------------------------------------*/
4827 yyerrlab1:
4828 yyerrstatus = 3; /* Each real token shifted decrements this. */
4829
4830 /* Pop stack until we find a state that shifts the error token. */
4831 for (;;)
4832 {
4833 yyn = yypact[yystate];
4834 if (!yypact_value_is_default(yyn))
4835 {
4836 yyn += YYSYMBOL_YYerror;
4837 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
4838 {
4839 yyn = yytable[yyn];
4840 if (0 < yyn)
4841 break;
4842 }
4843 }
4844
4845 /* Pop the current state because it cannot handle the error token. */
4846 if (yyssp == yyss)
4847 YYABORT;
4848
4849 yyerror_range[1] = *yylsp;
4850 yydestruct("Error: popping", YY_ACCESSING_SYMBOL(yystate), yyvsp, yylsp, context, scanner);
4851 YYPOPSTACK(1);
4852 yystate = *yyssp;
4853 YY_STACK_PRINT(yyss, yyssp);
4854 }
4855
4856 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4857 *++yyvsp = yylval;
4858 YY_IGNORE_MAYBE_UNINITIALIZED_END
4859
4860 yyerror_range[2] = yylloc;
4861 ++yylsp;
4862 YYLLOC_DEFAULT(*yylsp, yyerror_range, 2);
4863
4864 /* Shift the error token. */
4865 YY_SYMBOL_PRINT("Shifting", YY_ACCESSING_SYMBOL(yyn), yyvsp, yylsp);
4866
4867 yystate = yyn;
4868 goto yynewstate;
4869
4870 /*-------------------------------------.
4871 | yyacceptlab -- YYACCEPT comes here. |
4872 `-------------------------------------*/
4873 yyacceptlab:
4874 yyresult = 0;
4875 goto yyreturnlab;
4876
4877 /*-----------------------------------.
4878 | yyabortlab -- YYABORT comes here. |
4879 `-----------------------------------*/
4880 yyabortlab:
4881 yyresult = 1;
4882 goto yyreturnlab;
4883
4884 /*-----------------------------------------------------------.
4885 | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
4886 `-----------------------------------------------------------*/
4887 yyexhaustedlab:
4888 yyerror(&yylloc, context, scanner, YY_("memory exhausted"));
4889 yyresult = 2;
4890 goto yyreturnlab;
4891
4892 /*----------------------------------------------------------.
4893 | yyreturnlab -- parsing is finished, clean up and return. |
4894 `----------------------------------------------------------*/
4895 yyreturnlab:
4896 if (yychar != YYEMPTY)
4897 {
4898 /* Make sure we have latest lookahead translation. See comments at
4899 user semantic actions for why this is necessary. */
4900 yytoken = YYTRANSLATE(yychar);
4901 yydestruct("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, context, scanner);
4902 }
4903 /* Do not reclaim the symbols of the rule whose action triggered
4904 this YYABORT or YYACCEPT. */
4905 YYPOPSTACK(yylen);
4906 YY_STACK_PRINT(yyss, yyssp);
4907 while (yyssp != yyss)
4908 {
4909 yydestruct("Cleanup: popping", YY_ACCESSING_SYMBOL(+*yyssp), yyvsp, yylsp, context,
4910 scanner);
4911 YYPOPSTACK(1);
4912 }
4913 #ifndef yyoverflow
4914 if (yyss != yyssa)
4915 YYSTACK_FREE(yyss);
4916 #endif
4917
4918 return yyresult;
4919 }
4920
glslang_parse(TParseContext * context)4921 int glslang_parse(TParseContext *context)
4922 {
4923 return yyparse(context, context->getScanner());
4924 }
4925