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