• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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,  736,  739,
854     743,  747,  752,  759,  763,  767,  771,  776,  783,  787,  793,  796,  799,  809,  813,  820,
855     826,  832,  836,  840,  843,  846,  850,  858,  863,  867,  870,  873,  876,  879,  883,  891,
856     894,  898,  901,  904,  907,  910,  913,  917,  924,  931,  934,  937,  943,  950,  953,  959,
857     962,  965,  968,  974,  977,  984,  989,  996,  1001, 1012, 1015, 1018, 1021, 1024, 1027, 1031,
858     1035, 1039, 1043, 1047, 1051, 1055, 1059, 1063, 1067, 1071, 1075, 1079, 1083, 1087, 1091, 1095,
859     1099, 1103, 1107, 1111, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 1144, 1152, 1162, 1165, 1168,
860     1171, 1174, 1177, 1180, 1188, 1196, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1232, 1240, 1250,
861     1253, 1256, 1259, 1267, 1275, 1282, 1292, 1299, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 1327,
862     1330, 1333, 1336, 1339, 1342, 1350, 1358, 1366, 1374, 1382, 1390, 1400, 1410, 1420, 1423, 1430,
863     1437, 1444, 1447, 1455, 1455, 1458, 1458, 1464, 1467, 1473, 1476, 1483, 1487, 1493, 1496, 1502,
864     1506, 1510, 1511, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1527, 1531, 1531, 1531, 1538, 1539,
865     1543, 1543, 1544, 1544, 1549, 1553, 1560, 1564, 1571, 1572, 1576, 1582, 1586, 1595, 1595, 1602,
866     1605, 1611, 1615, 1621, 1621, 1626, 1626, 1630, 1630, 1638, 1641, 1647, 1650, 1656, 1660, 1667,
867     1670, 1673, 1676, 1679, 1687, 1693, 1699, 1702, 1708, 1708};
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                 ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]),
3030                 *((yyvsp[0].interm.arraySizes)), (yylsp[0]), &(yyvsp[-2].interm.type));
3031         }
3032         break;
3033 
3034         case 105: /* parameter_declaration: type_qualifier parameter_declarator  */
3035         {
3036             (yyval.interm.param) = (yyvsp[0].interm.param);
3037             context->checkIsParameterQualifierValid(
3038                 (yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].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) = (yyvsp[0].interm.param);
3052             context->checkIsParameterQualifierValid(
3053                 (yylsp[0]), *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.param).type);
3054         }
3055         break;
3056 
3057         case 108: /* parameter_declaration: parameter_type_specifier  */
3058         {
3059             (yyval.interm.param) = (yyvsp[0].interm.param);
3060             (yyval.interm.param).type->setQualifier(EvqParamIn);
3061         }
3062         break;
3063 
3064         case 109: /* parameter_type_specifier: type_specifier  */
3065         {
3066             TParameter param     = {0, new TType((yyvsp[0].interm.type))};
3067             (yyval.interm.param) = param;
3068         }
3069         break;
3070 
3071         case 110: /* init_declarator_list: single_declaration  */
3072         {
3073             (yyval.interm) = (yyvsp[0].interm);
3074         }
3075         break;
3076 
3077         case 111: /* init_declarator_list: init_declarator_list COMMA identifier  */
3078         {
3079             (yyval.interm) = (yyvsp[-2].interm);
3080             context->parseDeclarator((yyval.interm).type, (yylsp[0]),
3081                                      ImmutableString((yyvsp[0].lex).string),
3082                                      (yyval.interm).intermDeclaration);
3083         }
3084         break;
3085 
3086         case 112: /* init_declarator_list: init_declarator_list COMMA identifier array_specifier  */
3087         {
3088             (yyval.interm) = (yyvsp[-3].interm);
3089             context->parseArrayDeclarator(
3090                 (yyval.interm).type, (yylsp[-1]), ImmutableString((yyvsp[-1].lex).string),
3091                 (yylsp[0]), *((yyvsp[0].interm.arraySizes)), (yyval.interm).intermDeclaration);
3092         }
3093         break;
3094 
3095         case 113: /* init_declarator_list: init_declarator_list COMMA identifier array_specifier
3096                      EQUAL initializer  */
3097         {
3098             ES3_OR_NEWER("=", (yylsp[-1]), "first-class arrays (array initializer)");
3099             (yyval.interm) = (yyvsp[-5].interm);
3100             context->parseArrayInitDeclarator(
3101                 (yyval.interm).type, (yylsp[-3]), ImmutableString((yyvsp[-3].lex).string),
3102                 (yylsp[-2]), *((yyvsp[-2].interm.arraySizes)), (yylsp[-1]),
3103                 (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
3104         }
3105         break;
3106 
3107         case 114: /* init_declarator_list: init_declarator_list COMMA identifier EQUAL initializer
3108                    */
3109         {
3110             (yyval.interm) = (yyvsp[-4].interm);
3111             context->parseInitDeclarator(
3112                 (yyval.interm).type, (yylsp[-2]), ImmutableString((yyvsp[-2].lex).string),
3113                 (yylsp[-1]), (yyvsp[0].interm.intermTypedNode), (yyval.interm).intermDeclaration);
3114         }
3115         break;
3116 
3117         case 115: /* single_declaration: fully_specified_type  */
3118         {
3119             (yyval.interm).type              = (yyvsp[0].interm.type);
3120             (yyval.interm).intermDeclaration = context->parseSingleDeclaration(
3121                 (yyval.interm).type, (yylsp[0]), kEmptyImmutableString);
3122         }
3123         break;
3124 
3125         case 116: /* single_declaration: fully_specified_type identifier  */
3126         {
3127             (yyval.interm).type              = (yyvsp[-1].interm.type);
3128             (yyval.interm).intermDeclaration = context->parseSingleDeclaration(
3129                 (yyval.interm).type, (yylsp[0]), ImmutableString((yyvsp[0].lex).string));
3130         }
3131         break;
3132 
3133         case 117: /* single_declaration: fully_specified_type identifier array_specifier  */
3134         {
3135             (yyval.interm).type              = (yyvsp[-2].interm.type);
3136             (yyval.interm).intermDeclaration = context->parseSingleArrayDeclaration(
3137                 (yyval.interm).type, (yylsp[-1]), ImmutableString((yyvsp[-1].lex).string),
3138                 (yylsp[0]), *((yyvsp[0].interm.arraySizes)));
3139         }
3140         break;
3141 
3142         case 118: /* single_declaration: fully_specified_type identifier array_specifier EQUAL
3143                      initializer  */
3144         {
3145             ES3_OR_NEWER("[]", (yylsp[-2]), "first-class arrays (array initializer)");
3146             (yyval.interm).type              = (yyvsp[-4].interm.type);
3147             (yyval.interm).intermDeclaration = context->parseSingleArrayInitDeclaration(
3148                 (yyval.interm).type, (yylsp[-3]), ImmutableString((yyvsp[-3].lex).string),
3149                 (yylsp[-2]), *((yyvsp[-2].interm.arraySizes)), (yylsp[-1]),
3150                 (yyvsp[0].interm.intermTypedNode));
3151         }
3152         break;
3153 
3154         case 119: /* single_declaration: fully_specified_type identifier EQUAL initializer  */
3155         {
3156             (yyval.interm).type              = (yyvsp[-3].interm.type);
3157             (yyval.interm).intermDeclaration = context->parseSingleInitDeclaration(
3158                 (yyval.interm).type, (yylsp[-2]), ImmutableString((yyvsp[-2].lex).string),
3159                 (yylsp[-1]), (yyvsp[0].interm.intermTypedNode));
3160         }
3161         break;
3162 
3163         case 120: /* fully_specified_type: type_specifier  */
3164         {
3165             context->addFullySpecifiedType(&(yyvsp[0].interm.type));
3166             (yyval.interm.type) = (yyvsp[0].interm.type);
3167         }
3168         break;
3169 
3170         case 121: /* fully_specified_type: type_qualifier type_specifier  */
3171         {
3172             (yyval.interm.type) = context->addFullySpecifiedType(
3173                 *(yyvsp[-1].interm.typeQualifierBuilder), (yyvsp[0].interm.type));
3174         }
3175         break;
3176 
3177         case 122: /* interpolation_qualifier: SMOOTH  */
3178         {
3179             (yyval.interm.qualifier) = EvqSmooth;
3180         }
3181         break;
3182 
3183         case 123: /* interpolation_qualifier: FLAT  */
3184         {
3185             (yyval.interm.qualifier) = EvqFlat;
3186         }
3187         break;
3188 
3189         case 124: /* interpolation_qualifier: NOPERSPECTIVE  */
3190         {
3191             if (!context->checkCanUseExtension((yylsp[0]),
3192                                                TExtension::NV_shader_noperspective_interpolation))
3193             {
3194                 context->error((yylsp[0]), "unsupported interpolation qualifier", "noperspective");
3195             }
3196             (yyval.interm.qualifier) = EvqNoPerspective;
3197         }
3198         break;
3199 
3200         case 125: /* type_qualifier: single_type_qualifier  */
3201         {
3202             (yyval.interm.typeQualifierBuilder) = context->createTypeQualifierBuilder((yylsp[0]));
3203             (yyval.interm.typeQualifierBuilder)
3204                 ->appendQualifier((yyvsp[0].interm.qualifierWrapper));
3205         }
3206         break;
3207 
3208         case 126: /* type_qualifier: type_qualifier single_type_qualifier  */
3209         {
3210             (yyval.interm.typeQualifierBuilder) = (yyvsp[-1].interm.typeQualifierBuilder);
3211             (yyval.interm.typeQualifierBuilder)
3212                 ->appendQualifier((yyvsp[0].interm.qualifierWrapper));
3213         }
3214         break;
3215 
3216         case 127: /* invariant_qualifier: INVARIANT  */
3217         {
3218             // empty
3219         }
3220         break;
3221 
3222         case 128: /* precise_qualifier: PRECISE  */
3223         {
3224             context->markShaderHasPrecise();
3225         }
3226         break;
3227 
3228         case 129: /* single_type_qualifier: storage_qualifier  */
3229         {
3230             context->checkLocalVariableConstStorageQualifier(*(yyvsp[0].interm.qualifierWrapper));
3231             (yyval.interm.qualifierWrapper) = (yyvsp[0].interm.qualifierWrapper);
3232         }
3233         break;
3234 
3235         case 130: /* single_type_qualifier: layout_qualifier  */
3236         {
3237             context->checkIsAtGlobalLevel((yylsp[0]), "layout");
3238             (yyval.interm.qualifierWrapper) =
3239                 new TLayoutQualifierWrapper((yyvsp[0].interm.layoutQualifier), (yylsp[0]));
3240         }
3241         break;
3242 
3243         case 131: /* single_type_qualifier: precision_qualifier  */
3244         {
3245             (yyval.interm.qualifierWrapper) =
3246                 new TPrecisionQualifierWrapper((yyvsp[0].interm.precision), (yylsp[0]));
3247         }
3248         break;
3249 
3250         case 132: /* single_type_qualifier: interpolation_qualifier  */
3251         {
3252             (yyval.interm.qualifierWrapper) =
3253                 new TInterpolationQualifierWrapper((yyvsp[0].interm.qualifier), (yylsp[0]));
3254         }
3255         break;
3256 
3257         case 133: /* single_type_qualifier: invariant_qualifier  */
3258         {
3259             context->checkIsAtGlobalLevel((yylsp[0]), "invariant");
3260             (yyval.interm.qualifierWrapper) = new TInvariantQualifierWrapper((yylsp[0]));
3261         }
3262         break;
3263 
3264         case 134: /* single_type_qualifier: precise_qualifier  */
3265         {
3266             (yyval.interm.qualifierWrapper) = new TPreciseQualifierWrapper((yylsp[0]));
3267         }
3268         break;
3269 
3270         case 135: /* storage_qualifier: ATTRIBUTE  */
3271         {
3272             VERTEX_ONLY("attribute", (yylsp[0]));
3273             ES2_ONLY("attribute", (yylsp[0]));
3274             (yyval.interm.qualifierWrapper) =
3275                 context->parseGlobalStorageQualifier(EvqAttribute, (yylsp[0]));
3276         }
3277         break;
3278 
3279         case 136: /* storage_qualifier: VARYING  */
3280         {
3281             ES2_ONLY("varying", (yylsp[0]));
3282             (yyval.interm.qualifierWrapper) = context->parseVaryingQualifier((yylsp[0]));
3283         }
3284         break;
3285 
3286         case 137: /* storage_qualifier: CONST_QUAL  */
3287         {
3288             (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqConst, (yylsp[0]));
3289         }
3290         break;
3291 
3292         case 138: /* storage_qualifier: IN_QUAL  */
3293         {
3294             (yyval.interm.qualifierWrapper) = context->parseInQualifier((yylsp[0]));
3295         }
3296         break;
3297 
3298         case 139: /* storage_qualifier: OUT_QUAL  */
3299         {
3300             (yyval.interm.qualifierWrapper) = context->parseOutQualifier((yylsp[0]));
3301         }
3302         break;
3303 
3304         case 140: /* storage_qualifier: INOUT_QUAL  */
3305         {
3306             (yyval.interm.qualifierWrapper) = context->parseInOutQualifier((yylsp[0]));
3307         }
3308         break;
3309 
3310         case 141: /* storage_qualifier: CENTROID  */
3311         {
3312             ES3_OR_NEWER("centroid", (yylsp[0]), "storage qualifier");
3313             (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqCentroid, (yylsp[0]));
3314         }
3315         break;
3316 
3317         case 142: /* storage_qualifier: PATCH  */
3318         {
3319             if (context->getShaderVersion() < 320 &&
3320                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_tessellation_shader))
3321             {
3322                 context->error((yylsp[0]), "unsupported storage qualifier", "patch");
3323             }
3324             (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqPatch, (yylsp[0]));
3325         }
3326         break;
3327 
3328         case 143: /* storage_qualifier: UNIFORM  */
3329         {
3330             (yyval.interm.qualifierWrapper) =
3331                 context->parseGlobalStorageQualifier(EvqUniform, (yylsp[0]));
3332         }
3333         break;
3334 
3335         case 144: /* storage_qualifier: BUFFER  */
3336         {
3337             ES3_1_OR_NEWER("buffer", (yylsp[0]), "storage qualifier");
3338             (yyval.interm.qualifierWrapper) =
3339                 context->parseGlobalStorageQualifier(EvqBuffer, (yylsp[0]));
3340         }
3341         break;
3342 
3343         case 145: /* storage_qualifier: READONLY  */
3344         {
3345             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqReadOnly, (yylsp[0]));
3346         }
3347         break;
3348 
3349         case 146: /* storage_qualifier: WRITEONLY  */
3350         {
3351             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqWriteOnly, (yylsp[0]));
3352         }
3353         break;
3354 
3355         case 147: /* storage_qualifier: COHERENT  */
3356         {
3357             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqCoherent, (yylsp[0]));
3358         }
3359         break;
3360 
3361         case 148: /* storage_qualifier: RESTRICT  */
3362         {
3363             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqRestrict, (yylsp[0]));
3364         }
3365         break;
3366 
3367         case 149: /* storage_qualifier: VOLATILE  */
3368         {
3369             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqVolatile, (yylsp[0]));
3370         }
3371         break;
3372 
3373         case 150: /* storage_qualifier: SHARED  */
3374         {
3375             COMPUTE_ONLY("shared", (yylsp[0]));
3376             (yyval.interm.qualifierWrapper) =
3377                 context->parseGlobalStorageQualifier(EvqShared, (yylsp[0]));
3378         }
3379         break;
3380 
3381         case 151: /* storage_qualifier: SAMPLE  */
3382         {
3383             ES3_OR_NEWER("sample", (yylsp[0]), "storage qualifier");
3384             (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqSample, (yylsp[0]));
3385         }
3386         break;
3387 
3388         case 152: /* type_specifier: type_specifier_no_prec  */
3389         {
3390             (yyval.interm.type) = (yyvsp[0].interm.type);
3391             (yyval.interm.type).precision =
3392                 context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).getBasicType());
3393         }
3394         break;
3395 
3396         case 153: /* precision_qualifier: HIGH_PRECISION  */
3397         {
3398             (yyval.interm.precision) = EbpHigh;
3399         }
3400         break;
3401 
3402         case 154: /* precision_qualifier: MEDIUM_PRECISION  */
3403         {
3404             (yyval.interm.precision) = EbpMedium;
3405         }
3406         break;
3407 
3408         case 155: /* precision_qualifier: LOW_PRECISION  */
3409         {
3410             (yyval.interm.precision) = EbpLow;
3411         }
3412         break;
3413 
3414         case 156: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
3415         {
3416             context->checkCanUseLayoutQualifier((yylsp[-3]));
3417             (yyval.interm.layoutQualifier) = (yyvsp[-1].interm.layoutQualifier);
3418         }
3419         break;
3420 
3421         case 157: /* layout_qualifier_id_list: layout_qualifier_id  */
3422         {
3423             (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
3424         }
3425         break;
3426 
3427         case 158: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */
3428         {
3429             (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers(
3430                 (yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
3431         }
3432         break;
3433 
3434         case 159: /* layout_qualifier_id: IDENTIFIER  */
3435         {
3436             (yyval.interm.layoutQualifier) =
3437                 context->parseLayoutQualifier(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
3438         }
3439         break;
3440 
3441         case 160: /* layout_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
3442         {
3443             (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
3444                 ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
3445         }
3446         break;
3447 
3448         case 161: /* layout_qualifier_id: IDENTIFIER EQUAL UINTCONSTANT  */
3449         {
3450             (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
3451                 ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
3452         }
3453         break;
3454 
3455         case 162: /* layout_qualifier_id: SHARED  */
3456         {
3457             (yyval.interm.layoutQualifier) =
3458                 context->parseLayoutQualifier(ImmutableString("shared"), (yylsp[0]));
3459         }
3460         break;
3461 
3462         case 163: /* type_specifier_no_prec: type_specifier_nonarray  */
3463         {
3464             (yyval.interm.type)
3465                 .initialize((yyvsp[0].interm.typeSpecifierNonArray),
3466                             (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
3467         }
3468         break;
3469 
3470         case 164: /* type_specifier_no_prec: type_specifier_nonarray array_specifier  */
3471         {
3472             (yyval.interm.type)
3473                 .initialize((yyvsp[-1].interm.typeSpecifierNonArray),
3474                             (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
3475             (yyval.interm.type).setArraySizes((yyvsp[0].interm.arraySizes));
3476         }
3477         break;
3478 
3479         case 165: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
3480         {
3481             ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
3482             (yyval.interm.arraySizes) = new TVector<unsigned int>();
3483             (yyval.interm.arraySizes)->push_back(0u);
3484         }
3485         break;
3486 
3487         case 166: /* array_specifier: LEFT_BRACKET constant_expression RIGHT_BRACKET  */
3488         {
3489             (yyval.interm.arraySizes) = new TVector<unsigned int>();
3490             unsigned int size =
3491                 context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
3492             // Make the type an array even if size check failed.
3493             // This ensures useless error messages regarding a variable's non-arrayness won't
3494             // follow.
3495             (yyval.interm.arraySizes)->push_back(size);
3496         }
3497         break;
3498 
3499         case 167: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
3500         {
3501             ES3_1_OR_NEWER("[]", (yylsp[-1]), "arrays of arrays");
3502             (yyval.interm.arraySizes) = (yyvsp[-2].interm.arraySizes);
3503             (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), 0u);
3504         }
3505         break;
3506 
3507         case 168: /* array_specifier: array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET
3508                    */
3509         {
3510             ES3_1_OR_NEWER("[]", (yylsp[-2]), "arrays of arrays");
3511             (yyval.interm.arraySizes) = (yyvsp[-3].interm.arraySizes);
3512             unsigned int size =
3513                 context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
3514             // Make the type an array even if size check failed.
3515             // This ensures useless error messages regarding a variable's non-arrayness won't
3516             // follow.
3517             (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), size);
3518         }
3519         break;
3520 
3521         case 169: /* type_specifier_nonarray: VOID_TYPE  */
3522         {
3523             (yyval.interm.typeSpecifierNonArray).initialize(EbtVoid, (yylsp[0]));
3524         }
3525         break;
3526 
3527         case 170: /* type_specifier_nonarray: FLOAT_TYPE  */
3528         {
3529             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3530         }
3531         break;
3532 
3533         case 171: /* type_specifier_nonarray: INT_TYPE  */
3534         {
3535             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3536         }
3537         break;
3538 
3539         case 172: /* type_specifier_nonarray: UINT_TYPE  */
3540         {
3541             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3542         }
3543         break;
3544 
3545         case 173: /* type_specifier_nonarray: BOOL_TYPE  */
3546         {
3547             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3548         }
3549         break;
3550 
3551         case 174: /* type_specifier_nonarray: VEC2  */
3552         {
3553             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3554             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3555         }
3556         break;
3557 
3558         case 175: /* type_specifier_nonarray: VEC3  */
3559         {
3560             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3561             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3562         }
3563         break;
3564 
3565         case 176: /* type_specifier_nonarray: VEC4  */
3566         {
3567             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3568             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3569         }
3570         break;
3571 
3572         case 177: /* type_specifier_nonarray: BVEC2  */
3573         {
3574             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3575             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3576         }
3577         break;
3578 
3579         case 178: /* type_specifier_nonarray: BVEC3  */
3580         {
3581             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3582             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3583         }
3584         break;
3585 
3586         case 179: /* type_specifier_nonarray: BVEC4  */
3587         {
3588             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3589             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3590         }
3591         break;
3592 
3593         case 180: /* type_specifier_nonarray: IVEC2  */
3594         {
3595             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3596             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3597         }
3598         break;
3599 
3600         case 181: /* type_specifier_nonarray: IVEC3  */
3601         {
3602             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3603             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3604         }
3605         break;
3606 
3607         case 182: /* type_specifier_nonarray: IVEC4  */
3608         {
3609             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3610             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3611         }
3612         break;
3613 
3614         case 183: /* type_specifier_nonarray: UVEC2  */
3615         {
3616             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3617             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3618         }
3619         break;
3620 
3621         case 184: /* type_specifier_nonarray: UVEC3  */
3622         {
3623             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3624             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3625         }
3626         break;
3627 
3628         case 185: /* type_specifier_nonarray: UVEC4  */
3629         {
3630             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3631             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3632         }
3633         break;
3634 
3635         case 186: /* type_specifier_nonarray: MATRIX2  */
3636         {
3637             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3638             (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
3639         }
3640         break;
3641 
3642         case 187: /* type_specifier_nonarray: MATRIX3  */
3643         {
3644             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3645             (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
3646         }
3647         break;
3648 
3649         case 188: /* type_specifier_nonarray: MATRIX4  */
3650         {
3651             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3652             (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
3653         }
3654         break;
3655 
3656         case 189: /* type_specifier_nonarray: MATRIX2x3  */
3657         {
3658             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3659             (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
3660         }
3661         break;
3662 
3663         case 190: /* type_specifier_nonarray: MATRIX3x2  */
3664         {
3665             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3666             (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
3667         }
3668         break;
3669 
3670         case 191: /* type_specifier_nonarray: MATRIX2x4  */
3671         {
3672             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3673             (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
3674         }
3675         break;
3676 
3677         case 192: /* type_specifier_nonarray: MATRIX4x2  */
3678         {
3679             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3680             (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
3681         }
3682         break;
3683 
3684         case 193: /* type_specifier_nonarray: MATRIX3x4  */
3685         {
3686             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3687             (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
3688         }
3689         break;
3690 
3691         case 194: /* type_specifier_nonarray: MATRIX4x3  */
3692         {
3693             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3694             (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
3695         }
3696         break;
3697 
3698         case 195: /* type_specifier_nonarray: YUVCSCSTANDARDEXT  */
3699         {
3700             if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
3701             {
3702                 context->error((yylsp[0]), "unsupported type", "yuvCscStandardEXT");
3703             }
3704             (yyval.interm.typeSpecifierNonArray).initialize(EbtYuvCscStandardEXT, (yylsp[0]));
3705         }
3706         break;
3707 
3708         case 196: /* type_specifier_nonarray: SAMPLER2D  */
3709         {
3710             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
3711         }
3712         break;
3713 
3714         case 197: /* type_specifier_nonarray: SAMPLER3D  */
3715         {
3716             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
3717         }
3718         break;
3719 
3720         case 198: /* type_specifier_nonarray: SAMPLERCUBE  */
3721         {
3722             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
3723         }
3724         break;
3725 
3726         case 199: /* type_specifier_nonarray: SAMPLER2DARRAY  */
3727         {
3728             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
3729         }
3730         break;
3731 
3732         case 200: /* type_specifier_nonarray: SAMPLER2DMS  */
3733         {
3734             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMS, (yylsp[0]));
3735         }
3736         break;
3737 
3738         case 201: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
3739         {
3740             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMSArray, (yylsp[0]));
3741         }
3742         break;
3743 
3744         case 202: /* type_specifier_nonarray: SAMPLERCUBEARRAYOES  */
3745         {
3746             if (context->getShaderVersion() < 320 &&
3747                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3748             {
3749                 context->error((yylsp[0]), "unsupported type", "__samplerCubeArray");
3750             }
3751             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArray, (yylsp[0]));
3752         }
3753         break;
3754 
3755         case 203: /* type_specifier_nonarray: SAMPLERCUBEARRAYEXT  */
3756         {
3757             if (context->getShaderVersion() < 320 &&
3758                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_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 204: /* type_specifier_nonarray: SAMPLERBUFFER  */
3767         {
3768             constexpr std::array<TExtension, 2u> extensions{
3769                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3770             if (context->getShaderVersion() < 320 &&
3771                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3772             {
3773                 context->error((yylsp[0]), "unsupported type", "__samplerBuffer");
3774             }
3775             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerBuffer, (yylsp[0]));
3776         }
3777         break;
3778 
3779         case 205: /* type_specifier_nonarray: ISAMPLER2D  */
3780         {
3781             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
3782         }
3783         break;
3784 
3785         case 206: /* type_specifier_nonarray: ISAMPLER3D  */
3786         {
3787             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
3788         }
3789         break;
3790 
3791         case 207: /* type_specifier_nonarray: ISAMPLERCUBE  */
3792         {
3793             (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
3794         }
3795         break;
3796 
3797         case 208: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
3798         {
3799             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
3800         }
3801         break;
3802 
3803         case 209: /* type_specifier_nonarray: ISAMPLER2DMS  */
3804         {
3805             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMS, (yylsp[0]));
3806         }
3807         break;
3808 
3809         case 210: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
3810         {
3811             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMSArray, (yylsp[0]));
3812         }
3813         break;
3814 
3815         case 211: /* type_specifier_nonarray: ISAMPLERCUBEARRAYOES  */
3816         {
3817             if (context->getShaderVersion() < 320 &&
3818                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3819             {
3820                 context->error((yylsp[0]), "unsupported type", "__isamplerCubeArray");
3821             }
3822             (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCubeArray, (yylsp[0]));
3823         }
3824         break;
3825 
3826         case 212: /* type_specifier_nonarray: ISAMPLERCUBEARRAYEXT  */
3827         {
3828             if (context->getShaderVersion() < 320 &&
3829                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_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 213: /* type_specifier_nonarray: ISAMPLERBUFFER  */
3838         {
3839             constexpr std::array<TExtension, 2u> extensions{
3840                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3841             if (context->getShaderVersion() < 320 &&
3842                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3843             {
3844                 context->error((yylsp[0]), "unsupported type", "__isamplerBuffer");
3845             }
3846             (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerBuffer, (yylsp[0]));
3847         }
3848         break;
3849 
3850         case 214: /* type_specifier_nonarray: USAMPLER2D  */
3851         {
3852             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
3853         }
3854         break;
3855 
3856         case 215: /* type_specifier_nonarray: USAMPLER3D  */
3857         {
3858             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
3859         }
3860         break;
3861 
3862         case 216: /* type_specifier_nonarray: USAMPLERCUBE  */
3863         {
3864             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
3865         }
3866         break;
3867 
3868         case 217: /* type_specifier_nonarray: USAMPLER2DARRAY  */
3869         {
3870             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
3871         }
3872         break;
3873 
3874         case 218: /* type_specifier_nonarray: USAMPLER2DMS  */
3875         {
3876             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMS, (yylsp[0]));
3877         }
3878         break;
3879 
3880         case 219: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
3881         {
3882             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMSArray, (yylsp[0]));
3883         }
3884         break;
3885 
3886         case 220: /* type_specifier_nonarray: USAMPLERCUBEARRAYOES  */
3887         {
3888             if (context->getShaderVersion() < 320 &&
3889                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3890             {
3891                 context->error((yylsp[0]), "unsupported type", "__usamplerCubeArray");
3892             }
3893             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCubeArray, (yylsp[0]));
3894         }
3895         break;
3896 
3897         case 221: /* type_specifier_nonarray: USAMPLERCUBEARRAYEXT  */
3898         {
3899             if (context->getShaderVersion() < 320 &&
3900                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_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 222: /* type_specifier_nonarray: USAMPLERBUFFER  */
3909         {
3910             constexpr std::array<TExtension, 2u> extensions{
3911                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3912             if (context->getShaderVersion() < 320 &&
3913                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3914             {
3915                 context->error((yylsp[0]), "unsupported type", "__usamplerBuffer");
3916             }
3917             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerBuffer, (yylsp[0]));
3918         }
3919         break;
3920 
3921         case 223: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
3922         {
3923             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
3924         }
3925         break;
3926 
3927         case 224: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
3928         {
3929             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
3930         }
3931         break;
3932 
3933         case 225: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
3934         {
3935             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
3936         }
3937         break;
3938 
3939         case 226: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOWOES  */
3940         {
3941             if (context->getShaderVersion() < 320 &&
3942                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3943             {
3944                 context->error((yylsp[0]), "unsupported type", "__samplerCubeArrayShadow");
3945             }
3946             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArrayShadow, (yylsp[0]));
3947         }
3948         break;
3949 
3950         case 227: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOWEXT  */
3951         {
3952             if (context->getShaderVersion() < 320 &&
3953                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_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 228: /* type_specifier_nonarray: SAMPLERVIDEOWEBGL  */
3962         {
3963             if (!context->checkCanUseExtension((yylsp[0]), TExtension::WEBGL_video_texture))
3964             {
3965                 context->error((yylsp[0]), "unsupported type", "samplerVideoWEBGL");
3966             }
3967             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerVideoWEBGL, (yylsp[0]));
3968         }
3969         break;
3970 
3971         case 229: /* type_specifier_nonarray: SAMPLER_EXTERNAL_OES  */
3972         {
3973             constexpr std::array<TExtension, 3u> extensions{
3974                 {TExtension::NV_EGL_stream_consumer_external,
3975                  TExtension::OES_EGL_image_external_essl3, TExtension::OES_EGL_image_external}};
3976             if (!context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3977             {
3978                 context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
3979             }
3980             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternalOES, (yylsp[0]));
3981         }
3982         break;
3983 
3984         case 230: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
3985         {
3986             if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
3987             {
3988                 context->error((yylsp[0]), "unsupported type", "__samplerExternal2DY2YEXT");
3989             }
3990             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternal2DY2YEXT, (yylsp[0]));
3991         }
3992         break;
3993 
3994         case 231: /* type_specifier_nonarray: SAMPLER2DRECT  */
3995         {
3996             if (!context->checkCanUseExtension((yylsp[0]), TExtension::ARB_texture_rectangle))
3997             {
3998                 context->error((yylsp[0]), "unsupported type", "sampler2DRect");
3999             }
4000             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DRect, (yylsp[0]));
4001         }
4002         break;
4003 
4004         case 232: /* type_specifier_nonarray: IMAGE2D  */
4005         {
4006             (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
4007         }
4008         break;
4009 
4010         case 233: /* type_specifier_nonarray: IIMAGE2D  */
4011         {
4012             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
4013         }
4014         break;
4015 
4016         case 234: /* type_specifier_nonarray: UIMAGE2D  */
4017         {
4018             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
4019         }
4020         break;
4021 
4022         case 235: /* type_specifier_nonarray: IMAGE3D  */
4023         {
4024             (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
4025         }
4026         break;
4027 
4028         case 236: /* type_specifier_nonarray: IIMAGE3D  */
4029         {
4030             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
4031         }
4032         break;
4033 
4034         case 237: /* type_specifier_nonarray: UIMAGE3D  */
4035         {
4036             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
4037         }
4038         break;
4039 
4040         case 238: /* type_specifier_nonarray: IMAGE2DARRAY  */
4041         {
4042             (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
4043         }
4044         break;
4045 
4046         case 239: /* type_specifier_nonarray: IIMAGE2DARRAY  */
4047         {
4048             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
4049         }
4050         break;
4051 
4052         case 240: /* type_specifier_nonarray: UIMAGE2DARRAY  */
4053         {
4054             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
4055         }
4056         break;
4057 
4058         case 241: /* type_specifier_nonarray: IMAGECUBE  */
4059         {
4060             (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
4061         }
4062         break;
4063 
4064         case 242: /* type_specifier_nonarray: IIMAGECUBE  */
4065         {
4066             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
4067         }
4068         break;
4069 
4070         case 243: /* type_specifier_nonarray: UIMAGECUBE  */
4071         {
4072             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
4073         }
4074         break;
4075 
4076         case 244: /* type_specifier_nonarray: IMAGECUBEARRAYOES  */
4077         {
4078             if (context->getShaderVersion() < 320 &&
4079                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4080             {
4081                 context->error((yylsp[0]), "unsupported type", "__imageCubeArray");
4082             }
4083             (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCubeArray, (yylsp[0]));
4084         }
4085         break;
4086 
4087         case 245: /* type_specifier_nonarray: IMAGECUBEARRAYEXT  */
4088         {
4089             if (context->getShaderVersion() < 320 &&
4090                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_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 246: /* type_specifier_nonarray: IIMAGECUBEARRAYOES  */
4099         {
4100             if (context->getShaderVersion() < 320 &&
4101                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4102             {
4103                 context->error((yylsp[0]), "unsupported type", "__iimageCubeArray");
4104             }
4105             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCubeArray, (yylsp[0]));
4106         }
4107         break;
4108 
4109         case 247: /* type_specifier_nonarray: IIMAGECUBEARRAYEXT  */
4110         {
4111             if (context->getShaderVersion() < 320 &&
4112                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_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 248: /* type_specifier_nonarray: UIMAGECUBEARRAYOES  */
4121         {
4122             if (context->getShaderVersion() < 320 &&
4123                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4124             {
4125                 context->error((yylsp[0]), "unsupported type", "__uimageCubeArray");
4126             }
4127             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCubeArray, (yylsp[0]));
4128         }
4129         break;
4130 
4131         case 249: /* type_specifier_nonarray: UIMAGECUBEARRAYEXT  */
4132         {
4133             if (context->getShaderVersion() < 320 &&
4134                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_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 250: /* type_specifier_nonarray: IMAGEBUFFER  */
4143         {
4144             constexpr std::array<TExtension, 2u> extensions{
4145                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4146             if (context->getShaderVersion() < 320 &&
4147                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4148             {
4149                 context->error((yylsp[0]), "unsupported type", "__imageBuffer");
4150             }
4151             (yyval.interm.typeSpecifierNonArray).initialize(EbtImageBuffer, (yylsp[0]));
4152         }
4153         break;
4154 
4155         case 251: /* type_specifier_nonarray: IIMAGEBUFFER  */
4156         {
4157             constexpr std::array<TExtension, 2u> extensions{
4158                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4159             if (context->getShaderVersion() < 320 &&
4160                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4161             {
4162                 context->error((yylsp[0]), "unsupported type", "__iimageBuffer");
4163             }
4164             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageBuffer, (yylsp[0]));
4165         }
4166         break;
4167 
4168         case 252: /* type_specifier_nonarray: UIMAGEBUFFER  */
4169         {
4170             constexpr std::array<TExtension, 2u> extensions{
4171                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4172             if (context->getShaderVersion() < 320 &&
4173                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4174             {
4175                 context->error((yylsp[0]), "unsupported type", "__uimageBuffer");
4176             }
4177             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageBuffer, (yylsp[0]));
4178         }
4179         break;
4180 
4181         case 253: /* type_specifier_nonarray: ATOMICUINT  */
4182         {
4183             (yyval.interm.typeSpecifierNonArray).initialize(EbtAtomicCounter, (yylsp[0]));
4184         }
4185         break;
4186 
4187         case 254: /* type_specifier_nonarray: PIXELLOCALANGLE  */
4188         {
4189             if (!context->checkCanUseExtension((yylsp[0]),
4190                                                TExtension::ANGLE_shader_pixel_local_storage))
4191             {
4192                 context->error((yylsp[0]), "unsupported type", "__pixelLocalANGLE");
4193             }
4194             (yyval.interm.typeSpecifierNonArray).initialize(EbtPixelLocalANGLE, (yylsp[0]));
4195         }
4196         break;
4197 
4198         case 255: /* type_specifier_nonarray: IPIXELLOCALANGLE  */
4199         {
4200             if (!context->checkCanUseExtension((yylsp[0]),
4201                                                TExtension::ANGLE_shader_pixel_local_storage))
4202             {
4203                 context->error((yylsp[0]), "unsupported type", "__ipixelLocalANGLE");
4204             }
4205             (yyval.interm.typeSpecifierNonArray).initialize(EbtIPixelLocalANGLE, (yylsp[0]));
4206         }
4207         break;
4208 
4209         case 256: /* type_specifier_nonarray: UPIXELLOCALANGLE  */
4210         {
4211             if (!context->checkCanUseExtension((yylsp[0]),
4212                                                TExtension::ANGLE_shader_pixel_local_storage))
4213             {
4214                 context->error((yylsp[0]), "unsupported type", "__upixelLocalANGLE");
4215             }
4216             (yyval.interm.typeSpecifierNonArray).initialize(EbtUPixelLocalANGLE, (yylsp[0]));
4217         }
4218         break;
4219 
4220         case 257: /* type_specifier_nonarray: struct_specifier  */
4221         {
4222             (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
4223         }
4224         break;
4225 
4226         case 258: /* type_specifier_nonarray: TYPE_NAME  */
4227         {
4228             // This is for user defined type names. The lexical phase looked up the type.
4229             const TStructure *structure = static_cast<const TStructure *>((yyvsp[0].lex).symbol);
4230             (yyval.interm.typeSpecifierNonArray).initializeStruct(structure, false, (yylsp[0]));
4231         }
4232         break;
4233 
4234         case 259: /* $@1: %empty  */
4235         {
4236             context->enterStructDeclaration((yylsp[-1]), ImmutableString((yyvsp[-1].lex).string));
4237         }
4238         break;
4239 
4240         case 260: /* struct_specifier: STRUCT identifier LEFT_BRACE $@1 struct_declaration_list
4241                      RIGHT_BRACE  */
4242         {
4243             (yyval.interm.typeSpecifierNonArray) = context->addStructure(
4244                 (yylsp[-5]), (yylsp[-4]), ImmutableString((yyvsp[-4].lex).string),
4245                 (yyvsp[-1].interm.fieldList));
4246         }
4247         break;
4248 
4249         case 261: /* $@2: %empty  */
4250         {
4251             context->enterStructDeclaration((yylsp[0]), kEmptyImmutableString);
4252         }
4253         break;
4254 
4255         case 262: /* struct_specifier: STRUCT LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
4256         {
4257             (yyval.interm.typeSpecifierNonArray) = context->addStructure(
4258                 (yylsp[-4]), (yyloc), kEmptyImmutableString, (yyvsp[-1].interm.fieldList));
4259         }
4260         break;
4261 
4262         case 263: /* struct_declaration_list: struct_declaration  */
4263         {
4264             (yyval.interm.fieldList) =
4265                 context->addStructFieldList((yyvsp[0].interm.fieldList), (yylsp[0]));
4266         }
4267         break;
4268 
4269         case 264: /* struct_declaration_list: struct_declaration_list struct_declaration  */
4270         {
4271             (yyval.interm.fieldList) = context->combineStructFieldLists(
4272                 (yyvsp[-1].interm.fieldList), (yyvsp[0].interm.fieldList), (yylsp[0]));
4273         }
4274         break;
4275 
4276         case 265: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
4277         {
4278             (yyval.interm.fieldList) = context->addStructDeclaratorList(
4279                 (yyvsp[-2].interm.type), (yyvsp[-1].interm.declaratorList));
4280         }
4281         break;
4282 
4283         case 266: /* struct_declaration: type_qualifier type_specifier struct_declarator_list
4284                      SEMICOLON  */
4285         {
4286             // ES3 Only, but errors should be handled elsewhere
4287             (yyval.interm.fieldList) = context->addStructDeclaratorListWithQualifiers(
4288                 *(yyvsp[-3].interm.typeQualifierBuilder), &(yyvsp[-2].interm.type),
4289                 (yyvsp[-1].interm.declaratorList));
4290         }
4291         break;
4292 
4293         case 267: /* struct_declarator_list: struct_declarator  */
4294         {
4295             (yyval.interm.declaratorList) = new TDeclaratorList();
4296             (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
4297         }
4298         break;
4299 
4300         case 268: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
4301         {
4302             (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
4303         }
4304         break;
4305 
4306         case 269: /* struct_declarator: identifier  */
4307         {
4308             (yyval.interm.declarator) =
4309                 context->parseStructDeclarator(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
4310         }
4311         break;
4312 
4313         case 270: /* struct_declarator: identifier array_specifier  */
4314         {
4315             (yyval.interm.declarator) = context->parseStructArrayDeclarator(
4316                 ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]), (yyvsp[0].interm.arraySizes));
4317         }
4318         break;
4319 
4320         case 271: /* initializer: assignment_expression  */
4321         {
4322             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
4323         }
4324         break;
4325 
4326         case 272: /* declaration_statement: declaration  */
4327         {
4328             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4329         }
4330         break;
4331 
4332         case 273: /* statement: compound_statement_with_scope  */
4333         {
4334             (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4335         }
4336         break;
4337 
4338         case 274: /* statement: simple_statement  */
4339         {
4340             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4341         }
4342         break;
4343 
4344         case 275: /* simple_statement: declaration_statement  */
4345         {
4346             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4347         }
4348         break;
4349 
4350         case 276: /* simple_statement: expression_statement  */
4351         {
4352             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4353         }
4354         break;
4355 
4356         case 277: /* simple_statement: selection_statement  */
4357         {
4358             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4359         }
4360         break;
4361 
4362         case 278: /* simple_statement: switch_statement  */
4363         {
4364             (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch);
4365         }
4366         break;
4367 
4368         case 279: /* simple_statement: case_label  */
4369         {
4370             (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase);
4371         }
4372         break;
4373 
4374         case 280: /* simple_statement: iteration_statement  */
4375         {
4376             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4377         }
4378         break;
4379 
4380         case 281: /* simple_statement: jump_statement  */
4381         {
4382             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4383         }
4384         break;
4385 
4386         case 282: /* compound_statement_with_scope: LEFT_BRACE RIGHT_BRACE  */
4387         {
4388             (yyval.interm.intermBlock) = new TIntermBlock();
4389             (yyval.interm.intermBlock)->setLine((yyloc));
4390         }
4391         break;
4392 
4393         case 283: /* $@3: %empty  */
4394         {
4395             context->symbolTable.push();
4396         }
4397         break;
4398 
4399         case 284: /* $@4: %empty  */
4400         {
4401             context->symbolTable.pop();
4402         }
4403         break;
4404 
4405         case 285: /* compound_statement_with_scope: LEFT_BRACE $@3 statement_list $@4 RIGHT_BRACE */
4406         {
4407             (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
4408             (yyval.interm.intermBlock) = (yyvsp[-2].interm.intermBlock);
4409         }
4410         break;
4411 
4412         case 286: /* statement_no_new_scope: compound_statement_no_new_scope  */
4413         {
4414             (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4415         }
4416         break;
4417 
4418         case 287: /* statement_no_new_scope: simple_statement  */
4419         {
4420             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4421         }
4422         break;
4423 
4424         case 288: /* $@5: %empty  */
4425         {
4426             context->symbolTable.push();
4427         }
4428         break;
4429 
4430         case 289: /* statement_with_scope: $@5 compound_statement_no_new_scope  */
4431         {
4432             context->symbolTable.pop();
4433             (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4434         }
4435         break;
4436 
4437         case 290: /* $@6: %empty  */
4438         {
4439             context->symbolTable.push();
4440         }
4441         break;
4442 
4443         case 291: /* statement_with_scope: $@6 simple_statement  */
4444         {
4445             context->symbolTable.pop();
4446             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4447         }
4448         break;
4449 
4450         case 292: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
4451         {
4452             (yyval.interm.intermBlock) = new TIntermBlock();
4453             (yyval.interm.intermBlock)->setLine((yyloc));
4454         }
4455         break;
4456 
4457         case 293: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
4458         {
4459             (yyvsp[-1].interm.intermBlock)->setLine((yyloc));
4460             (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
4461         }
4462         break;
4463 
4464         case 294: /* statement_list: statement  */
4465         {
4466             (yyval.interm.intermBlock) = new TIntermBlock();
4467             context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
4468         }
4469         break;
4470 
4471         case 295: /* statement_list: statement_list statement  */
4472         {
4473             (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
4474             context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
4475         }
4476         break;
4477 
4478         case 296: /* expression_statement: SEMICOLON  */
4479         {
4480             (yyval.interm.intermNode) = context->addEmptyStatement((yyloc));
4481         }
4482         break;
4483 
4484         case 297: /* expression_statement: expression SEMICOLON  */
4485         {
4486             (yyval.interm.intermNode) = (yyvsp[-1].interm.intermTypedNode);
4487         }
4488         break;
4489 
4490         case 298: /* selection_statement: IF LEFT_PAREN expression RIGHT_PAREN
4491                      selection_rest_statement  */
4492         {
4493             (yyval.interm.intermNode) = context->addIfElse((yyvsp[-2].interm.intermTypedNode),
4494                                                            (yyvsp[0].interm.nodePair), (yylsp[-4]));
4495         }
4496         break;
4497 
4498         case 299: /* selection_rest_statement: statement_with_scope ELSE statement_with_scope  */
4499         {
4500             (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
4501             (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
4502         }
4503         break;
4504 
4505         case 300: /* selection_rest_statement: statement_with_scope  */
4506         {
4507             (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
4508             (yyval.interm.nodePair).node2 = nullptr;
4509         }
4510         break;
4511 
4512         case 301: /* $@7: %empty  */
4513         {
4514             context->incrSwitchNestingLevel();
4515         }
4516         break;
4517 
4518         case 302: /* switch_statement: SWITCH LEFT_PAREN expression RIGHT_PAREN $@7
4519                      compound_statement_with_scope  */
4520         {
4521             (yyval.interm.intermSwitch) = context->addSwitch(
4522                 (yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
4523             context->decrSwitchNestingLevel();
4524         }
4525         break;
4526 
4527         case 303: /* case_label: CASE constant_expression COLON  */
4528         {
4529             (yyval.interm.intermCase) =
4530                 context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
4531         }
4532         break;
4533 
4534         case 304: /* case_label: DEFAULT COLON  */
4535         {
4536             (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
4537         }
4538         break;
4539 
4540         case 305: /* condition: expression  */
4541         {
4542             (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
4543             context->checkIsScalarBool((yyvsp[0].interm.intermTypedNode)->getLine(),
4544                                        (yyvsp[0].interm.intermTypedNode));
4545         }
4546         break;
4547 
4548         case 306: /* condition: fully_specified_type identifier EQUAL initializer  */
4549         {
4550             (yyval.interm.intermNode) = context->addConditionInitializer(
4551                 (yyvsp[-3].interm.type), ImmutableString((yyvsp[-2].lex).string),
4552                 (yyvsp[0].interm.intermTypedNode), (yylsp[-2]));
4553         }
4554         break;
4555 
4556         case 307: /* $@8: %empty  */
4557         {
4558             context->symbolTable.push();
4559             context->incrLoopNestingLevel();
4560         }
4561         break;
4562 
4563         case 308: /* iteration_statement: WHILE LEFT_PAREN $@8 condition RIGHT_PAREN
4564                      statement_no_new_scope  */
4565         {
4566             context->symbolTable.pop();
4567             (yyval.interm.intermNode) =
4568                 context->addLoop(ELoopWhile, 0, (yyvsp[-2].interm.intermNode), 0,
4569                                  (yyvsp[0].interm.intermNode), (yylsp[-5]));
4570             context->decrLoopNestingLevel();
4571         }
4572         break;
4573 
4574         case 309: /* $@9: %empty  */
4575         {
4576             context->incrLoopNestingLevel();
4577         }
4578         break;
4579 
4580         case 310: /* iteration_statement: DO $@9 statement_with_scope WHILE LEFT_PAREN expression
4581                      RIGHT_PAREN SEMICOLON  */
4582         {
4583             (yyval.interm.intermNode) =
4584                 context->addLoop(ELoopDoWhile, 0, (yyvsp[-2].interm.intermTypedNode), 0,
4585                                  (yyvsp[-5].interm.intermNode), (yylsp[-4]));
4586             context->decrLoopNestingLevel();
4587         }
4588         break;
4589 
4590         case 311: /* $@10: %empty  */
4591         {
4592             context->symbolTable.push();
4593             context->incrLoopNestingLevel();
4594         }
4595         break;
4596 
4597         case 312: /* iteration_statement: FOR LEFT_PAREN $@10 for_init_statement for_rest_statement
4598                      RIGHT_PAREN statement_no_new_scope  */
4599         {
4600             context->symbolTable.pop();
4601             (yyval.interm.intermNode) = context->addLoop(
4602                 ELoopFor, (yyvsp[-3].interm.intermNode), (yyvsp[-2].interm.nodePair).node1,
4603                 reinterpret_cast<TIntermTyped *>((yyvsp[-2].interm.nodePair).node2),
4604                 (yyvsp[0].interm.intermNode), (yylsp[-6]));
4605             context->decrLoopNestingLevel();
4606         }
4607         break;
4608 
4609         case 313: /* for_init_statement: expression_statement  */
4610         {
4611             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4612         }
4613         break;
4614 
4615         case 314: /* for_init_statement: declaration_statement  */
4616         {
4617             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4618         }
4619         break;
4620 
4621         case 315: /* conditionopt: condition  */
4622         {
4623             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4624         }
4625         break;
4626 
4627         case 316: /* conditionopt: %empty  */
4628         {
4629             (yyval.interm.intermNode) = nullptr;
4630         }
4631         break;
4632 
4633         case 317: /* for_rest_statement: conditionopt SEMICOLON  */
4634         {
4635             (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermNode);
4636             (yyval.interm.nodePair).node2 = 0;
4637         }
4638         break;
4639 
4640         case 318: /* for_rest_statement: conditionopt SEMICOLON expression  */
4641         {
4642             (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
4643             (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
4644         }
4645         break;
4646 
4647         case 319: /* jump_statement: CONTINUE SEMICOLON  */
4648         {
4649             (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
4650         }
4651         break;
4652 
4653         case 320: /* jump_statement: BREAK SEMICOLON  */
4654         {
4655             (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
4656         }
4657         break;
4658 
4659         case 321: /* jump_statement: RETURN SEMICOLON  */
4660         {
4661             (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
4662         }
4663         break;
4664 
4665         case 322: /* jump_statement: RETURN expression SEMICOLON  */
4666         {
4667             (yyval.interm.intermNode) =
4668                 context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
4669         }
4670         break;
4671 
4672         case 323: /* jump_statement: DISCARD SEMICOLON  */
4673         {
4674             (yyval.interm.intermNode) = context->addBranch(EOpKill, (yylsp[-1]));
4675         }
4676         break;
4677 
4678         case 324: /* translation_unit: external_declaration  */
4679         {
4680             (yyval.interm.intermBlock) = new TIntermBlock();
4681             (yyval.interm.intermBlock)->setLine((yyloc));
4682             (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
4683             context->setTreeRoot((yyval.interm.intermBlock));
4684         }
4685         break;
4686 
4687         case 325: /* translation_unit: translation_unit external_declaration  */
4688         {
4689             (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
4690         }
4691         break;
4692 
4693         case 326: /* external_declaration: function_definition  */
4694         {
4695             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4696         }
4697         break;
4698 
4699         case 327: /* external_declaration: declaration  */
4700         {
4701             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4702         }
4703         break;
4704 
4705         case 328: /* $@11: %empty  */
4706         {
4707             context->parseFunctionDefinitionHeader((yylsp[0]), (yyvsp[0].interm).function,
4708                                                    &((yyvsp[0].interm).intermFunctionPrototype));
4709         }
4710         break;
4711 
4712         case 329: /* function_definition: function_prototype $@11 compound_statement_no_new_scope */
4713         {
4714             (yyval.interm.intermNode) =
4715                 context->addFunctionDefinition((yyvsp[-2].interm).intermFunctionPrototype,
4716                                                (yyvsp[0].interm.intermBlock), (yylsp[-2]));
4717         }
4718         break;
4719 
4720         default:
4721             break;
4722     }
4723     /* User semantic actions sometimes alter yychar, and that requires
4724        that yytoken be updated with the new translation.  We take the
4725        approach of translating immediately before every use of yytoken.
4726        One alternative is translating here after every semantic action,
4727        but that translation would be missed if the semantic action invokes
4728        YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4729        if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
4730        incorrect destructor might then be invoked immediately.  In the
4731        case of YYERROR or YYBACKUP, subsequent parser actions might lead
4732        to an incorrect destructor call or verbose syntax error message
4733        before the lookahead is translated.  */
4734     YY_SYMBOL_PRINT("-> $$ =", YY_CAST(yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
4735 
4736     YYPOPSTACK(yylen);
4737     yylen = 0;
4738 
4739     *++yyvsp = yyval;
4740     *++yylsp = yyloc;
4741 
4742     /* Now 'shift' the result of the reduction.  Determine what state
4743        that goes to, based on the state we popped back to and the rule
4744        number reduced by.  */
4745     {
4746         const int yylhs = yyr1[yyn] - YYNTOKENS;
4747         const int yyi   = yypgoto[yylhs] + *yyssp;
4748         yystate =
4749             (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]);
4750     }
4751 
4752     goto yynewstate;
4753 
4754 /*--------------------------------------.
4755 | yyerrlab -- here on detecting error.  |
4756 `--------------------------------------*/
4757 yyerrlab:
4758     /* Make sure we have latest lookahead translation.  See comments at
4759        user semantic actions for why this is necessary.  */
4760     yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE(yychar);
4761     /* If not already recovering from an error, report this error.  */
4762     if (!yyerrstatus)
4763     {
4764         ++yynerrs;
4765         yyerror(&yylloc, context, scanner, YY_("syntax error"));
4766     }
4767 
4768     yyerror_range[1] = yylloc;
4769     if (yyerrstatus == 3)
4770     {
4771         /* If just tried and failed to reuse lookahead token after an
4772            error, discard it.  */
4773 
4774         if (yychar <= YYEOF)
4775         {
4776             /* Return failure if at end of input.  */
4777             if (yychar == YYEOF)
4778                 YYABORT;
4779         }
4780         else
4781         {
4782             yydestruct("Error: discarding", yytoken, &yylval, &yylloc, context, scanner);
4783             yychar = YYEMPTY;
4784         }
4785     }
4786 
4787     /* Else will try to reuse lookahead token after shifting the error
4788        token.  */
4789     goto yyerrlab1;
4790 
4791 /*---------------------------------------------------.
4792 | yyerrorlab -- error raised explicitly by YYERROR.  |
4793 `---------------------------------------------------*/
4794 yyerrorlab:
4795     /* Pacify compilers when the user code never invokes YYERROR and the
4796        label yyerrorlab therefore never appears in user code.  */
4797     if (0)
4798         YYERROR;
4799     ++yynerrs;
4800 
4801     /* Do not reclaim the symbols of the rule whose action triggered
4802        this YYERROR.  */
4803     YYPOPSTACK(yylen);
4804     yylen = 0;
4805     YY_STACK_PRINT(yyss, yyssp);
4806     yystate = *yyssp;
4807     goto yyerrlab1;
4808 
4809 /*-------------------------------------------------------------.
4810 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
4811 `-------------------------------------------------------------*/
4812 yyerrlab1:
4813     yyerrstatus = 3; /* Each real token shifted decrements this.  */
4814 
4815     /* Pop stack until we find a state that shifts the error token.  */
4816     for (;;)
4817     {
4818         yyn = yypact[yystate];
4819         if (!yypact_value_is_default(yyn))
4820         {
4821             yyn += YYSYMBOL_YYerror;
4822             if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
4823             {
4824                 yyn = yytable[yyn];
4825                 if (0 < yyn)
4826                     break;
4827             }
4828         }
4829 
4830         /* Pop the current state because it cannot handle the error token.  */
4831         if (yyssp == yyss)
4832             YYABORT;
4833 
4834         yyerror_range[1] = *yylsp;
4835         yydestruct("Error: popping", YY_ACCESSING_SYMBOL(yystate), yyvsp, yylsp, context, scanner);
4836         YYPOPSTACK(1);
4837         yystate = *yyssp;
4838         YY_STACK_PRINT(yyss, yyssp);
4839     }
4840 
4841     YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4842     *++yyvsp = yylval;
4843     YY_IGNORE_MAYBE_UNINITIALIZED_END
4844 
4845     yyerror_range[2] = yylloc;
4846     ++yylsp;
4847     YYLLOC_DEFAULT(*yylsp, yyerror_range, 2);
4848 
4849     /* Shift the error token.  */
4850     YY_SYMBOL_PRINT("Shifting", YY_ACCESSING_SYMBOL(yyn), yyvsp, yylsp);
4851 
4852     yystate = yyn;
4853     goto yynewstate;
4854 
4855 /*-------------------------------------.
4856 | yyacceptlab -- YYACCEPT comes here.  |
4857 `-------------------------------------*/
4858 yyacceptlab:
4859     yyresult = 0;
4860     goto yyreturnlab;
4861 
4862 /*-----------------------------------.
4863 | yyabortlab -- YYABORT comes here.  |
4864 `-----------------------------------*/
4865 yyabortlab:
4866     yyresult = 1;
4867     goto yyreturnlab;
4868 
4869 /*-----------------------------------------------------------.
4870 | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
4871 `-----------------------------------------------------------*/
4872 yyexhaustedlab:
4873     yyerror(&yylloc, context, scanner, YY_("memory exhausted"));
4874     yyresult = 2;
4875     goto yyreturnlab;
4876 
4877 /*----------------------------------------------------------.
4878 | yyreturnlab -- parsing is finished, clean up and return.  |
4879 `----------------------------------------------------------*/
4880 yyreturnlab:
4881     if (yychar != YYEMPTY)
4882     {
4883         /* Make sure we have latest lookahead translation.  See comments at
4884            user semantic actions for why this is necessary.  */
4885         yytoken = YYTRANSLATE(yychar);
4886         yydestruct("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, context, scanner);
4887     }
4888     /* Do not reclaim the symbols of the rule whose action triggered
4889        this YYABORT or YYACCEPT.  */
4890     YYPOPSTACK(yylen);
4891     YY_STACK_PRINT(yyss, yyssp);
4892     while (yyssp != yyss)
4893     {
4894         yydestruct("Cleanup: popping", YY_ACCESSING_SYMBOL(+*yyssp), yyvsp, yylsp, context,
4895                    scanner);
4896         YYPOPSTACK(1);
4897     }
4898 #ifndef yyoverflow
4899     if (yyss != yyssa)
4900         YYSTACK_FREE(yyss);
4901 #endif
4902 
4903     return yyresult;
4904 }
4905 
glslang_parse(TParseContext * context)4906 int glslang_parse(TParseContext *context)
4907 {
4908     return yyparse(context, context->getScanner());
4909 }
4910