Home | History | Annotate | Download | only in mesa
      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 					   &parameter_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