1 /* A Bison parser, made by GNU Bison 2.5. */ 2 3 /* Bison implementation for Yacc-like parsers in C 4 5 Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. 6 7 This program is free software: you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 /* As a special exception, you may create a larger work that contains 21 part or all of the Bison parser skeleton and distribute that work 22 under terms of your choice, so long as that work isn't itself a 23 parser generator using the skeleton or a modified version thereof 24 as a parser skeleton. Alternatively, if you modify or redistribute 25 the parser skeleton itself, you may (at your option) remove this 26 special exception, which will cause the skeleton and the resulting 27 Bison output files to be licensed under the GNU General Public 28 License without this special exception. 29 30 This special exception was added by the Free Software Foundation in 31 version 2.2 of Bison. */ 32 33 /* C LALR(1) parser skeleton written by Richard Stallman, by 34 simplifying the original so-called "semantic" parser. */ 35 36 /* All symbols defined below should begin with yy or YY, to avoid 37 infringing on user name space. This should be done even for local 38 variables, as they might otherwise be expanded by user macros. 39 There are some unavoidable exceptions within include files to 40 define necessary library symbols; they are noted "INFRINGES ON 41 USER NAME SPACE" below. */ 42 43 /* Identify Bison output. */ 44 #define YYBISON 1 45 46 /* Bison version. */ 47 #define YYBISON_VERSION "2.5" 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 /* Using locations. */ 62 #define YYLSP_NEEDED 1 63 64 /* Substitute the variable and function names. */ 65 #define yyparse glcpp_parser_parse 66 #define yylex glcpp_parser_lex 67 #define yyerror glcpp_parser_error 68 #define yylval glcpp_parser_lval 69 #define yychar glcpp_parser_char 70 #define yydebug glcpp_parser_debug 71 #define yynerrs glcpp_parser_nerrs 72 #define yylloc glcpp_parser_lloc 73 74 /* Copy the first part of user declarations. */ 75 76 /* Line 268 of yacc.c */ 77 #line 1 "src/src/glsl/glcpp/glcpp-parse.y" 78 79 /* 80 * Copyright 2010 Intel Corporation 81 * 82 * Permission is hereby granted, free of charge, to any person obtaining a 83 * copy of this software and associated documentation files (the "Software"), 84 * to deal in the Software without restriction, including without limitation 85 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 86 * and/or sell copies of the Software, and to permit persons to whom the 87 * Software is furnished to do so, subject to the following conditions: 88 * 89 * The above copyright notice and this permission notice (including the next 90 * paragraph) shall be included in all copies or substantial portions of the 91 * Software. 92 * 93 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 94 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 95 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 96 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 97 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 98 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 99 * DEALINGS IN THE SOFTWARE. 100 */ 101 102 #include <stdio.h> 103 #include <stdlib.h> 104 #include <string.h> 105 #include <assert.h> 106 #include <inttypes.h> 107 108 #include "glcpp.h" 109 #include "main/core.h" /* for struct gl_extensions */ 110 #include "main/mtypes.h" /* for gl_api enum */ 111 112 static void 113 yyerror (YYLTYPE *locp, glcpp_parser_t *parser, const char *error); 114 115 static void 116 _define_object_macro (glcpp_parser_t *parser, 117 YYLTYPE *loc, 118 const char *macro, 119 token_list_t *replacements); 120 121 static void 122 _define_function_macro (glcpp_parser_t *parser, 123 YYLTYPE *loc, 124 const char *macro, 125 string_list_t *parameters, 126 token_list_t *replacements); 127 128 static string_list_t * 129 _string_list_create (void *ctx); 130 131 static void 132 _string_list_append_item (string_list_t *list, const char *str); 133 134 static int 135 _string_list_contains (string_list_t *list, const char *member, int *index); 136 137 static int 138 _string_list_length (string_list_t *list); 139 140 static int 141 _string_list_equal (string_list_t *a, string_list_t *b); 142 143 static argument_list_t * 144 _argument_list_create (void *ctx); 145 146 static void 147 _argument_list_append (argument_list_t *list, token_list_t *argument); 148 149 static int 150 _argument_list_length (argument_list_t *list); 151 152 static token_list_t * 153 _argument_list_member_at (argument_list_t *list, int index); 154 155 /* Note: This function ralloc_steal()s the str pointer. */ 156 static token_t * 157 _token_create_str (void *ctx, int type, char *str); 158 159 static token_t * 160 _token_create_ival (void *ctx, int type, int ival); 161 162 static token_list_t * 163 _token_list_create (void *ctx); 164 165 static void 166 _token_list_append (token_list_t *list, token_t *token); 167 168 static void 169 _token_list_append_list (token_list_t *list, token_list_t *tail); 170 171 static int 172 _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b); 173 174 static void 175 _parser_active_list_push (glcpp_parser_t *parser, 176 const char *identifier, 177 token_node_t *marker); 178 179 static void 180 _parser_active_list_pop (glcpp_parser_t *parser); 181 182 static int 183 _parser_active_list_contains (glcpp_parser_t *parser, const char *identifier); 184 185 /* Expand list, and begin lexing from the result (after first 186 * prefixing a token of type 'head_token_type'). 187 */ 188 static void 189 _glcpp_parser_expand_and_lex_from (glcpp_parser_t *parser, 190 int head_token_type, 191 token_list_t *list); 192 193 /* Perform macro expansion in-place on the given list. */ 194 static void 195 _glcpp_parser_expand_token_list (glcpp_parser_t *parser, 196 token_list_t *list); 197 198 static void 199 _glcpp_parser_print_expanded_token_list (glcpp_parser_t *parser, 200 token_list_t *list); 201 202 static void 203 _glcpp_parser_skip_stack_push_if (glcpp_parser_t *parser, YYLTYPE *loc, 204 int condition); 205 206 static void 207 _glcpp_parser_skip_stack_change_if (glcpp_parser_t *parser, YYLTYPE *loc, 208 const char *type, int condition); 209 210 static void 211 _glcpp_parser_skip_stack_pop (glcpp_parser_t *parser, YYLTYPE *loc); 212 213 static int 214 glcpp_parser_lex (YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser); 215 216 static void 217 glcpp_parser_lex_from (glcpp_parser_t *parser, token_list_t *list); 218 219 static void 220 add_builtin_define(glcpp_parser_t *parser, const char *name, int value); 221 222 223 224 /* Line 268 of yacc.c */ 225 #line 226 "src/chromium_gensrc/mesa/glcpp-parse.c" 226 227 /* Enabling traces. */ 228 #ifndef YYDEBUG 229 # define YYDEBUG 0 230 #endif 231 232 /* Enabling verbose error messages. */ 233 #ifdef YYERROR_VERBOSE 234 # undef YYERROR_VERBOSE 235 # define YYERROR_VERBOSE 1 236 #else 237 # define YYERROR_VERBOSE 1 238 #endif 239 240 /* Enabling the token table. */ 241 #ifndef YYTOKEN_TABLE 242 # define YYTOKEN_TABLE 0 243 #endif 244 245 246 /* Tokens. */ 247 #ifndef YYTOKENTYPE 248 # define YYTOKENTYPE 249 /* Put the tokens into the symbol table, so that GDB and other debuggers 250 know about them. */ 251 enum yytokentype { 252 COMMA_FINAL = 258, 253 DEFINED = 259, 254 ELIF_EXPANDED = 260, 255 HASH = 261, 256 HASH_DEFINE = 262, 257 FUNC_IDENTIFIER = 263, 258 OBJ_IDENTIFIER = 264, 259 HASH_ELIF = 265, 260 HASH_ELSE = 266, 261 HASH_ENDIF = 267, 262 HASH_IF = 268, 263 HASH_IFDEF = 269, 264 HASH_IFNDEF = 270, 265 HASH_LINE = 271, 266 HASH_UNDEF = 272, 267 HASH_VERSION = 273, 268 IDENTIFIER = 274, 269 IF_EXPANDED = 275, 270 INTEGER = 276, 271 INTEGER_STRING = 277, 272 LINE_EXPANDED = 278, 273 NEWLINE = 279, 274 OTHER = 280, 275 PLACEHOLDER = 281, 276 SPACE = 282, 277 PASTE = 283, 278 OR = 284, 279 AND = 285, 280 NOT_EQUAL = 286, 281 EQUAL = 287, 282 GREATER_OR_EQUAL = 288, 283 LESS_OR_EQUAL = 289, 284 RIGHT_SHIFT = 290, 285 LEFT_SHIFT = 291, 286 UNARY = 292 287 }; 288 #endif 289 /* Tokens. */ 290 #define COMMA_FINAL 258 291 #define DEFINED 259 292 #define ELIF_EXPANDED 260 293 #define HASH 261 294 #define HASH_DEFINE 262 295 #define FUNC_IDENTIFIER 263 296 #define OBJ_IDENTIFIER 264 297 #define HASH_ELIF 265 298 #define HASH_ELSE 266 299 #define HASH_ENDIF 267 300 #define HASH_IF 268 301 #define HASH_IFDEF 269 302 #define HASH_IFNDEF 270 303 #define HASH_LINE 271 304 #define HASH_UNDEF 272 305 #define HASH_VERSION 273 306 #define IDENTIFIER 274 307 #define IF_EXPANDED 275 308 #define INTEGER 276 309 #define INTEGER_STRING 277 310 #define LINE_EXPANDED 278 311 #define NEWLINE 279 312 #define OTHER 280 313 #define PLACEHOLDER 281 314 #define SPACE 282 315 #define PASTE 283 316 #define OR 284 317 #define AND 285 318 #define NOT_EQUAL 286 319 #define EQUAL 287 320 #define GREATER_OR_EQUAL 288 321 #define LESS_OR_EQUAL 289 322 #define RIGHT_SHIFT 290 323 #define LEFT_SHIFT 291 324 #define UNARY 292 325 326 327 328 329 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 330 331 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 332 # define YYSTYPE_IS_DECLARED 1 333 #endif 334 335 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED 336 typedef struct YYLTYPE 337 { 338 int first_line; 339 int first_column; 340 int last_line; 341 int last_column; 342 } YYLTYPE; 343 # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ 344 # define YYLTYPE_IS_DECLARED 1 345 # define YYLTYPE_IS_TRIVIAL 1 346 #endif 347 348 349 /* Copy the second part of user declarations. */ 350 351 352 /* Line 343 of yacc.c */ 353 #line 354 "src/chromium_gensrc/mesa/glcpp-parse.c" 354 355 #ifdef short 356 # undef short 357 #endif 358 359 #ifdef YYTYPE_UINT8 360 typedef YYTYPE_UINT8 yytype_uint8; 361 #else 362 typedef unsigned char yytype_uint8; 363 #endif 364 365 #ifdef YYTYPE_INT8 366 typedef YYTYPE_INT8 yytype_int8; 367 #elif (defined __STDC__ || defined __C99__FUNC__ \ 368 || defined __cplusplus || defined _MSC_VER) 369 typedef signed char yytype_int8; 370 #else 371 typedef short int yytype_int8; 372 #endif 373 374 #ifdef YYTYPE_UINT16 375 typedef YYTYPE_UINT16 yytype_uint16; 376 #else 377 typedef unsigned short int yytype_uint16; 378 #endif 379 380 #ifdef YYTYPE_INT16 381 typedef YYTYPE_INT16 yytype_int16; 382 #else 383 typedef short int yytype_int16; 384 #endif 385 386 #ifndef YYSIZE_T 387 # ifdef __SIZE_TYPE__ 388 # define YYSIZE_T __SIZE_TYPE__ 389 # elif defined size_t 390 # define YYSIZE_T size_t 391 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 392 || defined __cplusplus || defined _MSC_VER) 393 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 394 # define YYSIZE_T size_t 395 # else 396 # define YYSIZE_T unsigned int 397 # endif 398 #endif 399 400 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 401 402 #ifndef YY_ 403 # if defined YYENABLE_NLS && YYENABLE_NLS 404 # if ENABLE_NLS 405 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 406 # define YY_(msgid) dgettext ("bison-runtime", msgid) 407 # endif 408 # endif 409 # ifndef YY_ 410 # define YY_(msgid) msgid 411 # endif 412 #endif 413 414 /* Suppress unused-variable warnings by "using" E. */ 415 #if ! defined lint || defined __GNUC__ 416 # define YYUSE(e) ((void) (e)) 417 #else 418 # define YYUSE(e) /* empty */ 419 #endif 420 421 /* Identity function, used to suppress warnings about constant conditions. */ 422 #ifndef lint 423 # define YYID(n) (n) 424 #else 425 #if (defined __STDC__ || defined __C99__FUNC__ \ 426 || defined __cplusplus || defined _MSC_VER) 427 static int 428 YYID (int yyi) 429 #else 430 static int 431 YYID (yyi) 432 int yyi; 433 #endif 434 { 435 return yyi; 436 } 437 #endif 438 439 #if ! defined yyoverflow || YYERROR_VERBOSE 440 441 /* The parser invokes alloca or malloc; define the necessary symbols. */ 442 443 # ifdef YYSTACK_USE_ALLOCA 444 # if YYSTACK_USE_ALLOCA 445 # ifdef __GNUC__ 446 # define YYSTACK_ALLOC __builtin_alloca 447 # elif defined __BUILTIN_VA_ARG_INCR 448 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 449 # elif defined _AIX 450 # define YYSTACK_ALLOC __alloca 451 # elif defined _MSC_VER 452 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 453 # define alloca _alloca 454 # else 455 # define YYSTACK_ALLOC alloca 456 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 457 || defined __cplusplus || defined _MSC_VER) 458 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 459 # ifndef EXIT_SUCCESS 460 # define EXIT_SUCCESS 0 461 # endif 462 # endif 463 # endif 464 # endif 465 # endif 466 467 # ifdef YYSTACK_ALLOC 468 /* Pacify GCC's `empty if-body' warning. */ 469 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 470 # ifndef YYSTACK_ALLOC_MAXIMUM 471 /* The OS might guarantee only one guard page at the bottom of the stack, 472 and a page size can be as small as 4096 bytes. So we cannot safely 473 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 474 to allow for a few compiler-allocated temporary stack slots. */ 475 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 476 # endif 477 # else 478 # define YYSTACK_ALLOC YYMALLOC 479 # define YYSTACK_FREE YYFREE 480 # ifndef YYSTACK_ALLOC_MAXIMUM 481 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 482 # endif 483 # if (defined __cplusplus && ! defined EXIT_SUCCESS \ 484 && ! ((defined YYMALLOC || defined malloc) \ 485 && (defined YYFREE || defined free))) 486 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 487 # ifndef EXIT_SUCCESS 488 # define EXIT_SUCCESS 0 489 # endif 490 # endif 491 # ifndef YYMALLOC 492 # define YYMALLOC malloc 493 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 494 || defined __cplusplus || defined _MSC_VER) 495 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 496 # endif 497 # endif 498 # ifndef YYFREE 499 # define YYFREE free 500 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 501 || defined __cplusplus || defined _MSC_VER) 502 void free (void *); /* INFRINGES ON USER NAME SPACE */ 503 # endif 504 # endif 505 # endif 506 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 507 508 509 #if (! defined yyoverflow \ 510 && (! defined __cplusplus \ 511 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ 512 && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 513 514 /* A type that is properly aligned for any stack member. */ 515 union yyalloc 516 { 517 yytype_int16 yyss_alloc; 518 YYSTYPE yyvs_alloc; 519 YYLTYPE yyls_alloc; 520 }; 521 522 /* The size of the maximum gap between one aligned stack and the next. */ 523 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 524 525 /* The size of an array large to enough to hold all stacks, each with 526 N elements. */ 527 # define YYSTACK_BYTES(N) \ 528 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ 529 + 2 * YYSTACK_GAP_MAXIMUM) 530 531 # define YYCOPY_NEEDED 1 532 533 /* Relocate STACK from its old location to the new one. The 534 local variables YYSIZE and YYSTACKSIZE give the old and new number of 535 elements in the stack, and YYPTR gives the new location of the 536 stack. Advance YYPTR to a properly aligned location for the next 537 stack. */ 538 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 539 do \ 540 { \ 541 YYSIZE_T yynewbytes; \ 542 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 543 Stack = &yyptr->Stack_alloc; \ 544 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 545 yyptr += yynewbytes / sizeof (*yyptr); \ 546 } \ 547 while (YYID (0)) 548 549 #endif 550 551 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED 552 /* Copy COUNT objects from FROM to TO. The source and destination do 553 not overlap. */ 554 # ifndef YYCOPY 555 # if defined __GNUC__ && 1 < __GNUC__ 556 # define YYCOPY(To, From, Count) \ 557 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 558 # else 559 # define YYCOPY(To, From, Count) \ 560 do \ 561 { \ 562 YYSIZE_T yyi; \ 563 for (yyi = 0; yyi < (Count); yyi++) \ 564 (To)[yyi] = (From)[yyi]; \ 565 } \ 566 while (YYID (0)) 567 # endif 568 # endif 569 #endif /* !YYCOPY_NEEDED */ 570 571 /* YYFINAL -- State number of the termination state. */ 572 #define YYFINAL 2 573 /* YYLAST -- Last index in YYTABLE. */ 574 #define YYLAST 670 575 576 /* YYNTOKENS -- Number of terminals. */ 577 #define YYNTOKENS 60 578 /* YYNNTS -- Number of nonterminals. */ 579 #define YYNNTS 19 580 /* YYNRULES -- Number of rules. */ 581 #define YYNRULES 107 582 /* YYNRULES -- Number of states. */ 583 #define YYNSTATES 172 584 585 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 586 #define YYUNDEFTOK 2 587 #define YYMAXUTOK 292 588 589 #define YYTRANSLATE(YYX) \ 590 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 591 592 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 593 static const yytype_uint8 yytranslate[] = 594 { 595 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 596 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 597 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 598 2, 2, 2, 50, 2, 2, 2, 46, 33, 2, 599 48, 49, 44, 42, 52, 43, 57, 45, 2, 2, 600 2, 2, 2, 2, 2, 2, 2, 2, 2, 58, 601 36, 59, 37, 2, 2, 2, 2, 2, 2, 2, 602 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 603 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 604 2, 53, 2, 54, 32, 2, 2, 2, 2, 2, 605 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 606 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 607 2, 2, 2, 55, 31, 56, 51, 2, 2, 2, 608 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 609 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 610 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 611 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 612 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 613 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 614 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 615 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 616 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 617 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 618 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 619 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 620 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 621 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 622 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 623 25, 26, 27, 28, 29, 30, 34, 35, 38, 39, 624 40, 41, 47 625 }; 626 627 #if YYDEBUG 628 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 629 YYRHS. */ 630 static const yytype_uint16 yyprhs[] = 631 { 632 0, 0, 3, 4, 7, 9, 11, 13, 16, 20, 633 24, 28, 33, 38, 45, 53, 57, 61, 65, 68, 634 73, 78, 82, 85, 86, 90, 91, 95, 99, 102, 635 104, 106, 108, 110, 114, 118, 122, 126, 130, 134, 636 138, 142, 146, 150, 154, 158, 162, 166, 170, 174, 637 178, 182, 185, 188, 191, 194, 198, 200, 204, 206, 638 209, 212, 213, 215, 216, 218, 221, 226, 228, 230, 639 233, 235, 238, 240, 242, 244, 246, 248, 250, 252, 640 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 641 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 642 294, 296, 298, 300, 302, 304, 306, 308 643 }; 644 645 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 646 static const yytype_int8 yyrhs[] = 647 { 648 61, 0, -1, -1, 61, 62, -1, 64, -1, 70, 649 -1, 63, -1, 6, 71, -1, 20, 68, 24, -1, 650 5, 68, 24, -1, 23, 67, 24, -1, 23, 67, 651 67, 24, -1, 7, 9, 72, 24, -1, 7, 8, 652 48, 49, 72, 24, -1, 7, 8, 48, 69, 49, 653 72, 24, -1, 17, 19, 24, -1, 16, 76, 24, 654 -1, 13, 75, 24, -1, 13, 24, -1, 14, 19, 655 73, 24, -1, 15, 19, 73, 24, -1, 10, 75, 656 24, -1, 10, 24, -1, -1, 11, 65, 24, -1, 657 -1, 12, 66, 24, -1, 18, 67, 24, -1, 6, 658 24, -1, 22, -1, 21, -1, 67, -1, 19, -1, 659 68, 29, 68, -1, 68, 30, 68, -1, 68, 31, 660 68, -1, 68, 32, 68, -1, 68, 33, 68, -1, 661 68, 34, 68, -1, 68, 35, 68, -1, 68, 38, 662 68, -1, 68, 39, 68, -1, 68, 37, 68, -1, 663 68, 36, 68, -1, 68, 40, 68, -1, 68, 41, 664 68, -1, 68, 43, 68, -1, 68, 42, 68, -1, 665 68, 46, 68, -1, 68, 45, 68, -1, 68, 44, 666 68, -1, 50, 68, -1, 51, 68, -1, 43, 68, 667 -1, 42, 68, -1, 48, 68, 49, -1, 19, -1, 668 69, 52, 19, -1, 24, -1, 76, 24, -1, 76, 669 24, -1, -1, 76, -1, -1, 76, -1, 4, 19, 670 -1, 4, 48, 19, 49, -1, 77, -1, 74, -1, 671 75, 74, -1, 77, -1, 76, 77, -1, 19, -1, 672 22, -1, 78, -1, 25, -1, 27, -1, 53, -1, 673 54, -1, 48, -1, 49, -1, 55, -1, 56, -1, 674 57, -1, 33, -1, 44, -1, 42, -1, 43, -1, 675 51, -1, 50, -1, 45, -1, 46, -1, 41, -1, 676 40, -1, 36, -1, 37, -1, 39, -1, 38, -1, 677 35, -1, 34, -1, 32, -1, 31, -1, 30, -1, 678 29, -1, 58, -1, 52, -1, 59, -1, 28, -1 679 }; 680 681 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 682 static const yytype_uint16 yyrline[] = 683 { 684 0, 184, 184, 186, 190, 193, 198, 199, 203, 206, 685 209, 217, 230, 233, 236, 239, 247, 255, 275, 285, 686 290, 295, 315, 330, 330, 333, 333, 336, 357, 361, 687 370, 375, 376, 379, 382, 385, 388, 391, 394, 397, 688 400, 403, 406, 409, 412, 415, 418, 421, 424, 432, 689 440, 443, 446, 449, 452, 455, 461, 466, 474, 475, 690 479, 485, 486, 489, 491, 498, 502, 506, 511, 515, 691 522, 527, 534, 538, 542, 546, 550, 557, 558, 559, 692 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 693 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 694 580, 581, 582, 583, 584, 585, 586, 587 695 }; 696 #endif 697 698 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 699 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 700 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 701 static const char *const yytname[] = 702 { 703 "$end", "error", "$undefined", "COMMA_FINAL", "DEFINED", 704 "ELIF_EXPANDED", "HASH", "HASH_DEFINE", "FUNC_IDENTIFIER", 705 "OBJ_IDENTIFIER", "HASH_ELIF", "HASH_ELSE", "HASH_ENDIF", "HASH_IF", 706 "HASH_IFDEF", "HASH_IFNDEF", "HASH_LINE", "HASH_UNDEF", "HASH_VERSION", 707 "IDENTIFIER", "IF_EXPANDED", "INTEGER", "INTEGER_STRING", 708 "LINE_EXPANDED", "NEWLINE", "OTHER", "PLACEHOLDER", "SPACE", "PASTE", 709 "OR", "AND", "'|'", "'^'", "'&'", "NOT_EQUAL", "EQUAL", "'<'", "'>'", 710 "GREATER_OR_EQUAL", "LESS_OR_EQUAL", "RIGHT_SHIFT", "LEFT_SHIFT", "'+'", 711 "'-'", "'*'", "'/'", "'%'", "UNARY", "'('", "')'", "'!'", "'~'", "','", 712 "'['", "']'", "'{'", "'}'", "'.'", "';'", "'='", "$accept", "input", 713 "line", "expanded_line", "control_line", "$@1", "$@2", 714 "integer_constant", "expression", "identifier_list", "text_line", 715 "non_directive", "replacement_list", "junk", "conditional_token", 716 "conditional_tokens", "pp_tokens", "preprocessing_token", "operator", 0 717 }; 718 #endif 719 720 # ifdef YYPRINT 721 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 722 token YYLEX-NUM. */ 723 static const yytype_uint16 yytoknum[] = 724 { 725 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 726 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 727 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 728 285, 124, 94, 38, 286, 287, 60, 62, 288, 289, 729 290, 291, 43, 45, 42, 47, 37, 292, 40, 41, 730 33, 126, 44, 91, 93, 123, 125, 46, 59, 61 731 }; 732 # endif 733 734 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 735 static const yytype_uint8 yyr1[] = 736 { 737 0, 60, 61, 61, 62, 62, 62, 62, 63, 63, 738 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 739 64, 64, 64, 65, 64, 66, 64, 64, 64, 67, 740 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 741 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 742 68, 68, 68, 68, 68, 68, 69, 69, 70, 70, 743 71, 72, 72, 73, 73, 74, 74, 74, 75, 75, 744 76, 76, 77, 77, 77, 77, 77, 78, 78, 78, 745 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 746 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 747 78, 78, 78, 78, 78, 78, 78, 78 748 }; 749 750 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 751 static const yytype_uint8 yyr2[] = 752 { 753 0, 2, 0, 2, 1, 1, 1, 2, 3, 3, 754 3, 4, 4, 6, 7, 3, 3, 3, 2, 4, 755 4, 3, 2, 0, 3, 0, 3, 3, 2, 1, 756 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 757 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 758 3, 2, 2, 2, 2, 3, 1, 3, 1, 2, 759 2, 0, 1, 0, 1, 2, 4, 1, 1, 2, 760 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 761 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 762 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 763 1, 1, 1, 1, 1, 1, 1, 1 764 }; 765 766 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. 767 Performed when YYTABLE doesn't specify something else to do. Zero 768 means the default is an error. */ 769 static const yytype_uint8 yydefact[] = 770 { 771 2, 0, 1, 0, 0, 0, 0, 23, 25, 0, 772 0, 0, 0, 0, 0, 72, 0, 73, 0, 58, 773 75, 76, 107, 103, 102, 101, 100, 84, 99, 98, 774 94, 95, 97, 96, 93, 92, 86, 87, 85, 90, 775 91, 79, 80, 89, 88, 105, 77, 78, 81, 82, 776 83, 104, 106, 3, 6, 4, 5, 0, 70, 74, 777 32, 30, 29, 0, 0, 0, 0, 0, 31, 0, 778 28, 7, 0, 0, 61, 0, 22, 68, 0, 67, 779 0, 0, 18, 0, 63, 63, 0, 0, 0, 0, 780 0, 59, 71, 54, 53, 0, 51, 52, 9, 0, 781 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 782 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 783 62, 65, 0, 21, 69, 24, 26, 17, 0, 64, 784 0, 16, 15, 27, 8, 10, 0, 55, 33, 34, 785 35, 36, 37, 38, 39, 43, 42, 40, 41, 44, 786 45, 47, 46, 50, 49, 48, 56, 61, 0, 12, 787 0, 19, 20, 11, 0, 61, 0, 66, 13, 0, 788 57, 14 789 }; 790 791 /* YYDEFGOTO[NTERM-NUM]. */ 792 static const yytype_int16 yydefgoto[] = 793 { 794 -1, 1, 53, 54, 55, 80, 81, 68, 69, 158, 795 56, 71, 119, 128, 77, 78, 120, 58, 59 796 }; 797 798 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 799 STATE-NUM. */ 800 #define YYPACT_NINF -149 801 static const yytype_int16 yypact[] = 802 { 803 -149, 115, -149, 492, -9, 103, 158, -149, -149, 201, 804 -5, 48, 451, 50, 95, -149, 492, -149, 95, -149, 805 -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 806 -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 807 -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, 808 -149, -149, -149, -149, -149, -149, -149, 328, -149, -149, 809 -149, -149, -149, 492, 492, 492, 492, 492, -149, 515, 810 -149, -149, 369, 23, 451, 38, -149, -149, 244, -149, 811 -17, 51, -149, 287, 451, 451, 410, 55, 63, 538, 812 52, -149, -149, -149, -149, 487, -149, -149, -149, 492, 813 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 814 492, 492, 492, 492, 492, 492, 492, -149, 19, 89, 815 451, -149, 99, -149, -149, -149, -149, -149, 100, 451, 816 112, -149, -149, -149, -149, -149, 117, -149, 555, 571, 817 586, 600, 613, 624, 624, 18, 18, 18, 18, 64, 818 64, 37, 37, -149, -149, -149, -149, 451, -41, -149, 819 70, -149, -149, -149, 151, 451, 157, -149, -149, 154, 820 -149, -149 821 }; 822 823 /* YYPGOTO[NTERM-NUM]. */ 824 static const yytype_int16 yypgoto[] = 825 { 826 -149, -149, -149, -149, -149, -149, -149, -12, -11, -149, 827 -149, -149, -148, 94, -13, 172, 0, -6, -149 828 }; 829 830 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 831 positive, shift that token. If negative, reduce the rule which 832 number is the opposite. If YYTABLE_NINF, syntax error. */ 833 #define YYTABLE_NINF -1 834 static const yytype_uint8 yytable[] = 835 { 836 79, 57, 88, 79, 72, 89, 90, 125, 165, 164, 837 15, 166, 86, 17, 84, 70, 20, 169, 21, 22, 838 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 839 33, 34, 35, 36, 37, 38, 39, 40, 156, 41, 840 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 841 52, 92, 93, 94, 95, 96, 97, 121, 110, 111, 842 112, 113, 114, 115, 116, 124, 92, 85, 157, 87, 843 124, 118, 79, 61, 62, 126, 135, 79, 136, 132, 844 92, 114, 115, 116, 129, 129, 122, 133, 138, 139, 845 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 846 150, 151, 152, 153, 154, 155, 112, 113, 114, 115, 847 116, 73, 74, 159, 92, 2, 61, 62, 160, 167, 848 3, 4, 5, 92, 161, 6, 7, 8, 9, 10, 849 11, 12, 13, 14, 15, 16, 162, 17, 18, 19, 850 20, 163, 21, 22, 23, 24, 25, 26, 27, 28, 851 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 852 39, 40, 75, 41, 42, 43, 44, 45, 46, 47, 853 48, 49, 50, 51, 52, 168, 170, 15, 171, 130, 854 17, 83, 76, 20, 0, 21, 22, 23, 24, 25, 855 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 856 36, 37, 38, 39, 40, 75, 41, 42, 43, 44, 857 45, 46, 47, 48, 49, 50, 51, 52, 0, 0, 858 15, 0, 0, 17, 0, 82, 20, 0, 21, 22, 859 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 860 33, 34, 35, 36, 37, 38, 39, 40, 75, 41, 861 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 862 52, 0, 0, 15, 0, 0, 17, 0, 123, 20, 863 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 864 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 865 40, 75, 41, 42, 43, 44, 45, 46, 47, 48, 866 49, 50, 51, 52, 0, 0, 15, 0, 0, 17, 867 0, 127, 20, 0, 21, 22, 23, 24, 25, 26, 868 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 869 37, 38, 39, 40, 0, 41, 42, 43, 44, 45, 870 46, 47, 48, 49, 50, 51, 52, 15, 0, 0, 871 17, 0, 91, 20, 0, 21, 22, 23, 24, 25, 872 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 873 36, 37, 38, 39, 40, 0, 41, 42, 43, 44, 874 45, 46, 47, 48, 49, 50, 51, 52, 15, 0, 875 0, 17, 0, 117, 20, 0, 21, 22, 23, 24, 876 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 877 35, 36, 37, 38, 39, 40, 0, 41, 42, 43, 878 44, 45, 46, 47, 48, 49, 50, 51, 52, 15, 879 0, 0, 17, 0, 131, 20, 0, 21, 22, 23, 880 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 881 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 882 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 883 15, 0, 0, 17, 0, 0, 20, 0, 21, 22, 884 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 885 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 886 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 887 52, 60, 0, 61, 62, 0, 99, 100, 101, 102, 888 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 889 113, 114, 115, 116, 63, 64, 137, 0, 0, 98, 890 65, 0, 66, 67, 99, 100, 101, 102, 103, 104, 891 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 892 115, 116, 134, 0, 0, 0, 0, 99, 100, 101, 893 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 894 112, 113, 114, 115, 116, 100, 101, 102, 103, 104, 895 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 896 115, 116, 101, 102, 103, 104, 105, 106, 107, 108, 897 109, 110, 111, 112, 113, 114, 115, 116, 102, 103, 898 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 899 114, 115, 116, 103, 104, 105, 106, 107, 108, 109, 900 110, 111, 112, 113, 114, 115, 116, 104, 105, 106, 901 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 902 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 903 116 904 }; 905 906 #define yypact_value_is_default(yystate) \ 907 ((yystate) == (-149)) 908 909 #define yytable_value_is_error(yytable_value) \ 910 YYID (0) 911 912 static const yytype_int16 yycheck[] = 913 { 914 6, 1, 14, 9, 4, 16, 18, 24, 49, 157, 915 19, 52, 12, 22, 19, 24, 25, 165, 27, 28, 916 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 917 39, 40, 41, 42, 43, 44, 45, 46, 19, 48, 918 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 919 59, 57, 63, 64, 65, 66, 67, 19, 40, 41, 920 42, 43, 44, 45, 46, 78, 72, 19, 49, 19, 921 83, 48, 78, 21, 22, 24, 24, 83, 90, 24, 922 86, 44, 45, 46, 84, 85, 48, 24, 99, 100, 923 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 924 111, 112, 113, 114, 115, 116, 42, 43, 44, 45, 925 46, 8, 9, 24, 120, 0, 21, 22, 19, 49, 926 5, 6, 7, 129, 24, 10, 11, 12, 13, 14, 927 15, 16, 17, 18, 19, 20, 24, 22, 23, 24, 928 25, 24, 27, 28, 29, 30, 31, 32, 33, 34, 929 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 930 45, 46, 4, 48, 49, 50, 51, 52, 53, 54, 931 55, 56, 57, 58, 59, 24, 19, 19, 24, 85, 932 22, 9, 24, 25, -1, 27, 28, 29, 30, 31, 933 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 934 42, 43, 44, 45, 46, 4, 48, 49, 50, 51, 935 52, 53, 54, 55, 56, 57, 58, 59, -1, -1, 936 19, -1, -1, 22, -1, 24, 25, -1, 27, 28, 937 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 938 39, 40, 41, 42, 43, 44, 45, 46, 4, 48, 939 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 940 59, -1, -1, 19, -1, -1, 22, -1, 24, 25, 941 -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, 942 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 943 46, 4, 48, 49, 50, 51, 52, 53, 54, 55, 944 56, 57, 58, 59, -1, -1, 19, -1, -1, 22, 945 -1, 24, 25, -1, 27, 28, 29, 30, 31, 32, 946 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 947 43, 44, 45, 46, -1, 48, 49, 50, 51, 52, 948 53, 54, 55, 56, 57, 58, 59, 19, -1, -1, 949 22, -1, 24, 25, -1, 27, 28, 29, 30, 31, 950 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 951 42, 43, 44, 45, 46, -1, 48, 49, 50, 51, 952 52, 53, 54, 55, 56, 57, 58, 59, 19, -1, 953 -1, 22, -1, 24, 25, -1, 27, 28, 29, 30, 954 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 955 41, 42, 43, 44, 45, 46, -1, 48, 49, 50, 956 51, 52, 53, 54, 55, 56, 57, 58, 59, 19, 957 -1, -1, 22, -1, 24, 25, -1, 27, 28, 29, 958 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 959 40, 41, 42, 43, 44, 45, 46, -1, 48, 49, 960 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 961 19, -1, -1, 22, -1, -1, 25, -1, 27, 28, 962 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 963 39, 40, 41, 42, 43, 44, 45, 46, -1, 48, 964 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 965 59, 19, -1, 21, 22, -1, 29, 30, 31, 32, 966 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 967 43, 44, 45, 46, 42, 43, 49, -1, -1, 24, 968 48, -1, 50, 51, 29, 30, 31, 32, 33, 34, 969 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 970 45, 46, 24, -1, -1, -1, -1, 29, 30, 31, 971 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 972 42, 43, 44, 45, 46, 30, 31, 32, 33, 34, 973 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 974 45, 46, 31, 32, 33, 34, 35, 36, 37, 38, 975 39, 40, 41, 42, 43, 44, 45, 46, 32, 33, 976 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 977 44, 45, 46, 33, 34, 35, 36, 37, 38, 39, 978 40, 41, 42, 43, 44, 45, 46, 34, 35, 36, 979 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 980 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 981 46 982 }; 983 984 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 985 symbol of state STATE-NUM. */ 986 static const yytype_uint8 yystos[] = 987 { 988 0, 61, 0, 5, 6, 7, 10, 11, 12, 13, 989 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 990 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 991 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 992 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 993 57, 58, 59, 62, 63, 64, 70, 76, 77, 78, 994 19, 21, 22, 42, 43, 48, 50, 51, 67, 68, 995 24, 71, 76, 8, 9, 4, 24, 74, 75, 77, 996 65, 66, 24, 75, 19, 19, 76, 19, 67, 68, 997 67, 24, 77, 68, 68, 68, 68, 68, 24, 29, 998 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 999 40, 41, 42, 43, 44, 45, 46, 24, 48, 72, 1000 76, 19, 48, 24, 74, 24, 24, 24, 73, 76, 1001 73, 24, 24, 24, 24, 24, 67, 49, 68, 68, 1002 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 1003 68, 68, 68, 68, 68, 68, 19, 49, 69, 24, 1004 19, 24, 24, 24, 72, 49, 52, 49, 24, 72, 1005 19, 24 1006 }; 1007 1008 #define yyerrok (yyerrstatus = 0) 1009 #define yyclearin (yychar = YYEMPTY) 1010 #define YYEMPTY (-2) 1011 #define YYEOF 0 1012 1013 #define YYACCEPT goto yyacceptlab 1014 #define YYABORT goto yyabortlab 1015 #define YYERROR goto yyerrorlab 1016 1017 1018 /* Like YYERROR except do call yyerror. This remains here temporarily 1019 to ease the transition to the new meaning of YYERROR, for GCC. 1020 Once GCC version 2 has supplanted version 1, this can go. However, 1021 YYFAIL appears to be in use. Nevertheless, it is formally deprecated 1022 in Bison 2.4.2's NEWS entry, where a plan to phase it out is 1023 discussed. */ 1024 1025 #define YYFAIL goto yyerrlab 1026 #if defined YYFAIL 1027 /* This is here to suppress warnings from the GCC cpp's 1028 -Wunused-macros. Normally we don't worry about that warning, but 1029 some users do, and we want to make it easy for users to remove 1030 YYFAIL uses, which will produce warnings from Bison 2.5. */ 1031 #endif 1032 1033 #define YYRECOVERING() (!!yyerrstatus) 1034 1035 #define YYBACKUP(Token, Value) \ 1036 do \ 1037 if (yychar == YYEMPTY && yylen == 1) \ 1038 { \ 1039 yychar = (Token); \ 1040 yylval = (Value); \ 1041 YYPOPSTACK (1); \ 1042 goto yybackup; \ 1043 } \ 1044 else \ 1045 { \ 1046 yyerror (&yylloc, parser, YY_("syntax error: cannot back up")); \ 1047 YYERROR; \ 1048 } \ 1049 while (YYID (0)) 1050 1051 1052 #define YYTERROR 1 1053 #define YYERRCODE 256 1054 1055 1056 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. 1057 If N is 0, then set CURRENT to the empty location which ends 1058 the previous symbol: RHS[0] (always defined). */ 1059 1060 #define YYRHSLOC(Rhs, K) ((Rhs)[K]) 1061 #ifndef YYLLOC_DEFAULT 1062 # define YYLLOC_DEFAULT(Current, Rhs, N) \ 1063 do \ 1064 if (YYID (N)) \ 1065 { \ 1066 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ 1067 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ 1068 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ 1069 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ 1070 } \ 1071 else \ 1072 { \ 1073 (Current).first_line = (Current).last_line = \ 1074 YYRHSLOC (Rhs, 0).last_line; \ 1075 (Current).first_column = (Current).last_column = \ 1076 YYRHSLOC (Rhs, 0).last_column; \ 1077 } \ 1078 while (YYID (0)) 1079 #endif 1080 1081 1082 /* YY_LOCATION_PRINT -- Print the location on the stream. 1083 This macro was not mandated originally: define only if we know 1084 we won't break user code: when these are the locations we know. */ 1085 1086 #ifndef YY_LOCATION_PRINT 1087 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL 1088 # define YY_LOCATION_PRINT(File, Loc) \ 1089 fprintf (File, "%d.%d-%d.%d", \ 1090 (Loc).first_line, (Loc).first_column, \ 1091 (Loc).last_line, (Loc).last_column) 1092 # else 1093 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 1094 # endif 1095 #endif 1096 1097 1098 /* YYLEX -- calling `yylex' with the right arguments. */ 1099 1100 #ifdef YYLEX_PARAM 1101 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) 1102 #else 1103 # define YYLEX yylex (&yylval, &yylloc, parser) 1104 #endif 1105 1106 /* Enable debugging if requested. */ 1107 #if YYDEBUG 1108 1109 # ifndef YYFPRINTF 1110 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 1111 # define YYFPRINTF fprintf 1112 # endif 1113 1114 # define YYDPRINTF(Args) \ 1115 do { \ 1116 if (yydebug) \ 1117 YYFPRINTF Args; \ 1118 } while (YYID (0)) 1119 1120 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 1121 do { \ 1122 if (yydebug) \ 1123 { \ 1124 YYFPRINTF (stderr, "%s ", Title); \ 1125 yy_symbol_print (stderr, \ 1126 Type, Value, Location, parser); \ 1127 YYFPRINTF (stderr, "\n"); \ 1128 } \ 1129 } while (YYID (0)) 1130 1131 1132 /*--------------------------------. 1133 | Print this symbol on YYOUTPUT. | 1134 `--------------------------------*/ 1135 1136 /*ARGSUSED*/ 1137 #if (defined __STDC__ || defined __C99__FUNC__ \ 1138 || defined __cplusplus || defined _MSC_VER) 1139 static void 1140 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, glcpp_parser_t *parser) 1141 #else 1142 static void 1143 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, parser) 1144 FILE *yyoutput; 1145 int yytype; 1146 YYSTYPE const * const yyvaluep; 1147 YYLTYPE const * const yylocationp; 1148 glcpp_parser_t *parser; 1149 #endif 1150 { 1151 if (!yyvaluep) 1152 return; 1153 YYUSE (yylocationp); 1154 YYUSE (parser); 1155 # ifdef YYPRINT 1156 if (yytype < YYNTOKENS) 1157 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 1158 # else 1159 YYUSE (yyoutput); 1160 # endif 1161 switch (yytype) 1162 { 1163 default: 1164 break; 1165 } 1166 } 1167 1168 1169 /*--------------------------------. 1170 | Print this symbol on YYOUTPUT. | 1171 `--------------------------------*/ 1172 1173 #if (defined __STDC__ || defined __C99__FUNC__ \ 1174 || defined __cplusplus || defined _MSC_VER) 1175 static void 1176 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, glcpp_parser_t *parser) 1177 #else 1178 static void 1179 yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, parser) 1180 FILE *yyoutput; 1181 int yytype; 1182 YYSTYPE const * const yyvaluep; 1183 YYLTYPE const * const yylocationp; 1184 glcpp_parser_t *parser; 1185 #endif 1186 { 1187 if (yytype < YYNTOKENS) 1188 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 1189 else 1190 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 1191 1192 YY_LOCATION_PRINT (yyoutput, *yylocationp); 1193 YYFPRINTF (yyoutput, ": "); 1194 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, parser); 1195 YYFPRINTF (yyoutput, ")"); 1196 } 1197 1198 /*------------------------------------------------------------------. 1199 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 1200 | TOP (included). | 1201 `------------------------------------------------------------------*/ 1202 1203 #if (defined __STDC__ || defined __C99__FUNC__ \ 1204 || defined __cplusplus || defined _MSC_VER) 1205 static void 1206 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 1207 #else 1208 static void 1209 yy_stack_print (yybottom, yytop) 1210 yytype_int16 *yybottom; 1211 yytype_int16 *yytop; 1212 #endif 1213 { 1214 YYFPRINTF (stderr, "Stack now"); 1215 for (; yybottom <= yytop; yybottom++) 1216 { 1217 int yybot = *yybottom; 1218 YYFPRINTF (stderr, " %d", yybot); 1219 } 1220 YYFPRINTF (stderr, "\n"); 1221 } 1222 1223 # define YY_STACK_PRINT(Bottom, Top) \ 1224 do { \ 1225 if (yydebug) \ 1226 yy_stack_print ((Bottom), (Top)); \ 1227 } while (YYID (0)) 1228 1229 1230 /*------------------------------------------------. 1231 | Report that the YYRULE is going to be reduced. | 1232 `------------------------------------------------*/ 1233 1234 #if (defined __STDC__ || defined __C99__FUNC__ \ 1235 || defined __cplusplus || defined _MSC_VER) 1236 static void 1237 yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, glcpp_parser_t *parser) 1238 #else 1239 static void 1240 yy_reduce_print (yyvsp, yylsp, yyrule, parser) 1241 YYSTYPE *yyvsp; 1242 YYLTYPE *yylsp; 1243 int yyrule; 1244 glcpp_parser_t *parser; 1245 #endif 1246 { 1247 int yynrhs = yyr2[yyrule]; 1248 int yyi; 1249 unsigned long int yylno = yyrline[yyrule]; 1250 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 1251 yyrule - 1, yylno); 1252 /* The symbols being reduced. */ 1253 for (yyi = 0; yyi < yynrhs; yyi++) 1254 { 1255 YYFPRINTF (stderr, " $%d = ", yyi + 1); 1256 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 1257 &(yyvsp[(yyi + 1) - (yynrhs)]) 1258 , &(yylsp[(yyi + 1) - (yynrhs)]) , parser); 1259 YYFPRINTF (stderr, "\n"); 1260 } 1261 } 1262 1263 # define YY_REDUCE_PRINT(Rule) \ 1264 do { \ 1265 if (yydebug) \ 1266 yy_reduce_print (yyvsp, yylsp, Rule, parser); \ 1267 } while (YYID (0)) 1268 1269 /* Nonzero means print parse trace. It is left uninitialized so that 1270 multiple parsers can coexist. */ 1271 int yydebug; 1272 #else /* !YYDEBUG */ 1273 # define YYDPRINTF(Args) 1274 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 1275 # define YY_STACK_PRINT(Bottom, Top) 1276 # define YY_REDUCE_PRINT(Rule) 1277 #endif /* !YYDEBUG */ 1278 1279 1280 /* YYINITDEPTH -- initial size of the parser's stacks. */ 1281 #ifndef YYINITDEPTH 1282 # define YYINITDEPTH 200 1283 #endif 1284 1285 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 1286 if the built-in stack extension method is used). 1287 1288 Do not make this value too large; the results are undefined if 1289 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 1290 evaluated with infinite-precision integer arithmetic. */ 1291 1292 #ifndef YYMAXDEPTH 1293 # define YYMAXDEPTH 10000 1294 #endif 1295 1296 1297 #if YYERROR_VERBOSE 1298 1299 # ifndef yystrlen 1300 # if defined __GLIBC__ && defined _STRING_H 1301 # define yystrlen strlen 1302 # else 1303 /* Return the length of YYSTR. */ 1304 #if (defined __STDC__ || defined __C99__FUNC__ \ 1305 || defined __cplusplus || defined _MSC_VER) 1306 static YYSIZE_T 1307 yystrlen (const char *yystr) 1308 #else 1309 static YYSIZE_T 1310 yystrlen (yystr) 1311 const char *yystr; 1312 #endif 1313 { 1314 YYSIZE_T yylen; 1315 for (yylen = 0; yystr[yylen]; yylen++) 1316 continue; 1317 return yylen; 1318 } 1319 # endif 1320 # endif 1321 1322 # ifndef yystpcpy 1323 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 1324 # define yystpcpy stpcpy 1325 # else 1326 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 1327 YYDEST. */ 1328 #if (defined __STDC__ || defined __C99__FUNC__ \ 1329 || defined __cplusplus || defined _MSC_VER) 1330 static char * 1331 yystpcpy (char *yydest, const char *yysrc) 1332 #else 1333 static char * 1334 yystpcpy (yydest, yysrc) 1335 char *yydest; 1336 const char *yysrc; 1337 #endif 1338 { 1339 char *yyd = yydest; 1340 const char *yys = yysrc; 1341 1342 while ((*yyd++ = *yys++) != '\0') 1343 continue; 1344 1345 return yyd - 1; 1346 } 1347 # endif 1348 # endif 1349 1350 # ifndef yytnamerr 1351 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 1352 quotes and backslashes, so that it's suitable for yyerror. The 1353 heuristic is that double-quoting is unnecessary unless the string 1354 contains an apostrophe, a comma, or backslash (other than 1355 backslash-backslash). YYSTR is taken from yytname. If YYRES is 1356 null, do not copy; instead, return the length of what the result 1357 would have been. */ 1358 static YYSIZE_T 1359 yytnamerr (char *yyres, const char *yystr) 1360 { 1361 if (*yystr == '"') 1362 { 1363 YYSIZE_T yyn = 0; 1364 char const *yyp = yystr; 1365 1366 for (;;) 1367 switch (*++yyp) 1368 { 1369 case '\'': 1370 case ',': 1371 goto do_not_strip_quotes; 1372 1373 case '\\': 1374 if (*++yyp != '\\') 1375 goto do_not_strip_quotes; 1376 /* Fall through. */ 1377 default: 1378 if (yyres) 1379 yyres[yyn] = *yyp; 1380 yyn++; 1381 break; 1382 1383 case '"': 1384 if (yyres) 1385 yyres[yyn] = '\0'; 1386 return yyn; 1387 } 1388 do_not_strip_quotes: ; 1389 } 1390 1391 if (! yyres) 1392 return yystrlen (yystr); 1393 1394 return yystpcpy (yyres, yystr) - yyres; 1395 } 1396 # endif 1397 1398 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message 1399 about the unexpected token YYTOKEN for the state stack whose top is 1400 YYSSP. 1401 1402 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is 1403 not large enough to hold the message. In that case, also set 1404 *YYMSG_ALLOC to the required number of bytes. Return 2 if the 1405 required number of bytes is too large to store. */ 1406 static int 1407 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 1408 yytype_int16 *yyssp, int yytoken) 1409 { 1410 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); 1411 YYSIZE_T yysize = yysize0; 1412 YYSIZE_T yysize1; 1413 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 1414 /* Internationalized format string. */ 1415 const char *yyformat = 0; 1416 /* Arguments of yyformat. */ 1417 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 1418 /* Number of reported tokens (one for the "unexpected", one per 1419 "expected"). */ 1420 int yycount = 0; 1421 1422 /* There are many possibilities here to consider: 1423 - Assume YYFAIL is not used. It's too flawed to consider. See 1424 <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> 1425 for details. YYERROR is fine as it does not invoke this 1426 function. 1427 - If this state is a consistent state with a default action, then 1428 the only way this function was invoked is if the default action 1429 is an error action. In that case, don't check for expected 1430 tokens because there are none. 1431 - The only way there can be no lookahead present (in yychar) is if 1432 this state is a consistent state with a default action. Thus, 1433 detecting the absence of a lookahead is sufficient to determine 1434 that there is no unexpected or expected token to report. In that 1435 case, just report a simple "syntax error". 1436 - Don't assume there isn't a lookahead just because this state is a 1437 consistent state with a default action. There might have been a 1438 previous inconsistent state, consistent state with a non-default 1439 action, or user semantic action that manipulated yychar. 1440 - Of course, the expected token list depends on states to have 1441 correct lookahead information, and it depends on the parser not 1442 to perform extra reductions after fetching a lookahead from the 1443 scanner and before detecting a syntax error. Thus, state merging 1444 (from LALR or IELR) and default reductions corrupt the expected 1445 token list. However, the list is correct for canonical LR with 1446 one exception: it will still contain any token that will not be 1447 accepted due to an error action in a later state. 1448 */ 1449 if (yytoken != YYEMPTY) 1450 { 1451 int yyn = yypact[*yyssp]; 1452 yyarg[yycount++] = yytname[yytoken]; 1453 if (!yypact_value_is_default (yyn)) 1454 { 1455 /* Start YYX at -YYN if negative to avoid negative indexes in 1456 YYCHECK. In other words, skip the first -YYN actions for 1457 this state because they are default actions. */ 1458 int yyxbegin = yyn < 0 ? -yyn : 0; 1459 /* Stay within bounds of both yycheck and yytname. */ 1460 int yychecklim = YYLAST - yyn + 1; 1461 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 1462 int yyx; 1463 1464 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 1465 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR 1466 && !yytable_value_is_error (yytable[yyx + yyn])) 1467 { 1468 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 1469 { 1470 yycount = 1; 1471 yysize = yysize0; 1472 break; 1473 } 1474 yyarg[yycount++] = yytname[yyx]; 1475 yysize1 = yysize + yytnamerr (0, yytname[yyx]); 1476 if (! (yysize <= yysize1 1477 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1478 return 2; 1479 yysize = yysize1; 1480 } 1481 } 1482 } 1483 1484 switch (yycount) 1485 { 1486 # define YYCASE_(N, S) \ 1487 case N: \ 1488 yyformat = S; \ 1489 break 1490 YYCASE_(0, YY_("syntax error")); 1491 YYCASE_(1, YY_("syntax error, unexpected %s")); 1492 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); 1493 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); 1494 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); 1495 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); 1496 # undef YYCASE_ 1497 } 1498 1499 yysize1 = yysize + yystrlen (yyformat); 1500 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 1501 return 2; 1502 yysize = yysize1; 1503 1504 if (*yymsg_alloc < yysize) 1505 { 1506 *yymsg_alloc = 2 * yysize; 1507 if (! (yysize <= *yymsg_alloc 1508 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) 1509 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; 1510 return 1; 1511 } 1512 1513 /* Avoid sprintf, as that infringes on the user's name space. 1514 Don't have undefined behavior even if the translation 1515 produced a string with the wrong number of "%s"s. */ 1516 { 1517 char *yyp = *yymsg; 1518 int yyi = 0; 1519 while ((*yyp = *yyformat) != '\0') 1520 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) 1521 { 1522 yyp += yytnamerr (yyp, yyarg[yyi++]); 1523 yyformat += 2; 1524 } 1525 else 1526 { 1527 yyp++; 1528 yyformat++; 1529 } 1530 } 1531 return 0; 1532 } 1533 #endif /* YYERROR_VERBOSE */ 1534 1535 /*-----------------------------------------------. 1536 | Release the memory associated to this symbol. | 1537 `-----------------------------------------------*/ 1538 1539 /*ARGSUSED*/ 1540 #if (defined __STDC__ || defined __C99__FUNC__ \ 1541 || defined __cplusplus || defined _MSC_VER) 1542 static void 1543 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, glcpp_parser_t *parser) 1544 #else 1545 static void 1546 yydestruct (yymsg, yytype, yyvaluep, yylocationp, parser) 1547 const char *yymsg; 1548 int yytype; 1549 YYSTYPE *yyvaluep; 1550 YYLTYPE *yylocationp; 1551 glcpp_parser_t *parser; 1552 #endif 1553 { 1554 YYUSE (yyvaluep); 1555 YYUSE (yylocationp); 1556 YYUSE (parser); 1557 1558 if (!yymsg) 1559 yymsg = "Deleting"; 1560 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 1561 1562 switch (yytype) 1563 { 1564 1565 default: 1566 break; 1567 } 1568 } 1569 1570 1571 /* Prevent warnings from -Wmissing-prototypes. */ 1572 #ifdef YYPARSE_PARAM 1573 #if defined __STDC__ || defined __cplusplus 1574 int yyparse (void *YYPARSE_PARAM); 1575 #else 1576 int yyparse (); 1577 #endif 1578 #else /* ! YYPARSE_PARAM */ 1579 #if defined __STDC__ || defined __cplusplus 1580 int yyparse (glcpp_parser_t *parser); 1581 #else 1582 int yyparse (); 1583 #endif 1584 #endif /* ! YYPARSE_PARAM */ 1585 1586 1587 /*----------. 1588 | yyparse. | 1589 `----------*/ 1590 1591 #ifdef YYPARSE_PARAM 1592 #if (defined __STDC__ || defined __C99__FUNC__ \ 1593 || defined __cplusplus || defined _MSC_VER) 1594 int 1595 yyparse (void *YYPARSE_PARAM) 1596 #else 1597 int 1598 yyparse (YYPARSE_PARAM) 1599 void *YYPARSE_PARAM; 1600 #endif 1601 #else /* ! YYPARSE_PARAM */ 1602 #if (defined __STDC__ || defined __C99__FUNC__ \ 1603 || defined __cplusplus || defined _MSC_VER) 1604 int 1605 yyparse (glcpp_parser_t *parser) 1606 #else 1607 int 1608 yyparse (parser) 1609 glcpp_parser_t *parser; 1610 #endif 1611 #endif 1612 { 1613 /* The lookahead symbol. */ 1614 int yychar; 1615 1616 /* The semantic value of the lookahead symbol. */ 1617 YYSTYPE yylval; 1618 1619 /* Location data for the lookahead symbol. */ 1620 YYLTYPE yylloc; 1621 1622 /* Number of syntax errors so far. */ 1623 int yynerrs; 1624 1625 int yystate; 1626 /* Number of tokens to shift before error messages enabled. */ 1627 int yyerrstatus; 1628 1629 /* The stacks and their tools: 1630 `yyss': related to states. 1631 `yyvs': related to semantic values. 1632 `yyls': related to locations. 1633 1634 Refer to the stacks thru separate pointers, to allow yyoverflow 1635 to reallocate them elsewhere. */ 1636 1637 /* The state stack. */ 1638 yytype_int16 yyssa[YYINITDEPTH]; 1639 yytype_int16 *yyss; 1640 yytype_int16 *yyssp; 1641 1642 /* The semantic value stack. */ 1643 YYSTYPE yyvsa[YYINITDEPTH]; 1644 YYSTYPE *yyvs; 1645 YYSTYPE *yyvsp; 1646 1647 /* The location stack. */ 1648 YYLTYPE yylsa[YYINITDEPTH]; 1649 YYLTYPE *yyls; 1650 YYLTYPE *yylsp; 1651 1652 /* The locations where the error started and ended. */ 1653 YYLTYPE yyerror_range[3]; 1654 1655 YYSIZE_T yystacksize; 1656 1657 int yyn; 1658 int yyresult; 1659 /* Lookahead token as an internal (translated) token number. */ 1660 int yytoken; 1661 /* The variables used to return semantic value and location from the 1662 action routines. */ 1663 YYSTYPE yyval; 1664 YYLTYPE yyloc; 1665 1666 #if YYERROR_VERBOSE 1667 /* Buffer for error messages, and its allocated size. */ 1668 char yymsgbuf[128]; 1669 char *yymsg = yymsgbuf; 1670 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 1671 #endif 1672 1673 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) 1674 1675 /* The number of symbols on the RHS of the reduced rule. 1676 Keep to zero when no symbol should be popped. */ 1677 int yylen = 0; 1678 1679 yytoken = 0; 1680 yyss = yyssa; 1681 yyvs = yyvsa; 1682 yyls = yylsa; 1683 yystacksize = YYINITDEPTH; 1684 1685 YYDPRINTF ((stderr, "Starting parse\n")); 1686 1687 yystate = 0; 1688 yyerrstatus = 0; 1689 yynerrs = 0; 1690 yychar = YYEMPTY; /* Cause a token to be read. */ 1691 1692 /* Initialize stack pointers. 1693 Waste one element of value and location stack 1694 so that they stay on the same level as the state stack. 1695 The wasted elements are never initialized. */ 1696 yyssp = yyss; 1697 yyvsp = yyvs; 1698 yylsp = yyls; 1699 1700 #if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL 1701 /* Initialize the default location before parsing starts. */ 1702 yylloc.first_line = yylloc.last_line = 1; 1703 yylloc.first_column = yylloc.last_column = 1; 1704 #endif 1705 1706 /* User initialization code. */ 1707 1708 /* Line 1590 of yacc.c */ 1709 #line 151 "src/src/glsl/glcpp/glcpp-parse.y" 1710 { 1711 yylloc.first_line = 1; 1712 yylloc.first_column = 1; 1713 yylloc.last_line = 1; 1714 yylloc.last_column = 1; 1715 yylloc.source = 0; 1716 } 1717 1718 /* Line 1590 of yacc.c */ 1719 #line 1720 "src/chromium_gensrc/mesa/glcpp-parse.c" 1720 yylsp[0] = yylloc; 1721 1722 goto yysetstate; 1723 1724 /*------------------------------------------------------------. 1725 | yynewstate -- Push a new state, which is found in yystate. | 1726 `------------------------------------------------------------*/ 1727 yynewstate: 1728 /* In all cases, when you get here, the value and location stacks 1729 have just been pushed. So pushing a state here evens the stacks. */ 1730 yyssp++; 1731 1732 yysetstate: 1733 *yyssp = yystate; 1734 1735 if (yyss + yystacksize - 1 <= yyssp) 1736 { 1737 /* Get the current used size of the three stacks, in elements. */ 1738 YYSIZE_T yysize = yyssp - yyss + 1; 1739 1740 #ifdef yyoverflow 1741 { 1742 /* Give user a chance to reallocate the stack. Use copies of 1743 these so that the &'s don't force the real ones into 1744 memory. */ 1745 YYSTYPE *yyvs1 = yyvs; 1746 yytype_int16 *yyss1 = yyss; 1747 YYLTYPE *yyls1 = yyls; 1748 1749 /* Each stack pointer address is followed by the size of the 1750 data in use in that stack, in bytes. This used to be a 1751 conditional around just the two extra args, but that might 1752 be undefined if yyoverflow is a macro. */ 1753 yyoverflow (YY_("memory exhausted"), 1754 &yyss1, yysize * sizeof (*yyssp), 1755 &yyvs1, yysize * sizeof (*yyvsp), 1756 &yyls1, yysize * sizeof (*yylsp), 1757 &yystacksize); 1758 1759 yyls = yyls1; 1760 yyss = yyss1; 1761 yyvs = yyvs1; 1762 } 1763 #else /* no yyoverflow */ 1764 # ifndef YYSTACK_RELOCATE 1765 goto yyexhaustedlab; 1766 # else 1767 /* Extend the stack our own way. */ 1768 if (YYMAXDEPTH <= yystacksize) 1769 goto yyexhaustedlab; 1770 yystacksize *= 2; 1771 if (YYMAXDEPTH < yystacksize) 1772 yystacksize = YYMAXDEPTH; 1773 1774 { 1775 yytype_int16 *yyss1 = yyss; 1776 union yyalloc *yyptr = 1777 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 1778 if (! yyptr) 1779 goto yyexhaustedlab; 1780 YYSTACK_RELOCATE (yyss_alloc, yyss); 1781 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 1782 YYSTACK_RELOCATE (yyls_alloc, yyls); 1783 # undef YYSTACK_RELOCATE 1784 if (yyss1 != yyssa) 1785 YYSTACK_FREE (yyss1); 1786 } 1787 # endif 1788 #endif /* no yyoverflow */ 1789 1790 yyssp = yyss + yysize - 1; 1791 yyvsp = yyvs + yysize - 1; 1792 yylsp = yyls + yysize - 1; 1793 1794 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 1795 (unsigned long int) yystacksize)); 1796 1797 if (yyss + yystacksize - 1 <= yyssp) 1798 YYABORT; 1799 } 1800 1801 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 1802 1803 if (yystate == YYFINAL) 1804 YYACCEPT; 1805 1806 goto yybackup; 1807 1808 /*-----------. 1809 | yybackup. | 1810 `-----------*/ 1811 yybackup: 1812 1813 /* Do appropriate processing given the current state. Read a 1814 lookahead token if we need one and don't already have one. */ 1815 1816 /* First try to decide what to do without reference to lookahead token. */ 1817 yyn = yypact[yystate]; 1818 if (yypact_value_is_default (yyn)) 1819 goto yydefault; 1820 1821 /* Not known => get a lookahead token if don't already have one. */ 1822 1823 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 1824 if (yychar == YYEMPTY) 1825 { 1826 YYDPRINTF ((stderr, "Reading a token: ")); 1827 yychar = YYLEX; 1828 } 1829 1830 if (yychar <= YYEOF) 1831 { 1832 yychar = yytoken = YYEOF; 1833 YYDPRINTF ((stderr, "Now at end of input.\n")); 1834 } 1835 else 1836 { 1837 yytoken = YYTRANSLATE (yychar); 1838 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 1839 } 1840 1841 /* If the proper action on seeing token YYTOKEN is to reduce or to 1842 detect an error, take that action. */ 1843 yyn += yytoken; 1844 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 1845 goto yydefault; 1846 yyn = yytable[yyn]; 1847 if (yyn <= 0) 1848 { 1849 if (yytable_value_is_error (yyn)) 1850 goto yyerrlab; 1851 yyn = -yyn; 1852 goto yyreduce; 1853 } 1854 1855 /* Count tokens shifted since error; after three, turn off error 1856 status. */ 1857 if (yyerrstatus) 1858 yyerrstatus--; 1859 1860 /* Shift the lookahead token. */ 1861 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 1862 1863 /* Discard the shifted token. */ 1864 yychar = YYEMPTY; 1865 1866 yystate = yyn; 1867 *++yyvsp = yylval; 1868 *++yylsp = yylloc; 1869 goto yynewstate; 1870 1871 1872 /*-----------------------------------------------------------. 1873 | yydefault -- do the default action for the current state. | 1874 `-----------------------------------------------------------*/ 1875 yydefault: 1876 yyn = yydefact[yystate]; 1877 if (yyn == 0) 1878 goto yyerrlab; 1879 goto yyreduce; 1880 1881 1882 /*-----------------------------. 1883 | yyreduce -- Do a reduction. | 1884 `-----------------------------*/ 1885 yyreduce: 1886 /* yyn is the number of a rule to reduce with. */ 1887 yylen = yyr2[yyn]; 1888 1889 /* If YYLEN is nonzero, implement the default value of the action: 1890 `$$ = $1'. 1891 1892 Otherwise, the following line sets YYVAL to garbage. 1893 This behavior is undocumented and Bison 1894 users should not rely upon it. Assigning to YYVAL 1895 unconditionally makes the parser a bit smaller, and it avoids a 1896 GCC warning that YYVAL may be used uninitialized. */ 1897 yyval = yyvsp[1-yylen]; 1898 1899 /* Default location. */ 1900 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); 1901 YY_REDUCE_PRINT (yyn); 1902 switch (yyn) 1903 { 1904 case 4: 1905 1906 /* Line 1806 of yacc.c */ 1907 #line 190 "src/src/glsl/glcpp/glcpp-parse.y" 1908 { 1909 ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "\n"); 1910 } 1911 break; 1912 1913 case 5: 1914 1915 /* Line 1806 of yacc.c */ 1916 #line 193 "src/src/glsl/glcpp/glcpp-parse.y" 1917 { 1918 _glcpp_parser_print_expanded_token_list (parser, (yyvsp[(1) - (1)].token_list)); 1919 ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "\n"); 1920 ralloc_free ((yyvsp[(1) - (1)].token_list)); 1921 } 1922 break; 1923 1924 case 8: 1925 1926 /* Line 1806 of yacc.c */ 1927 #line 203 "src/src/glsl/glcpp/glcpp-parse.y" 1928 { 1929 _glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (3)]), (yyvsp[(2) - (3)].ival)); 1930 } 1931 break; 1932 1933 case 9: 1934 1935 /* Line 1806 of yacc.c */ 1936 #line 206 "src/src/glsl/glcpp/glcpp-parse.y" 1937 { 1938 _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (3)]), "elif", (yyvsp[(2) - (3)].ival)); 1939 } 1940 break; 1941 1942 case 10: 1943 1944 /* Line 1806 of yacc.c */ 1945 #line 209 "src/src/glsl/glcpp/glcpp-parse.y" 1946 { 1947 parser->has_new_line_number = 1; 1948 parser->new_line_number = (yyvsp[(2) - (3)].ival); 1949 ralloc_asprintf_rewrite_tail (&parser->output, 1950 &parser->output_length, 1951 "#line %" PRIiMAX "\n", 1952 (yyvsp[(2) - (3)].ival)); 1953 } 1954 break; 1955 1956 case 11: 1957 1958 /* Line 1806 of yacc.c */ 1959 #line 217 "src/src/glsl/glcpp/glcpp-parse.y" 1960 { 1961 parser->has_new_line_number = 1; 1962 parser->new_line_number = (yyvsp[(2) - (4)].ival); 1963 parser->has_new_source_number = 1; 1964 parser->new_source_number = (yyvsp[(3) - (4)].ival); 1965 ralloc_asprintf_rewrite_tail (&parser->output, 1966 &parser->output_length, 1967 "#line %" PRIiMAX " %" PRIiMAX "\n", 1968 (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].ival)); 1969 } 1970 break; 1971 1972 case 12: 1973 1974 /* Line 1806 of yacc.c */ 1975 #line 230 "src/src/glsl/glcpp/glcpp-parse.y" 1976 { 1977 _define_object_macro (parser, & (yylsp[(2) - (4)]), (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].token_list)); 1978 } 1979 break; 1980 1981 case 13: 1982 1983 /* Line 1806 of yacc.c */ 1984 #line 233 "src/src/glsl/glcpp/glcpp-parse.y" 1985 { 1986 _define_function_macro (parser, & (yylsp[(2) - (6)]), (yyvsp[(2) - (6)].str), NULL, (yyvsp[(5) - (6)].token_list)); 1987 } 1988 break; 1989 1990 case 14: 1991 1992 /* Line 1806 of yacc.c */ 1993 #line 236 "src/src/glsl/glcpp/glcpp-parse.y" 1994 { 1995 _define_function_macro (parser, & (yylsp[(2) - (7)]), (yyvsp[(2) - (7)].str), (yyvsp[(4) - (7)].string_list), (yyvsp[(6) - (7)].token_list)); 1996 } 1997 break; 1998 1999 case 15: 2000 2001 /* Line 1806 of yacc.c */ 2002 #line 239 "src/src/glsl/glcpp/glcpp-parse.y" 2003 { 2004 macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (3)].str)); 2005 if (macro) { 2006 hash_table_remove (parser->defines, (yyvsp[(2) - (3)].str)); 2007 ralloc_free (macro); 2008 } 2009 ralloc_free ((yyvsp[(2) - (3)].str)); 2010 } 2011 break; 2012 2013 case 16: 2014 2015 /* Line 1806 of yacc.c */ 2016 #line 247 "src/src/glsl/glcpp/glcpp-parse.y" 2017 { 2018 if (parser->skip_stack == NULL || 2019 parser->skip_stack->type == SKIP_NO_SKIP) 2020 { 2021 _glcpp_parser_expand_and_lex_from (parser, 2022 LINE_EXPANDED, (yyvsp[(2) - (3)].token_list)); 2023 } 2024 } 2025 break; 2026 2027 case 17: 2028 2029 /* Line 1806 of yacc.c */ 2030 #line 255 "src/src/glsl/glcpp/glcpp-parse.y" 2031 { 2032 /* Be careful to only evaluate the 'if' expression if 2033 * we are not skipping. When we are skipping, we 2034 * simply push a new 0-valued 'if' onto the skip 2035 * stack. 2036 * 2037 * This avoids generating diagnostics for invalid 2038 * expressions that are being skipped. */ 2039 if (parser->skip_stack == NULL || 2040 parser->skip_stack->type == SKIP_NO_SKIP) 2041 { 2042 _glcpp_parser_expand_and_lex_from (parser, 2043 IF_EXPANDED, (yyvsp[(2) - (3)].token_list)); 2044 } 2045 else 2046 { 2047 _glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (3)]), 0); 2048 parser->skip_stack->type = SKIP_TO_ENDIF; 2049 } 2050 } 2051 break; 2052 2053 case 18: 2054 2055 /* Line 1806 of yacc.c */ 2056 #line 275 "src/src/glsl/glcpp/glcpp-parse.y" 2057 { 2058 /* #if without an expression is only an error if we 2059 * are not skipping */ 2060 if (parser->skip_stack == NULL || 2061 parser->skip_stack->type == SKIP_NO_SKIP) 2062 { 2063 glcpp_error(& (yylsp[(1) - (2)]), parser, "#if with no expression"); 2064 } 2065 _glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (2)]), 0); 2066 } 2067 break; 2068 2069 case 19: 2070 2071 /* Line 1806 of yacc.c */ 2072 #line 285 "src/src/glsl/glcpp/glcpp-parse.y" 2073 { 2074 macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str)); 2075 ralloc_free ((yyvsp[(2) - (4)].str)); 2076 _glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (4)]), macro != NULL); 2077 } 2078 break; 2079 2080 case 20: 2081 2082 /* Line 1806 of yacc.c */ 2083 #line 290 "src/src/glsl/glcpp/glcpp-parse.y" 2084 { 2085 macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str)); 2086 ralloc_free ((yyvsp[(2) - (4)].str)); 2087 _glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (4)]), macro == NULL); 2088 } 2089 break; 2090 2091 case 21: 2092 2093 /* Line 1806 of yacc.c */ 2094 #line 295 "src/src/glsl/glcpp/glcpp-parse.y" 2095 { 2096 /* Be careful to only evaluate the 'elif' expression 2097 * if we are not skipping. When we are skipping, we 2098 * simply change to a 0-valued 'elif' on the skip 2099 * stack. 2100 * 2101 * This avoids generating diagnostics for invalid 2102 * expressions that are being skipped. */ 2103 if (parser->skip_stack && 2104 parser->skip_stack->type == SKIP_TO_ELSE) 2105 { 2106 _glcpp_parser_expand_and_lex_from (parser, 2107 ELIF_EXPANDED, (yyvsp[(2) - (3)].token_list)); 2108 } 2109 else 2110 { 2111 _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (3)]), 2112 "elif", 0); 2113 } 2114 } 2115 break; 2116 2117 case 22: 2118 2119 /* Line 1806 of yacc.c */ 2120 #line 315 "src/src/glsl/glcpp/glcpp-parse.y" 2121 { 2122 /* #elif without an expression is an error unless we 2123 * are skipping. */ 2124 if (parser->skip_stack && 2125 parser->skip_stack->type == SKIP_TO_ELSE) 2126 { 2127 glcpp_error(& (yylsp[(1) - (2)]), parser, "#elif with no expression"); 2128 } 2129 else 2130 { 2131 _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (2)]), 2132 "elif", 0); 2133 glcpp_warning(& (yylsp[(1) - (2)]), parser, "ignoring illegal #elif without expression"); 2134 } 2135 } 2136 break; 2137 2138 case 23: 2139 2140 /* Line 1806 of yacc.c */ 2141 #line 330 "src/src/glsl/glcpp/glcpp-parse.y" 2142 { 2143 _glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (1)]), "else", 1); 2144 } 2145 break; 2146 2147 case 25: 2148 2149 /* Line 1806 of yacc.c */ 2150 #line 333 "src/src/glsl/glcpp/glcpp-parse.y" 2151 { 2152 _glcpp_parser_skip_stack_pop (parser, & (yylsp[(1) - (1)])); 2153 } 2154 break; 2155 2156 case 27: 2157 2158 /* Line 1806 of yacc.c */ 2159 #line 336 "src/src/glsl/glcpp/glcpp-parse.y" 2160 { 2161 macro_t *macro = hash_table_find (parser->defines, "__VERSION__"); 2162 if (macro) { 2163 hash_table_remove (parser->defines, "__VERSION__"); 2164 ralloc_free (macro); 2165 } 2166 add_builtin_define (parser, "__VERSION__", (yyvsp[(2) - (3)].ival)); 2167 2168 if ((yyvsp[(2) - (3)].ival) == 100) 2169 add_builtin_define (parser, "GL_ES", 1); 2170 2171 /* Currently, all ES2 implementations support highp in the 2172 * fragment shader, so we always define this macro in ES2. 2173 * If we ever get a driver that doesn't support highp, we'll 2174 * need to add a flag to the gl_context and check that here. 2175 */ 2176 if ((yyvsp[(2) - (3)].ival) >= 130 || (yyvsp[(2) - (3)].ival) == 100) 2177 add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1); 2178 2179 ralloc_asprintf_rewrite_tail (&parser->output, &parser->output_length, "#version %" PRIiMAX, (yyvsp[(2) - (3)].ival)); 2180 } 2181 break; 2182 2183 case 29: 2184 2185 /* Line 1806 of yacc.c */ 2186 #line 361 "src/src/glsl/glcpp/glcpp-parse.y" 2187 { 2188 if (strlen ((yyvsp[(1) - (1)].str)) >= 3 && strncmp ((yyvsp[(1) - (1)].str), "0x", 2) == 0) { 2189 (yyval.ival) = strtoll ((yyvsp[(1) - (1)].str) + 2, NULL, 16); 2190 } else if ((yyvsp[(1) - (1)].str)[0] == '0') { 2191 (yyval.ival) = strtoll ((yyvsp[(1) - (1)].str), NULL, 8); 2192 } else { 2193 (yyval.ival) = strtoll ((yyvsp[(1) - (1)].str), NULL, 10); 2194 } 2195 } 2196 break; 2197 2198 case 30: 2199 2200 /* Line 1806 of yacc.c */ 2201 #line 370 "src/src/glsl/glcpp/glcpp-parse.y" 2202 { 2203 (yyval.ival) = (yyvsp[(1) - (1)].ival); 2204 } 2205 break; 2206 2207 case 32: 2208 2209 /* Line 1806 of yacc.c */ 2210 #line 376 "src/src/glsl/glcpp/glcpp-parse.y" 2211 { 2212 (yyval.ival) = 0; 2213 } 2214 break; 2215 2216 case 33: 2217 2218 /* Line 1806 of yacc.c */ 2219 #line 379 "src/src/glsl/glcpp/glcpp-parse.y" 2220 { 2221 (yyval.ival) = (yyvsp[(1) - (3)].ival) || (yyvsp[(3) - (3)].ival); 2222 } 2223 break; 2224 2225 case 34: 2226 2227 /* Line 1806 of yacc.c */ 2228 #line 382 "src/src/glsl/glcpp/glcpp-parse.y" 2229 { 2230 (yyval.ival) = (yyvsp[(1) - (3)].ival) && (yyvsp[(3) - (3)].ival); 2231 } 2232 break; 2233 2234 case 35: 2235 2236 /* Line 1806 of yacc.c */ 2237 #line 385 "src/src/glsl/glcpp/glcpp-parse.y" 2238 { 2239 (yyval.ival) = (yyvsp[(1) - (3)].ival) | (yyvsp[(3) - (3)].ival); 2240 } 2241 break; 2242 2243 case 36: 2244 2245 /* Line 1806 of yacc.c */ 2246 #line 388 "src/src/glsl/glcpp/glcpp-parse.y" 2247 { 2248 (yyval.ival) = (yyvsp[(1) - (3)].ival) ^ (yyvsp[(3) - (3)].ival); 2249 } 2250 break; 2251 2252 case 37: 2253 2254 /* Line 1806 of yacc.c */ 2255 #line 391 "src/src/glsl/glcpp/glcpp-parse.y" 2256 { 2257 (yyval.ival) = (yyvsp[(1) - (3)].ival) & (yyvsp[(3) - (3)].ival); 2258 } 2259 break; 2260 2261 case 38: 2262 2263 /* Line 1806 of yacc.c */ 2264 #line 394 "src/src/glsl/glcpp/glcpp-parse.y" 2265 { 2266 (yyval.ival) = (yyvsp[(1) - (3)].ival) != (yyvsp[(3) - (3)].ival); 2267 } 2268 break; 2269 2270 case 39: 2271 2272 /* Line 1806 of yacc.c */ 2273 #line 397 "src/src/glsl/glcpp/glcpp-parse.y" 2274 { 2275 (yyval.ival) = (yyvsp[(1) - (3)].ival) == (yyvsp[(3) - (3)].ival); 2276 } 2277 break; 2278 2279 case 40: 2280 2281 /* Line 1806 of yacc.c */ 2282 #line 400 "src/src/glsl/glcpp/glcpp-parse.y" 2283 { 2284 (yyval.ival) = (yyvsp[(1) - (3)].ival) >= (yyvsp[(3) - (3)].ival); 2285 } 2286 break; 2287 2288 case 41: 2289 2290 /* Line 1806 of yacc.c */ 2291 #line 403 "src/src/glsl/glcpp/glcpp-parse.y" 2292 { 2293 (yyval.ival) = (yyvsp[(1) - (3)].ival) <= (yyvsp[(3) - (3)].ival); 2294 } 2295 break; 2296 2297 case 42: 2298 2299 /* Line 1806 of yacc.c */ 2300 #line 406 "src/src/glsl/glcpp/glcpp-parse.y" 2301 { 2302 (yyval.ival) = (yyvsp[(1) - (3)].ival) > (yyvsp[(3) - (3)].ival); 2303 } 2304 break; 2305 2306 case 43: 2307 2308 /* Line 1806 of yacc.c */ 2309 #line 409 "src/src/glsl/glcpp/glcpp-parse.y" 2310 { 2311 (yyval.ival) = (yyvsp[(1) - (3)].ival) < (yyvsp[(3) - (3)].ival); 2312 } 2313 break; 2314 2315 case 44: 2316 2317 /* Line 1806 of yacc.c */ 2318 #line 412 "src/src/glsl/glcpp/glcpp-parse.y" 2319 { 2320 (yyval.ival) = (yyvsp[(1) - (3)].ival) >> (yyvsp[(3) - (3)].ival); 2321 } 2322 break; 2323 2324 case 45: 2325 2326 /* Line 1806 of yacc.c */ 2327 #line 415 "src/src/glsl/glcpp/glcpp-parse.y" 2328 { 2329 (yyval.ival) = (yyvsp[(1) - (3)].ival) << (yyvsp[(3) - (3)].ival); 2330 } 2331 break; 2332 2333 case 46: 2334 2335 /* Line 1806 of yacc.c */ 2336 #line 418 "src/src/glsl/glcpp/glcpp-parse.y" 2337 { 2338 (yyval.ival) = (yyvsp[(1) - (3)].ival) - (yyvsp[(3) - (3)].ival); 2339 } 2340 break; 2341 2342 case 47: 2343 2344 /* Line 1806 of yacc.c */ 2345 #line 421 "src/src/glsl/glcpp/glcpp-parse.y" 2346 { 2347 (yyval.ival) = (yyvsp[(1) - (3)].ival) + (yyvsp[(3) - (3)].ival); 2348 } 2349 break; 2350 2351 case 48: 2352 2353 /* Line 1806 of yacc.c */ 2354 #line 424 "src/src/glsl/glcpp/glcpp-parse.y" 2355 { 2356 if ((yyvsp[(3) - (3)].ival) == 0) { 2357 yyerror (& (yylsp[(1) - (3)]), parser, 2358 "zero modulus in preprocessor directive"); 2359 } else { 2360 (yyval.ival) = (yyvsp[(1) - (3)].ival) % (yyvsp[(3) - (3)].ival); 2361 } 2362 } 2363 break; 2364 2365 case 49: 2366 2367 /* Line 1806 of yacc.c */ 2368 #line 432 "src/src/glsl/glcpp/glcpp-parse.y" 2369 { 2370 if ((yyvsp[(3) - (3)].ival) == 0) { 2371 yyerror (& (yylsp[(1) - (3)]), parser, 2372 "division by 0 in preprocessor directive"); 2373 } else { 2374 (yyval.ival) = (yyvsp[(1) - (3)].ival) / (yyvsp[(3) - (3)].ival); 2375 } 2376 } 2377 break; 2378 2379 case 50: 2380 2381 /* Line 1806 of yacc.c */ 2382 #line 440 "src/src/glsl/glcpp/glcpp-parse.y" 2383 { 2384 (yyval.ival) = (yyvsp[(1) - (3)].ival) * (yyvsp[(3) - (3)].ival); 2385 } 2386 break; 2387 2388 case 51: 2389 2390 /* Line 1806 of yacc.c */ 2391 #line 443 "src/src/glsl/glcpp/glcpp-parse.y" 2392 { 2393 (yyval.ival) = ! (yyvsp[(2) - (2)].ival); 2394 } 2395 break; 2396 2397 case 52: 2398 2399 /* Line 1806 of yacc.c */ 2400 #line 446 "src/src/glsl/glcpp/glcpp-parse.y" 2401 { 2402 (yyval.ival) = ~ (yyvsp[(2) - (2)].ival); 2403 } 2404 break; 2405 2406 case 53: 2407 2408 /* Line 1806 of yacc.c */ 2409 #line 449 "src/src/glsl/glcpp/glcpp-parse.y" 2410 { 2411 (yyval.ival) = - (yyvsp[(2) - (2)].ival); 2412 } 2413 break; 2414 2415 case 54: 2416 2417 /* Line 1806 of yacc.c */ 2418 #line 452 "src/src/glsl/glcpp/glcpp-parse.y" 2419 { 2420 (yyval.ival) = + (yyvsp[(2) - (2)].ival); 2421 } 2422 break; 2423 2424 case 55: 2425 2426 /* Line 1806 of yacc.c */ 2427 #line 455 "src/src/glsl/glcpp/glcpp-parse.y" 2428 { 2429 (yyval.ival) = (yyvsp[(2) - (3)].ival); 2430 } 2431 break; 2432 2433 case 56: 2434 2435 /* Line 1806 of yacc.c */ 2436 #line 461 "src/src/glsl/glcpp/glcpp-parse.y" 2437 { 2438 (yyval.string_list) = _string_list_create (parser); 2439 _string_list_append_item ((yyval.string_list), (yyvsp[(1) - (1)].str)); 2440 ralloc_steal ((yyval.string_list), (yyvsp[(1) - (1)].str)); 2441 } 2442 break; 2443 2444 case 57: 2445 2446 /* Line 1806 of yacc.c */ 2447 #line 466 "src/src/glsl/glcpp/glcpp-parse.y" 2448 { 2449 (yyval.string_list) = (yyvsp[(1) - (3)].string_list); 2450 _string_list_append_item ((yyval.string_list), (yyvsp[(3) - (3)].str)); 2451 ralloc_steal ((yyval.string_list), (yyvsp[(3) - (3)].str)); 2452 } 2453 break; 2454 2455 case 58: 2456 2457 /* Line 1806 of yacc.c */ 2458 #line 474 "src/src/glsl/glcpp/glcpp-parse.y" 2459 { (yyval.token_list) = NULL; } 2460 break; 2461 2462 case 60: 2463 2464 /* Line 1806 of yacc.c */ 2465 #line 479 "src/src/glsl/glcpp/glcpp-parse.y" 2466 { 2467 yyerror (& (yylsp[(1) - (2)]), parser, "Invalid tokens after #"); 2468 } 2469 break; 2470 2471 case 61: 2472 2473 /* Line 1806 of yacc.c */ 2474 #line 485 "src/src/glsl/glcpp/glcpp-parse.y" 2475 { (yyval.token_list) = NULL; } 2476 break; 2477 2478 case 64: 2479 2480 /* Line 1806 of yacc.c */ 2481 #line 491 "src/src/glsl/glcpp/glcpp-parse.y" 2482 { 2483 glcpp_warning(&(yylsp[(1) - (1)]), parser, "extra tokens at end of directive"); 2484 } 2485 break; 2486 2487 case 65: 2488 2489 /* Line 1806 of yacc.c */ 2490 #line 498 "src/src/glsl/glcpp/glcpp-parse.y" 2491 { 2492 int v = hash_table_find (parser->defines, (yyvsp[(2) - (2)].str)) ? 1 : 0; 2493 (yyval.token) = _token_create_ival (parser, INTEGER, v); 2494 } 2495 break; 2496 2497 case 66: 2498 2499 /* Line 1806 of yacc.c */ 2500 #line 502 "src/src/glsl/glcpp/glcpp-parse.y" 2501 { 2502 int v = hash_table_find (parser->defines, (yyvsp[(3) - (4)].str)) ? 1 : 0; 2503 (yyval.token) = _token_create_ival (parser, INTEGER, v); 2504 } 2505 break; 2506 2507 case 68: 2508 2509 /* Line 1806 of yacc.c */ 2510 #line 511 "src/src/glsl/glcpp/glcpp-parse.y" 2511 { 2512 (yyval.token_list) = _token_list_create (parser); 2513 _token_list_append ((yyval.token_list), (yyvsp[(1) - (1)].token)); 2514 } 2515 break; 2516 2517 case 69: 2518 2519 /* Line 1806 of yacc.c */ 2520 #line 515 "src/src/glsl/glcpp/glcpp-parse.y" 2521 { 2522 (yyval.token_list) = (yyvsp[(1) - (2)].token_list); 2523 _token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token)); 2524 } 2525 break; 2526 2527 case 70: 2528 2529 /* Line 1806 of yacc.c */ 2530 #line 522 "src/src/glsl/glcpp/glcpp-parse.y" 2531 { 2532 parser->space_tokens = 1; 2533 (yyval.token_list) = _token_list_create (parser); 2534 _token_list_append ((yyval.token_list), (yyvsp[(1) - (1)].token)); 2535 } 2536 break; 2537 2538 case 71: 2539 2540 /* Line 1806 of yacc.c */ 2541 #line 527 "src/src/glsl/glcpp/glcpp-parse.y" 2542 { 2543 (yyval.token_list) = (yyvsp[(1) - (2)].token_list); 2544 _token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token)); 2545 } 2546 break; 2547 2548 case 72: 2549 2550 /* Line 1806 of yacc.c */ 2551 #line 534 "src/src/glsl/glcpp/glcpp-parse.y" 2552 { 2553 (yyval.token) = _token_create_str (parser, IDENTIFIER, (yyvsp[(1) - (1)].str)); 2554 (yyval.token)->location = yylloc; 2555 } 2556 break; 2557 2558 case 73: 2559 2560 /* Line 1806 of yacc.c */ 2561 #line 538 "src/src/glsl/glcpp/glcpp-parse.y" 2562 { 2563 (yyval.token) = _token_create_str (parser, INTEGER_STRING, (yyvsp[(1) - (1)].str)); 2564 (yyval.token)->location = yylloc; 2565 } 2566 break; 2567 2568 case 74: 2569 2570 /* Line 1806 of yacc.c */ 2571 #line 542 "src/src/glsl/glcpp/glcpp-parse.y" 2572 { 2573 (yyval.token) = _token_create_ival (parser, (yyvsp[(1) - (1)].ival), (yyvsp[(1) - (1)].ival)); 2574 (yyval.token)->location = yylloc; 2575 } 2576 break; 2577 2578 case 75: 2579 2580 /* Line 1806 of yacc.c */ 2581 #line 546 "src/src/glsl/glcpp/glcpp-parse.y" 2582 { 2583 (yyval.token) = _token_create_str (parser, OTHER, (yyvsp[(1) - (1)].str)); 2584 (yyval.token)->location = yylloc; 2585 } 2586 break; 2587 2588 case 76: 2589 2590 /* Line 1806 of yacc.c */ 2591 #line 550 "src/src/glsl/glcpp/glcpp-parse.y" 2592 { 2593 (yyval.token) = _token_create_ival (parser, SPACE, SPACE); 2594 (yyval.token)->location = yylloc; 2595 } 2596 break; 2597 2598 case 77: 2599 2600 /* Line 1806 of yacc.c */ 2601 #line 557 "src/src/glsl/glcpp/glcpp-parse.y" 2602 { (yyval.ival) = '['; } 2603 break; 2604 2605 case 78: 2606 2607 /* Line 1806 of yacc.c */ 2608 #line 558 "src/src/glsl/glcpp/glcpp-parse.y" 2609 { (yyval.ival) = ']'; } 2610 break; 2611 2612 case 79: 2613 2614 /* Line 1806 of yacc.c */ 2615 #line 559 "src/src/glsl/glcpp/glcpp-parse.y" 2616 { (yyval.ival) = '('; } 2617 break; 2618 2619 case 80: 2620 2621 /* Line 1806 of yacc.c */ 2622 #line 560 "src/src/glsl/glcpp/glcpp-parse.y" 2623 { (yyval.ival) = ')'; } 2624 break; 2625 2626 case 81: 2627 2628 /* Line 1806 of yacc.c */ 2629 #line 561 "src/src/glsl/glcpp/glcpp-parse.y" 2630 { (yyval.ival) = '{'; } 2631 break; 2632 2633 case 82: 2634 2635 /* Line 1806 of yacc.c */ 2636 #line 562 "src/src/glsl/glcpp/glcpp-parse.y" 2637 { (yyval.ival) = '}'; } 2638 break; 2639 2640 case 83: 2641 2642 /* Line 1806 of yacc.c */ 2643 #line 563 "src/src/glsl/glcpp/glcpp-parse.y" 2644 { (yyval.ival) = '.'; } 2645 break; 2646 2647 case 84: 2648 2649 /* Line 1806 of yacc.c */ 2650 #line 564 "src/src/glsl/glcpp/glcpp-parse.y" 2651 { (yyval.ival) = '&'; } 2652 break; 2653 2654 case 85: 2655 2656 /* Line 1806 of yacc.c */ 2657 #line 565 "src/src/glsl/glcpp/glcpp-parse.y" 2658 { (yyval.ival) = '*'; } 2659 break; 2660 2661 case 86: 2662 2663 /* Line 1806 of yacc.c */ 2664 #line 566 "src/src/glsl/glcpp/glcpp-parse.y" 2665 { (yyval.ival) = '+'; } 2666 break; 2667 2668 case 87: 2669 2670 /* Line 1806 of yacc.c */ 2671 #line 567 "src/src/glsl/glcpp/glcpp-parse.y" 2672 { (yyval.ival) = '-'; } 2673 break; 2674 2675 case 88: 2676 2677 /* Line 1806 of yacc.c */ 2678 #line 568 "src/src/glsl/glcpp/glcpp-parse.y" 2679 { (yyval.ival) = '~'; } 2680 break; 2681 2682 case 89: 2683 2684 /* Line 1806 of yacc.c */ 2685 #line 569 "src/src/glsl/glcpp/glcpp-parse.y" 2686 { (yyval.ival) = '!'; } 2687 break; 2688 2689 case 90: 2690 2691 /* Line 1806 of yacc.c */ 2692 #line 570 "src/src/glsl/glcpp/glcpp-parse.y" 2693 { (yyval.ival) = '/'; } 2694 break; 2695 2696 case 91: 2697 2698 /* Line 1806 of yacc.c */ 2699 #line 571 "src/src/glsl/glcpp/glcpp-parse.y" 2700 { (yyval.ival) = '%'; } 2701 break; 2702 2703 case 92: 2704 2705 /* Line 1806 of yacc.c */ 2706 #line 572 "src/src/glsl/glcpp/glcpp-parse.y" 2707 { (yyval.ival) = LEFT_SHIFT; } 2708 break; 2709 2710 case 93: 2711 2712 /* Line 1806 of yacc.c */ 2713 #line 573 "src/src/glsl/glcpp/glcpp-parse.y" 2714 { (yyval.ival) = RIGHT_SHIFT; } 2715 break; 2716 2717 case 94: 2718 2719 /* Line 1806 of yacc.c */ 2720 #line 574 "src/src/glsl/glcpp/glcpp-parse.y" 2721 { (yyval.ival) = '<'; } 2722 break; 2723 2724 case 95: 2725 2726 /* Line 1806 of yacc.c */ 2727 #line 575 "src/src/glsl/glcpp/glcpp-parse.y" 2728 { (yyval.ival) = '>'; } 2729 break; 2730 2731 case 96: 2732 2733 /* Line 1806 of yacc.c */ 2734 #line 576 "src/src/glsl/glcpp/glcpp-parse.y" 2735 { (yyval.ival) = LESS_OR_EQUAL; } 2736 break; 2737 2738 case 97: 2739 2740 /* Line 1806 of yacc.c */ 2741 #line 577 "src/src/glsl/glcpp/glcpp-parse.y" 2742 { (yyval.ival) = GREATER_OR_EQUAL; } 2743 break; 2744 2745 case 98: 2746 2747 /* Line 1806 of yacc.c */ 2748 #line 578 "src/src/glsl/glcpp/glcpp-parse.y" 2749 { (yyval.ival) = EQUAL; } 2750 break; 2751 2752 case 99: 2753 2754 /* Line 1806 of yacc.c */ 2755 #line 579 "src/src/glsl/glcpp/glcpp-parse.y" 2756 { (yyval.ival) = NOT_EQUAL; } 2757 break; 2758 2759 case 100: 2760 2761 /* Line 1806 of yacc.c */ 2762 #line 580 "src/src/glsl/glcpp/glcpp-parse.y" 2763 { (yyval.ival) = '^'; } 2764 break; 2765 2766 case 101: 2767 2768 /* Line 1806 of yacc.c */ 2769 #line 581 "src/src/glsl/glcpp/glcpp-parse.y" 2770 { (yyval.ival) = '|'; } 2771 break; 2772 2773 case 102: 2774 2775 /* Line 1806 of yacc.c */ 2776 #line 582 "src/src/glsl/glcpp/glcpp-parse.y" 2777 { (yyval.ival) = AND; } 2778 break; 2779 2780 case 103: 2781 2782 /* Line 1806 of yacc.c */ 2783 #line 583 "src/src/glsl/glcpp/glcpp-parse.y" 2784 { (yyval.ival) = OR; } 2785 break; 2786 2787 case 104: 2788 2789 /* Line 1806 of yacc.c */ 2790 #line 584 "src/src/glsl/glcpp/glcpp-parse.y" 2791 { (yyval.ival) = ';'; } 2792 break; 2793 2794 case 105: 2795 2796 /* Line 1806 of yacc.c */ 2797 #line 585 "src/src/glsl/glcpp/glcpp-parse.y" 2798 { (yyval.ival) = ','; } 2799 break; 2800 2801 case 106: 2802 2803 /* Line 1806 of yacc.c */ 2804 #line 586 "src/src/glsl/glcpp/glcpp-parse.y" 2805 { (yyval.ival) = '='; } 2806 break; 2807 2808 case 107: 2809 2810 /* Line 1806 of yacc.c */ 2811 #line 587 "src/src/glsl/glcpp/glcpp-parse.y" 2812 { (yyval.ival) = PASTE; } 2813 break; 2814 2815 2816 2817 /* Line 1806 of yacc.c */ 2818 #line 2819 "src/chromium_gensrc/mesa/glcpp-parse.c" 2819 default: break; 2820 } 2821 /* User semantic actions sometimes alter yychar, and that requires 2822 that yytoken be updated with the new translation. We take the 2823 approach of translating immediately before every use of yytoken. 2824 One alternative is translating here after every semantic action, 2825 but that translation would be missed if the semantic action invokes 2826 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 2827 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 2828 incorrect destructor might then be invoked immediately. In the 2829 case of YYERROR or YYBACKUP, subsequent parser actions might lead 2830 to an incorrect destructor call or verbose syntax error message 2831 before the lookahead is translated. */ 2832 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 2833 2834 YYPOPSTACK (yylen); 2835 yylen = 0; 2836 YY_STACK_PRINT (yyss, yyssp); 2837 2838 *++yyvsp = yyval; 2839 *++yylsp = yyloc; 2840 2841 /* Now `shift' the result of the reduction. Determine what state 2842 that goes to, based on the state we popped back to and the rule 2843 number reduced by. */ 2844 2845 yyn = yyr1[yyn]; 2846 2847 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 2848 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 2849 yystate = yytable[yystate]; 2850 else 2851 yystate = yydefgoto[yyn - YYNTOKENS]; 2852 2853 goto yynewstate; 2854 2855 2856 /*------------------------------------. 2857 | yyerrlab -- here on detecting error | 2858 `------------------------------------*/ 2859 yyerrlab: 2860 /* Make sure we have latest lookahead translation. See comments at 2861 user semantic actions for why this is necessary. */ 2862 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); 2863 2864 /* If not already recovering from an error, report this error. */ 2865 if (!yyerrstatus) 2866 { 2867 ++yynerrs; 2868 #if ! YYERROR_VERBOSE 2869 yyerror (&yylloc, parser, YY_("syntax error")); 2870 #else 2871 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ 2872 yyssp, yytoken) 2873 { 2874 char const *yymsgp = YY_("syntax error"); 2875 int yysyntax_error_status; 2876 yysyntax_error_status = YYSYNTAX_ERROR; 2877 if (yysyntax_error_status == 0) 2878 yymsgp = yymsg; 2879 else if (yysyntax_error_status == 1) 2880 { 2881 if (yymsg != yymsgbuf) 2882 YYSTACK_FREE (yymsg); 2883 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); 2884 if (!yymsg) 2885 { 2886 yymsg = yymsgbuf; 2887 yymsg_alloc = sizeof yymsgbuf; 2888 yysyntax_error_status = 2; 2889 } 2890 else 2891 { 2892 yysyntax_error_status = YYSYNTAX_ERROR; 2893 yymsgp = yymsg; 2894 } 2895 } 2896 yyerror (&yylloc, parser, yymsgp); 2897 if (yysyntax_error_status == 2) 2898 goto yyexhaustedlab; 2899 } 2900 # undef YYSYNTAX_ERROR 2901 #endif 2902 } 2903 2904 yyerror_range[1] = yylloc; 2905 2906 if (yyerrstatus == 3) 2907 { 2908 /* If just tried and failed to reuse lookahead token after an 2909 error, discard it. */ 2910 2911 if (yychar <= YYEOF) 2912 { 2913 /* Return failure if at end of input. */ 2914 if (yychar == YYEOF) 2915 YYABORT; 2916 } 2917 else 2918 { 2919 yydestruct ("Error: discarding", 2920 yytoken, &yylval, &yylloc, parser); 2921 yychar = YYEMPTY; 2922 } 2923 } 2924 2925 /* Else will try to reuse lookahead token after shifting the error 2926 token. */ 2927 goto yyerrlab1; 2928 2929 2930 /*---------------------------------------------------. 2931 | yyerrorlab -- error raised explicitly by YYERROR. | 2932 `---------------------------------------------------*/ 2933 yyerrorlab: 2934 2935 /* Pacify compilers like GCC when the user code never invokes 2936 YYERROR and the label yyerrorlab therefore never appears in user 2937 code. */ 2938 if (/*CONSTCOND*/ 0) 2939 goto yyerrorlab; 2940 2941 yyerror_range[1] = yylsp[1-yylen]; 2942 /* Do not reclaim the symbols of the rule which action triggered 2943 this YYERROR. */ 2944 YYPOPSTACK (yylen); 2945 yylen = 0; 2946 YY_STACK_PRINT (yyss, yyssp); 2947 yystate = *yyssp; 2948 goto yyerrlab1; 2949 2950 2951 /*-------------------------------------------------------------. 2952 | yyerrlab1 -- common code for both syntax error and YYERROR. | 2953 `-------------------------------------------------------------*/ 2954 yyerrlab1: 2955 yyerrstatus = 3; /* Each real token shifted decrements this. */ 2956 2957 for (;;) 2958 { 2959 yyn = yypact[yystate]; 2960 if (!yypact_value_is_default (yyn)) 2961 { 2962 yyn += YYTERROR; 2963 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 2964 { 2965 yyn = yytable[yyn]; 2966 if (0 < yyn) 2967 break; 2968 } 2969 } 2970 2971 /* Pop the current state because it cannot handle the error token. */ 2972 if (yyssp == yyss) 2973 YYABORT; 2974 2975 yyerror_range[1] = *yylsp; 2976 yydestruct ("Error: popping", 2977 yystos[yystate], yyvsp, yylsp, parser); 2978 YYPOPSTACK (1); 2979 yystate = *yyssp; 2980 YY_STACK_PRINT (yyss, yyssp); 2981 } 2982 2983 *++yyvsp = yylval; 2984 2985 yyerror_range[2] = yylloc; 2986 /* Using YYLLOC is tempting, but would change the location of 2987 the lookahead. YYLOC is available though. */ 2988 YYLLOC_DEFAULT (yyloc, yyerror_range, 2); 2989 *++yylsp = yyloc; 2990 2991 /* Shift the error token. */ 2992 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 2993 2994 yystate = yyn; 2995 goto yynewstate; 2996 2997 2998 /*-------------------------------------. 2999 | yyacceptlab -- YYACCEPT comes here. | 3000 `-------------------------------------*/ 3001 yyacceptlab: 3002 yyresult = 0; 3003 goto yyreturn; 3004 3005 /*-----------------------------------. 3006 | yyabortlab -- YYABORT comes here. | 3007 `-----------------------------------*/ 3008 yyabortlab: 3009 yyresult = 1; 3010 goto yyreturn; 3011 3012 #if !defined(yyoverflow) || YYERROR_VERBOSE 3013 /*-------------------------------------------------. 3014 | yyexhaustedlab -- memory exhaustion comes here. | 3015 `-------------------------------------------------*/ 3016 yyexhaustedlab: 3017 yyerror (&yylloc, parser, YY_("memory exhausted")); 3018 yyresult = 2; 3019 /* Fall through. */ 3020 #endif 3021 3022 yyreturn: 3023 if (yychar != YYEMPTY) 3024 { 3025 /* Make sure we have latest lookahead translation. See comments at 3026 user semantic actions for why this is necessary. */ 3027 yytoken = YYTRANSLATE (yychar); 3028 yydestruct ("Cleanup: discarding lookahead", 3029 yytoken, &yylval, &yylloc, parser); 3030 } 3031 /* Do not reclaim the symbols of the rule which action triggered 3032 this YYABORT or YYACCEPT. */ 3033 YYPOPSTACK (yylen); 3034 YY_STACK_PRINT (yyss, yyssp); 3035 while (yyssp != yyss) 3036 { 3037 yydestruct ("Cleanup: popping", 3038 yystos[*yyssp], yyvsp, yylsp, parser); 3039 YYPOPSTACK (1); 3040 } 3041 #ifndef yyoverflow 3042 if (yyss != yyssa) 3043 YYSTACK_FREE (yyss); 3044 #endif 3045 #if YYERROR_VERBOSE 3046 if (yymsg != yymsgbuf) 3047 YYSTACK_FREE (yymsg); 3048 #endif 3049 /* Make sure YYID is used. */ 3050 return YYID (yyresult); 3051 } 3052 3053 3054 3055 /* Line 2067 of yacc.c */ 3056 #line 590 "src/src/glsl/glcpp/glcpp-parse.y" 3057 3058 3059 string_list_t * 3060 _string_list_create (void *ctx) 3061 { 3062 string_list_t *list; 3063 3064 list = ralloc (ctx, string_list_t); 3065 list->head = NULL; 3066 list->tail = NULL; 3067 3068 return list; 3069 } 3070 3071 void 3072 _string_list_append_item (string_list_t *list, const char *str) 3073 { 3074 string_node_t *node; 3075 3076 node = ralloc (list, string_node_t); 3077 node->str = ralloc_strdup (node, str); 3078 3079 node->next = NULL; 3080 3081 if (list->head == NULL) { 3082 list->head = node; 3083 } else { 3084 list->tail->next = node; 3085 } 3086 3087 list->tail = node; 3088 } 3089 3090 int 3091 _string_list_contains (string_list_t *list, const char *member, int *index) 3092 { 3093 string_node_t *node; 3094 int i; 3095 3096 if (list == NULL) 3097 return 0; 3098 3099 for (i = 0, node = list->head; node; i++, node = node->next) { 3100 if (strcmp (node->str, member) == 0) { 3101 if (index) 3102 *index = i; 3103 return 1; 3104 } 3105 } 3106 3107 return 0; 3108 } 3109 3110 int 3111 _string_list_length (string_list_t *list) 3112 { 3113 int length = 0; 3114 string_node_t *node; 3115 3116 if (list == NULL) 3117 return 0; 3118 3119 for (node = list->head; node; node = node->next) 3120 length++; 3121 3122 return length; 3123 } 3124 3125 int 3126 _string_list_equal (string_list_t *a, string_list_t *b) 3127 { 3128 string_node_t *node_a, *node_b; 3129 3130 if (a == NULL && b == NULL) 3131 return 1; 3132 3133 if (a == NULL || b == NULL) 3134 return 0; 3135 3136 for (node_a = a->head, node_b = b->head; 3137 node_a && node_b; 3138 node_a = node_a->next, node_b = node_b->next) 3139 { 3140 if (strcmp (node_a->str, node_b->str)) 3141 return 0; 3142 } 3143 3144 /* Catch the case of lists being different lengths, (which 3145 * would cause the loop above to terminate after the shorter 3146 * list). */ 3147 return node_a == node_b; 3148 } 3149 3150 argument_list_t * 3151 _argument_list_create (void *ctx) 3152 { 3153 argument_list_t *list; 3154 3155 list = ralloc (ctx, argument_list_t); 3156 list->head = NULL; 3157 list->tail = NULL; 3158 3159 return list; 3160 } 3161 3162 void 3163 _argument_list_append (argument_list_t *list, token_list_t *argument) 3164 { 3165 argument_node_t *node; 3166 3167 node = ralloc (list, argument_node_t); 3168 node->argument = argument; 3169 3170 node->next = NULL; 3171 3172 if (list->head == NULL) { 3173 list->head = node; 3174 } else { 3175 list->tail->next = node; 3176 } 3177 3178 list->tail = node; 3179 } 3180 3181 int 3182 _argument_list_length (argument_list_t *list) 3183 { 3184 int length = 0; 3185 argument_node_t *node; 3186 3187 if (list == NULL) 3188 return 0; 3189 3190 for (node = list->head; node; node = node->next) 3191 length++; 3192 3193 return length; 3194 } 3195 3196 token_list_t * 3197 _argument_list_member_at (argument_list_t *list, int index) 3198 { 3199 argument_node_t *node; 3200 int i; 3201 3202 if (list == NULL) 3203 return NULL; 3204 3205 node = list->head; 3206 for (i = 0; i < index; i++) { 3207 node = node->next; 3208 if (node == NULL) 3209 break; 3210 } 3211 3212 if (node) 3213 return node->argument; 3214 3215 return NULL; 3216 } 3217 3218 /* Note: This function ralloc_steal()s the str pointer. */ 3219 token_t * 3220 _token_create_str (void *ctx, int type, char *str) 3221 { 3222 token_t *token; 3223 3224 token = ralloc (ctx, token_t); 3225 token->type = type; 3226 token->value.str = str; 3227 3228 ralloc_steal (token, str); 3229 3230 return token; 3231 } 3232 3233 token_t * 3234 _token_create_ival (void *ctx, int type, int ival) 3235 { 3236 token_t *token; 3237 3238 token = ralloc (ctx, token_t); 3239 token->type = type; 3240 token->value.ival = ival; 3241 3242 return token; 3243 } 3244 3245 token_list_t * 3246 _token_list_create (void *ctx) 3247 { 3248 token_list_t *list; 3249 3250 list = ralloc (ctx, token_list_t); 3251 list->head = NULL; 3252 list->tail = NULL; 3253 list->non_space_tail = NULL; 3254 3255 return list; 3256 } 3257 3258 void 3259 _token_list_append (token_list_t *list, token_t *token) 3260 { 3261 token_node_t *node; 3262 3263 node = ralloc (list, token_node_t); 3264 node->token = token; 3265 node->next = NULL; 3266 3267 if (list->head == NULL) { 3268 list->head = node; 3269 } else { 3270 list->tail->next = node; 3271 } 3272 3273 list->tail = node; 3274 if (token->type != SPACE) 3275 list->non_space_tail = node; 3276 } 3277 3278 void 3279 _token_list_append_list (token_list_t *list, token_list_t *tail) 3280 { 3281 if (tail == NULL || tail->head == NULL) 3282 return; 3283 3284 if (list->head == NULL) { 3285 list->head = tail->head; 3286 } else { 3287 list->tail->next = tail->head; 3288 } 3289 3290 list->tail = tail->tail; 3291 list->non_space_tail = tail->non_space_tail; 3292 } 3293 3294 static token_list_t * 3295 _token_list_copy (void *ctx, token_list_t *other) 3296 { 3297 token_list_t *copy; 3298 token_node_t *node; 3299 3300 if (other == NULL) 3301 return NULL; 3302 3303 copy = _token_list_create (ctx); 3304 for (node = other->head; node; node = node->next) { 3305 token_t *new_token = ralloc (copy, token_t); 3306 *new_token = *node->token; 3307 _token_list_append (copy, new_token); 3308 } 3309 3310 return copy; 3311 } 3312 3313 static void 3314 _token_list_trim_trailing_space (token_list_t *list) 3315 { 3316 token_node_t *tail, *next; 3317 3318 if (list->non_space_tail) { 3319 tail = list->non_space_tail->next; 3320 list->non_space_tail->next = NULL; 3321 list->tail = list->non_space_tail; 3322 3323 while (tail) { 3324 next = tail->next; 3325 ralloc_free (tail); 3326 tail = next; 3327 } 3328 } 3329 } 3330 3331 static int 3332 _token_list_is_empty_ignoring_space (token_list_t *l) 3333 { 3334 token_node_t *n; 3335 3336 if (l == NULL) 3337 return 1; 3338 3339 n = l->head; 3340 while (n != NULL && n->token->type == SPACE) 3341 n = n->next; 3342 3343 return n == NULL; 3344 } 3345 3346 int 3347 _token_list_equal_ignoring_space (token_list_t *a, token_list_t *b) 3348 { 3349 token_node_t *node_a, *node_b; 3350 3351 if (a == NULL || b == NULL) { 3352 int a_empty = _token_list_is_empty_ignoring_space(a); 3353 int b_empty = _token_list_is_empty_ignoring_space(b); 3354 return a_empty == b_empty; 3355 } 3356 3357 node_a = a->head; 3358 node_b = b->head; 3359 3360 while (1) 3361 { 3362 if (node_a == NULL && node_b == NULL) 3363 break; 3364 3365 if (node_a == NULL || node_b == NULL) 3366 return 0; 3367 3368 if (node_a->token->type == SPACE) { 3369 node_a = node_a->next; 3370 continue; 3371 } 3372 3373 if (node_b->token->type == SPACE) { 3374 node_b = node_b->next; 3375 continue; 3376 } 3377 3378 if (node_a->token->type != node_b->token->type) 3379 return 0; 3380 3381 switch (node_a->token->type) { 3382 case INTEGER: 3383 if (node_a->token->value.ival != 3384 node_b->token->value.ival) 3385 { 3386 return 0; 3387 } 3388 break; 3389 case IDENTIFIER: 3390 case INTEGER_STRING: 3391 case OTHER: 3392 if (strcmp (node_a->token->value.str, 3393 node_b->token->value.str)) 3394 { 3395 return 0; 3396 } 3397 break; 3398 } 3399 3400 node_a = node_a->next; 3401 node_b = node_b->next; 3402 } 3403 3404 return 1; 3405 } 3406 3407 static void 3408 _token_print (char **out, size_t *len, token_t *token) 3409 { 3410 if (token->type < 256) { 3411 ralloc_asprintf_rewrite_tail (out, len, "%c", token->type); 3412 return; 3413 } 3414 3415 switch (token->type) { 3416 case INTEGER: 3417 ralloc_asprintf_rewrite_tail (out, len, "%" PRIiMAX, token->value.ival); 3418 break; 3419 case IDENTIFIER: 3420 case INTEGER_STRING: 3421 case OTHER: 3422 ralloc_asprintf_rewrite_tail (out, len, "%s", token->value.str); 3423 break; 3424 case SPACE: 3425 ralloc_asprintf_rewrite_tail (out, len, " "); 3426 break; 3427 case LEFT_SHIFT: 3428 ralloc_asprintf_rewrite_tail (out, len, "<<"); 3429 break; 3430 case RIGHT_SHIFT: 3431 ralloc_asprintf_rewrite_tail (out, len, ">>"); 3432 break; 3433 case LESS_OR_EQUAL: 3434 ralloc_asprintf_rewrite_tail (out, len, "<="); 3435 break; 3436 case GREATER_OR_EQUAL: 3437 ralloc_asprintf_rewrite_tail (out, len, ">="); 3438 break; 3439 case EQUAL: 3440 ralloc_asprintf_rewrite_tail (out, len, "=="); 3441 break; 3442 case NOT_EQUAL: 3443 ralloc_asprintf_rewrite_tail (out, len, "!="); 3444 break; 3445 case AND: 3446 ralloc_asprintf_rewrite_tail (out, len, "&&"); 3447 break; 3448 case OR: 3449 ralloc_asprintf_rewrite_tail (out, len, "||"); 3450 break; 3451 case PASTE: 3452 ralloc_asprintf_rewrite_tail (out, len, "##"); 3453 break; 3454 case COMMA_FINAL: 3455 ralloc_asprintf_rewrite_tail (out, len, ","); 3456 break; 3457 case PLACEHOLDER: 3458 /* Nothing to print. */ 3459 break; 3460 default: 3461 assert(!"Error: Don't know how to print token."); 3462 break; 3463 } 3464 } 3465 3466 /* Return a new token (ralloc()ed off of 'token') formed by pasting 3467 * 'token' and 'other'. Note that this function may return 'token' or 3468 * 'other' directly rather than allocating anything new. 3469 * 3470 * Caution: Only very cursory error-checking is performed to see if 3471 * the final result is a valid single token. */ 3472 static token_t * 3473 _token_paste (glcpp_parser_t *parser, token_t *token, token_t *other) 3474 { 3475 token_t *combined = NULL; 3476 3477 /* Pasting a placeholder onto anything makes no change. */ 3478 if (other->type == PLACEHOLDER) 3479 return token; 3480 3481 /* When 'token' is a placeholder, just return 'other'. */ 3482 if (token->type == PLACEHOLDER) 3483 return other; 3484 3485 /* A very few single-character punctuators can be combined 3486 * with another to form a multi-character punctuator. */ 3487 switch (token->type) { 3488 case '<': 3489 if (other->type == '<') 3490 combined = _token_create_ival (token, LEFT_SHIFT, LEFT_SHIFT); 3491 else if (other->type == '=') 3492 combined = _token_create_ival (token, LESS_OR_EQUAL, LESS_OR_EQUAL); 3493 break; 3494 case '>': 3495 if (other->type == '>') 3496 combined = _token_create_ival (token, RIGHT_SHIFT, RIGHT_SHIFT); 3497 else if (other->type == '=') 3498 combined = _token_create_ival (token, GREATER_OR_EQUAL, GREATER_OR_EQUAL); 3499 break; 3500 case '=': 3501 if (other->type == '=') 3502 combined = _token_create_ival (token, EQUAL, EQUAL); 3503 break; 3504 case '!': 3505 if (other->type == '=') 3506 combined = _token_create_ival (token, NOT_EQUAL, NOT_EQUAL); 3507 break; 3508 case '&': 3509 if (other->type == '&') 3510 combined = _token_create_ival (token, AND, AND); 3511 break; 3512 case '|': 3513 if (other->type == '|') 3514 combined = _token_create_ival (token, OR, OR); 3515 break; 3516 } 3517 3518 if (combined != NULL) { 3519 /* Inherit the location from the first token */ 3520 combined->location = token->location; 3521 return combined; 3522 } 3523 3524 /* Two string-valued tokens can usually just be mashed 3525 * together. 3526 * 3527 * XXX: This isn't actually legitimate. Several things here 3528 * should result in a diagnostic since the result cannot be a 3529 * valid, single pre-processing token. For example, pasting 3530 * "123" and "abc" is not legal, but we don't catch that 3531 * here. */ 3532 if ((token->type == IDENTIFIER || token->type == OTHER || token->type == INTEGER_STRING) && 3533 (other->type == IDENTIFIER || other->type == OTHER || other->type == INTEGER_STRING)) 3534 { 3535 char *str; 3536 3537 str = ralloc_asprintf (token, "%s%s", token->value.str, 3538 other->value.str); 3539 combined = _token_create_str (token, token->type, str); 3540 combined->location = token->location; 3541 return combined; 3542 } 3543 3544 glcpp_error (&token->location, parser, ""); 3545 ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "Pasting \""); 3546 _token_print (&parser->info_log, &parser->info_log_length, token); 3547 ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "\" and \""); 3548 _token_print (&parser->info_log, &parser->info_log_length, other); 3549 ralloc_asprintf_rewrite_tail (&parser->info_log, &parser->info_log_length, "\" does not give a valid preprocessing token.\n"); 3550 3551 return token; 3552 } 3553 3554 static void 3555 _token_list_print (glcpp_parser_t *parser, token_list_t *list) 3556 { 3557 token_node_t *node; 3558 3559 if (list == NULL) 3560 return; 3561 3562 for (node = list->head; node; node = node->next) 3563 _token_print (&parser->output, &parser->output_length, node->token); 3564 } 3565 3566 void 3567 yyerror (YYLTYPE *locp, glcpp_parser_t *parser, const char *error) 3568 { 3569 glcpp_error(locp, parser, "%s", error); 3570 } 3571 3572 static void add_builtin_define(glcpp_parser_t *parser, 3573 const char *name, int value) 3574 { 3575 token_t *tok; 3576 token_list_t *list; 3577 3578 tok = _token_create_ival (parser, INTEGER, value); 3579 3580 list = _token_list_create(parser); 3581 _token_list_append(list, tok); 3582 _define_object_macro(parser, NULL, name, list); 3583 } 3584 3585 glcpp_parser_t * 3586 glcpp_parser_create (const struct gl_extensions *extensions, int api) 3587 { 3588 glcpp_parser_t *parser; 3589 int language_version; 3590 3591 parser = ralloc (NULL, glcpp_parser_t); 3592 3593 glcpp_lex_init_extra (parser, &parser->scanner); 3594 parser->defines = hash_table_ctor (32, hash_table_string_hash, 3595 hash_table_string_compare); 3596 parser->active = NULL; 3597 parser->lexing_if = 0; 3598 parser->space_tokens = 1; 3599 parser->newline_as_space = 0; 3600 parser->in_control_line = 0; 3601 parser->paren_count = 0; 3602 3603 parser->skip_stack = NULL; 3604 3605 parser->lex_from_list = NULL; 3606 parser->lex_from_node = NULL; 3607 3608 parser->output = ralloc_strdup(parser, ""); 3609 parser->output_length = 0; 3610 parser->info_log = ralloc_strdup(parser, ""); 3611 parser->info_log_length = 0; 3612 parser->error = 0; 3613 3614 parser->has_new_line_number = 0; 3615 parser->new_line_number = 1; 3616 parser->has_new_source_number = 0; 3617 parser->new_source_number = 0; 3618 3619 /* Add pre-defined macros. */ 3620 add_builtin_define(parser, "GL_ARB_draw_buffers", 1); 3621 add_builtin_define(parser, "GL_ARB_texture_rectangle", 1); 3622 3623 if (api == API_OPENGLES2) 3624 add_builtin_define(parser, "GL_ES", 1); 3625 3626 if (extensions != NULL) { 3627 if (extensions->EXT_texture_array) { 3628 add_builtin_define(parser, "GL_EXT_texture_array", 1); 3629 } 3630 3631 if (extensions->ARB_fragment_coord_conventions) 3632 add_builtin_define(parser, "GL_ARB_fragment_coord_conventions", 3633 1); 3634 3635 if (extensions->ARB_explicit_attrib_location) 3636 add_builtin_define(parser, "GL_ARB_explicit_attrib_location", 1); 3637 3638 if (extensions->ARB_shader_texture_lod) 3639 add_builtin_define(parser, "GL_ARB_shader_texture_lod", 1); 3640 3641 if (extensions->ARB_draw_instanced) 3642 add_builtin_define(parser, "GL_ARB_draw_instanced", 1); 3643 3644 if (extensions->ARB_conservative_depth) { 3645 add_builtin_define(parser, "GL_AMD_conservative_depth", 1); 3646 add_builtin_define(parser, "GL_ARB_conservative_depth", 1); 3647 } 3648 3649 if (extensions->OES_EGL_image_external) 3650 add_builtin_define(parser, "GL_OES_EGL_image_external", 1); 3651 3652 if (extensions->ARB_shader_bit_encoding) 3653 add_builtin_define(parser, "GL_ARB_shader_bit_encoding", 1); 3654 3655 if (extensions->ARB_uniform_buffer_object) 3656 add_builtin_define(parser, "GL_ARB_uniform_buffer_object", 1); 3657 } 3658 3659 language_version = 110; 3660 add_builtin_define(parser, "__VERSION__", language_version); 3661 3662 return parser; 3663 } 3664 3665 void 3666 glcpp_parser_destroy (glcpp_parser_t *parser) 3667 { 3668 glcpp_lex_destroy (parser->scanner); 3669 hash_table_dtor (parser->defines); 3670 ralloc_free (parser); 3671 } 3672 3673 typedef enum function_status 3674 { 3675 FUNCTION_STATUS_SUCCESS, 3676 FUNCTION_NOT_A_FUNCTION, 3677 FUNCTION_UNBALANCED_PARENTHESES 3678 } function_status_t; 3679 3680 /* Find a set of function-like macro arguments by looking for a 3681 * balanced set of parentheses. 3682 * 3683 * When called, 'node' should be the opening-parenthesis token, (or 3684 * perhaps preceeding SPACE tokens). Upon successful return *last will 3685 * be the last consumed node, (corresponding to the closing right 3686 * parenthesis). 3687 * 3688 * Return values: 3689 * 3690 * FUNCTION_STATUS_SUCCESS: 3691 * 3692 * Successfully parsed a set of function arguments. 3693 * 3694 * FUNCTION_NOT_A_FUNCTION: 3695 * 3696 * Macro name not followed by a '('. This is not an error, but 3697 * simply that the macro name should be treated as a non-macro. 3698 * 3699 * FUNCTION_UNBALANCED_PARENTHESES 3700 * 3701 * Macro name is not followed by a balanced set of parentheses. 3702 */ 3703 static function_status_t 3704 _arguments_parse (argument_list_t *arguments, 3705 token_node_t *node, 3706 token_node_t **last) 3707 { 3708 token_list_t *argument; 3709 int paren_count; 3710 3711 node = node->next; 3712 3713 /* Ignore whitespace before first parenthesis. */ 3714 while (node && node->token->type == SPACE) 3715 node = node->next; 3716 3717 if (node == NULL || node->token->type != '(') 3718 return FUNCTION_NOT_A_FUNCTION; 3719 3720 node = node->next; 3721 3722 argument = _token_list_create (arguments); 3723 _argument_list_append (arguments, argument); 3724 3725 for (paren_count = 1; node; node = node->next) { 3726 if (node->token->type == '(') 3727 { 3728 paren_count++; 3729 } 3730 else if (node->token->type == ')') 3731 { 3732 paren_count--; 3733 if (paren_count == 0) 3734 break; 3735 } 3736 3737 if (node->token->type == ',' && 3738 paren_count == 1) 3739 { 3740 _token_list_trim_trailing_space (argument); 3741 argument = _token_list_create (arguments); 3742 _argument_list_append (arguments, argument); 3743 } 3744 else { 3745 if (argument->head == NULL) { 3746 /* Don't treat initial whitespace as 3747 * part of the arguement. */ 3748 if (node->token->type == SPACE) 3749 continue; 3750 } 3751 _token_list_append (argument, node->token); 3752 } 3753 } 3754 3755 if (paren_count) 3756 return FUNCTION_UNBALANCED_PARENTHESES; 3757 3758 *last = node; 3759 3760 return FUNCTION_STATUS_SUCCESS; 3761 } 3762 3763 static token_list_t * 3764 _token_list_create_with_one_space (void *ctx) 3765 { 3766 token_list_t *list; 3767 token_t *space; 3768 3769 list = _token_list_create (ctx); 3770 space = _token_create_ival (list, SPACE, SPACE); 3771 _token_list_append (list, space); 3772 3773 return list; 3774 } 3775 3776 /* Perform macro expansion on 'list', placing the resulting tokens 3777 * into a new list which is initialized with a first token of type 3778 * 'head_token_type'. Then begin lexing from the resulting list, 3779 * (return to the current lexing source when this list is exhausted). 3780 */ 3781 static void 3782 _glcpp_parser_expand_and_lex_from (glcpp_parser_t *parser, 3783 int head_token_type, 3784 token_list_t *list) 3785 { 3786 token_list_t *expanded; 3787 token_t *token; 3788 3789 expanded = _token_list_create (parser); 3790 token = _token_create_ival (parser, head_token_type, head_token_type); 3791 _token_list_append (expanded, token); 3792 _glcpp_parser_expand_token_list (parser, list); 3793 _token_list_append_list (expanded, list); 3794 glcpp_parser_lex_from (parser, expanded); 3795 } 3796 3797 static void 3798 _glcpp_parser_apply_pastes (glcpp_parser_t *parser, token_list_t *list) 3799 { 3800 token_node_t *node; 3801 3802 node = list->head; 3803 while (node) 3804 { 3805 token_node_t *next_non_space; 3806 3807 /* Look ahead for a PASTE token, skipping space. */ 3808 next_non_space = node->next; 3809 while (next_non_space && next_non_space->token->type == SPACE) 3810 next_non_space = next_non_space->next; 3811 3812 if (next_non_space == NULL) 3813 break; 3814 3815 if (next_non_space->token->type != PASTE) { 3816 node = next_non_space; 3817 continue; 3818 } 3819 3820 /* Now find the next non-space token after the PASTE. */ 3821 next_non_space = next_non_space->next; 3822 while (next_non_space && next_non_space->token->type == SPACE) 3823 next_non_space = next_non_space->next; 3824 3825 if (next_non_space == NULL) { 3826 yyerror (&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); 3827 return; 3828 } 3829 3830 node->token = _token_paste (parser, node->token, next_non_space->token); 3831 node->next = next_non_space->next; 3832 if (next_non_space == list->tail) 3833 list->tail = node; 3834 } 3835 3836 list->non_space_tail = list->tail; 3837 } 3838 3839 /* This is a helper function that's essentially part of the 3840 * implementation of _glcpp_parser_expand_node. It shouldn't be called 3841 * except for by that function. 3842 * 3843 * Returns NULL if node is a simple token with no expansion, (that is, 3844 * although 'node' corresponds to an identifier defined as a 3845 * function-like macro, it is not followed with a parenthesized 3846 * argument list). 3847 * 3848 * Compute the complete expansion of node (which is a function-like 3849 * macro) and subsequent nodes which are arguments. 3850 * 3851 * Returns the token list that results from the expansion and sets 3852 * *last to the last node in the list that was consumed by the 3853 * expansion. Specifically, *last will be set as follows: as the 3854 * token of the closing right parenthesis. 3855 */ 3856 static token_list_t * 3857 _glcpp_parser_expand_function (glcpp_parser_t *parser, 3858 token_node_t *node, 3859 token_node_t **last) 3860 3861 { 3862 macro_t *macro; 3863 const char *identifier; 3864 argument_list_t *arguments; 3865 function_status_t status; 3866 token_list_t *substituted; 3867 int parameter_index; 3868 3869 identifier = node->token->value.str; 3870 3871 macro = hash_table_find (parser->defines, identifier); 3872 3873 assert (macro->is_function); 3874 3875 arguments = _argument_list_create (parser); 3876 status = _arguments_parse (arguments, node, last); 3877 3878 switch (status) { 3879 case FUNCTION_STATUS_SUCCESS: 3880 break; 3881 case FUNCTION_NOT_A_FUNCTION: 3882 return NULL; 3883 case FUNCTION_UNBALANCED_PARENTHESES: 3884 glcpp_error (&node->token->location, parser, "Macro %s call has unbalanced parentheses\n", identifier); 3885 return NULL; 3886 } 3887 3888 /* Replace a macro defined as empty with a SPACE token. */ 3889 if (macro->replacements == NULL) { 3890 ralloc_free (arguments); 3891 return _token_list_create_with_one_space (parser); 3892 } 3893 3894 if (! ((_argument_list_length (arguments) == 3895 _string_list_length (macro->parameters)) || 3896 (_string_list_length (macro->parameters) == 0 && 3897 _argument_list_length (arguments) == 1 && 3898 arguments->head->argument->head == NULL))) 3899 { 3900 glcpp_error (&node->token->location, parser, 3901 "Error: macro %s invoked with %d arguments (expected %d)\n", 3902 identifier, 3903 _argument_list_length (arguments), 3904 _string_list_length (macro->parameters)); 3905 return NULL; 3906 } 3907 3908 /* Perform argument substitution on the replacement list. */ 3909 substituted = _token_list_create (arguments); 3910 3911 for (node = macro->replacements->head; node; node = node->next) 3912 { 3913 if (node->token->type == IDENTIFIER && 3914 _string_list_contains (macro->parameters, 3915 node->token->value.str, 3916 ¶meter_index)) 3917 { 3918 token_list_t *argument; 3919 argument = _argument_list_member_at (arguments, 3920 parameter_index); 3921 /* Before substituting, we expand the argument 3922 * tokens, or append a placeholder token for 3923 * an empty argument. */ 3924 if (argument->head) { 3925 token_list_t *expanded_argument; 3926 expanded_argument = _token_list_copy (parser, 3927 argument); 3928 _glcpp_parser_expand_token_list (parser, 3929 expanded_argument); 3930 _token_list_append_list (substituted, 3931 expanded_argument); 3932 } else { 3933 token_t *new_token; 3934 3935 new_token = _token_create_ival (substituted, 3936 PLACEHOLDER, 3937 PLACEHOLDER); 3938 _token_list_append (substituted, new_token); 3939 } 3940 } else { 3941 _token_list_append (substituted, node->token); 3942 } 3943 } 3944 3945 /* After argument substitution, and before further expansion 3946 * below, implement token pasting. */ 3947 3948 _token_list_trim_trailing_space (substituted); 3949 3950 _glcpp_parser_apply_pastes (parser, substituted); 3951 3952 return substituted; 3953 } 3954 3955 /* Compute the complete expansion of node, (and subsequent nodes after 3956 * 'node' in the case that 'node' is a function-like macro and 3957 * subsequent nodes are arguments). 3958 * 3959 * Returns NULL if node is a simple token with no expansion. 3960 * 3961 * Otherwise, returns the token list that results from the expansion 3962 * and sets *last to the last node in the list that was consumed by 3963 * the expansion. Specifically, *last will be set as follows: 3964 * 3965 * As 'node' in the case of object-like macro expansion. 3966 * 3967 * As the token of the closing right parenthesis in the case of 3968 * function-like macro expansion. 3969 */ 3970 static token_list_t * 3971 _glcpp_parser_expand_node (glcpp_parser_t *parser, 3972 token_node_t *node, 3973 token_node_t **last) 3974 { 3975 token_t *token = node->token; 3976 const char *identifier; 3977 macro_t *macro; 3978 3979 /* We only expand identifiers */ 3980 if (token->type != IDENTIFIER) { 3981 /* We change any COMMA into a COMMA_FINAL to prevent 3982 * it being mistaken for an argument separator 3983 * later. */ 3984 if (token->type == ',') { 3985 token->type = COMMA_FINAL; 3986 token->value.ival = COMMA_FINAL; 3987 } 3988 3989 return NULL; 3990 } 3991 3992 /* Look up this identifier in the hash table. */ 3993 identifier = token->value.str; 3994 macro = hash_table_find (parser->defines, identifier); 3995 3996 /* Not a macro, so no expansion needed. */ 3997 if (macro == NULL) 3998 return NULL; 3999 4000 /* Finally, don't expand this macro if we're already actively 4001 * expanding it, (to avoid infinite recursion). */ 4002 if (_parser_active_list_contains (parser, identifier)) { 4003 /* We change the token type here from IDENTIFIER to 4004 * OTHER to prevent any future expansion of this 4005 * unexpanded token. */ 4006 char *str; 4007 token_list_t *expansion; 4008 token_t *final; 4009 4010 str = ralloc_strdup (parser, token->value.str); 4011 final = _token_create_str (parser, OTHER, str); 4012 expansion = _token_list_create (parser); 4013 _token_list_append (expansion, final); 4014 *last = node; 4015 return expansion; 4016 } 4017 4018 if (! macro->is_function) 4019 { 4020 token_list_t *replacement; 4021 *last = node; 4022 4023 /* Replace a macro defined as empty with a SPACE token. */ 4024 if (macro->replacements == NULL) 4025 return _token_list_create_with_one_space (parser); 4026 4027 replacement = _token_list_copy (parser, macro->replacements); 4028 _glcpp_parser_apply_pastes (parser, replacement); 4029 return replacement; 4030 } 4031 4032 return _glcpp_parser_expand_function (parser, node, last); 4033 } 4034 4035 /* Push a new identifier onto the parser's active list. 4036 * 4037 * Here, 'marker' is the token node that appears in the list after the 4038 * expansion of 'identifier'. That is, when the list iterator begins 4039 * examining 'marker', then it is time to pop this node from the 4040 * active stack. 4041 */ 4042 static void 4043 _parser_active_list_push (glcpp_parser_t *parser, 4044 const char *identifier, 4045 token_node_t *marker) 4046 { 4047 active_list_t *node; 4048 4049 node = ralloc (parser->active, active_list_t); 4050 node->identifier = ralloc_strdup (node, identifier); 4051 node->marker = marker; 4052 node->next = parser->active; 4053 4054 parser->active = node; 4055 } 4056 4057 static void 4058 _parser_active_list_pop (glcpp_parser_t *parser) 4059 { 4060 active_list_t *node = parser->active; 4061 4062 if (node == NULL) { 4063 parser->active = NULL; 4064 return; 4065 } 4066 4067 node = parser->active->next; 4068 ralloc_free (parser->active); 4069 4070 parser->active = node; 4071 } 4072 4073 static int 4074 _parser_active_list_contains (glcpp_parser_t *parser, const char *identifier) 4075 { 4076 active_list_t *node; 4077 4078 if (parser->active == NULL) 4079 return 0; 4080 4081 for (node = parser->active; node; node = node->next) 4082 if (strcmp (node->identifier, identifier) == 0) 4083 return 1; 4084 4085 return 0; 4086 } 4087 4088 /* Walk over the token list replacing nodes with their expansion. 4089 * Whenever nodes are expanded the walking will walk over the new 4090 * nodes, continuing to expand as necessary. The results are placed in 4091 * 'list' itself; 4092 */ 4093 static void 4094 _glcpp_parser_expand_token_list (glcpp_parser_t *parser, 4095 token_list_t *list) 4096 { 4097 token_node_t *node_prev; 4098 token_node_t *node, *last = NULL; 4099 token_list_t *expansion; 4100 active_list_t *active_initial = parser->active; 4101 4102 if (list == NULL) 4103 return; 4104 4105 _token_list_trim_trailing_space (list); 4106 4107 node_prev = NULL; 4108 node = list->head; 4109 4110 while (node) { 4111 4112 while (parser->active && parser->active->marker == node) 4113 _parser_active_list_pop (parser); 4114 4115 expansion = _glcpp_parser_expand_node (parser, node, &last); 4116 if (expansion) { 4117 token_node_t *n; 4118 4119 for (n = node; n != last->next; n = n->next) 4120 while (parser->active && 4121 parser->active->marker == n) 4122 { 4123 _parser_active_list_pop (parser); 4124 } 4125 4126 _parser_active_list_push (parser, 4127 node->token->value.str, 4128 last->next); 4129 4130 /* Splice expansion into list, supporting a 4131 * simple deletion if the expansion is 4132 * empty. */ 4133 if (expansion->head) { 4134 if (node_prev) 4135 node_prev->next = expansion->head; 4136 else 4137 list->head = expansion->head; 4138 expansion->tail->next = last->next; 4139 if (last == list->tail) 4140 list->tail = expansion->tail; 4141 } else { 4142 if (node_prev) 4143 node_prev->next = last->next; 4144 else 4145 list->head = last->next; 4146 if (last == list->tail) 4147 list->tail = NULL; 4148 } 4149 } else { 4150 node_prev = node; 4151 } 4152 node = node_prev ? node_prev->next : list->head; 4153 } 4154 4155 /* Remove any lingering effects of this invocation on the 4156 * active list. That is, pop until the list looks like it did 4157 * at the beginning of this function. */ 4158 while (parser->active && parser->active != active_initial) 4159 _parser_active_list_pop (parser); 4160 4161 list->non_space_tail = list->tail; 4162 } 4163 4164 void 4165 _glcpp_parser_print_expanded_token_list (glcpp_parser_t *parser, 4166 token_list_t *list) 4167 { 4168 if (list == NULL) 4169 return; 4170 4171 _glcpp_parser_expand_token_list (parser, list); 4172 4173 _token_list_trim_trailing_space (list); 4174 4175 _token_list_print (parser, list); 4176 } 4177 4178 static void 4179 _check_for_reserved_macro_name (glcpp_parser_t *parser, YYLTYPE *loc, 4180 const char *identifier) 4181 { 4182 /* According to the GLSL specification, macro names starting with "__" 4183 * or "GL_" are reserved for future use. So, don't allow them. 4184 */ 4185 if (strstr(identifier, "__")) { 4186 glcpp_error (loc, parser, "Macro names containing \"__\" are reserved.\n"); 4187 } 4188 if (strncmp(identifier, "GL_", 3) == 0) { 4189 glcpp_error (loc, parser, "Macro names starting with \"GL_\" are reserved.\n"); 4190 } 4191 } 4192 4193 static int 4194 _macro_equal (macro_t *a, macro_t *b) 4195 { 4196 if (a->is_function != b->is_function) 4197 return 0; 4198 4199 if (a->is_function) { 4200 if (! _string_list_equal (a->parameters, b->parameters)) 4201 return 0; 4202 } 4203 4204 return _token_list_equal_ignoring_space (a->replacements, 4205 b->replacements); 4206 } 4207 4208 void 4209 _define_object_macro (glcpp_parser_t *parser, 4210 YYLTYPE *loc, 4211 const char *identifier, 4212 token_list_t *replacements) 4213 { 4214 macro_t *macro, *previous; 4215 4216 if (loc != NULL) 4217 _check_for_reserved_macro_name(parser, loc, identifier); 4218 4219 macro = ralloc (parser, macro_t); 4220 4221 macro->is_function = 0; 4222 macro->parameters = NULL; 4223 macro->identifier = ralloc_strdup (macro, identifier); 4224 macro->replacements = replacements; 4225 ralloc_steal (macro, replacements); 4226 4227 previous = hash_table_find (parser->defines, identifier); 4228 if (previous) { 4229 if (_macro_equal (macro, previous)) { 4230 ralloc_free (macro); 4231 return; 4232 } 4233 glcpp_error (loc, parser, "Redefinition of macro %s\n", 4234 identifier); 4235 } 4236 4237 hash_table_insert (parser->defines, macro, identifier); 4238 } 4239 4240 void 4241 _define_function_macro (glcpp_parser_t *parser, 4242 YYLTYPE *loc, 4243 const char *identifier, 4244 string_list_t *parameters, 4245 token_list_t *replacements) 4246 { 4247 macro_t *macro, *previous; 4248 4249 _check_for_reserved_macro_name(parser, loc, identifier); 4250 4251 macro = ralloc (parser, macro_t); 4252 ralloc_steal (macro, parameters); 4253 ralloc_steal (macro, replacements); 4254 4255 macro->is_function = 1; 4256 macro->parameters = parameters; 4257 macro->identifier = ralloc_strdup (macro, identifier); 4258 macro->replacements = replacements; 4259 previous = hash_table_find (parser->defines, identifier); 4260 if (previous) { 4261 if (_macro_equal (macro, previous)) { 4262 ralloc_free (macro); 4263 return; 4264 } 4265 glcpp_error (loc, parser, "Redefinition of macro %s\n", 4266 identifier); 4267 } 4268 4269 hash_table_insert (parser->defines, macro, identifier); 4270 } 4271 4272 static int 4273 glcpp_parser_lex (YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser) 4274 { 4275 token_node_t *node; 4276 int ret; 4277 4278 if (parser->lex_from_list == NULL) { 4279 ret = glcpp_lex (yylval, yylloc, parser->scanner); 4280 4281 /* XXX: This ugly block of code exists for the sole 4282 * purpose of converting a NEWLINE token into a SPACE 4283 * token, but only in the case where we have seen a 4284 * function-like macro name, but have not yet seen its 4285 * closing parenthesis. 4286 * 4287 * There's perhaps a more compact way to do this with 4288 * mid-rule actions in the grammar. 4289 * 4290 * I'm definitely not pleased with the complexity of 4291 * this code here. 4292 */ 4293 if (parser->newline_as_space) 4294 { 4295 if (ret == '(') { 4296 parser->paren_count++; 4297 } else if (ret == ')') { 4298 parser->paren_count--; 4299 if (parser->paren_count == 0) 4300 parser->newline_as_space = 0; 4301 } else if (ret == NEWLINE) { 4302 ret = SPACE; 4303 } else if (ret != SPACE) { 4304 if (parser->paren_count == 0) 4305 parser->newline_as_space = 0; 4306 } 4307 } 4308 else if (parser->in_control_line) 4309 { 4310 if (ret == NEWLINE) 4311 parser->in_control_line = 0; 4312 } 4313 else if (ret == HASH_DEFINE || 4314 ret == HASH_UNDEF || ret == HASH_IF || 4315 ret == HASH_IFDEF || ret == HASH_IFNDEF || 4316 ret == HASH_ELIF || ret == HASH_ELSE || 4317 ret == HASH_ENDIF || ret == HASH) 4318 { 4319 parser->in_control_line = 1; 4320 } 4321 else if (ret == IDENTIFIER) 4322 { 4323 macro_t *macro; 4324 macro = hash_table_find (parser->defines, 4325 yylval->str); 4326 if (macro && macro->is_function) { 4327 parser->newline_as_space = 1; 4328 parser->paren_count = 0; 4329 } 4330 } 4331 4332 return ret; 4333 } 4334 4335 node = parser->lex_from_node; 4336 4337 if (node == NULL) { 4338 ralloc_free (parser->lex_from_list); 4339 parser->lex_from_list = NULL; 4340 return NEWLINE; 4341 } 4342 4343 *yylval = node->token->value; 4344 ret = node->token->type; 4345 4346 parser->lex_from_node = node->next; 4347 4348 return ret; 4349 } 4350 4351 static void 4352 glcpp_parser_lex_from (glcpp_parser_t *parser, token_list_t *list) 4353 { 4354 token_node_t *node; 4355 4356 assert (parser->lex_from_list == NULL); 4357 4358 /* Copy list, eliminating any space tokens. */ 4359 parser->lex_from_list = _token_list_create (parser); 4360 4361 for (node = list->head; node; node = node->next) { 4362 if (node->token->type == SPACE) 4363 continue; 4364 _token_list_append (parser->lex_from_list, node->token); 4365 } 4366 4367 ralloc_free (list); 4368 4369 parser->lex_from_node = parser->lex_from_list->head; 4370 4371 /* It's possible the list consisted of nothing but whitespace. */ 4372 if (parser->lex_from_node == NULL) { 4373 ralloc_free (parser->lex_from_list); 4374 parser->lex_from_list = NULL; 4375 } 4376 } 4377 4378 static void 4379 _glcpp_parser_skip_stack_push_if (glcpp_parser_t *parser, YYLTYPE *loc, 4380 int condition) 4381 { 4382 skip_type_t current = SKIP_NO_SKIP; 4383 skip_node_t *node; 4384 4385 if (parser->skip_stack) 4386 current = parser->skip_stack->type; 4387 4388 node = ralloc (parser, skip_node_t); 4389 node->loc = *loc; 4390 4391 if (current == SKIP_NO_SKIP) { 4392 if (condition) 4393 node->type = SKIP_NO_SKIP; 4394 else 4395 node->type = SKIP_TO_ELSE; 4396 } else { 4397 node->type = SKIP_TO_ENDIF; 4398 } 4399 4400 node->next = parser->skip_stack; 4401 parser->skip_stack = node; 4402 } 4403 4404 static void 4405 _glcpp_parser_skip_stack_change_if (glcpp_parser_t *parser, YYLTYPE *loc, 4406 const char *type, int condition) 4407 { 4408 if (parser->skip_stack == NULL) { 4409 glcpp_error (loc, parser, "%s without #if\n", type); 4410 return; 4411 } 4412 4413 if (parser->skip_stack->type == SKIP_TO_ELSE) { 4414 if (condition) 4415 parser->skip_stack->type = SKIP_NO_SKIP; 4416 } else { 4417 parser->skip_stack->type = SKIP_TO_ENDIF; 4418 } 4419 } 4420 4421 static void 4422 _glcpp_parser_skip_stack_pop (glcpp_parser_t *parser, YYLTYPE *loc) 4423 { 4424 skip_node_t *node; 4425 4426 if (parser->skip_stack == NULL) { 4427 glcpp_error (loc, parser, "#endif without #if\n"); 4428 return; 4429 } 4430 4431 node = parser->skip_stack; 4432 parser->skip_stack = node->next; 4433 ralloc_free (node); 4434 } 4435 4436