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