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