xref: /aosp_15_r20/external/angle/src/compiler/translator/glslang_tab_autogen.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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