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