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