• 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,  893,
856     896,  900,  903,  906,  909,  912,  915,  919,  926,  933,  936,  939,  945,  952,  955,  961,
857     964,  967,  970,  976,  979,  986,  991,  998,  1006, 1020, 1023, 1026, 1029, 1032, 1035, 1039,
858     1043, 1047, 1051, 1055, 1059, 1063, 1067, 1071, 1075, 1079, 1083, 1087, 1091, 1095, 1099, 1103,
859     1107, 1111, 1115, 1119, 1126, 1129, 1132, 1135, 1138, 1141, 1144, 1152, 1160, 1170, 1173, 1176,
860     1179, 1182, 1185, 1188, 1196, 1204, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 1240, 1248, 1258,
861     1261, 1264, 1267, 1275, 1283, 1290, 1300, 1307, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335,
862     1338, 1341, 1344, 1347, 1350, 1358, 1366, 1374, 1382, 1390, 1398, 1408, 1418, 1428, 1431, 1438,
863     1445, 1452, 1455, 1463, 1463, 1466, 1466, 1472, 1475, 1481, 1484, 1491, 1495, 1501, 1504, 1510,
864     1514, 1518, 1519, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1535, 1539, 1539, 1539, 1546, 1547,
865     1551, 1551, 1552, 1552, 1557, 1561, 1568, 1572, 1579, 1580, 1584, 1590, 1594, 1603, 1603, 1610,
866     1613, 1619, 1623, 1629, 1629, 1634, 1634, 1638, 1638, 1646, 1649, 1655, 1658, 1664, 1668, 1675,
867     1678, 1681, 1684, 1687, 1695, 1701, 1707, 1710, 1716, 1716};
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             constexpr std::array<TExtension, 2u> extensions{
3320                 {TExtension::OES_tessellation_shader, TExtension::EXT_tessellation_shader}};
3321             if (context->getShaderVersion() < 320 &&
3322                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3323             {
3324                 context->error((yylsp[0]), "unsupported storage qualifier", "patch");
3325             }
3326             (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqPatch, (yylsp[0]));
3327         }
3328         break;
3329 
3330         case 143: /* storage_qualifier: UNIFORM  */
3331         {
3332             (yyval.interm.qualifierWrapper) =
3333                 context->parseGlobalStorageQualifier(EvqUniform, (yylsp[0]));
3334         }
3335         break;
3336 
3337         case 144: /* storage_qualifier: BUFFER  */
3338         {
3339             ES3_1_OR_NEWER("buffer", (yylsp[0]), "storage qualifier");
3340             (yyval.interm.qualifierWrapper) =
3341                 context->parseGlobalStorageQualifier(EvqBuffer, (yylsp[0]));
3342         }
3343         break;
3344 
3345         case 145: /* storage_qualifier: READONLY  */
3346         {
3347             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqReadOnly, (yylsp[0]));
3348         }
3349         break;
3350 
3351         case 146: /* storage_qualifier: WRITEONLY  */
3352         {
3353             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqWriteOnly, (yylsp[0]));
3354         }
3355         break;
3356 
3357         case 147: /* storage_qualifier: COHERENT  */
3358         {
3359             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqCoherent, (yylsp[0]));
3360         }
3361         break;
3362 
3363         case 148: /* storage_qualifier: RESTRICT  */
3364         {
3365             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqRestrict, (yylsp[0]));
3366         }
3367         break;
3368 
3369         case 149: /* storage_qualifier: VOLATILE  */
3370         {
3371             (yyval.interm.qualifierWrapper) = new TMemoryQualifierWrapper(EvqVolatile, (yylsp[0]));
3372         }
3373         break;
3374 
3375         case 150: /* storage_qualifier: SHARED  */
3376         {
3377             COMPUTE_ONLY("shared", (yylsp[0]));
3378             (yyval.interm.qualifierWrapper) =
3379                 context->parseGlobalStorageQualifier(EvqShared, (yylsp[0]));
3380         }
3381         break;
3382 
3383         case 151: /* storage_qualifier: SAMPLE  */
3384         {
3385             ES3_OR_NEWER("sample", (yylsp[0]), "storage qualifier");
3386             (yyval.interm.qualifierWrapper) = new TStorageQualifierWrapper(EvqSample, (yylsp[0]));
3387         }
3388         break;
3389 
3390         case 152: /* type_specifier: type_specifier_no_prec  */
3391         {
3392             (yyval.interm.type) = (yyvsp[0].interm.type);
3393             (yyval.interm.type).precision =
3394                 context->symbolTable.getDefaultPrecision((yyvsp[0].interm.type).getBasicType());
3395         }
3396         break;
3397 
3398         case 153: /* precision_qualifier: HIGH_PRECISION  */
3399         {
3400             (yyval.interm.precision) = EbpHigh;
3401         }
3402         break;
3403 
3404         case 154: /* precision_qualifier: MEDIUM_PRECISION  */
3405         {
3406             (yyval.interm.precision) = EbpMedium;
3407         }
3408         break;
3409 
3410         case 155: /* precision_qualifier: LOW_PRECISION  */
3411         {
3412             (yyval.interm.precision) = EbpLow;
3413         }
3414         break;
3415 
3416         case 156: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
3417         {
3418             context->checkCanUseLayoutQualifier((yylsp[-3]));
3419             (yyval.interm.layoutQualifier) = (yyvsp[-1].interm.layoutQualifier);
3420         }
3421         break;
3422 
3423         case 157: /* layout_qualifier_id_list: layout_qualifier_id  */
3424         {
3425             (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
3426         }
3427         break;
3428 
3429         case 158: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */
3430         {
3431             (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers(
3432                 (yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier), (yylsp[0]));
3433         }
3434         break;
3435 
3436         case 159: /* layout_qualifier_id: IDENTIFIER  */
3437         {
3438             (yyval.interm.layoutQualifier) =
3439                 context->parseLayoutQualifier(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
3440         }
3441         break;
3442 
3443         case 160: /* layout_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
3444         {
3445             (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
3446                 ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
3447         }
3448         break;
3449 
3450         case 161: /* layout_qualifier_id: IDENTIFIER EQUAL UINTCONSTANT  */
3451         {
3452             (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(
3453                 ImmutableString((yyvsp[-2].lex).string), (yylsp[-2]), (yyvsp[0].lex).i, (yylsp[0]));
3454         }
3455         break;
3456 
3457         case 162: /* layout_qualifier_id: SHARED  */
3458         {
3459             (yyval.interm.layoutQualifier) =
3460                 context->parseLayoutQualifier(ImmutableString("shared"), (yylsp[0]));
3461         }
3462         break;
3463 
3464         case 163: /* type_specifier_no_prec: type_specifier_nonarray  */
3465         {
3466             (yyval.interm.type)
3467                 .initialize((yyvsp[0].interm.typeSpecifierNonArray),
3468                             (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
3469         }
3470         break;
3471 
3472         case 164: /* type_specifier_no_prec: type_specifier_nonarray array_specifier  */
3473         {
3474             (yyval.interm.type)
3475                 .initialize((yyvsp[-1].interm.typeSpecifierNonArray),
3476                             (context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary));
3477             (yyval.interm.type).setArraySizes((yyvsp[0].interm.arraySizes));
3478         }
3479         break;
3480 
3481         case 165: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
3482         {
3483             ES3_OR_NEWER("[]", (yylsp[-1]), "implicitly sized array");
3484             (yyval.interm.arraySizes) = new TVector<unsigned int>();
3485             (yyval.interm.arraySizes)->push_back(0u);
3486         }
3487         break;
3488 
3489         case 166: /* array_specifier: LEFT_BRACKET constant_expression RIGHT_BRACKET  */
3490         {
3491             (yyval.interm.arraySizes) = new TVector<unsigned int>();
3492             unsigned int size =
3493                 context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
3494             // Make the type an array even if size check failed.
3495             // This ensures useless error messages regarding a variable's non-arrayness won't
3496             // follow.
3497             (yyval.interm.arraySizes)->push_back(size);
3498         }
3499         break;
3500 
3501         case 167: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
3502         {
3503             ES3_1_OR_NEWER("[]", (yylsp[-1]), "arrays of arrays");
3504             (yyval.interm.arraySizes) = (yyvsp[-2].interm.arraySizes);
3505             (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), 0u);
3506             if (!context->checkIsValidArrayDimension((yylsp[-1]), (yyval.interm.arraySizes)))
3507             {
3508                 YYABORT;
3509             }
3510         }
3511         break;
3512 
3513         case 168: /* array_specifier: array_specifier LEFT_BRACKET constant_expression RIGHT_BRACKET
3514                    */
3515         {
3516             ES3_1_OR_NEWER("[]", (yylsp[-2]), "arrays of arrays");
3517             (yyval.interm.arraySizes) = (yyvsp[-3].interm.arraySizes);
3518             unsigned int size =
3519                 context->checkIsValidArraySize((yylsp[-2]), (yyvsp[-1].interm.intermTypedNode));
3520             // Make the type an array even if size check failed.
3521             // This ensures useless error messages regarding a variable's non-arrayness won't
3522             // follow.
3523             (yyval.interm.arraySizes)->insert((yyval.interm.arraySizes)->begin(), size);
3524             if (!context->checkIsValidArrayDimension((yylsp[-2]), (yyval.interm.arraySizes)))
3525             {
3526                 YYABORT;
3527             }
3528         }
3529         break;
3530 
3531         case 169: /* type_specifier_nonarray: VOID_TYPE  */
3532         {
3533             (yyval.interm.typeSpecifierNonArray).initialize(EbtVoid, (yylsp[0]));
3534         }
3535         break;
3536 
3537         case 170: /* type_specifier_nonarray: FLOAT_TYPE  */
3538         {
3539             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3540         }
3541         break;
3542 
3543         case 171: /* type_specifier_nonarray: INT_TYPE  */
3544         {
3545             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3546         }
3547         break;
3548 
3549         case 172: /* type_specifier_nonarray: UINT_TYPE  */
3550         {
3551             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3552         }
3553         break;
3554 
3555         case 173: /* type_specifier_nonarray: BOOL_TYPE  */
3556         {
3557             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3558         }
3559         break;
3560 
3561         case 174: /* type_specifier_nonarray: VEC2  */
3562         {
3563             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3564             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3565         }
3566         break;
3567 
3568         case 175: /* type_specifier_nonarray: VEC3  */
3569         {
3570             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3571             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3572         }
3573         break;
3574 
3575         case 176: /* type_specifier_nonarray: VEC4  */
3576         {
3577             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3578             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3579         }
3580         break;
3581 
3582         case 177: /* type_specifier_nonarray: BVEC2  */
3583         {
3584             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3585             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3586         }
3587         break;
3588 
3589         case 178: /* type_specifier_nonarray: BVEC3  */
3590         {
3591             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3592             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3593         }
3594         break;
3595 
3596         case 179: /* type_specifier_nonarray: BVEC4  */
3597         {
3598             (yyval.interm.typeSpecifierNonArray).initialize(EbtBool, (yylsp[0]));
3599             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3600         }
3601         break;
3602 
3603         case 180: /* type_specifier_nonarray: IVEC2  */
3604         {
3605             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3606             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3607         }
3608         break;
3609 
3610         case 181: /* type_specifier_nonarray: IVEC3  */
3611         {
3612             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3613             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3614         }
3615         break;
3616 
3617         case 182: /* type_specifier_nonarray: IVEC4  */
3618         {
3619             (yyval.interm.typeSpecifierNonArray).initialize(EbtInt, (yylsp[0]));
3620             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3621         }
3622         break;
3623 
3624         case 183: /* type_specifier_nonarray: UVEC2  */
3625         {
3626             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3627             (yyval.interm.typeSpecifierNonArray).setAggregate(2);
3628         }
3629         break;
3630 
3631         case 184: /* type_specifier_nonarray: UVEC3  */
3632         {
3633             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3634             (yyval.interm.typeSpecifierNonArray).setAggregate(3);
3635         }
3636         break;
3637 
3638         case 185: /* type_specifier_nonarray: UVEC4  */
3639         {
3640             (yyval.interm.typeSpecifierNonArray).initialize(EbtUInt, (yylsp[0]));
3641             (yyval.interm.typeSpecifierNonArray).setAggregate(4);
3642         }
3643         break;
3644 
3645         case 186: /* type_specifier_nonarray: MATRIX2  */
3646         {
3647             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3648             (yyval.interm.typeSpecifierNonArray).setMatrix(2, 2);
3649         }
3650         break;
3651 
3652         case 187: /* type_specifier_nonarray: MATRIX3  */
3653         {
3654             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3655             (yyval.interm.typeSpecifierNonArray).setMatrix(3, 3);
3656         }
3657         break;
3658 
3659         case 188: /* type_specifier_nonarray: MATRIX4  */
3660         {
3661             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3662             (yyval.interm.typeSpecifierNonArray).setMatrix(4, 4);
3663         }
3664         break;
3665 
3666         case 189: /* type_specifier_nonarray: MATRIX2x3  */
3667         {
3668             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3669             (yyval.interm.typeSpecifierNonArray).setMatrix(2, 3);
3670         }
3671         break;
3672 
3673         case 190: /* type_specifier_nonarray: MATRIX3x2  */
3674         {
3675             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3676             (yyval.interm.typeSpecifierNonArray).setMatrix(3, 2);
3677         }
3678         break;
3679 
3680         case 191: /* type_specifier_nonarray: MATRIX2x4  */
3681         {
3682             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3683             (yyval.interm.typeSpecifierNonArray).setMatrix(2, 4);
3684         }
3685         break;
3686 
3687         case 192: /* type_specifier_nonarray: MATRIX4x2  */
3688         {
3689             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3690             (yyval.interm.typeSpecifierNonArray).setMatrix(4, 2);
3691         }
3692         break;
3693 
3694         case 193: /* type_specifier_nonarray: MATRIX3x4  */
3695         {
3696             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3697             (yyval.interm.typeSpecifierNonArray).setMatrix(3, 4);
3698         }
3699         break;
3700 
3701         case 194: /* type_specifier_nonarray: MATRIX4x3  */
3702         {
3703             (yyval.interm.typeSpecifierNonArray).initialize(EbtFloat, (yylsp[0]));
3704             (yyval.interm.typeSpecifierNonArray).setMatrix(4, 3);
3705         }
3706         break;
3707 
3708         case 195: /* type_specifier_nonarray: YUVCSCSTANDARDEXT  */
3709         {
3710             if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
3711             {
3712                 context->error((yylsp[0]), "unsupported type", "yuvCscStandardEXT");
3713             }
3714             (yyval.interm.typeSpecifierNonArray).initialize(EbtYuvCscStandardEXT, (yylsp[0]));
3715         }
3716         break;
3717 
3718         case 196: /* type_specifier_nonarray: SAMPLER2D  */
3719         {
3720             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2D, (yylsp[0]));
3721         }
3722         break;
3723 
3724         case 197: /* type_specifier_nonarray: SAMPLER3D  */
3725         {
3726             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler3D, (yylsp[0]));
3727         }
3728         break;
3729 
3730         case 198: /* type_specifier_nonarray: SAMPLERCUBE  */
3731         {
3732             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCube, (yylsp[0]));
3733         }
3734         break;
3735 
3736         case 199: /* type_specifier_nonarray: SAMPLER2DARRAY  */
3737         {
3738             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArray, (yylsp[0]));
3739         }
3740         break;
3741 
3742         case 200: /* type_specifier_nonarray: SAMPLER2DMS  */
3743         {
3744             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMS, (yylsp[0]));
3745         }
3746         break;
3747 
3748         case 201: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
3749         {
3750             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DMSArray, (yylsp[0]));
3751         }
3752         break;
3753 
3754         case 202: /* type_specifier_nonarray: SAMPLERCUBEARRAYOES  */
3755         {
3756             if (context->getShaderVersion() < 320 &&
3757                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3758             {
3759                 context->error((yylsp[0]), "unsupported type", "__samplerCubeArray");
3760             }
3761             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArray, (yylsp[0]));
3762         }
3763         break;
3764 
3765         case 203: /* type_specifier_nonarray: SAMPLERCUBEARRAYEXT  */
3766         {
3767             if (context->getShaderVersion() < 320 &&
3768                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3769             {
3770                 context->error((yylsp[0]), "unsupported type", "__samplerCubeArray");
3771             }
3772             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArray, (yylsp[0]));
3773         }
3774         break;
3775 
3776         case 204: /* type_specifier_nonarray: SAMPLERBUFFER  */
3777         {
3778             constexpr std::array<TExtension, 2u> extensions{
3779                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3780             if (context->getShaderVersion() < 320 &&
3781                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3782             {
3783                 context->error((yylsp[0]), "unsupported type", "__samplerBuffer");
3784             }
3785             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerBuffer, (yylsp[0]));
3786         }
3787         break;
3788 
3789         case 205: /* type_specifier_nonarray: ISAMPLER2D  */
3790         {
3791             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2D, (yylsp[0]));
3792         }
3793         break;
3794 
3795         case 206: /* type_specifier_nonarray: ISAMPLER3D  */
3796         {
3797             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler3D, (yylsp[0]));
3798         }
3799         break;
3800 
3801         case 207: /* type_specifier_nonarray: ISAMPLERCUBE  */
3802         {
3803             (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCube, (yylsp[0]));
3804         }
3805         break;
3806 
3807         case 208: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
3808         {
3809             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DArray, (yylsp[0]));
3810         }
3811         break;
3812 
3813         case 209: /* type_specifier_nonarray: ISAMPLER2DMS  */
3814         {
3815             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMS, (yylsp[0]));
3816         }
3817         break;
3818 
3819         case 210: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
3820         {
3821             (yyval.interm.typeSpecifierNonArray).initialize(EbtISampler2DMSArray, (yylsp[0]));
3822         }
3823         break;
3824 
3825         case 211: /* type_specifier_nonarray: ISAMPLERCUBEARRAYOES  */
3826         {
3827             if (context->getShaderVersion() < 320 &&
3828                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3829             {
3830                 context->error((yylsp[0]), "unsupported type", "__isamplerCubeArray");
3831             }
3832             (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCubeArray, (yylsp[0]));
3833         }
3834         break;
3835 
3836         case 212: /* type_specifier_nonarray: ISAMPLERCUBEARRAYEXT  */
3837         {
3838             if (context->getShaderVersion() < 320 &&
3839                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3840             {
3841                 context->error((yylsp[0]), "unsupported type", "__isamplerCubeArray");
3842             }
3843             (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerCubeArray, (yylsp[0]));
3844         }
3845         break;
3846 
3847         case 213: /* type_specifier_nonarray: ISAMPLERBUFFER  */
3848         {
3849             constexpr std::array<TExtension, 2u> extensions{
3850                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3851             if (context->getShaderVersion() < 320 &&
3852                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3853             {
3854                 context->error((yylsp[0]), "unsupported type", "__isamplerBuffer");
3855             }
3856             (yyval.interm.typeSpecifierNonArray).initialize(EbtISamplerBuffer, (yylsp[0]));
3857         }
3858         break;
3859 
3860         case 214: /* type_specifier_nonarray: USAMPLER2D  */
3861         {
3862             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2D, (yylsp[0]));
3863         }
3864         break;
3865 
3866         case 215: /* type_specifier_nonarray: USAMPLER3D  */
3867         {
3868             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler3D, (yylsp[0]));
3869         }
3870         break;
3871 
3872         case 216: /* type_specifier_nonarray: USAMPLERCUBE  */
3873         {
3874             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCube, (yylsp[0]));
3875         }
3876         break;
3877 
3878         case 217: /* type_specifier_nonarray: USAMPLER2DARRAY  */
3879         {
3880             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DArray, (yylsp[0]));
3881         }
3882         break;
3883 
3884         case 218: /* type_specifier_nonarray: USAMPLER2DMS  */
3885         {
3886             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMS, (yylsp[0]));
3887         }
3888         break;
3889 
3890         case 219: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
3891         {
3892             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSampler2DMSArray, (yylsp[0]));
3893         }
3894         break;
3895 
3896         case 220: /* type_specifier_nonarray: USAMPLERCUBEARRAYOES  */
3897         {
3898             if (context->getShaderVersion() < 320 &&
3899                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3900             {
3901                 context->error((yylsp[0]), "unsupported type", "__usamplerCubeArray");
3902             }
3903             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCubeArray, (yylsp[0]));
3904         }
3905         break;
3906 
3907         case 221: /* type_specifier_nonarray: USAMPLERCUBEARRAYEXT  */
3908         {
3909             if (context->getShaderVersion() < 320 &&
3910                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3911             {
3912                 context->error((yylsp[0]), "unsupported type", "__usamplerCubeArray");
3913             }
3914             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerCubeArray, (yylsp[0]));
3915         }
3916         break;
3917 
3918         case 222: /* type_specifier_nonarray: USAMPLERBUFFER  */
3919         {
3920             constexpr std::array<TExtension, 2u> extensions{
3921                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
3922             if (context->getShaderVersion() < 320 &&
3923                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3924             {
3925                 context->error((yylsp[0]), "unsupported type", "__usamplerBuffer");
3926             }
3927             (yyval.interm.typeSpecifierNonArray).initialize(EbtUSamplerBuffer, (yylsp[0]));
3928         }
3929         break;
3930 
3931         case 223: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
3932         {
3933             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DShadow, (yylsp[0]));
3934         }
3935         break;
3936 
3937         case 224: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
3938         {
3939             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeShadow, (yylsp[0]));
3940         }
3941         break;
3942 
3943         case 225: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
3944         {
3945             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DArrayShadow, (yylsp[0]));
3946         }
3947         break;
3948 
3949         case 226: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOWOES  */
3950         {
3951             if (context->getShaderVersion() < 320 &&
3952                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
3953             {
3954                 context->error((yylsp[0]), "unsupported type", "__samplerCubeArrayShadow");
3955             }
3956             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArrayShadow, (yylsp[0]));
3957         }
3958         break;
3959 
3960         case 227: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOWEXT  */
3961         {
3962             if (context->getShaderVersion() < 320 &&
3963                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
3964             {
3965                 context->error((yylsp[0]), "unsupported type", "__samplerCubeArrayShadow");
3966             }
3967             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerCubeArrayShadow, (yylsp[0]));
3968         }
3969         break;
3970 
3971         case 228: /* type_specifier_nonarray: SAMPLERVIDEOWEBGL  */
3972         {
3973             if (!context->checkCanUseExtension((yylsp[0]), TExtension::WEBGL_video_texture))
3974             {
3975                 context->error((yylsp[0]), "unsupported type", "samplerVideoWEBGL");
3976             }
3977             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerVideoWEBGL, (yylsp[0]));
3978         }
3979         break;
3980 
3981         case 229: /* type_specifier_nonarray: SAMPLER_EXTERNAL_OES  */
3982         {
3983             constexpr std::array<TExtension, 3u> extensions{
3984                 {TExtension::NV_EGL_stream_consumer_external,
3985                  TExtension::OES_EGL_image_external_essl3, TExtension::OES_EGL_image_external}};
3986             if (!context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
3987             {
3988                 context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
3989             }
3990             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternalOES, (yylsp[0]));
3991         }
3992         break;
3993 
3994         case 230: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
3995         {
3996             if (!context->checkCanUseExtension((yylsp[0]), TExtension::EXT_YUV_target))
3997             {
3998                 context->error((yylsp[0]), "unsupported type", "__samplerExternal2DY2YEXT");
3999             }
4000             (yyval.interm.typeSpecifierNonArray).initialize(EbtSamplerExternal2DY2YEXT, (yylsp[0]));
4001         }
4002         break;
4003 
4004         case 231: /* type_specifier_nonarray: SAMPLER2DRECT  */
4005         {
4006             if (!context->checkCanUseExtension((yylsp[0]), TExtension::ARB_texture_rectangle))
4007             {
4008                 context->error((yylsp[0]), "unsupported type", "sampler2DRect");
4009             }
4010             (yyval.interm.typeSpecifierNonArray).initialize(EbtSampler2DRect, (yylsp[0]));
4011         }
4012         break;
4013 
4014         case 232: /* type_specifier_nonarray: IMAGE2D  */
4015         {
4016             (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2D, (yylsp[0]));
4017         }
4018         break;
4019 
4020         case 233: /* type_specifier_nonarray: IIMAGE2D  */
4021         {
4022             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2D, (yylsp[0]));
4023         }
4024         break;
4025 
4026         case 234: /* type_specifier_nonarray: UIMAGE2D  */
4027         {
4028             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2D, (yylsp[0]));
4029         }
4030         break;
4031 
4032         case 235: /* type_specifier_nonarray: IMAGE3D  */
4033         {
4034             (yyval.interm.typeSpecifierNonArray).initialize(EbtImage3D, (yylsp[0]));
4035         }
4036         break;
4037 
4038         case 236: /* type_specifier_nonarray: IIMAGE3D  */
4039         {
4040             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage3D, (yylsp[0]));
4041         }
4042         break;
4043 
4044         case 237: /* type_specifier_nonarray: UIMAGE3D  */
4045         {
4046             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage3D, (yylsp[0]));
4047         }
4048         break;
4049 
4050         case 238: /* type_specifier_nonarray: IMAGE2DARRAY  */
4051         {
4052             (yyval.interm.typeSpecifierNonArray).initialize(EbtImage2DArray, (yylsp[0]));
4053         }
4054         break;
4055 
4056         case 239: /* type_specifier_nonarray: IIMAGE2DARRAY  */
4057         {
4058             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImage2DArray, (yylsp[0]));
4059         }
4060         break;
4061 
4062         case 240: /* type_specifier_nonarray: UIMAGE2DARRAY  */
4063         {
4064             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImage2DArray, (yylsp[0]));
4065         }
4066         break;
4067 
4068         case 241: /* type_specifier_nonarray: IMAGECUBE  */
4069         {
4070             (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCube, (yylsp[0]));
4071         }
4072         break;
4073 
4074         case 242: /* type_specifier_nonarray: IIMAGECUBE  */
4075         {
4076             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCube, (yylsp[0]));
4077         }
4078         break;
4079 
4080         case 243: /* type_specifier_nonarray: UIMAGECUBE  */
4081         {
4082             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCube, (yylsp[0]));
4083         }
4084         break;
4085 
4086         case 244: /* type_specifier_nonarray: IMAGECUBEARRAYOES  */
4087         {
4088             if (context->getShaderVersion() < 320 &&
4089                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4090             {
4091                 context->error((yylsp[0]), "unsupported type", "__imageCubeArray");
4092             }
4093             (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCubeArray, (yylsp[0]));
4094         }
4095         break;
4096 
4097         case 245: /* type_specifier_nonarray: IMAGECUBEARRAYEXT  */
4098         {
4099             if (context->getShaderVersion() < 320 &&
4100                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
4101             {
4102                 context->error((yylsp[0]), "unsupported type", "__imageCubeArray");
4103             }
4104             (yyval.interm.typeSpecifierNonArray).initialize(EbtImageCubeArray, (yylsp[0]));
4105         }
4106         break;
4107 
4108         case 246: /* type_specifier_nonarray: IIMAGECUBEARRAYOES  */
4109         {
4110             if (context->getShaderVersion() < 320 &&
4111                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4112             {
4113                 context->error((yylsp[0]), "unsupported type", "__iimageCubeArray");
4114             }
4115             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCubeArray, (yylsp[0]));
4116         }
4117         break;
4118 
4119         case 247: /* type_specifier_nonarray: IIMAGECUBEARRAYEXT  */
4120         {
4121             if (context->getShaderVersion() < 320 &&
4122                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
4123             {
4124                 context->error((yylsp[0]), "unsupported type", "__iimageCubeArray");
4125             }
4126             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageCubeArray, (yylsp[0]));
4127         }
4128         break;
4129 
4130         case 248: /* type_specifier_nonarray: UIMAGECUBEARRAYOES  */
4131         {
4132             if (context->getShaderVersion() < 320 &&
4133                 !context->checkCanUseExtension((yylsp[0]), TExtension::OES_texture_cube_map_array))
4134             {
4135                 context->error((yylsp[0]), "unsupported type", "__uimageCubeArray");
4136             }
4137             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCubeArray, (yylsp[0]));
4138         }
4139         break;
4140 
4141         case 249: /* type_specifier_nonarray: UIMAGECUBEARRAYEXT  */
4142         {
4143             if (context->getShaderVersion() < 320 &&
4144                 !context->checkCanUseExtension((yylsp[0]), TExtension::EXT_texture_cube_map_array))
4145             {
4146                 context->error((yylsp[0]), "unsupported type", "__uimageCubeArray");
4147             }
4148             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageCubeArray, (yylsp[0]));
4149         }
4150         break;
4151 
4152         case 250: /* type_specifier_nonarray: IMAGEBUFFER  */
4153         {
4154             constexpr std::array<TExtension, 2u> extensions{
4155                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4156             if (context->getShaderVersion() < 320 &&
4157                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4158             {
4159                 context->error((yylsp[0]), "unsupported type", "__imageBuffer");
4160             }
4161             (yyval.interm.typeSpecifierNonArray).initialize(EbtImageBuffer, (yylsp[0]));
4162         }
4163         break;
4164 
4165         case 251: /* type_specifier_nonarray: IIMAGEBUFFER  */
4166         {
4167             constexpr std::array<TExtension, 2u> extensions{
4168                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4169             if (context->getShaderVersion() < 320 &&
4170                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4171             {
4172                 context->error((yylsp[0]), "unsupported type", "__iimageBuffer");
4173             }
4174             (yyval.interm.typeSpecifierNonArray).initialize(EbtIImageBuffer, (yylsp[0]));
4175         }
4176         break;
4177 
4178         case 252: /* type_specifier_nonarray: UIMAGEBUFFER  */
4179         {
4180             constexpr std::array<TExtension, 2u> extensions{
4181                 {TExtension::OES_texture_buffer, TExtension::EXT_texture_buffer}};
4182             if (context->getShaderVersion() < 320 &&
4183                 !context->checkCanUseOneOfExtensions((yylsp[0]), extensions))
4184             {
4185                 context->error((yylsp[0]), "unsupported type", "__uimageBuffer");
4186             }
4187             (yyval.interm.typeSpecifierNonArray).initialize(EbtUImageBuffer, (yylsp[0]));
4188         }
4189         break;
4190 
4191         case 253: /* type_specifier_nonarray: ATOMICUINT  */
4192         {
4193             (yyval.interm.typeSpecifierNonArray).initialize(EbtAtomicCounter, (yylsp[0]));
4194         }
4195         break;
4196 
4197         case 254: /* type_specifier_nonarray: PIXELLOCALANGLE  */
4198         {
4199             if (!context->checkCanUseExtension((yylsp[0]),
4200                                                TExtension::ANGLE_shader_pixel_local_storage))
4201             {
4202                 context->error((yylsp[0]), "unsupported type", "__pixelLocalANGLE");
4203             }
4204             (yyval.interm.typeSpecifierNonArray).initialize(EbtPixelLocalANGLE, (yylsp[0]));
4205         }
4206         break;
4207 
4208         case 255: /* type_specifier_nonarray: IPIXELLOCALANGLE  */
4209         {
4210             if (!context->checkCanUseExtension((yylsp[0]),
4211                                                TExtension::ANGLE_shader_pixel_local_storage))
4212             {
4213                 context->error((yylsp[0]), "unsupported type", "__ipixelLocalANGLE");
4214             }
4215             (yyval.interm.typeSpecifierNonArray).initialize(EbtIPixelLocalANGLE, (yylsp[0]));
4216         }
4217         break;
4218 
4219         case 256: /* type_specifier_nonarray: UPIXELLOCALANGLE  */
4220         {
4221             if (!context->checkCanUseExtension((yylsp[0]),
4222                                                TExtension::ANGLE_shader_pixel_local_storage))
4223             {
4224                 context->error((yylsp[0]), "unsupported type", "__upixelLocalANGLE");
4225             }
4226             (yyval.interm.typeSpecifierNonArray).initialize(EbtUPixelLocalANGLE, (yylsp[0]));
4227         }
4228         break;
4229 
4230         case 257: /* type_specifier_nonarray: struct_specifier  */
4231         {
4232             (yyval.interm.typeSpecifierNonArray) = (yyvsp[0].interm.typeSpecifierNonArray);
4233         }
4234         break;
4235 
4236         case 258: /* type_specifier_nonarray: TYPE_NAME  */
4237         {
4238             // This is for user defined type names. The lexical phase looked up the type.
4239             const TStructure *structure = static_cast<const TStructure *>((yyvsp[0].lex).symbol);
4240             (yyval.interm.typeSpecifierNonArray).initializeStruct(structure, false, (yylsp[0]));
4241         }
4242         break;
4243 
4244         case 259: /* $@1: %empty  */
4245         {
4246             context->enterStructDeclaration((yylsp[-1]), ImmutableString((yyvsp[-1].lex).string));
4247         }
4248         break;
4249 
4250         case 260: /* struct_specifier: STRUCT identifier LEFT_BRACE $@1 struct_declaration_list
4251                      RIGHT_BRACE  */
4252         {
4253             (yyval.interm.typeSpecifierNonArray) = context->addStructure(
4254                 (yylsp[-5]), (yylsp[-4]), ImmutableString((yyvsp[-4].lex).string),
4255                 (yyvsp[-1].interm.fieldList));
4256         }
4257         break;
4258 
4259         case 261: /* $@2: %empty  */
4260         {
4261             context->enterStructDeclaration((yylsp[0]), kEmptyImmutableString);
4262         }
4263         break;
4264 
4265         case 262: /* struct_specifier: STRUCT LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
4266         {
4267             (yyval.interm.typeSpecifierNonArray) = context->addStructure(
4268                 (yylsp[-4]), (yyloc), kEmptyImmutableString, (yyvsp[-1].interm.fieldList));
4269         }
4270         break;
4271 
4272         case 263: /* struct_declaration_list: struct_declaration  */
4273         {
4274             (yyval.interm.fieldList) =
4275                 context->addStructFieldList((yyvsp[0].interm.fieldList), (yylsp[0]));
4276         }
4277         break;
4278 
4279         case 264: /* struct_declaration_list: struct_declaration_list struct_declaration  */
4280         {
4281             (yyval.interm.fieldList) = context->combineStructFieldLists(
4282                 (yyvsp[-1].interm.fieldList), (yyvsp[0].interm.fieldList), (yylsp[0]));
4283         }
4284         break;
4285 
4286         case 265: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
4287         {
4288             (yyval.interm.fieldList) = context->addStructDeclaratorList(
4289                 (yyvsp[-2].interm.type), (yyvsp[-1].interm.declaratorList));
4290         }
4291         break;
4292 
4293         case 266: /* struct_declaration: type_qualifier type_specifier struct_declarator_list
4294                      SEMICOLON  */
4295         {
4296             // ES3 Only, but errors should be handled elsewhere
4297             (yyval.interm.fieldList) = context->addStructDeclaratorListWithQualifiers(
4298                 *(yyvsp[-3].interm.typeQualifierBuilder), &(yyvsp[-2].interm.type),
4299                 (yyvsp[-1].interm.declaratorList));
4300         }
4301         break;
4302 
4303         case 267: /* struct_declarator_list: struct_declarator  */
4304         {
4305             (yyval.interm.declaratorList) = new TDeclaratorList();
4306             (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
4307         }
4308         break;
4309 
4310         case 268: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
4311         {
4312             (yyval.interm.declaratorList)->push_back((yyvsp[0].interm.declarator));
4313         }
4314         break;
4315 
4316         case 269: /* struct_declarator: identifier  */
4317         {
4318             (yyval.interm.declarator) =
4319                 context->parseStructDeclarator(ImmutableString((yyvsp[0].lex).string), (yylsp[0]));
4320         }
4321         break;
4322 
4323         case 270: /* struct_declarator: identifier array_specifier  */
4324         {
4325             (yyval.interm.declarator) = context->parseStructArrayDeclarator(
4326                 ImmutableString((yyvsp[-1].lex).string), (yylsp[-1]), (yyvsp[0].interm.arraySizes));
4327         }
4328         break;
4329 
4330         case 271: /* initializer: assignment_expression  */
4331         {
4332             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
4333         }
4334         break;
4335 
4336         case 272: /* declaration_statement: declaration  */
4337         {
4338             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4339         }
4340         break;
4341 
4342         case 273: /* statement: compound_statement_with_scope  */
4343         {
4344             (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4345         }
4346         break;
4347 
4348         case 274: /* statement: simple_statement  */
4349         {
4350             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4351         }
4352         break;
4353 
4354         case 275: /* simple_statement: declaration_statement  */
4355         {
4356             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4357         }
4358         break;
4359 
4360         case 276: /* simple_statement: expression_statement  */
4361         {
4362             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4363         }
4364         break;
4365 
4366         case 277: /* simple_statement: selection_statement  */
4367         {
4368             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4369         }
4370         break;
4371 
4372         case 278: /* simple_statement: switch_statement  */
4373         {
4374             (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch);
4375         }
4376         break;
4377 
4378         case 279: /* simple_statement: case_label  */
4379         {
4380             (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase);
4381         }
4382         break;
4383 
4384         case 280: /* simple_statement: iteration_statement  */
4385         {
4386             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4387         }
4388         break;
4389 
4390         case 281: /* simple_statement: jump_statement  */
4391         {
4392             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4393         }
4394         break;
4395 
4396         case 282: /* compound_statement_with_scope: LEFT_BRACE RIGHT_BRACE  */
4397         {
4398             (yyval.interm.intermBlock) = new TIntermBlock();
4399             (yyval.interm.intermBlock)->setLine((yyloc));
4400         }
4401         break;
4402 
4403         case 283: /* $@3: %empty  */
4404         {
4405             context->symbolTable.push();
4406         }
4407         break;
4408 
4409         case 284: /* $@4: %empty  */
4410         {
4411             context->symbolTable.pop();
4412         }
4413         break;
4414 
4415         case 285: /* compound_statement_with_scope: LEFT_BRACE $@3 statement_list $@4 RIGHT_BRACE */
4416         {
4417             (yyvsp[-2].interm.intermBlock)->setLine((yyloc));
4418             (yyval.interm.intermBlock) = (yyvsp[-2].interm.intermBlock);
4419         }
4420         break;
4421 
4422         case 286: /* statement_no_new_scope: compound_statement_no_new_scope  */
4423         {
4424             (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4425         }
4426         break;
4427 
4428         case 287: /* statement_no_new_scope: simple_statement  */
4429         {
4430             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4431         }
4432         break;
4433 
4434         case 288: /* $@5: %empty  */
4435         {
4436             context->symbolTable.push();
4437         }
4438         break;
4439 
4440         case 289: /* statement_with_scope: $@5 compound_statement_no_new_scope  */
4441         {
4442             context->symbolTable.pop();
4443             (yyval.interm.intermNode) = (yyvsp[0].interm.intermBlock);
4444         }
4445         break;
4446 
4447         case 290: /* $@6: %empty  */
4448         {
4449             context->symbolTable.push();
4450         }
4451         break;
4452 
4453         case 291: /* statement_with_scope: $@6 simple_statement  */
4454         {
4455             context->symbolTable.pop();
4456             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4457         }
4458         break;
4459 
4460         case 292: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
4461         {
4462             (yyval.interm.intermBlock) = new TIntermBlock();
4463             (yyval.interm.intermBlock)->setLine((yyloc));
4464         }
4465         break;
4466 
4467         case 293: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
4468         {
4469             (yyvsp[-1].interm.intermBlock)->setLine((yyloc));
4470             (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
4471         }
4472         break;
4473 
4474         case 294: /* statement_list: statement  */
4475         {
4476             (yyval.interm.intermBlock) = new TIntermBlock();
4477             context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
4478         }
4479         break;
4480 
4481         case 295: /* statement_list: statement_list statement  */
4482         {
4483             (yyval.interm.intermBlock) = (yyvsp[-1].interm.intermBlock);
4484             context->appendStatement((yyval.interm.intermBlock), (yyvsp[0].interm.intermNode));
4485         }
4486         break;
4487 
4488         case 296: /* expression_statement: SEMICOLON  */
4489         {
4490             (yyval.interm.intermNode) = context->addEmptyStatement((yyloc));
4491         }
4492         break;
4493 
4494         case 297: /* expression_statement: expression SEMICOLON  */
4495         {
4496             (yyval.interm.intermNode) = (yyvsp[-1].interm.intermTypedNode);
4497         }
4498         break;
4499 
4500         case 298: /* selection_statement: IF LEFT_PAREN expression RIGHT_PAREN
4501                      selection_rest_statement  */
4502         {
4503             (yyval.interm.intermNode) = context->addIfElse((yyvsp[-2].interm.intermTypedNode),
4504                                                            (yyvsp[0].interm.nodePair), (yylsp[-4]));
4505         }
4506         break;
4507 
4508         case 299: /* selection_rest_statement: statement_with_scope ELSE statement_with_scope  */
4509         {
4510             (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
4511             (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
4512         }
4513         break;
4514 
4515         case 300: /* selection_rest_statement: statement_with_scope  */
4516         {
4517             (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
4518             (yyval.interm.nodePair).node2 = nullptr;
4519         }
4520         break;
4521 
4522         case 301: /* $@7: %empty  */
4523         {
4524             context->incrSwitchNestingLevel((yylsp[-3]));
4525         }
4526         break;
4527 
4528         case 302: /* switch_statement: SWITCH LEFT_PAREN expression RIGHT_PAREN $@7
4529                      compound_statement_with_scope  */
4530         {
4531             (yyval.interm.intermSwitch) = context->addSwitch(
4532                 (yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermBlock), (yylsp[-5]));
4533             context->decrSwitchNestingLevel();
4534         }
4535         break;
4536 
4537         case 303: /* case_label: CASE constant_expression COLON  */
4538         {
4539             (yyval.interm.intermCase) =
4540                 context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
4541         }
4542         break;
4543 
4544         case 304: /* case_label: DEFAULT COLON  */
4545         {
4546             (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
4547         }
4548         break;
4549 
4550         case 305: /* condition: expression  */
4551         {
4552             (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
4553             context->checkIsScalarBool((yyvsp[0].interm.intermTypedNode)->getLine(),
4554                                        (yyvsp[0].interm.intermTypedNode));
4555         }
4556         break;
4557 
4558         case 306: /* condition: fully_specified_type identifier EQUAL initializer  */
4559         {
4560             (yyval.interm.intermNode) = context->addConditionInitializer(
4561                 (yyvsp[-3].interm.type), ImmutableString((yyvsp[-2].lex).string),
4562                 (yyvsp[0].interm.intermTypedNode), (yylsp[-2]));
4563         }
4564         break;
4565 
4566         case 307: /* $@8: %empty  */
4567         {
4568             context->symbolTable.push();
4569             context->incrLoopNestingLevel((yylsp[-1]));
4570         }
4571         break;
4572 
4573         case 308: /* iteration_statement: WHILE LEFT_PAREN $@8 condition RIGHT_PAREN
4574                      statement_no_new_scope  */
4575         {
4576             context->symbolTable.pop();
4577             (yyval.interm.intermNode) =
4578                 context->addLoop(ELoopWhile, 0, (yyvsp[-2].interm.intermNode), 0,
4579                                  (yyvsp[0].interm.intermNode), (yylsp[-5]));
4580             context->decrLoopNestingLevel();
4581         }
4582         break;
4583 
4584         case 309: /* $@9: %empty  */
4585         {
4586             context->incrLoopNestingLevel((yylsp[0]));
4587         }
4588         break;
4589 
4590         case 310: /* iteration_statement: DO $@9 statement_with_scope WHILE LEFT_PAREN expression
4591                      RIGHT_PAREN SEMICOLON  */
4592         {
4593             (yyval.interm.intermNode) =
4594                 context->addLoop(ELoopDoWhile, 0, (yyvsp[-2].interm.intermTypedNode), 0,
4595                                  (yyvsp[-5].interm.intermNode), (yylsp[-4]));
4596             context->decrLoopNestingLevel();
4597         }
4598         break;
4599 
4600         case 311: /* $@10: %empty  */
4601         {
4602             context->symbolTable.push();
4603             context->incrLoopNestingLevel((yylsp[-1]));
4604         }
4605         break;
4606 
4607         case 312: /* iteration_statement: FOR LEFT_PAREN $@10 for_init_statement for_rest_statement
4608                      RIGHT_PAREN statement_no_new_scope  */
4609         {
4610             context->symbolTable.pop();
4611             (yyval.interm.intermNode) = context->addLoop(
4612                 ELoopFor, (yyvsp[-3].interm.intermNode), (yyvsp[-2].interm.nodePair).node1,
4613                 reinterpret_cast<TIntermTyped *>((yyvsp[-2].interm.nodePair).node2),
4614                 (yyvsp[0].interm.intermNode), (yylsp[-6]));
4615             context->decrLoopNestingLevel();
4616         }
4617         break;
4618 
4619         case 313: /* for_init_statement: expression_statement  */
4620         {
4621             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4622         }
4623         break;
4624 
4625         case 314: /* for_init_statement: declaration_statement  */
4626         {
4627             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4628         }
4629         break;
4630 
4631         case 315: /* conditionopt: condition  */
4632         {
4633             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4634         }
4635         break;
4636 
4637         case 316: /* conditionopt: %empty  */
4638         {
4639             (yyval.interm.intermNode) = nullptr;
4640         }
4641         break;
4642 
4643         case 317: /* for_rest_statement: conditionopt SEMICOLON  */
4644         {
4645             (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermNode);
4646             (yyval.interm.nodePair).node2 = 0;
4647         }
4648         break;
4649 
4650         case 318: /* for_rest_statement: conditionopt SEMICOLON expression  */
4651         {
4652             (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
4653             (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
4654         }
4655         break;
4656 
4657         case 319: /* jump_statement: CONTINUE SEMICOLON  */
4658         {
4659             (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
4660         }
4661         break;
4662 
4663         case 320: /* jump_statement: BREAK SEMICOLON  */
4664         {
4665             (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
4666         }
4667         break;
4668 
4669         case 321: /* jump_statement: RETURN SEMICOLON  */
4670         {
4671             (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
4672         }
4673         break;
4674 
4675         case 322: /* jump_statement: RETURN expression SEMICOLON  */
4676         {
4677             (yyval.interm.intermNode) =
4678                 context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
4679         }
4680         break;
4681 
4682         case 323: /* jump_statement: DISCARD SEMICOLON  */
4683         {
4684             (yyval.interm.intermNode) = context->addBranch(EOpKill, (yylsp[-1]));
4685         }
4686         break;
4687 
4688         case 324: /* translation_unit: external_declaration  */
4689         {
4690             (yyval.interm.intermBlock) = new TIntermBlock();
4691             (yyval.interm.intermBlock)->setLine((yyloc));
4692             (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
4693             context->setTreeRoot((yyval.interm.intermBlock));
4694         }
4695         break;
4696 
4697         case 325: /* translation_unit: translation_unit external_declaration  */
4698         {
4699             (yyval.interm.intermBlock)->appendStatement((yyvsp[0].interm.intermNode));
4700         }
4701         break;
4702 
4703         case 326: /* external_declaration: function_definition  */
4704         {
4705             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4706         }
4707         break;
4708 
4709         case 327: /* external_declaration: declaration  */
4710         {
4711             (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
4712         }
4713         break;
4714 
4715         case 328: /* $@11: %empty  */
4716         {
4717             context->parseFunctionDefinitionHeader((yylsp[0]), (yyvsp[0].interm).function,
4718                                                    &((yyvsp[0].interm).intermFunctionPrototype));
4719         }
4720         break;
4721 
4722         case 329: /* function_definition: function_prototype $@11 compound_statement_no_new_scope */
4723         {
4724             (yyval.interm.intermNode) =
4725                 context->addFunctionDefinition((yyvsp[-2].interm).intermFunctionPrototype,
4726                                                (yyvsp[0].interm.intermBlock), (yylsp[-2]));
4727         }
4728         break;
4729 
4730         default:
4731             break;
4732     }
4733     /* User semantic actions sometimes alter yychar, and that requires
4734        that yytoken be updated with the new translation.  We take the
4735        approach of translating immediately before every use of yytoken.
4736        One alternative is translating here after every semantic action,
4737        but that translation would be missed if the semantic action invokes
4738        YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
4739        if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
4740        incorrect destructor might then be invoked immediately.  In the
4741        case of YYERROR or YYBACKUP, subsequent parser actions might lead
4742        to an incorrect destructor call or verbose syntax error message
4743        before the lookahead is translated.  */
4744     YY_SYMBOL_PRINT("-> $$ =", YY_CAST(yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
4745 
4746     YYPOPSTACK(yylen);
4747     yylen = 0;
4748 
4749     *++yyvsp = yyval;
4750     *++yylsp = yyloc;
4751 
4752     /* Now 'shift' the result of the reduction.  Determine what state
4753        that goes to, based on the state we popped back to and the rule
4754        number reduced by.  */
4755     {
4756         const int yylhs = yyr1[yyn] - YYNTOKENS;
4757         const int yyi   = yypgoto[yylhs] + *yyssp;
4758         yystate =
4759             (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]);
4760     }
4761 
4762     goto yynewstate;
4763 
4764 /*--------------------------------------.
4765 | yyerrlab -- here on detecting error.  |
4766 `--------------------------------------*/
4767 yyerrlab:
4768     /* Make sure we have latest lookahead translation.  See comments at
4769        user semantic actions for why this is necessary.  */
4770     yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE(yychar);
4771     /* If not already recovering from an error, report this error.  */
4772     if (!yyerrstatus)
4773     {
4774         ++yynerrs;
4775         yyerror(&yylloc, context, scanner, YY_("syntax error"));
4776     }
4777 
4778     yyerror_range[1] = yylloc;
4779     if (yyerrstatus == 3)
4780     {
4781         /* If just tried and failed to reuse lookahead token after an
4782            error, discard it.  */
4783 
4784         if (yychar <= YYEOF)
4785         {
4786             /* Return failure if at end of input.  */
4787             if (yychar == YYEOF)
4788                 YYABORT;
4789         }
4790         else
4791         {
4792             yydestruct("Error: discarding", yytoken, &yylval, &yylloc, context, scanner);
4793             yychar = YYEMPTY;
4794         }
4795     }
4796 
4797     /* Else will try to reuse lookahead token after shifting the error
4798        token.  */
4799     goto yyerrlab1;
4800 
4801 /*---------------------------------------------------.
4802 | yyerrorlab -- error raised explicitly by YYERROR.  |
4803 `---------------------------------------------------*/
4804 yyerrorlab:
4805     /* Pacify compilers when the user code never invokes YYERROR and the
4806        label yyerrorlab therefore never appears in user code.  */
4807     if (0)
4808         YYERROR;
4809     ++yynerrs;
4810 
4811     /* Do not reclaim the symbols of the rule whose action triggered
4812        this YYERROR.  */
4813     YYPOPSTACK(yylen);
4814     yylen = 0;
4815     YY_STACK_PRINT(yyss, yyssp);
4816     yystate = *yyssp;
4817     goto yyerrlab1;
4818 
4819 /*-------------------------------------------------------------.
4820 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
4821 `-------------------------------------------------------------*/
4822 yyerrlab1:
4823     yyerrstatus = 3; /* Each real token shifted decrements this.  */
4824 
4825     /* Pop stack until we find a state that shifts the error token.  */
4826     for (;;)
4827     {
4828         yyn = yypact[yystate];
4829         if (!yypact_value_is_default(yyn))
4830         {
4831             yyn += YYSYMBOL_YYerror;
4832             if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
4833             {
4834                 yyn = yytable[yyn];
4835                 if (0 < yyn)
4836                     break;
4837             }
4838         }
4839 
4840         /* Pop the current state because it cannot handle the error token.  */
4841         if (yyssp == yyss)
4842             YYABORT;
4843 
4844         yyerror_range[1] = *yylsp;
4845         yydestruct("Error: popping", YY_ACCESSING_SYMBOL(yystate), yyvsp, yylsp, context, scanner);
4846         YYPOPSTACK(1);
4847         yystate = *yyssp;
4848         YY_STACK_PRINT(yyss, yyssp);
4849     }
4850 
4851     YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
4852     *++yyvsp = yylval;
4853     YY_IGNORE_MAYBE_UNINITIALIZED_END
4854 
4855     yyerror_range[2] = yylloc;
4856     ++yylsp;
4857     YYLLOC_DEFAULT(*yylsp, yyerror_range, 2);
4858 
4859     /* Shift the error token.  */
4860     YY_SYMBOL_PRINT("Shifting", YY_ACCESSING_SYMBOL(yyn), yyvsp, yylsp);
4861 
4862     yystate = yyn;
4863     goto yynewstate;
4864 
4865 /*-------------------------------------.
4866 | yyacceptlab -- YYACCEPT comes here.  |
4867 `-------------------------------------*/
4868 yyacceptlab:
4869     yyresult = 0;
4870     goto yyreturnlab;
4871 
4872 /*-----------------------------------.
4873 | yyabortlab -- YYABORT comes here.  |
4874 `-----------------------------------*/
4875 yyabortlab:
4876     yyresult = 1;
4877     goto yyreturnlab;
4878 
4879 /*-----------------------------------------------------------.
4880 | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
4881 `-----------------------------------------------------------*/
4882 yyexhaustedlab:
4883     yyerror(&yylloc, context, scanner, YY_("memory exhausted"));
4884     yyresult = 2;
4885     goto yyreturnlab;
4886 
4887 /*----------------------------------------------------------.
4888 | yyreturnlab -- parsing is finished, clean up and return.  |
4889 `----------------------------------------------------------*/
4890 yyreturnlab:
4891     if (yychar != YYEMPTY)
4892     {
4893         /* Make sure we have latest lookahead translation.  See comments at
4894            user semantic actions for why this is necessary.  */
4895         yytoken = YYTRANSLATE(yychar);
4896         yydestruct("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc, context, scanner);
4897     }
4898     /* Do not reclaim the symbols of the rule whose action triggered
4899        this YYABORT or YYACCEPT.  */
4900     YYPOPSTACK(yylen);
4901     YY_STACK_PRINT(yyss, yyssp);
4902     while (yyssp != yyss)
4903     {
4904         yydestruct("Cleanup: popping", YY_ACCESSING_SYMBOL(+*yyssp), yyvsp, yylsp, context,
4905                    scanner);
4906         YYPOPSTACK(1);
4907     }
4908 #ifndef yyoverflow
4909     if (yyss != yyssa)
4910         YYSTACK_FREE(yyss);
4911 #endif
4912 
4913     return yyresult;
4914 }
4915 
glslang_parse(TParseContext * context)4916 int glslang_parse(TParseContext *context)
4917 {
4918     return yyparse(context, context->getScanner());
4919 }
4920