xref: /nrf52832-nimble/rt-thread/tools/kconfig-frontends/libs/parser/yconf.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /* A Bison parser, made by GNU Bison 3.0.4.  */
2*10465441SEvalZero 
3*10465441SEvalZero /* Bison implementation for Yacc-like parsers in C
4*10465441SEvalZero 
5*10465441SEvalZero    Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
6*10465441SEvalZero 
7*10465441SEvalZero    This program is free software: you can redistribute it and/or modify
8*10465441SEvalZero    it under the terms of the GNU General Public License as published by
9*10465441SEvalZero    the Free Software Foundation, either version 3 of the License, or
10*10465441SEvalZero    (at your option) any later version.
11*10465441SEvalZero 
12*10465441SEvalZero    This program is distributed in the hope that it will be useful,
13*10465441SEvalZero    but WITHOUT ANY WARRANTY; without even the implied warranty of
14*10465441SEvalZero    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*10465441SEvalZero    GNU General Public License for more details.
16*10465441SEvalZero 
17*10465441SEvalZero    You should have received a copy of the GNU General Public License
18*10465441SEvalZero    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19*10465441SEvalZero 
20*10465441SEvalZero /* As a special exception, you may create a larger work that contains
21*10465441SEvalZero    part or all of the Bison parser skeleton and distribute that work
22*10465441SEvalZero    under terms of your choice, so long as that work isn't itself a
23*10465441SEvalZero    parser generator using the skeleton or a modified version thereof
24*10465441SEvalZero    as a parser skeleton.  Alternatively, if you modify or redistribute
25*10465441SEvalZero    the parser skeleton itself, you may (at your option) remove this
26*10465441SEvalZero    special exception, which will cause the skeleton and the resulting
27*10465441SEvalZero    Bison output files to be licensed under the GNU General Public
28*10465441SEvalZero    License without this special exception.
29*10465441SEvalZero 
30*10465441SEvalZero    This special exception was added by the Free Software Foundation in
31*10465441SEvalZero    version 2.2 of Bison.  */
32*10465441SEvalZero 
33*10465441SEvalZero /* C LALR(1) parser skeleton written by Richard Stallman, by
34*10465441SEvalZero    simplifying the original so-called "semantic" parser.  */
35*10465441SEvalZero 
36*10465441SEvalZero /* All symbols defined below should begin with yy or YY, to avoid
37*10465441SEvalZero    infringing on user name space.  This should be done even for local
38*10465441SEvalZero    variables, as they might otherwise be expanded by user macros.
39*10465441SEvalZero    There are some unavoidable exceptions within include files to
40*10465441SEvalZero    define necessary library symbols; they are noted "INFRINGES ON
41*10465441SEvalZero    USER NAME SPACE" below.  */
42*10465441SEvalZero 
43*10465441SEvalZero /* Identify Bison output.  */
44*10465441SEvalZero #define YYBISON 1
45*10465441SEvalZero 
46*10465441SEvalZero /* Bison version.  */
47*10465441SEvalZero #define YYBISON_VERSION "3.0.4"
48*10465441SEvalZero 
49*10465441SEvalZero /* Skeleton name.  */
50*10465441SEvalZero #define YYSKELETON_NAME "yacc.c"
51*10465441SEvalZero 
52*10465441SEvalZero /* Pure parsers.  */
53*10465441SEvalZero #define YYPURE 0
54*10465441SEvalZero 
55*10465441SEvalZero /* Push parsers.  */
56*10465441SEvalZero #define YYPUSH 0
57*10465441SEvalZero 
58*10465441SEvalZero /* Pull parsers.  */
59*10465441SEvalZero #define YYPULL 1
60*10465441SEvalZero 
61*10465441SEvalZero 
62*10465441SEvalZero /* Substitute the variable and function names.  */
63*10465441SEvalZero #define yyparse         zconfparse
64*10465441SEvalZero #define yylex           zconflex
65*10465441SEvalZero #define yyerror         zconferror
66*10465441SEvalZero #define yydebug         zconfdebug
67*10465441SEvalZero #define yynerrs         zconfnerrs
68*10465441SEvalZero 
69*10465441SEvalZero #define yylval          zconflval
70*10465441SEvalZero #define yychar          zconfchar
71*10465441SEvalZero 
72*10465441SEvalZero /* Copy the first part of user declarations.  */
73*10465441SEvalZero 
74*10465441SEvalZero 
75*10465441SEvalZero /*
76*10465441SEvalZero  * Copyright (C) 2002 Roman Zippel <[email protected]>
77*10465441SEvalZero  * Released under the terms of the GNU GPL v2.0.
78*10465441SEvalZero  */
79*10465441SEvalZero 
80*10465441SEvalZero #include <ctype.h>
81*10465441SEvalZero #include <stdarg.h>
82*10465441SEvalZero #include <stdio.h>
83*10465441SEvalZero #include <stdlib.h>
84*10465441SEvalZero #include <string.h>
85*10465441SEvalZero #include <stdbool.h>
86*10465441SEvalZero 
87*10465441SEvalZero #include "lkc.h"
88*10465441SEvalZero 
89*10465441SEvalZero #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
90*10465441SEvalZero 
91*10465441SEvalZero #define PRINTD		0x0001
92*10465441SEvalZero #define DEBUG_PARSE	0x0002
93*10465441SEvalZero 
94*10465441SEvalZero int cdebug = PRINTD;
95*10465441SEvalZero 
96*10465441SEvalZero extern int zconflex(void);
97*10465441SEvalZero static void zconfprint(const char *err, ...);
98*10465441SEvalZero static void zconf_error(const char *err, ...);
99*10465441SEvalZero static void zconferror(const char *err);
100*10465441SEvalZero static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
101*10465441SEvalZero 
102*10465441SEvalZero struct symbol *symbol_hash[SYMBOL_HASHSIZE];
103*10465441SEvalZero 
104*10465441SEvalZero static struct menu *current_menu, *current_entry;
105*10465441SEvalZero 
106*10465441SEvalZero 
107*10465441SEvalZero 
108*10465441SEvalZero 
109*10465441SEvalZero # ifndef YY_NULLPTR
110*10465441SEvalZero #  if defined __cplusplus && 201103L <= __cplusplus
111*10465441SEvalZero #   define YY_NULLPTR nullptr
112*10465441SEvalZero #  else
113*10465441SEvalZero #   define YY_NULLPTR 0
114*10465441SEvalZero #  endif
115*10465441SEvalZero # endif
116*10465441SEvalZero 
117*10465441SEvalZero /* Enabling verbose error messages.  */
118*10465441SEvalZero #ifdef YYERROR_VERBOSE
119*10465441SEvalZero # undef YYERROR_VERBOSE
120*10465441SEvalZero # define YYERROR_VERBOSE 1
121*10465441SEvalZero #else
122*10465441SEvalZero # define YYERROR_VERBOSE 0
123*10465441SEvalZero #endif
124*10465441SEvalZero 
125*10465441SEvalZero 
126*10465441SEvalZero /* Debug traces.  */
127*10465441SEvalZero #ifndef YYDEBUG
128*10465441SEvalZero # define YYDEBUG 1
129*10465441SEvalZero #endif
130*10465441SEvalZero #if YYDEBUG
131*10465441SEvalZero extern int zconfdebug;
132*10465441SEvalZero #endif
133*10465441SEvalZero 
134*10465441SEvalZero /* Token type.  */
135*10465441SEvalZero #ifndef YYTOKENTYPE
136*10465441SEvalZero # define YYTOKENTYPE
137*10465441SEvalZero   enum yytokentype
138*10465441SEvalZero   {
139*10465441SEvalZero     T_MAINMENU = 258,
140*10465441SEvalZero     T_MENU = 259,
141*10465441SEvalZero     T_ENDMENU = 260,
142*10465441SEvalZero     T_SOURCE = 261,
143*10465441SEvalZero     T_CHOICE = 262,
144*10465441SEvalZero     T_ENDCHOICE = 263,
145*10465441SEvalZero     T_COMMENT = 264,
146*10465441SEvalZero     T_CONFIG = 265,
147*10465441SEvalZero     T_MENUCONFIG = 266,
148*10465441SEvalZero     T_HELP = 267,
149*10465441SEvalZero     T_HELPTEXT = 268,
150*10465441SEvalZero     T_IF = 269,
151*10465441SEvalZero     T_ENDIF = 270,
152*10465441SEvalZero     T_DEPENDS = 271,
153*10465441SEvalZero     T_OPTIONAL = 272,
154*10465441SEvalZero     T_PROMPT = 273,
155*10465441SEvalZero     T_TYPE = 274,
156*10465441SEvalZero     T_DEFAULT = 275,
157*10465441SEvalZero     T_SELECT = 276,
158*10465441SEvalZero     T_IMPLY = 277,
159*10465441SEvalZero     T_RANGE = 278,
160*10465441SEvalZero     T_VISIBLE = 279,
161*10465441SEvalZero     T_OPTION = 280,
162*10465441SEvalZero     T_ON = 281,
163*10465441SEvalZero     T_WORD = 282,
164*10465441SEvalZero     T_WORD_QUOTE = 283,
165*10465441SEvalZero     T_UNEQUAL = 284,
166*10465441SEvalZero     T_LESS = 285,
167*10465441SEvalZero     T_LESS_EQUAL = 286,
168*10465441SEvalZero     T_GREATER = 287,
169*10465441SEvalZero     T_GREATER_EQUAL = 288,
170*10465441SEvalZero     T_CLOSE_PAREN = 289,
171*10465441SEvalZero     T_OPEN_PAREN = 290,
172*10465441SEvalZero     T_EOL = 291,
173*10465441SEvalZero     T_OR = 292,
174*10465441SEvalZero     T_AND = 293,
175*10465441SEvalZero     T_EQUAL = 294,
176*10465441SEvalZero     T_NOT = 295
177*10465441SEvalZero   };
178*10465441SEvalZero #endif
179*10465441SEvalZero /* Tokens.  */
180*10465441SEvalZero #define T_MAINMENU 258
181*10465441SEvalZero #define T_MENU 259
182*10465441SEvalZero #define T_ENDMENU 260
183*10465441SEvalZero #define T_SOURCE 261
184*10465441SEvalZero #define T_CHOICE 262
185*10465441SEvalZero #define T_ENDCHOICE 263
186*10465441SEvalZero #define T_COMMENT 264
187*10465441SEvalZero #define T_CONFIG 265
188*10465441SEvalZero #define T_MENUCONFIG 266
189*10465441SEvalZero #define T_HELP 267
190*10465441SEvalZero #define T_HELPTEXT 268
191*10465441SEvalZero #define T_IF 269
192*10465441SEvalZero #define T_ENDIF 270
193*10465441SEvalZero #define T_DEPENDS 271
194*10465441SEvalZero #define T_OPTIONAL 272
195*10465441SEvalZero #define T_PROMPT 273
196*10465441SEvalZero #define T_TYPE 274
197*10465441SEvalZero #define T_DEFAULT 275
198*10465441SEvalZero #define T_SELECT 276
199*10465441SEvalZero #define T_IMPLY 277
200*10465441SEvalZero #define T_RANGE 278
201*10465441SEvalZero #define T_VISIBLE 279
202*10465441SEvalZero #define T_OPTION 280
203*10465441SEvalZero #define T_ON 281
204*10465441SEvalZero #define T_WORD 282
205*10465441SEvalZero #define T_WORD_QUOTE 283
206*10465441SEvalZero #define T_UNEQUAL 284
207*10465441SEvalZero #define T_LESS 285
208*10465441SEvalZero #define T_LESS_EQUAL 286
209*10465441SEvalZero #define T_GREATER 287
210*10465441SEvalZero #define T_GREATER_EQUAL 288
211*10465441SEvalZero #define T_CLOSE_PAREN 289
212*10465441SEvalZero #define T_OPEN_PAREN 290
213*10465441SEvalZero #define T_EOL 291
214*10465441SEvalZero #define T_OR 292
215*10465441SEvalZero #define T_AND 293
216*10465441SEvalZero #define T_EQUAL 294
217*10465441SEvalZero #define T_NOT 295
218*10465441SEvalZero 
219*10465441SEvalZero /* Value type.  */
220*10465441SEvalZero #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
221*10465441SEvalZero 
222*10465441SEvalZero union YYSTYPE
223*10465441SEvalZero {
224*10465441SEvalZero 
225*10465441SEvalZero 
226*10465441SEvalZero 	char *string;
227*10465441SEvalZero 	struct file *file;
228*10465441SEvalZero 	struct symbol *symbol;
229*10465441SEvalZero 	struct expr *expr;
230*10465441SEvalZero 	struct menu *menu;
231*10465441SEvalZero 	const struct kconf_id *id;
232*10465441SEvalZero 
233*10465441SEvalZero 
234*10465441SEvalZero };
235*10465441SEvalZero 
236*10465441SEvalZero typedef union YYSTYPE YYSTYPE;
237*10465441SEvalZero # define YYSTYPE_IS_TRIVIAL 1
238*10465441SEvalZero # define YYSTYPE_IS_DECLARED 1
239*10465441SEvalZero #endif
240*10465441SEvalZero 
241*10465441SEvalZero 
242*10465441SEvalZero extern YYSTYPE zconflval;
243*10465441SEvalZero 
244*10465441SEvalZero int zconfparse (void);
245*10465441SEvalZero 
246*10465441SEvalZero 
247*10465441SEvalZero 
248*10465441SEvalZero /* Copy the second part of user declarations.  */
249*10465441SEvalZero 
250*10465441SEvalZero 
251*10465441SEvalZero /* Include zconf.hash.c here so it can see the token constants. */
252*10465441SEvalZero #include "hconf.c"
253*10465441SEvalZero 
254*10465441SEvalZero 
255*10465441SEvalZero 
256*10465441SEvalZero #ifdef short
257*10465441SEvalZero # undef short
258*10465441SEvalZero #endif
259*10465441SEvalZero 
260*10465441SEvalZero #ifdef YYTYPE_UINT8
261*10465441SEvalZero typedef YYTYPE_UINT8 yytype_uint8;
262*10465441SEvalZero #else
263*10465441SEvalZero typedef unsigned char yytype_uint8;
264*10465441SEvalZero #endif
265*10465441SEvalZero 
266*10465441SEvalZero #ifdef YYTYPE_INT8
267*10465441SEvalZero typedef YYTYPE_INT8 yytype_int8;
268*10465441SEvalZero #else
269*10465441SEvalZero typedef signed char yytype_int8;
270*10465441SEvalZero #endif
271*10465441SEvalZero 
272*10465441SEvalZero #ifdef YYTYPE_UINT16
273*10465441SEvalZero typedef YYTYPE_UINT16 yytype_uint16;
274*10465441SEvalZero #else
275*10465441SEvalZero typedef unsigned short int yytype_uint16;
276*10465441SEvalZero #endif
277*10465441SEvalZero 
278*10465441SEvalZero #ifdef YYTYPE_INT16
279*10465441SEvalZero typedef YYTYPE_INT16 yytype_int16;
280*10465441SEvalZero #else
281*10465441SEvalZero typedef short int yytype_int16;
282*10465441SEvalZero #endif
283*10465441SEvalZero 
284*10465441SEvalZero #ifndef YYSIZE_T
285*10465441SEvalZero # ifdef __SIZE_TYPE__
286*10465441SEvalZero #  define YYSIZE_T __SIZE_TYPE__
287*10465441SEvalZero # elif defined size_t
288*10465441SEvalZero #  define YYSIZE_T size_t
289*10465441SEvalZero # elif ! defined YYSIZE_T
290*10465441SEvalZero #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
291*10465441SEvalZero #  define YYSIZE_T size_t
292*10465441SEvalZero # else
293*10465441SEvalZero #  define YYSIZE_T unsigned int
294*10465441SEvalZero # endif
295*10465441SEvalZero #endif
296*10465441SEvalZero 
297*10465441SEvalZero #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
298*10465441SEvalZero 
299*10465441SEvalZero #ifndef YY_
300*10465441SEvalZero # if defined YYENABLE_NLS && YYENABLE_NLS
301*10465441SEvalZero #  if ENABLE_NLS
302*10465441SEvalZero #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
303*10465441SEvalZero #   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
304*10465441SEvalZero #  endif
305*10465441SEvalZero # endif
306*10465441SEvalZero # ifndef YY_
307*10465441SEvalZero #  define YY_(Msgid) Msgid
308*10465441SEvalZero # endif
309*10465441SEvalZero #endif
310*10465441SEvalZero 
311*10465441SEvalZero #ifndef YY_ATTRIBUTE
312*10465441SEvalZero # if (defined __GNUC__                                               \
313*10465441SEvalZero       && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
314*10465441SEvalZero      || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
315*10465441SEvalZero #  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
316*10465441SEvalZero # else
317*10465441SEvalZero #  define YY_ATTRIBUTE(Spec) /* empty */
318*10465441SEvalZero # endif
319*10465441SEvalZero #endif
320*10465441SEvalZero 
321*10465441SEvalZero #ifndef YY_ATTRIBUTE_PURE
322*10465441SEvalZero # define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
323*10465441SEvalZero #endif
324*10465441SEvalZero 
325*10465441SEvalZero #ifndef YY_ATTRIBUTE_UNUSED
326*10465441SEvalZero # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
327*10465441SEvalZero #endif
328*10465441SEvalZero 
329*10465441SEvalZero #if !defined _Noreturn \
330*10465441SEvalZero      && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
331*10465441SEvalZero # if defined _MSC_VER && 1200 <= _MSC_VER
332*10465441SEvalZero #  define _Noreturn __declspec (noreturn)
333*10465441SEvalZero # else
334*10465441SEvalZero #  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
335*10465441SEvalZero # endif
336*10465441SEvalZero #endif
337*10465441SEvalZero 
338*10465441SEvalZero /* Suppress unused-variable warnings by "using" E.  */
339*10465441SEvalZero #if ! defined lint || defined __GNUC__
340*10465441SEvalZero # define YYUSE(E) ((void) (E))
341*10465441SEvalZero #else
342*10465441SEvalZero # define YYUSE(E) /* empty */
343*10465441SEvalZero #endif
344*10465441SEvalZero 
345*10465441SEvalZero #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
346*10465441SEvalZero /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
347*10465441SEvalZero # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
348*10465441SEvalZero     _Pragma ("GCC diagnostic push") \
349*10465441SEvalZero     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
350*10465441SEvalZero     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
351*10465441SEvalZero # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
352*10465441SEvalZero     _Pragma ("GCC diagnostic pop")
353*10465441SEvalZero #else
354*10465441SEvalZero # define YY_INITIAL_VALUE(Value) Value
355*10465441SEvalZero #endif
356*10465441SEvalZero #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
357*10465441SEvalZero # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
358*10465441SEvalZero # define YY_IGNORE_MAYBE_UNINITIALIZED_END
359*10465441SEvalZero #endif
360*10465441SEvalZero #ifndef YY_INITIAL_VALUE
361*10465441SEvalZero # define YY_INITIAL_VALUE(Value) /* Nothing. */
362*10465441SEvalZero #endif
363*10465441SEvalZero 
364*10465441SEvalZero 
365*10465441SEvalZero #if ! defined yyoverflow || YYERROR_VERBOSE
366*10465441SEvalZero 
367*10465441SEvalZero /* The parser invokes alloca or malloc; define the necessary symbols.  */
368*10465441SEvalZero 
369*10465441SEvalZero # ifdef YYSTACK_USE_ALLOCA
370*10465441SEvalZero #  if YYSTACK_USE_ALLOCA
371*10465441SEvalZero #   ifdef __GNUC__
372*10465441SEvalZero #    define YYSTACK_ALLOC __builtin_alloca
373*10465441SEvalZero #   elif defined __BUILTIN_VA_ARG_INCR
374*10465441SEvalZero #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
375*10465441SEvalZero #   elif defined _AIX
376*10465441SEvalZero #    define YYSTACK_ALLOC __alloca
377*10465441SEvalZero #   elif defined _MSC_VER
378*10465441SEvalZero #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
379*10465441SEvalZero #    define alloca _alloca
380*10465441SEvalZero #   else
381*10465441SEvalZero #    define YYSTACK_ALLOC alloca
382*10465441SEvalZero #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
383*10465441SEvalZero #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
384*10465441SEvalZero       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
385*10465441SEvalZero #     ifndef EXIT_SUCCESS
386*10465441SEvalZero #      define EXIT_SUCCESS 0
387*10465441SEvalZero #     endif
388*10465441SEvalZero #    endif
389*10465441SEvalZero #   endif
390*10465441SEvalZero #  endif
391*10465441SEvalZero # endif
392*10465441SEvalZero 
393*10465441SEvalZero # ifdef YYSTACK_ALLOC
394*10465441SEvalZero    /* Pacify GCC's 'empty if-body' warning.  */
395*10465441SEvalZero #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
396*10465441SEvalZero #  ifndef YYSTACK_ALLOC_MAXIMUM
397*10465441SEvalZero     /* The OS might guarantee only one guard page at the bottom of the stack,
398*10465441SEvalZero        and a page size can be as small as 4096 bytes.  So we cannot safely
399*10465441SEvalZero        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
400*10465441SEvalZero        to allow for a few compiler-allocated temporary stack slots.  */
401*10465441SEvalZero #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
402*10465441SEvalZero #  endif
403*10465441SEvalZero # else
404*10465441SEvalZero #  define YYSTACK_ALLOC YYMALLOC
405*10465441SEvalZero #  define YYSTACK_FREE YYFREE
406*10465441SEvalZero #  ifndef YYSTACK_ALLOC_MAXIMUM
407*10465441SEvalZero #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
408*10465441SEvalZero #  endif
409*10465441SEvalZero #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
410*10465441SEvalZero        && ! ((defined YYMALLOC || defined malloc) \
411*10465441SEvalZero              && (defined YYFREE || defined free)))
412*10465441SEvalZero #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
413*10465441SEvalZero #   ifndef EXIT_SUCCESS
414*10465441SEvalZero #    define EXIT_SUCCESS 0
415*10465441SEvalZero #   endif
416*10465441SEvalZero #  endif
417*10465441SEvalZero #  ifndef YYMALLOC
418*10465441SEvalZero #   define YYMALLOC malloc
419*10465441SEvalZero #   if ! defined malloc && ! defined EXIT_SUCCESS
420*10465441SEvalZero void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
421*10465441SEvalZero #   endif
422*10465441SEvalZero #  endif
423*10465441SEvalZero #  ifndef YYFREE
424*10465441SEvalZero #   define YYFREE free
425*10465441SEvalZero #   if ! defined free && ! defined EXIT_SUCCESS
426*10465441SEvalZero void free (void *); /* INFRINGES ON USER NAME SPACE */
427*10465441SEvalZero #   endif
428*10465441SEvalZero #  endif
429*10465441SEvalZero # endif
430*10465441SEvalZero #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
431*10465441SEvalZero 
432*10465441SEvalZero 
433*10465441SEvalZero #if (! defined yyoverflow \
434*10465441SEvalZero      && (! defined __cplusplus \
435*10465441SEvalZero          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
436*10465441SEvalZero 
437*10465441SEvalZero /* A type that is properly aligned for any stack member.  */
438*10465441SEvalZero union yyalloc
439*10465441SEvalZero {
440*10465441SEvalZero   yytype_int16 yyss_alloc;
441*10465441SEvalZero   YYSTYPE yyvs_alloc;
442*10465441SEvalZero };
443*10465441SEvalZero 
444*10465441SEvalZero /* The size of the maximum gap between one aligned stack and the next.  */
445*10465441SEvalZero # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
446*10465441SEvalZero 
447*10465441SEvalZero /* The size of an array large to enough to hold all stacks, each with
448*10465441SEvalZero    N elements.  */
449*10465441SEvalZero # define YYSTACK_BYTES(N) \
450*10465441SEvalZero      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
451*10465441SEvalZero       + YYSTACK_GAP_MAXIMUM)
452*10465441SEvalZero 
453*10465441SEvalZero # define YYCOPY_NEEDED 1
454*10465441SEvalZero 
455*10465441SEvalZero /* Relocate STACK from its old location to the new one.  The
456*10465441SEvalZero    local variables YYSIZE and YYSTACKSIZE give the old and new number of
457*10465441SEvalZero    elements in the stack, and YYPTR gives the new location of the
458*10465441SEvalZero    stack.  Advance YYPTR to a properly aligned location for the next
459*10465441SEvalZero    stack.  */
460*10465441SEvalZero # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
461*10465441SEvalZero     do                                                                  \
462*10465441SEvalZero       {                                                                 \
463*10465441SEvalZero         YYSIZE_T yynewbytes;                                            \
464*10465441SEvalZero         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
465*10465441SEvalZero         Stack = &yyptr->Stack_alloc;                                    \
466*10465441SEvalZero         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
467*10465441SEvalZero         yyptr += yynewbytes / sizeof (*yyptr);                          \
468*10465441SEvalZero       }                                                                 \
469*10465441SEvalZero     while (0)
470*10465441SEvalZero 
471*10465441SEvalZero #endif
472*10465441SEvalZero 
473*10465441SEvalZero #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
474*10465441SEvalZero /* Copy COUNT objects from SRC to DST.  The source and destination do
475*10465441SEvalZero    not overlap.  */
476*10465441SEvalZero # ifndef YYCOPY
477*10465441SEvalZero #  if defined __GNUC__ && 1 < __GNUC__
478*10465441SEvalZero #   define YYCOPY(Dst, Src, Count) \
479*10465441SEvalZero       __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
480*10465441SEvalZero #  else
481*10465441SEvalZero #   define YYCOPY(Dst, Src, Count)              \
482*10465441SEvalZero       do                                        \
483*10465441SEvalZero         {                                       \
484*10465441SEvalZero           YYSIZE_T yyi;                         \
485*10465441SEvalZero           for (yyi = 0; yyi < (Count); yyi++)   \
486*10465441SEvalZero             (Dst)[yyi] = (Src)[yyi];            \
487*10465441SEvalZero         }                                       \
488*10465441SEvalZero       while (0)
489*10465441SEvalZero #  endif
490*10465441SEvalZero # endif
491*10465441SEvalZero #endif /* !YYCOPY_NEEDED */
492*10465441SEvalZero 
493*10465441SEvalZero /* YYFINAL -- State number of the termination state.  */
494*10465441SEvalZero #define YYFINAL  11
495*10465441SEvalZero /* YYLAST -- Last index in YYTABLE.  */
496*10465441SEvalZero #define YYLAST   301
497*10465441SEvalZero 
498*10465441SEvalZero /* YYNTOKENS -- Number of terminals.  */
499*10465441SEvalZero #define YYNTOKENS  41
500*10465441SEvalZero /* YYNNTS -- Number of nonterminals.  */
501*10465441SEvalZero #define YYNNTS  50
502*10465441SEvalZero /* YYNRULES -- Number of rules.  */
503*10465441SEvalZero #define YYNRULES  124
504*10465441SEvalZero /* YYNSTATES -- Number of states.  */
505*10465441SEvalZero #define YYNSTATES  204
506*10465441SEvalZero 
507*10465441SEvalZero /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
508*10465441SEvalZero    by yylex, with out-of-bounds checking.  */
509*10465441SEvalZero #define YYUNDEFTOK  2
510*10465441SEvalZero #define YYMAXUTOK   295
511*10465441SEvalZero 
512*10465441SEvalZero #define YYTRANSLATE(YYX)                                                \
513*10465441SEvalZero   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
514*10465441SEvalZero 
515*10465441SEvalZero /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
516*10465441SEvalZero    as returned by yylex, without out-of-bounds checking.  */
517*10465441SEvalZero static const yytype_uint8 yytranslate[] =
518*10465441SEvalZero {
519*10465441SEvalZero        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
520*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
521*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
522*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
523*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
524*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
525*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
526*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
527*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
528*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
529*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
530*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
531*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
532*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
533*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
534*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
535*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
536*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
537*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
538*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
539*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
540*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
541*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
542*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
543*10465441SEvalZero        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
544*10465441SEvalZero        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
545*10465441SEvalZero        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
546*10465441SEvalZero       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
547*10465441SEvalZero       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
548*10465441SEvalZero       35,    36,    37,    38,    39,    40
549*10465441SEvalZero };
550*10465441SEvalZero 
551*10465441SEvalZero #if YYDEBUG
552*10465441SEvalZero   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
553*10465441SEvalZero static const yytype_uint16 yyrline[] =
554*10465441SEvalZero {
555*10465441SEvalZero        0,   109,   109,   109,   111,   111,   113,   115,   116,   117,
556*10465441SEvalZero      118,   119,   120,   124,   128,   128,   128,   128,   128,   128,
557*10465441SEvalZero      128,   128,   128,   132,   133,   134,   135,   136,   137,   141,
558*10465441SEvalZero      142,   148,   156,   162,   170,   180,   182,   183,   184,   185,
559*10465441SEvalZero      186,   187,   190,   198,   204,   214,   220,   226,   232,   235,
560*10465441SEvalZero      237,   248,   249,   254,   263,   268,   276,   279,   281,   282,
561*10465441SEvalZero      283,   284,   285,   288,   294,   305,   311,   321,   323,   328,
562*10465441SEvalZero      336,   344,   347,   349,   350,   351,   356,   363,   370,   375,
563*10465441SEvalZero      383,   386,   388,   389,   390,   393,   401,   408,   415,   421,
564*10465441SEvalZero      428,   430,   431,   432,   435,   443,   445,   446,   449,   456,
565*10465441SEvalZero      458,   463,   464,   467,   468,   469,   473,   474,   477,   478,
566*10465441SEvalZero      481,   482,   483,   484,   485,   486,   487,   488,   489,   490,
567*10465441SEvalZero      491,   494,   495,   498,   499
568*10465441SEvalZero };
569*10465441SEvalZero #endif
570*10465441SEvalZero 
571*10465441SEvalZero #if YYDEBUG || YYERROR_VERBOSE || 0
572*10465441SEvalZero /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
573*10465441SEvalZero    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
574*10465441SEvalZero static const char *const yytname[] =
575*10465441SEvalZero {
576*10465441SEvalZero   "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
577*10465441SEvalZero   "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
578*10465441SEvalZero   "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
579*10465441SEvalZero   "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT", "T_IMPLY",
580*10465441SEvalZero   "T_RANGE", "T_VISIBLE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE",
581*10465441SEvalZero   "T_UNEQUAL", "T_LESS", "T_LESS_EQUAL", "T_GREATER", "T_GREATER_EQUAL",
582*10465441SEvalZero   "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
583*10465441SEvalZero   "T_NOT", "$accept", "input", "start", "stmt_list", "option_name",
584*10465441SEvalZero   "common_stmt", "option_error", "config_entry_start", "config_stmt",
585*10465441SEvalZero   "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
586*10465441SEvalZero   "config_option", "symbol_option", "symbol_option_list",
587*10465441SEvalZero   "symbol_option_arg", "choice", "choice_entry", "choice_end",
588*10465441SEvalZero   "choice_stmt", "choice_option_list", "choice_option", "choice_block",
589*10465441SEvalZero   "if_entry", "if_end", "if_stmt", "if_block", "mainmenu_stmt", "menu",
590*10465441SEvalZero   "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
591*10465441SEvalZero   "comment", "comment_stmt", "help_start", "help", "depends_list",
592*10465441SEvalZero   "depends", "visibility_list", "visible", "prompt_stmt_opt", "prompt",
593*10465441SEvalZero   "end", "nl", "if_expr", "expr", "symbol", "word_opt", YY_NULLPTR
594*10465441SEvalZero };
595*10465441SEvalZero #endif
596*10465441SEvalZero 
597*10465441SEvalZero # ifdef YYPRINT
598*10465441SEvalZero /* YYTOKNUM[NUM] -- (External) token number corresponding to the
599*10465441SEvalZero    (internal) symbol number NUM (which must be that of a token).  */
600*10465441SEvalZero static const yytype_uint16 yytoknum[] =
601*10465441SEvalZero {
602*10465441SEvalZero        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
603*10465441SEvalZero      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
604*10465441SEvalZero      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
605*10465441SEvalZero      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
606*10465441SEvalZero      295
607*10465441SEvalZero };
608*10465441SEvalZero # endif
609*10465441SEvalZero 
610*10465441SEvalZero #define YYPACT_NINF -92
611*10465441SEvalZero 
612*10465441SEvalZero #define yypact_value_is_default(Yystate) \
613*10465441SEvalZero   (!!((Yystate) == (-92)))
614*10465441SEvalZero 
615*10465441SEvalZero #define YYTABLE_NINF -88
616*10465441SEvalZero 
617*10465441SEvalZero #define yytable_value_is_error(Yytable_value) \
618*10465441SEvalZero   0
619*10465441SEvalZero 
620*10465441SEvalZero   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
621*10465441SEvalZero      STATE-NUM.  */
622*10465441SEvalZero static const yytype_int16 yypact[] =
623*10465441SEvalZero {
624*10465441SEvalZero       17,    41,   -92,    15,   -92,   150,   -92,    19,   -92,   -92,
625*10465441SEvalZero      -13,   -92,    28,    41,    38,    41,    50,    47,    41,    79,
626*10465441SEvalZero       82,    44,    76,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
627*10465441SEvalZero      -92,   -92,   118,   -92,   129,   -92,   -92,   -92,   -92,   -92,
628*10465441SEvalZero      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
629*10465441SEvalZero      -92,   -92,   184,   -92,   -92,   107,   -92,   111,   -92,   113,
630*10465441SEvalZero      -92,   116,   -92,   139,   140,   151,   -92,   -92,    44,    44,
631*10465441SEvalZero      142,   256,   -92,   160,   173,    27,   117,    80,    51,   255,
632*10465441SEvalZero      -15,   255,   217,   -92,   -92,   -92,   -92,   -92,   -92,    -8,
633*10465441SEvalZero      -92,    44,    44,   107,    87,    87,    87,    87,    87,    87,
634*10465441SEvalZero      -92,   -92,   174,   176,   187,    41,    41,    44,   188,   189,
635*10465441SEvalZero       87,   -92,   213,   -92,   -92,   -92,   -92,   206,   -92,   -92,
636*10465441SEvalZero      193,    41,    41,   203,   -92,   -92,   -92,   -92,   -92,   -92,
637*10465441SEvalZero      -92,   -92,   -92,   -92,   -92,   -92,   -92,   229,   -92,   241,
638*10465441SEvalZero      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
639*10465441SEvalZero      216,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
640*10465441SEvalZero       44,   229,   222,   229,    64,   229,   229,    87,    31,   231,
641*10465441SEvalZero      -92,   -92,   229,   236,   229,    44,   -92,   145,   242,   -92,
642*10465441SEvalZero      -92,   243,   244,   245,   229,   251,   -92,   -92,   247,   -92,
643*10465441SEvalZero      257,   125,   -92,   -92,   -92,   -92,   -92,   260,    41,   -92,
644*10465441SEvalZero      -92,   -92,   -92,   -92
645*10465441SEvalZero };
646*10465441SEvalZero 
647*10465441SEvalZero   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
648*10465441SEvalZero      Performed when YYTABLE does not specify something else to do.  Zero
649*10465441SEvalZero      means the default is an error.  */
650*10465441SEvalZero static const yytype_uint8 yydefact[] =
651*10465441SEvalZero {
652*10465441SEvalZero        6,     0,   106,     0,     3,     0,     6,     6,   101,   102,
653*10465441SEvalZero        0,     1,     0,     0,     0,     0,   123,     0,     0,     0,
654*10465441SEvalZero        0,     0,     0,    14,    19,    15,    16,    21,    17,    18,
655*10465441SEvalZero       20,    22,     0,    23,     0,     7,    35,    26,    35,    27,
656*10465441SEvalZero       57,    67,     8,    72,    24,    95,    81,     9,    28,    90,
657*10465441SEvalZero       25,    10,     0,   107,     2,    76,    13,     0,   103,     0,
658*10465441SEvalZero      124,     0,   104,     0,     0,     0,   121,   122,     0,     0,
659*10465441SEvalZero        0,   110,   105,     0,     0,     0,     0,     0,     0,     0,
660*10465441SEvalZero       90,     0,     0,    77,    85,    53,    86,    31,    33,     0,
661*10465441SEvalZero      118,     0,     0,    69,     0,     0,     0,     0,     0,     0,
662*10465441SEvalZero       11,    12,     0,     0,     0,     0,    99,     0,     0,     0,
663*10465441SEvalZero        0,    49,     0,    41,    40,    36,    37,     0,    39,    38,
664*10465441SEvalZero        0,     0,    99,     0,    61,    62,    58,    60,    59,    68,
665*10465441SEvalZero       56,    55,    73,    75,    71,    74,    70,   108,    97,     0,
666*10465441SEvalZero       96,    82,    84,    80,    83,    79,    92,    93,    91,   117,
667*10465441SEvalZero      119,   120,   116,   111,   112,   113,   114,   115,    30,    88,
668*10465441SEvalZero        0,   108,     0,   108,   108,   108,   108,     0,     0,     0,
669*10465441SEvalZero       89,    65,   108,     0,   108,     0,    98,     0,     0,    42,
670*10465441SEvalZero      100,     0,     0,     0,   108,    51,    48,    29,     0,    64,
671*10465441SEvalZero        0,   109,    94,    43,    44,    45,    46,     0,     0,    50,
672*10465441SEvalZero       63,    66,    47,    52
673*10465441SEvalZero };
674*10465441SEvalZero 
675*10465441SEvalZero   /* YYPGOTO[NTERM-NUM].  */
676*10465441SEvalZero static const yytype_int16 yypgoto[] =
677*10465441SEvalZero {
678*10465441SEvalZero      -92,   -92,   285,   291,   -92,    32,   -66,   -92,   -92,   -92,
679*10465441SEvalZero      -92,   261,   -92,   -92,   -92,   -92,   -92,   -92,   -92,     1,
680*10465441SEvalZero      -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,   -92,
681*10465441SEvalZero      -92,    24,   -92,   -92,   -92,   -92,   -92,   221,   220,   -64,
682*10465441SEvalZero      -92,   -92,   179,    -1,    67,     0,   110,   -67,   -91,   -92
683*10465441SEvalZero };
684*10465441SEvalZero 
685*10465441SEvalZero   /* YYDEFGOTO[NTERM-NUM].  */
686*10465441SEvalZero static const yytype_int16 yydefgoto[] =
687*10465441SEvalZero {
688*10465441SEvalZero       -1,     3,     4,     5,    34,    35,   114,    36,    37,    38,
689*10465441SEvalZero       39,    75,   115,   116,   168,   199,    40,    41,   130,    42,
690*10465441SEvalZero       77,   126,    78,    43,   134,    44,    79,     6,    45,    46,
691*10465441SEvalZero      143,    47,    81,    48,    49,    50,   117,   118,    82,   119,
692*10465441SEvalZero       80,   140,   162,   163,    51,     7,   176,    70,    71,    61
693*10465441SEvalZero };
694*10465441SEvalZero 
695*10465441SEvalZero   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
696*10465441SEvalZero      positive, shift that token.  If negative, reduce the rule whose
697*10465441SEvalZero      number is the opposite.  If YYTABLE_NINF, syntax error.  */
698*10465441SEvalZero static const yytype_int16 yytable[] =
699*10465441SEvalZero {
700*10465441SEvalZero       10,    89,    90,   152,   153,   154,   155,   156,   157,   137,
701*10465441SEvalZero       55,   125,    57,   128,    59,    11,   147,    63,   148,   167,
702*10465441SEvalZero        1,   138,     1,     2,   150,   151,   149,   -32,   102,    91,
703*10465441SEvalZero       92,   -32,   -32,   -32,   -32,   -32,   -32,   -32,   -32,   103,
704*10465441SEvalZero      164,   -32,   -32,   104,   -32,   105,   106,   107,   108,   109,
705*10465441SEvalZero      110,   -32,   111,     2,   112,    53,    14,    15,   185,    17,
706*10465441SEvalZero       18,    19,    20,   113,    56,    21,    22,   186,     8,     9,
707*10465441SEvalZero       93,    66,    67,   147,    58,   148,   184,    60,   175,    68,
708*10465441SEvalZero      133,   102,   142,    62,    69,   -54,   -54,    33,   -54,   -54,
709*10465441SEvalZero      -54,   -54,   103,   177,   -54,   -54,   104,   120,   121,   122,
710*10465441SEvalZero      123,    91,    92,   135,   161,   144,    64,   112,   191,    65,
711*10465441SEvalZero      129,   132,    72,   141,    66,    67,   124,   -34,   102,    73,
712*10465441SEvalZero      172,   -34,   -34,   -34,   -34,   -34,   -34,   -34,   -34,   103,
713*10465441SEvalZero       74,   -34,   -34,   104,   -34,   105,   106,   107,   108,   109,
714*10465441SEvalZero      110,   -34,   111,    53,   112,   131,   136,    83,   145,    84,
715*10465441SEvalZero       -5,    12,    85,   113,    13,    14,    15,    16,    17,    18,
716*10465441SEvalZero       19,    20,    91,    92,    21,    22,    23,    24,    25,    26,
717*10465441SEvalZero       27,    28,    29,    30,    31,    86,    87,    32,     2,    91,
718*10465441SEvalZero       92,   192,    91,    92,    -4,    12,    33,    88,    13,    14,
719*10465441SEvalZero       15,    16,    17,    18,    19,    20,   100,   203,    21,    22,
720*10465441SEvalZero       23,    24,    25,    26,    27,    28,    29,    30,    31,   101,
721*10465441SEvalZero      158,    32,   159,   160,   169,   165,   166,   -87,   102,   170,
722*10465441SEvalZero       33,   -87,   -87,   -87,   -87,   -87,   -87,   -87,   -87,   171,
723*10465441SEvalZero      174,   -87,   -87,   104,   -87,   -87,   -87,   -87,   -87,   -87,
724*10465441SEvalZero      -87,   -87,   102,   175,   112,   -78,   -78,   -78,   -78,   -78,
725*10465441SEvalZero      -78,   -78,   -78,   146,    92,   -78,   -78,   104,   179,    13,
726*10465441SEvalZero       14,    15,    16,    17,    18,    19,    20,   187,   112,    21,
727*10465441SEvalZero       22,   178,   189,   180,   181,   182,   183,   146,   193,   194,
728*10465441SEvalZero      195,   196,   188,   200,   190,    94,    95,    96,    97,    98,
729*10465441SEvalZero      198,    33,    54,   201,   197,    99,   202,    52,   127,    76,
730*10465441SEvalZero      139,   173
731*10465441SEvalZero };
732*10465441SEvalZero 
733*10465441SEvalZero static const yytype_uint8 yycheck[] =
734*10465441SEvalZero {
735*10465441SEvalZero        1,    68,    69,    94,    95,    96,    97,    98,    99,    24,
736*10465441SEvalZero       10,    77,    13,    77,    15,     0,    82,    18,    82,   110,
737*10465441SEvalZero        3,    36,     3,    36,    91,    92,    34,     0,     1,    37,
738*10465441SEvalZero       38,     4,     5,     6,     7,     8,     9,    10,    11,    12,
739*10465441SEvalZero      107,    14,    15,    16,    17,    18,    19,    20,    21,    22,
740*10465441SEvalZero       23,    24,    25,    36,    27,    36,     5,     6,    27,     8,
741*10465441SEvalZero        9,    10,    11,    36,    36,    14,    15,    36,    27,    28,
742*10465441SEvalZero       70,    27,    28,   139,    36,   139,   167,    27,    14,    35,
743*10465441SEvalZero       79,     1,    81,    36,    40,     5,     6,    36,     8,     9,
744*10465441SEvalZero       10,    11,    12,   160,    14,    15,    16,    17,    18,    19,
745*10465441SEvalZero       20,    37,    38,    79,   105,    81,    27,    27,   175,    27,
746*10465441SEvalZero       78,    79,    36,    81,    27,    28,    36,     0,     1,     1,
747*10465441SEvalZero      121,     4,     5,     6,     7,     8,     9,    10,    11,    12,
748*10465441SEvalZero        1,    14,    15,    16,    17,    18,    19,    20,    21,    22,
749*10465441SEvalZero       23,    24,    25,    36,    27,    78,    79,    36,    81,    36,
750*10465441SEvalZero        0,     1,    36,    36,     4,     5,     6,     7,     8,     9,
751*10465441SEvalZero       10,    11,    37,    38,    14,    15,    16,    17,    18,    19,
752*10465441SEvalZero       20,    21,    22,    23,    24,    36,    36,    27,    36,    37,
753*10465441SEvalZero       38,    36,    37,    38,     0,     1,    36,    36,     4,     5,
754*10465441SEvalZero        6,     7,     8,     9,    10,    11,    36,   198,    14,    15,
755*10465441SEvalZero       16,    17,    18,    19,    20,    21,    22,    23,    24,    36,
756*10465441SEvalZero       36,    27,    36,    26,     1,    27,    27,     0,     1,    13,
757*10465441SEvalZero       36,     4,     5,     6,     7,     8,     9,    10,    11,    36,
758*10465441SEvalZero       27,    14,    15,    16,    17,    18,    19,    20,    21,    22,
759*10465441SEvalZero       23,    24,     1,    14,    27,     4,     5,     6,     7,     8,
760*10465441SEvalZero        9,    10,    11,    36,    38,    14,    15,    16,    36,     4,
761*10465441SEvalZero        5,     6,     7,     8,     9,    10,    11,    36,    27,    14,
762*10465441SEvalZero       15,   161,    36,   163,   164,   165,   166,    36,    36,    36,
763*10465441SEvalZero       36,    36,   172,    36,   174,    29,    30,    31,    32,    33,
764*10465441SEvalZero       39,    36,     7,    36,   184,    39,    36,     6,    77,    38,
765*10465441SEvalZero       80,   122
766*10465441SEvalZero };
767*10465441SEvalZero 
768*10465441SEvalZero   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
769*10465441SEvalZero      symbol of state STATE-NUM.  */
770*10465441SEvalZero static const yytype_uint8 yystos[] =
771*10465441SEvalZero {
772*10465441SEvalZero        0,     3,    36,    42,    43,    44,    68,    86,    27,    28,
773*10465441SEvalZero       84,     0,     1,     4,     5,     6,     7,     8,     9,    10,
774*10465441SEvalZero       11,    14,    15,    16,    17,    18,    19,    20,    21,    22,
775*10465441SEvalZero       23,    24,    27,    36,    45,    46,    48,    49,    50,    51,
776*10465441SEvalZero       57,    58,    60,    64,    66,    69,    70,    72,    74,    75,
777*10465441SEvalZero       76,    85,    44,    36,    43,    86,    36,    84,    36,    84,
778*10465441SEvalZero       27,    90,    36,    84,    27,    27,    27,    28,    35,    40,
779*10465441SEvalZero       88,    89,    36,     1,     1,    52,    52,    61,    63,    67,
780*10465441SEvalZero       81,    73,    79,    36,    36,    36,    36,    36,    36,    88,
781*10465441SEvalZero       88,    37,    38,    86,    29,    30,    31,    32,    33,    39,
782*10465441SEvalZero       36,    36,     1,    12,    16,    18,    19,    20,    21,    22,
783*10465441SEvalZero       23,    25,    27,    36,    47,    53,    54,    77,    78,    80,
784*10465441SEvalZero       17,    18,    19,    20,    36,    47,    62,    78,    80,    46,
785*10465441SEvalZero       59,    85,    46,    60,    65,    72,    85,    24,    36,    79,
786*10465441SEvalZero       82,    46,    60,    71,    72,    85,    36,    47,    80,    34,
787*10465441SEvalZero       88,    88,    89,    89,    89,    89,    89,    89,    36,    36,
788*10465441SEvalZero       26,    84,    83,    84,    88,    27,    27,    89,    55,     1,
789*10465441SEvalZero       13,    36,    84,    83,    27,    14,    87,    88,    87,    36,
790*10465441SEvalZero       87,    87,    87,    87,    89,    27,    36,    36,    87,    36,
791*10465441SEvalZero       87,    88,    36,    36,    36,    36,    36,    87,    39,    56,
792*10465441SEvalZero       36,    36,    36,    84
793*10465441SEvalZero };
794*10465441SEvalZero 
795*10465441SEvalZero   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
796*10465441SEvalZero static const yytype_uint8 yyr1[] =
797*10465441SEvalZero {
798*10465441SEvalZero        0,    41,    42,    42,    43,    43,    44,    44,    44,    44,
799*10465441SEvalZero       44,    44,    44,    44,    45,    45,    45,    45,    45,    45,
800*10465441SEvalZero       45,    45,    45,    46,    46,    46,    46,    46,    46,    47,
801*10465441SEvalZero       47,    48,    49,    50,    51,    52,    52,    52,    52,    52,
802*10465441SEvalZero       52,    52,    53,    53,    53,    53,    53,    53,    54,    55,
803*10465441SEvalZero       55,    56,    56,    57,    58,    59,    60,    61,    61,    61,
804*10465441SEvalZero       61,    61,    61,    62,    62,    62,    62,    63,    63,    64,
805*10465441SEvalZero       65,    66,    67,    67,    67,    67,    68,    69,    70,    71,
806*10465441SEvalZero       72,    73,    73,    73,    73,    74,    75,    76,    77,    78,
807*10465441SEvalZero       79,    79,    79,    79,    80,    81,    81,    81,    82,    83,
808*10465441SEvalZero       83,    84,    84,    85,    85,    85,    86,    86,    87,    87,
809*10465441SEvalZero       88,    88,    88,    88,    88,    88,    88,    88,    88,    88,
810*10465441SEvalZero       88,    89,    89,    90,    90
811*10465441SEvalZero };
812*10465441SEvalZero 
813*10465441SEvalZero   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
814*10465441SEvalZero static const yytype_uint8 yyr2[] =
815*10465441SEvalZero {
816*10465441SEvalZero        0,     2,     2,     1,     2,     1,     0,     2,     2,     2,
817*10465441SEvalZero        2,     4,     4,     3,     1,     1,     1,     1,     1,     1,
818*10465441SEvalZero        1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
819*10465441SEvalZero        2,     3,     2,     3,     2,     0,     2,     2,     2,     2,
820*10465441SEvalZero        2,     2,     3,     4,     4,     4,     4,     5,     3,     0,
821*10465441SEvalZero        3,     0,     2,     3,     2,     1,     3,     0,     2,     2,
822*10465441SEvalZero        2,     2,     2,     4,     3,     2,     4,     0,     2,     3,
823*10465441SEvalZero        1,     3,     0,     2,     2,     2,     3,     3,     3,     1,
824*10465441SEvalZero        3,     0,     2,     2,     2,     3,     3,     2,     2,     2,
825*10465441SEvalZero        0,     2,     2,     2,     4,     0,     2,     2,     2,     0,
826*10465441SEvalZero        2,     1,     1,     2,     2,     2,     1,     2,     0,     2,
827*10465441SEvalZero        1,     3,     3,     3,     3,     3,     3,     3,     2,     3,
828*10465441SEvalZero        3,     1,     1,     0,     1
829*10465441SEvalZero };
830*10465441SEvalZero 
831*10465441SEvalZero 
832*10465441SEvalZero #define yyerrok         (yyerrstatus = 0)
833*10465441SEvalZero #define yyclearin       (yychar = YYEMPTY)
834*10465441SEvalZero #define YYEMPTY         (-2)
835*10465441SEvalZero #define YYEOF           0
836*10465441SEvalZero 
837*10465441SEvalZero #define YYACCEPT        goto yyacceptlab
838*10465441SEvalZero #define YYABORT         goto yyabortlab
839*10465441SEvalZero #define YYERROR         goto yyerrorlab
840*10465441SEvalZero 
841*10465441SEvalZero 
842*10465441SEvalZero #define YYRECOVERING()  (!!yyerrstatus)
843*10465441SEvalZero 
844*10465441SEvalZero #define YYBACKUP(Token, Value)                                  \
845*10465441SEvalZero do                                                              \
846*10465441SEvalZero   if (yychar == YYEMPTY)                                        \
847*10465441SEvalZero     {                                                           \
848*10465441SEvalZero       yychar = (Token);                                         \
849*10465441SEvalZero       yylval = (Value);                                         \
850*10465441SEvalZero       YYPOPSTACK (yylen);                                       \
851*10465441SEvalZero       yystate = *yyssp;                                         \
852*10465441SEvalZero       goto yybackup;                                            \
853*10465441SEvalZero     }                                                           \
854*10465441SEvalZero   else                                                          \
855*10465441SEvalZero     {                                                           \
856*10465441SEvalZero       yyerror (YY_("syntax error: cannot back up")); \
857*10465441SEvalZero       YYERROR;                                                  \
858*10465441SEvalZero     }                                                           \
859*10465441SEvalZero while (0)
860*10465441SEvalZero 
861*10465441SEvalZero /* Error token number */
862*10465441SEvalZero #define YYTERROR        1
863*10465441SEvalZero #define YYERRCODE       256
864*10465441SEvalZero 
865*10465441SEvalZero 
866*10465441SEvalZero 
867*10465441SEvalZero /* Enable debugging if requested.  */
868*10465441SEvalZero #if YYDEBUG
869*10465441SEvalZero 
870*10465441SEvalZero # ifndef YYFPRINTF
871*10465441SEvalZero #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
872*10465441SEvalZero #  define YYFPRINTF fprintf
873*10465441SEvalZero # endif
874*10465441SEvalZero 
875*10465441SEvalZero # define YYDPRINTF(Args)                        \
876*10465441SEvalZero do {                                            \
877*10465441SEvalZero   if (yydebug)                                  \
878*10465441SEvalZero     YYFPRINTF Args;                             \
879*10465441SEvalZero } while (0)
880*10465441SEvalZero 
881*10465441SEvalZero /* This macro is provided for backward compatibility. */
882*10465441SEvalZero #ifndef YY_LOCATION_PRINT
883*10465441SEvalZero # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
884*10465441SEvalZero #endif
885*10465441SEvalZero 
886*10465441SEvalZero 
887*10465441SEvalZero # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
888*10465441SEvalZero do {                                                                      \
889*10465441SEvalZero   if (yydebug)                                                            \
890*10465441SEvalZero     {                                                                     \
891*10465441SEvalZero       YYFPRINTF (stderr, "%s ", Title);                                   \
892*10465441SEvalZero       yy_symbol_print (stderr,                                            \
893*10465441SEvalZero                   Type, Value); \
894*10465441SEvalZero       YYFPRINTF (stderr, "\n");                                           \
895*10465441SEvalZero     }                                                                     \
896*10465441SEvalZero } while (0)
897*10465441SEvalZero 
898*10465441SEvalZero 
899*10465441SEvalZero /*----------------------------------------.
900*10465441SEvalZero | Print this symbol's value on YYOUTPUT.  |
901*10465441SEvalZero `----------------------------------------*/
902*10465441SEvalZero 
903*10465441SEvalZero static void
yy_symbol_value_print(FILE * yyoutput,int yytype,YYSTYPE const * const yyvaluep)904*10465441SEvalZero yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
905*10465441SEvalZero {
906*10465441SEvalZero   FILE *yyo = yyoutput;
907*10465441SEvalZero   YYUSE (yyo);
908*10465441SEvalZero   if (!yyvaluep)
909*10465441SEvalZero     return;
910*10465441SEvalZero # ifdef YYPRINT
911*10465441SEvalZero   if (yytype < YYNTOKENS)
912*10465441SEvalZero     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
913*10465441SEvalZero # endif
914*10465441SEvalZero   YYUSE (yytype);
915*10465441SEvalZero }
916*10465441SEvalZero 
917*10465441SEvalZero 
918*10465441SEvalZero /*--------------------------------.
919*10465441SEvalZero | Print this symbol on YYOUTPUT.  |
920*10465441SEvalZero `--------------------------------*/
921*10465441SEvalZero 
922*10465441SEvalZero static void
yy_symbol_print(FILE * yyoutput,int yytype,YYSTYPE const * const yyvaluep)923*10465441SEvalZero yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
924*10465441SEvalZero {
925*10465441SEvalZero   YYFPRINTF (yyoutput, "%s %s (",
926*10465441SEvalZero              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
927*10465441SEvalZero 
928*10465441SEvalZero   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
929*10465441SEvalZero   YYFPRINTF (yyoutput, ")");
930*10465441SEvalZero }
931*10465441SEvalZero 
932*10465441SEvalZero /*------------------------------------------------------------------.
933*10465441SEvalZero | yy_stack_print -- Print the state stack from its BOTTOM up to its |
934*10465441SEvalZero | TOP (included).                                                   |
935*10465441SEvalZero `------------------------------------------------------------------*/
936*10465441SEvalZero 
937*10465441SEvalZero static void
yy_stack_print(yytype_int16 * yybottom,yytype_int16 * yytop)938*10465441SEvalZero yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
939*10465441SEvalZero {
940*10465441SEvalZero   YYFPRINTF (stderr, "Stack now");
941*10465441SEvalZero   for (; yybottom <= yytop; yybottom++)
942*10465441SEvalZero     {
943*10465441SEvalZero       int yybot = *yybottom;
944*10465441SEvalZero       YYFPRINTF (stderr, " %d", yybot);
945*10465441SEvalZero     }
946*10465441SEvalZero   YYFPRINTF (stderr, "\n");
947*10465441SEvalZero }
948*10465441SEvalZero 
949*10465441SEvalZero # define YY_STACK_PRINT(Bottom, Top)                            \
950*10465441SEvalZero do {                                                            \
951*10465441SEvalZero   if (yydebug)                                                  \
952*10465441SEvalZero     yy_stack_print ((Bottom), (Top));                           \
953*10465441SEvalZero } while (0)
954*10465441SEvalZero 
955*10465441SEvalZero 
956*10465441SEvalZero /*------------------------------------------------.
957*10465441SEvalZero | Report that the YYRULE is going to be reduced.  |
958*10465441SEvalZero `------------------------------------------------*/
959*10465441SEvalZero 
960*10465441SEvalZero static void
yy_reduce_print(yytype_int16 * yyssp,YYSTYPE * yyvsp,int yyrule)961*10465441SEvalZero yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
962*10465441SEvalZero {
963*10465441SEvalZero   unsigned long int yylno = yyrline[yyrule];
964*10465441SEvalZero   int yynrhs = yyr2[yyrule];
965*10465441SEvalZero   int yyi;
966*10465441SEvalZero   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
967*10465441SEvalZero              yyrule - 1, yylno);
968*10465441SEvalZero   /* The symbols being reduced.  */
969*10465441SEvalZero   for (yyi = 0; yyi < yynrhs; yyi++)
970*10465441SEvalZero     {
971*10465441SEvalZero       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
972*10465441SEvalZero       yy_symbol_print (stderr,
973*10465441SEvalZero                        yystos[yyssp[yyi + 1 - yynrhs]],
974*10465441SEvalZero                        &(yyvsp[(yyi + 1) - (yynrhs)])
975*10465441SEvalZero                                               );
976*10465441SEvalZero       YYFPRINTF (stderr, "\n");
977*10465441SEvalZero     }
978*10465441SEvalZero }
979*10465441SEvalZero 
980*10465441SEvalZero # define YY_REDUCE_PRINT(Rule)          \
981*10465441SEvalZero do {                                    \
982*10465441SEvalZero   if (yydebug)                          \
983*10465441SEvalZero     yy_reduce_print (yyssp, yyvsp, Rule); \
984*10465441SEvalZero } while (0)
985*10465441SEvalZero 
986*10465441SEvalZero /* Nonzero means print parse trace.  It is left uninitialized so that
987*10465441SEvalZero    multiple parsers can coexist.  */
988*10465441SEvalZero int yydebug;
989*10465441SEvalZero #else /* !YYDEBUG */
990*10465441SEvalZero # define YYDPRINTF(Args)
991*10465441SEvalZero # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
992*10465441SEvalZero # define YY_STACK_PRINT(Bottom, Top)
993*10465441SEvalZero # define YY_REDUCE_PRINT(Rule)
994*10465441SEvalZero #endif /* !YYDEBUG */
995*10465441SEvalZero 
996*10465441SEvalZero 
997*10465441SEvalZero /* YYINITDEPTH -- initial size of the parser's stacks.  */
998*10465441SEvalZero #ifndef YYINITDEPTH
999*10465441SEvalZero # define YYINITDEPTH 200
1000*10465441SEvalZero #endif
1001*10465441SEvalZero 
1002*10465441SEvalZero /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1003*10465441SEvalZero    if the built-in stack extension method is used).
1004*10465441SEvalZero 
1005*10465441SEvalZero    Do not make this value too large; the results are undefined if
1006*10465441SEvalZero    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1007*10465441SEvalZero    evaluated with infinite-precision integer arithmetic.  */
1008*10465441SEvalZero 
1009*10465441SEvalZero #ifndef YYMAXDEPTH
1010*10465441SEvalZero # define YYMAXDEPTH 10000
1011*10465441SEvalZero #endif
1012*10465441SEvalZero 
1013*10465441SEvalZero 
1014*10465441SEvalZero #if YYERROR_VERBOSE
1015*10465441SEvalZero 
1016*10465441SEvalZero # ifndef yystrlen
1017*10465441SEvalZero #  if defined __GLIBC__ && defined _STRING_H
1018*10465441SEvalZero #   define yystrlen strlen
1019*10465441SEvalZero #  else
1020*10465441SEvalZero /* Return the length of YYSTR.  */
1021*10465441SEvalZero static YYSIZE_T
yystrlen(const char * yystr)1022*10465441SEvalZero yystrlen (const char *yystr)
1023*10465441SEvalZero {
1024*10465441SEvalZero   YYSIZE_T yylen;
1025*10465441SEvalZero   for (yylen = 0; yystr[yylen]; yylen++)
1026*10465441SEvalZero     continue;
1027*10465441SEvalZero   return yylen;
1028*10465441SEvalZero }
1029*10465441SEvalZero #  endif
1030*10465441SEvalZero # endif
1031*10465441SEvalZero 
1032*10465441SEvalZero # ifndef yystpcpy
1033*10465441SEvalZero #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1034*10465441SEvalZero #   define yystpcpy stpcpy
1035*10465441SEvalZero #  else
1036*10465441SEvalZero /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1037*10465441SEvalZero    YYDEST.  */
1038*10465441SEvalZero static char *
yystpcpy(char * yydest,const char * yysrc)1039*10465441SEvalZero yystpcpy (char *yydest, const char *yysrc)
1040*10465441SEvalZero {
1041*10465441SEvalZero   char *yyd = yydest;
1042*10465441SEvalZero   const char *yys = yysrc;
1043*10465441SEvalZero 
1044*10465441SEvalZero   while ((*yyd++ = *yys++) != '\0')
1045*10465441SEvalZero     continue;
1046*10465441SEvalZero 
1047*10465441SEvalZero   return yyd - 1;
1048*10465441SEvalZero }
1049*10465441SEvalZero #  endif
1050*10465441SEvalZero # endif
1051*10465441SEvalZero 
1052*10465441SEvalZero # ifndef yytnamerr
1053*10465441SEvalZero /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1054*10465441SEvalZero    quotes and backslashes, so that it's suitable for yyerror.  The
1055*10465441SEvalZero    heuristic is that double-quoting is unnecessary unless the string
1056*10465441SEvalZero    contains an apostrophe, a comma, or backslash (other than
1057*10465441SEvalZero    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
1058*10465441SEvalZero    null, do not copy; instead, return the length of what the result
1059*10465441SEvalZero    would have been.  */
1060*10465441SEvalZero static YYSIZE_T
yytnamerr(char * yyres,const char * yystr)1061*10465441SEvalZero yytnamerr (char *yyres, const char *yystr)
1062*10465441SEvalZero {
1063*10465441SEvalZero   if (*yystr == '"')
1064*10465441SEvalZero     {
1065*10465441SEvalZero       YYSIZE_T yyn = 0;
1066*10465441SEvalZero       char const *yyp = yystr;
1067*10465441SEvalZero 
1068*10465441SEvalZero       for (;;)
1069*10465441SEvalZero         switch (*++yyp)
1070*10465441SEvalZero           {
1071*10465441SEvalZero           case '\'':
1072*10465441SEvalZero           case ',':
1073*10465441SEvalZero             goto do_not_strip_quotes;
1074*10465441SEvalZero 
1075*10465441SEvalZero           case '\\':
1076*10465441SEvalZero             if (*++yyp != '\\')
1077*10465441SEvalZero               goto do_not_strip_quotes;
1078*10465441SEvalZero             /* Fall through.  */
1079*10465441SEvalZero           default:
1080*10465441SEvalZero             if (yyres)
1081*10465441SEvalZero               yyres[yyn] = *yyp;
1082*10465441SEvalZero             yyn++;
1083*10465441SEvalZero             break;
1084*10465441SEvalZero 
1085*10465441SEvalZero           case '"':
1086*10465441SEvalZero             if (yyres)
1087*10465441SEvalZero               yyres[yyn] = '\0';
1088*10465441SEvalZero             return yyn;
1089*10465441SEvalZero           }
1090*10465441SEvalZero     do_not_strip_quotes: ;
1091*10465441SEvalZero     }
1092*10465441SEvalZero 
1093*10465441SEvalZero   if (! yyres)
1094*10465441SEvalZero     return yystrlen (yystr);
1095*10465441SEvalZero 
1096*10465441SEvalZero   return yystpcpy (yyres, yystr) - yyres;
1097*10465441SEvalZero }
1098*10465441SEvalZero # endif
1099*10465441SEvalZero 
1100*10465441SEvalZero /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1101*10465441SEvalZero    about the unexpected token YYTOKEN for the state stack whose top is
1102*10465441SEvalZero    YYSSP.
1103*10465441SEvalZero 
1104*10465441SEvalZero    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
1105*10465441SEvalZero    not large enough to hold the message.  In that case, also set
1106*10465441SEvalZero    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
1107*10465441SEvalZero    required number of bytes is too large to store.  */
1108*10465441SEvalZero static int
yysyntax_error(YYSIZE_T * yymsg_alloc,char ** yymsg,yytype_int16 * yyssp,int yytoken)1109*10465441SEvalZero yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1110*10465441SEvalZero                 yytype_int16 *yyssp, int yytoken)
1111*10465441SEvalZero {
1112*10465441SEvalZero   YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
1113*10465441SEvalZero   YYSIZE_T yysize = yysize0;
1114*10465441SEvalZero   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1115*10465441SEvalZero   /* Internationalized format string. */
1116*10465441SEvalZero   const char *yyformat = YY_NULLPTR;
1117*10465441SEvalZero   /* Arguments of yyformat. */
1118*10465441SEvalZero   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1119*10465441SEvalZero   /* Number of reported tokens (one for the "unexpected", one per
1120*10465441SEvalZero      "expected"). */
1121*10465441SEvalZero   int yycount = 0;
1122*10465441SEvalZero 
1123*10465441SEvalZero   /* There are many possibilities here to consider:
1124*10465441SEvalZero      - If this state is a consistent state with a default action, then
1125*10465441SEvalZero        the only way this function was invoked is if the default action
1126*10465441SEvalZero        is an error action.  In that case, don't check for expected
1127*10465441SEvalZero        tokens because there are none.
1128*10465441SEvalZero      - The only way there can be no lookahead present (in yychar) is if
1129*10465441SEvalZero        this state is a consistent state with a default action.  Thus,
1130*10465441SEvalZero        detecting the absence of a lookahead is sufficient to determine
1131*10465441SEvalZero        that there is no unexpected or expected token to report.  In that
1132*10465441SEvalZero        case, just report a simple "syntax error".
1133*10465441SEvalZero      - Don't assume there isn't a lookahead just because this state is a
1134*10465441SEvalZero        consistent state with a default action.  There might have been a
1135*10465441SEvalZero        previous inconsistent state, consistent state with a non-default
1136*10465441SEvalZero        action, or user semantic action that manipulated yychar.
1137*10465441SEvalZero      - Of course, the expected token list depends on states to have
1138*10465441SEvalZero        correct lookahead information, and it depends on the parser not
1139*10465441SEvalZero        to perform extra reductions after fetching a lookahead from the
1140*10465441SEvalZero        scanner and before detecting a syntax error.  Thus, state merging
1141*10465441SEvalZero        (from LALR or IELR) and default reductions corrupt the expected
1142*10465441SEvalZero        token list.  However, the list is correct for canonical LR with
1143*10465441SEvalZero        one exception: it will still contain any token that will not be
1144*10465441SEvalZero        accepted due to an error action in a later state.
1145*10465441SEvalZero   */
1146*10465441SEvalZero   if (yytoken != YYEMPTY)
1147*10465441SEvalZero     {
1148*10465441SEvalZero       int yyn = yypact[*yyssp];
1149*10465441SEvalZero       yyarg[yycount++] = yytname[yytoken];
1150*10465441SEvalZero       if (!yypact_value_is_default (yyn))
1151*10465441SEvalZero         {
1152*10465441SEvalZero           /* Start YYX at -YYN if negative to avoid negative indexes in
1153*10465441SEvalZero              YYCHECK.  In other words, skip the first -YYN actions for
1154*10465441SEvalZero              this state because they are default actions.  */
1155*10465441SEvalZero           int yyxbegin = yyn < 0 ? -yyn : 0;
1156*10465441SEvalZero           /* Stay within bounds of both yycheck and yytname.  */
1157*10465441SEvalZero           int yychecklim = YYLAST - yyn + 1;
1158*10465441SEvalZero           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1159*10465441SEvalZero           int yyx;
1160*10465441SEvalZero 
1161*10465441SEvalZero           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1162*10465441SEvalZero             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1163*10465441SEvalZero                 && !yytable_value_is_error (yytable[yyx + yyn]))
1164*10465441SEvalZero               {
1165*10465441SEvalZero                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1166*10465441SEvalZero                   {
1167*10465441SEvalZero                     yycount = 1;
1168*10465441SEvalZero                     yysize = yysize0;
1169*10465441SEvalZero                     break;
1170*10465441SEvalZero                   }
1171*10465441SEvalZero                 yyarg[yycount++] = yytname[yyx];
1172*10465441SEvalZero                 {
1173*10465441SEvalZero                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
1174*10465441SEvalZero                   if (! (yysize <= yysize1
1175*10465441SEvalZero                          && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1176*10465441SEvalZero                     return 2;
1177*10465441SEvalZero                   yysize = yysize1;
1178*10465441SEvalZero                 }
1179*10465441SEvalZero               }
1180*10465441SEvalZero         }
1181*10465441SEvalZero     }
1182*10465441SEvalZero 
1183*10465441SEvalZero   switch (yycount)
1184*10465441SEvalZero     {
1185*10465441SEvalZero # define YYCASE_(N, S)                      \
1186*10465441SEvalZero       case N:                               \
1187*10465441SEvalZero         yyformat = S;                       \
1188*10465441SEvalZero       break
1189*10465441SEvalZero       YYCASE_(0, YY_("syntax error"));
1190*10465441SEvalZero       YYCASE_(1, YY_("syntax error, unexpected %s"));
1191*10465441SEvalZero       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1192*10465441SEvalZero       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1193*10465441SEvalZero       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1194*10465441SEvalZero       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1195*10465441SEvalZero # undef YYCASE_
1196*10465441SEvalZero     }
1197*10465441SEvalZero 
1198*10465441SEvalZero   {
1199*10465441SEvalZero     YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
1200*10465441SEvalZero     if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1201*10465441SEvalZero       return 2;
1202*10465441SEvalZero     yysize = yysize1;
1203*10465441SEvalZero   }
1204*10465441SEvalZero 
1205*10465441SEvalZero   if (*yymsg_alloc < yysize)
1206*10465441SEvalZero     {
1207*10465441SEvalZero       *yymsg_alloc = 2 * yysize;
1208*10465441SEvalZero       if (! (yysize <= *yymsg_alloc
1209*10465441SEvalZero              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1210*10465441SEvalZero         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1211*10465441SEvalZero       return 1;
1212*10465441SEvalZero     }
1213*10465441SEvalZero 
1214*10465441SEvalZero   /* Avoid sprintf, as that infringes on the user's name space.
1215*10465441SEvalZero      Don't have undefined behavior even if the translation
1216*10465441SEvalZero      produced a string with the wrong number of "%s"s.  */
1217*10465441SEvalZero   {
1218*10465441SEvalZero     char *yyp = *yymsg;
1219*10465441SEvalZero     int yyi = 0;
1220*10465441SEvalZero     while ((*yyp = *yyformat) != '\0')
1221*10465441SEvalZero       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1222*10465441SEvalZero         {
1223*10465441SEvalZero           yyp += yytnamerr (yyp, yyarg[yyi++]);
1224*10465441SEvalZero           yyformat += 2;
1225*10465441SEvalZero         }
1226*10465441SEvalZero       else
1227*10465441SEvalZero         {
1228*10465441SEvalZero           yyp++;
1229*10465441SEvalZero           yyformat++;
1230*10465441SEvalZero         }
1231*10465441SEvalZero   }
1232*10465441SEvalZero   return 0;
1233*10465441SEvalZero }
1234*10465441SEvalZero #endif /* YYERROR_VERBOSE */
1235*10465441SEvalZero 
1236*10465441SEvalZero /*-----------------------------------------------.
1237*10465441SEvalZero | Release the memory associated to this symbol.  |
1238*10465441SEvalZero `-----------------------------------------------*/
1239*10465441SEvalZero 
1240*10465441SEvalZero static void
yydestruct(const char * yymsg,int yytype,YYSTYPE * yyvaluep)1241*10465441SEvalZero yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1242*10465441SEvalZero {
1243*10465441SEvalZero   YYUSE (yyvaluep);
1244*10465441SEvalZero   if (!yymsg)
1245*10465441SEvalZero     yymsg = "Deleting";
1246*10465441SEvalZero   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1247*10465441SEvalZero 
1248*10465441SEvalZero   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1249*10465441SEvalZero   switch (yytype)
1250*10465441SEvalZero     {
1251*10465441SEvalZero           case 58: /* choice_entry  */
1252*10465441SEvalZero 
1253*10465441SEvalZero       {
1254*10465441SEvalZero 	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1255*10465441SEvalZero 		((*yyvaluep).menu)->file->name, ((*yyvaluep).menu)->lineno);
1256*10465441SEvalZero 	if (current_menu == ((*yyvaluep).menu))
1257*10465441SEvalZero 		menu_end_menu();
1258*10465441SEvalZero }
1259*10465441SEvalZero 
1260*10465441SEvalZero         break;
1261*10465441SEvalZero 
1262*10465441SEvalZero     case 64: /* if_entry  */
1263*10465441SEvalZero 
1264*10465441SEvalZero       {
1265*10465441SEvalZero 	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1266*10465441SEvalZero 		((*yyvaluep).menu)->file->name, ((*yyvaluep).menu)->lineno);
1267*10465441SEvalZero 	if (current_menu == ((*yyvaluep).menu))
1268*10465441SEvalZero 		menu_end_menu();
1269*10465441SEvalZero }
1270*10465441SEvalZero 
1271*10465441SEvalZero         break;
1272*10465441SEvalZero 
1273*10465441SEvalZero     case 70: /* menu_entry  */
1274*10465441SEvalZero 
1275*10465441SEvalZero       {
1276*10465441SEvalZero 	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1277*10465441SEvalZero 		((*yyvaluep).menu)->file->name, ((*yyvaluep).menu)->lineno);
1278*10465441SEvalZero 	if (current_menu == ((*yyvaluep).menu))
1279*10465441SEvalZero 		menu_end_menu();
1280*10465441SEvalZero }
1281*10465441SEvalZero 
1282*10465441SEvalZero         break;
1283*10465441SEvalZero 
1284*10465441SEvalZero 
1285*10465441SEvalZero       default:
1286*10465441SEvalZero         break;
1287*10465441SEvalZero     }
1288*10465441SEvalZero   YY_IGNORE_MAYBE_UNINITIALIZED_END
1289*10465441SEvalZero }
1290*10465441SEvalZero 
1291*10465441SEvalZero 
1292*10465441SEvalZero 
1293*10465441SEvalZero 
1294*10465441SEvalZero /* The lookahead symbol.  */
1295*10465441SEvalZero int yychar;
1296*10465441SEvalZero 
1297*10465441SEvalZero /* The semantic value of the lookahead symbol.  */
1298*10465441SEvalZero YYSTYPE yylval;
1299*10465441SEvalZero /* Number of syntax errors so far.  */
1300*10465441SEvalZero int yynerrs;
1301*10465441SEvalZero 
1302*10465441SEvalZero 
1303*10465441SEvalZero /*----------.
1304*10465441SEvalZero | yyparse.  |
1305*10465441SEvalZero `----------*/
1306*10465441SEvalZero 
1307*10465441SEvalZero int
yyparse(void)1308*10465441SEvalZero yyparse (void)
1309*10465441SEvalZero {
1310*10465441SEvalZero     int yystate;
1311*10465441SEvalZero     /* Number of tokens to shift before error messages enabled.  */
1312*10465441SEvalZero     int yyerrstatus;
1313*10465441SEvalZero 
1314*10465441SEvalZero     /* The stacks and their tools:
1315*10465441SEvalZero        'yyss': related to states.
1316*10465441SEvalZero        'yyvs': related to semantic values.
1317*10465441SEvalZero 
1318*10465441SEvalZero        Refer to the stacks through separate pointers, to allow yyoverflow
1319*10465441SEvalZero        to reallocate them elsewhere.  */
1320*10465441SEvalZero 
1321*10465441SEvalZero     /* The state stack.  */
1322*10465441SEvalZero     yytype_int16 yyssa[YYINITDEPTH];
1323*10465441SEvalZero     yytype_int16 *yyss;
1324*10465441SEvalZero     yytype_int16 *yyssp;
1325*10465441SEvalZero 
1326*10465441SEvalZero     /* The semantic value stack.  */
1327*10465441SEvalZero     YYSTYPE yyvsa[YYINITDEPTH];
1328*10465441SEvalZero     YYSTYPE *yyvs;
1329*10465441SEvalZero     YYSTYPE *yyvsp;
1330*10465441SEvalZero 
1331*10465441SEvalZero     YYSIZE_T yystacksize;
1332*10465441SEvalZero 
1333*10465441SEvalZero   int yyn;
1334*10465441SEvalZero   int yyresult;
1335*10465441SEvalZero   /* Lookahead token as an internal (translated) token number.  */
1336*10465441SEvalZero   int yytoken = 0;
1337*10465441SEvalZero   /* The variables used to return semantic value and location from the
1338*10465441SEvalZero      action routines.  */
1339*10465441SEvalZero   YYSTYPE yyval;
1340*10465441SEvalZero 
1341*10465441SEvalZero #if YYERROR_VERBOSE
1342*10465441SEvalZero   /* Buffer for error messages, and its allocated size.  */
1343*10465441SEvalZero   char yymsgbuf[128];
1344*10465441SEvalZero   char *yymsg = yymsgbuf;
1345*10465441SEvalZero   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1346*10465441SEvalZero #endif
1347*10465441SEvalZero 
1348*10465441SEvalZero #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
1349*10465441SEvalZero 
1350*10465441SEvalZero   /* The number of symbols on the RHS of the reduced rule.
1351*10465441SEvalZero      Keep to zero when no symbol should be popped.  */
1352*10465441SEvalZero   int yylen = 0;
1353*10465441SEvalZero 
1354*10465441SEvalZero   yyssp = yyss = yyssa;
1355*10465441SEvalZero   yyvsp = yyvs = yyvsa;
1356*10465441SEvalZero   yystacksize = YYINITDEPTH;
1357*10465441SEvalZero 
1358*10465441SEvalZero   YYDPRINTF ((stderr, "Starting parse\n"));
1359*10465441SEvalZero 
1360*10465441SEvalZero   yystate = 0;
1361*10465441SEvalZero   yyerrstatus = 0;
1362*10465441SEvalZero   yynerrs = 0;
1363*10465441SEvalZero   yychar = YYEMPTY; /* Cause a token to be read.  */
1364*10465441SEvalZero   goto yysetstate;
1365*10465441SEvalZero 
1366*10465441SEvalZero /*------------------------------------------------------------.
1367*10465441SEvalZero | yynewstate -- Push a new state, which is found in yystate.  |
1368*10465441SEvalZero `------------------------------------------------------------*/
1369*10465441SEvalZero  yynewstate:
1370*10465441SEvalZero   /* In all cases, when you get here, the value and location stacks
1371*10465441SEvalZero      have just been pushed.  So pushing a state here evens the stacks.  */
1372*10465441SEvalZero   yyssp++;
1373*10465441SEvalZero 
1374*10465441SEvalZero  yysetstate:
1375*10465441SEvalZero   *yyssp = yystate;
1376*10465441SEvalZero 
1377*10465441SEvalZero   if (yyss + yystacksize - 1 <= yyssp)
1378*10465441SEvalZero     {
1379*10465441SEvalZero       /* Get the current used size of the three stacks, in elements.  */
1380*10465441SEvalZero       YYSIZE_T yysize = yyssp - yyss + 1;
1381*10465441SEvalZero 
1382*10465441SEvalZero #ifdef yyoverflow
1383*10465441SEvalZero       {
1384*10465441SEvalZero         /* Give user a chance to reallocate the stack.  Use copies of
1385*10465441SEvalZero            these so that the &'s don't force the real ones into
1386*10465441SEvalZero            memory.  */
1387*10465441SEvalZero         YYSTYPE *yyvs1 = yyvs;
1388*10465441SEvalZero         yytype_int16 *yyss1 = yyss;
1389*10465441SEvalZero 
1390*10465441SEvalZero         /* Each stack pointer address is followed by the size of the
1391*10465441SEvalZero            data in use in that stack, in bytes.  This used to be a
1392*10465441SEvalZero            conditional around just the two extra args, but that might
1393*10465441SEvalZero            be undefined if yyoverflow is a macro.  */
1394*10465441SEvalZero         yyoverflow (YY_("memory exhausted"),
1395*10465441SEvalZero                     &yyss1, yysize * sizeof (*yyssp),
1396*10465441SEvalZero                     &yyvs1, yysize * sizeof (*yyvsp),
1397*10465441SEvalZero                     &yystacksize);
1398*10465441SEvalZero 
1399*10465441SEvalZero         yyss = yyss1;
1400*10465441SEvalZero         yyvs = yyvs1;
1401*10465441SEvalZero       }
1402*10465441SEvalZero #else /* no yyoverflow */
1403*10465441SEvalZero # ifndef YYSTACK_RELOCATE
1404*10465441SEvalZero       goto yyexhaustedlab;
1405*10465441SEvalZero # else
1406*10465441SEvalZero       /* Extend the stack our own way.  */
1407*10465441SEvalZero       if (YYMAXDEPTH <= yystacksize)
1408*10465441SEvalZero         goto yyexhaustedlab;
1409*10465441SEvalZero       yystacksize *= 2;
1410*10465441SEvalZero       if (YYMAXDEPTH < yystacksize)
1411*10465441SEvalZero         yystacksize = YYMAXDEPTH;
1412*10465441SEvalZero 
1413*10465441SEvalZero       {
1414*10465441SEvalZero         yytype_int16 *yyss1 = yyss;
1415*10465441SEvalZero         union yyalloc *yyptr =
1416*10465441SEvalZero           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1417*10465441SEvalZero         if (! yyptr)
1418*10465441SEvalZero           goto yyexhaustedlab;
1419*10465441SEvalZero         YYSTACK_RELOCATE (yyss_alloc, yyss);
1420*10465441SEvalZero         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1421*10465441SEvalZero #  undef YYSTACK_RELOCATE
1422*10465441SEvalZero         if (yyss1 != yyssa)
1423*10465441SEvalZero           YYSTACK_FREE (yyss1);
1424*10465441SEvalZero       }
1425*10465441SEvalZero # endif
1426*10465441SEvalZero #endif /* no yyoverflow */
1427*10465441SEvalZero 
1428*10465441SEvalZero       yyssp = yyss + yysize - 1;
1429*10465441SEvalZero       yyvsp = yyvs + yysize - 1;
1430*10465441SEvalZero 
1431*10465441SEvalZero       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1432*10465441SEvalZero                   (unsigned long int) yystacksize));
1433*10465441SEvalZero 
1434*10465441SEvalZero       if (yyss + yystacksize - 1 <= yyssp)
1435*10465441SEvalZero         YYABORT;
1436*10465441SEvalZero     }
1437*10465441SEvalZero 
1438*10465441SEvalZero   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1439*10465441SEvalZero 
1440*10465441SEvalZero   if (yystate == YYFINAL)
1441*10465441SEvalZero     YYACCEPT;
1442*10465441SEvalZero 
1443*10465441SEvalZero   goto yybackup;
1444*10465441SEvalZero 
1445*10465441SEvalZero /*-----------.
1446*10465441SEvalZero | yybackup.  |
1447*10465441SEvalZero `-----------*/
1448*10465441SEvalZero yybackup:
1449*10465441SEvalZero 
1450*10465441SEvalZero   /* Do appropriate processing given the current state.  Read a
1451*10465441SEvalZero      lookahead token if we need one and don't already have one.  */
1452*10465441SEvalZero 
1453*10465441SEvalZero   /* First try to decide what to do without reference to lookahead token.  */
1454*10465441SEvalZero   yyn = yypact[yystate];
1455*10465441SEvalZero   if (yypact_value_is_default (yyn))
1456*10465441SEvalZero     goto yydefault;
1457*10465441SEvalZero 
1458*10465441SEvalZero   /* Not known => get a lookahead token if don't already have one.  */
1459*10465441SEvalZero 
1460*10465441SEvalZero   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1461*10465441SEvalZero   if (yychar == YYEMPTY)
1462*10465441SEvalZero     {
1463*10465441SEvalZero       YYDPRINTF ((stderr, "Reading a token: "));
1464*10465441SEvalZero       yychar = yylex ();
1465*10465441SEvalZero     }
1466*10465441SEvalZero 
1467*10465441SEvalZero   if (yychar <= YYEOF)
1468*10465441SEvalZero     {
1469*10465441SEvalZero       yychar = yytoken = YYEOF;
1470*10465441SEvalZero       YYDPRINTF ((stderr, "Now at end of input.\n"));
1471*10465441SEvalZero     }
1472*10465441SEvalZero   else
1473*10465441SEvalZero     {
1474*10465441SEvalZero       yytoken = YYTRANSLATE (yychar);
1475*10465441SEvalZero       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1476*10465441SEvalZero     }
1477*10465441SEvalZero 
1478*10465441SEvalZero   /* If the proper action on seeing token YYTOKEN is to reduce or to
1479*10465441SEvalZero      detect an error, take that action.  */
1480*10465441SEvalZero   yyn += yytoken;
1481*10465441SEvalZero   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1482*10465441SEvalZero     goto yydefault;
1483*10465441SEvalZero   yyn = yytable[yyn];
1484*10465441SEvalZero   if (yyn <= 0)
1485*10465441SEvalZero     {
1486*10465441SEvalZero       if (yytable_value_is_error (yyn))
1487*10465441SEvalZero         goto yyerrlab;
1488*10465441SEvalZero       yyn = -yyn;
1489*10465441SEvalZero       goto yyreduce;
1490*10465441SEvalZero     }
1491*10465441SEvalZero 
1492*10465441SEvalZero   /* Count tokens shifted since error; after three, turn off error
1493*10465441SEvalZero      status.  */
1494*10465441SEvalZero   if (yyerrstatus)
1495*10465441SEvalZero     yyerrstatus--;
1496*10465441SEvalZero 
1497*10465441SEvalZero   /* Shift the lookahead token.  */
1498*10465441SEvalZero   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1499*10465441SEvalZero 
1500*10465441SEvalZero   /* Discard the shifted token.  */
1501*10465441SEvalZero   yychar = YYEMPTY;
1502*10465441SEvalZero 
1503*10465441SEvalZero   yystate = yyn;
1504*10465441SEvalZero   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1505*10465441SEvalZero   *++yyvsp = yylval;
1506*10465441SEvalZero   YY_IGNORE_MAYBE_UNINITIALIZED_END
1507*10465441SEvalZero 
1508*10465441SEvalZero   goto yynewstate;
1509*10465441SEvalZero 
1510*10465441SEvalZero 
1511*10465441SEvalZero /*-----------------------------------------------------------.
1512*10465441SEvalZero | yydefault -- do the default action for the current state.  |
1513*10465441SEvalZero `-----------------------------------------------------------*/
1514*10465441SEvalZero yydefault:
1515*10465441SEvalZero   yyn = yydefact[yystate];
1516*10465441SEvalZero   if (yyn == 0)
1517*10465441SEvalZero     goto yyerrlab;
1518*10465441SEvalZero   goto yyreduce;
1519*10465441SEvalZero 
1520*10465441SEvalZero 
1521*10465441SEvalZero /*-----------------------------.
1522*10465441SEvalZero | yyreduce -- Do a reduction.  |
1523*10465441SEvalZero `-----------------------------*/
1524*10465441SEvalZero yyreduce:
1525*10465441SEvalZero   /* yyn is the number of a rule to reduce with.  */
1526*10465441SEvalZero   yylen = yyr2[yyn];
1527*10465441SEvalZero 
1528*10465441SEvalZero   /* If YYLEN is nonzero, implement the default value of the action:
1529*10465441SEvalZero      '$$ = $1'.
1530*10465441SEvalZero 
1531*10465441SEvalZero      Otherwise, the following line sets YYVAL to garbage.
1532*10465441SEvalZero      This behavior is undocumented and Bison
1533*10465441SEvalZero      users should not rely upon it.  Assigning to YYVAL
1534*10465441SEvalZero      unconditionally makes the parser a bit smaller, and it avoids a
1535*10465441SEvalZero      GCC warning that YYVAL may be used uninitialized.  */
1536*10465441SEvalZero   yyval = yyvsp[1-yylen];
1537*10465441SEvalZero 
1538*10465441SEvalZero 
1539*10465441SEvalZero   YY_REDUCE_PRINT (yyn);
1540*10465441SEvalZero   switch (yyn)
1541*10465441SEvalZero     {
1542*10465441SEvalZero         case 10:
1543*10465441SEvalZero 
1544*10465441SEvalZero     { zconf_error("unexpected end statement"); }
1545*10465441SEvalZero 
1546*10465441SEvalZero     break;
1547*10465441SEvalZero 
1548*10465441SEvalZero   case 11:
1549*10465441SEvalZero 
1550*10465441SEvalZero     { zconf_error("unknown statement \"%s\"", (yyvsp[-2].string)); }
1551*10465441SEvalZero 
1552*10465441SEvalZero     break;
1553*10465441SEvalZero 
1554*10465441SEvalZero   case 12:
1555*10465441SEvalZero 
1556*10465441SEvalZero     {
1557*10465441SEvalZero 	zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[-2].id)->name);
1558*10465441SEvalZero }
1559*10465441SEvalZero 
1560*10465441SEvalZero     break;
1561*10465441SEvalZero 
1562*10465441SEvalZero   case 13:
1563*10465441SEvalZero 
1564*10465441SEvalZero     { zconf_error("invalid statement"); }
1565*10465441SEvalZero 
1566*10465441SEvalZero     break;
1567*10465441SEvalZero 
1568*10465441SEvalZero   case 29:
1569*10465441SEvalZero 
1570*10465441SEvalZero     { zconf_error("unknown option \"%s\"", (yyvsp[-2].string)); }
1571*10465441SEvalZero 
1572*10465441SEvalZero     break;
1573*10465441SEvalZero 
1574*10465441SEvalZero   case 30:
1575*10465441SEvalZero 
1576*10465441SEvalZero     { zconf_error("invalid option"); }
1577*10465441SEvalZero 
1578*10465441SEvalZero     break;
1579*10465441SEvalZero 
1580*10465441SEvalZero   case 31:
1581*10465441SEvalZero 
1582*10465441SEvalZero     {
1583*10465441SEvalZero 	struct symbol *sym = sym_lookup((yyvsp[-1].string), 0);
1584*10465441SEvalZero 	sym->flags |= SYMBOL_OPTIONAL;
1585*10465441SEvalZero 	menu_add_entry(sym);
1586*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1587*10465441SEvalZero }
1588*10465441SEvalZero 
1589*10465441SEvalZero     break;
1590*10465441SEvalZero 
1591*10465441SEvalZero   case 32:
1592*10465441SEvalZero 
1593*10465441SEvalZero     {
1594*10465441SEvalZero 	menu_end_entry();
1595*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1596*10465441SEvalZero }
1597*10465441SEvalZero 
1598*10465441SEvalZero     break;
1599*10465441SEvalZero 
1600*10465441SEvalZero   case 33:
1601*10465441SEvalZero 
1602*10465441SEvalZero     {
1603*10465441SEvalZero 	struct symbol *sym = sym_lookup((yyvsp[-1].string), 0);
1604*10465441SEvalZero 	sym->flags |= SYMBOL_OPTIONAL;
1605*10465441SEvalZero 	menu_add_entry(sym);
1606*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1607*10465441SEvalZero }
1608*10465441SEvalZero 
1609*10465441SEvalZero     break;
1610*10465441SEvalZero 
1611*10465441SEvalZero   case 34:
1612*10465441SEvalZero 
1613*10465441SEvalZero     {
1614*10465441SEvalZero 	if (current_entry->prompt)
1615*10465441SEvalZero 		current_entry->prompt->type = P_MENU;
1616*10465441SEvalZero 	else
1617*10465441SEvalZero 		zconfprint("warning: menuconfig statement without prompt");
1618*10465441SEvalZero 	menu_end_entry();
1619*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1620*10465441SEvalZero }
1621*10465441SEvalZero 
1622*10465441SEvalZero     break;
1623*10465441SEvalZero 
1624*10465441SEvalZero   case 42:
1625*10465441SEvalZero 
1626*10465441SEvalZero     {
1627*10465441SEvalZero 	menu_set_type((yyvsp[-2].id)->stype);
1628*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1629*10465441SEvalZero 		zconf_curname(), zconf_lineno(),
1630*10465441SEvalZero 		(yyvsp[-2].id)->stype);
1631*10465441SEvalZero }
1632*10465441SEvalZero 
1633*10465441SEvalZero     break;
1634*10465441SEvalZero 
1635*10465441SEvalZero   case 43:
1636*10465441SEvalZero 
1637*10465441SEvalZero     {
1638*10465441SEvalZero 	menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr));
1639*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1640*10465441SEvalZero }
1641*10465441SEvalZero 
1642*10465441SEvalZero     break;
1643*10465441SEvalZero 
1644*10465441SEvalZero   case 44:
1645*10465441SEvalZero 
1646*10465441SEvalZero     {
1647*10465441SEvalZero 	menu_add_expr(P_DEFAULT, (yyvsp[-2].expr), (yyvsp[-1].expr));
1648*10465441SEvalZero 	if ((yyvsp[-3].id)->stype != S_UNKNOWN)
1649*10465441SEvalZero 		menu_set_type((yyvsp[-3].id)->stype);
1650*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
1651*10465441SEvalZero 		zconf_curname(), zconf_lineno(),
1652*10465441SEvalZero 		(yyvsp[-3].id)->stype);
1653*10465441SEvalZero }
1654*10465441SEvalZero 
1655*10465441SEvalZero     break;
1656*10465441SEvalZero 
1657*10465441SEvalZero   case 45:
1658*10465441SEvalZero 
1659*10465441SEvalZero     {
1660*10465441SEvalZero 	menu_add_symbol(P_SELECT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr));
1661*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
1662*10465441SEvalZero }
1663*10465441SEvalZero 
1664*10465441SEvalZero     break;
1665*10465441SEvalZero 
1666*10465441SEvalZero   case 46:
1667*10465441SEvalZero 
1668*10465441SEvalZero     {
1669*10465441SEvalZero 	menu_add_symbol(P_IMPLY, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr));
1670*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:imply\n", zconf_curname(), zconf_lineno());
1671*10465441SEvalZero }
1672*10465441SEvalZero 
1673*10465441SEvalZero     break;
1674*10465441SEvalZero 
1675*10465441SEvalZero   case 47:
1676*10465441SEvalZero 
1677*10465441SEvalZero     {
1678*10465441SEvalZero 	menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[-3].symbol), (yyvsp[-2].symbol)), (yyvsp[-1].expr));
1679*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
1680*10465441SEvalZero }
1681*10465441SEvalZero 
1682*10465441SEvalZero     break;
1683*10465441SEvalZero 
1684*10465441SEvalZero   case 50:
1685*10465441SEvalZero 
1686*10465441SEvalZero     {
1687*10465441SEvalZero 	const struct kconf_id *id = kconf_id_lookup((yyvsp[-1].string), strlen((yyvsp[-1].string)));
1688*10465441SEvalZero 	if (id && id->flags & TF_OPTION)
1689*10465441SEvalZero 		menu_add_option(id->token, (yyvsp[0].string));
1690*10465441SEvalZero 	else
1691*10465441SEvalZero 		zconfprint("warning: ignoring unknown option %s", (yyvsp[-1].string));
1692*10465441SEvalZero 	free((yyvsp[-1].string));
1693*10465441SEvalZero }
1694*10465441SEvalZero 
1695*10465441SEvalZero     break;
1696*10465441SEvalZero 
1697*10465441SEvalZero   case 51:
1698*10465441SEvalZero 
1699*10465441SEvalZero     { (yyval.string) = NULL; }
1700*10465441SEvalZero 
1701*10465441SEvalZero     break;
1702*10465441SEvalZero 
1703*10465441SEvalZero   case 52:
1704*10465441SEvalZero 
1705*10465441SEvalZero     { (yyval.string) = (yyvsp[0].string); }
1706*10465441SEvalZero 
1707*10465441SEvalZero     break;
1708*10465441SEvalZero 
1709*10465441SEvalZero   case 53:
1710*10465441SEvalZero 
1711*10465441SEvalZero     {
1712*10465441SEvalZero 	struct symbol *sym = sym_lookup((yyvsp[-1].string), SYMBOL_CHOICE);
1713*10465441SEvalZero 	sym->flags |= SYMBOL_AUTO;
1714*10465441SEvalZero 	menu_add_entry(sym);
1715*10465441SEvalZero 	menu_add_expr(P_CHOICE, NULL, NULL);
1716*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
1717*10465441SEvalZero }
1718*10465441SEvalZero 
1719*10465441SEvalZero     break;
1720*10465441SEvalZero 
1721*10465441SEvalZero   case 54:
1722*10465441SEvalZero 
1723*10465441SEvalZero     {
1724*10465441SEvalZero 	(yyval.menu) = menu_add_menu();
1725*10465441SEvalZero }
1726*10465441SEvalZero 
1727*10465441SEvalZero     break;
1728*10465441SEvalZero 
1729*10465441SEvalZero   case 55:
1730*10465441SEvalZero 
1731*10465441SEvalZero     {
1732*10465441SEvalZero 	if (zconf_endtoken((yyvsp[0].id), T_CHOICE, T_ENDCHOICE)) {
1733*10465441SEvalZero 		menu_end_menu();
1734*10465441SEvalZero 		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
1735*10465441SEvalZero 	}
1736*10465441SEvalZero }
1737*10465441SEvalZero 
1738*10465441SEvalZero     break;
1739*10465441SEvalZero 
1740*10465441SEvalZero   case 63:
1741*10465441SEvalZero 
1742*10465441SEvalZero     {
1743*10465441SEvalZero 	menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr));
1744*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1745*10465441SEvalZero }
1746*10465441SEvalZero 
1747*10465441SEvalZero     break;
1748*10465441SEvalZero 
1749*10465441SEvalZero   case 64:
1750*10465441SEvalZero 
1751*10465441SEvalZero     {
1752*10465441SEvalZero 	if ((yyvsp[-2].id)->stype == S_BOOLEAN || (yyvsp[-2].id)->stype == S_TRISTATE) {
1753*10465441SEvalZero 		menu_set_type((yyvsp[-2].id)->stype);
1754*10465441SEvalZero 		printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1755*10465441SEvalZero 			zconf_curname(), zconf_lineno(),
1756*10465441SEvalZero 			(yyvsp[-2].id)->stype);
1757*10465441SEvalZero 	} else
1758*10465441SEvalZero 		YYERROR;
1759*10465441SEvalZero }
1760*10465441SEvalZero 
1761*10465441SEvalZero     break;
1762*10465441SEvalZero 
1763*10465441SEvalZero   case 65:
1764*10465441SEvalZero 
1765*10465441SEvalZero     {
1766*10465441SEvalZero 	current_entry->sym->flags |= SYMBOL_OPTIONAL;
1767*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
1768*10465441SEvalZero }
1769*10465441SEvalZero 
1770*10465441SEvalZero     break;
1771*10465441SEvalZero 
1772*10465441SEvalZero   case 66:
1773*10465441SEvalZero 
1774*10465441SEvalZero     {
1775*10465441SEvalZero 	if ((yyvsp[-3].id)->stype == S_UNKNOWN) {
1776*10465441SEvalZero 		menu_add_symbol(P_DEFAULT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr));
1777*10465441SEvalZero 		printd(DEBUG_PARSE, "%s:%d:default\n",
1778*10465441SEvalZero 			zconf_curname(), zconf_lineno());
1779*10465441SEvalZero 	} else
1780*10465441SEvalZero 		YYERROR;
1781*10465441SEvalZero }
1782*10465441SEvalZero 
1783*10465441SEvalZero     break;
1784*10465441SEvalZero 
1785*10465441SEvalZero   case 69:
1786*10465441SEvalZero 
1787*10465441SEvalZero     {
1788*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
1789*10465441SEvalZero 	menu_add_entry(NULL);
1790*10465441SEvalZero 	menu_add_dep((yyvsp[-1].expr));
1791*10465441SEvalZero 	(yyval.menu) = menu_add_menu();
1792*10465441SEvalZero }
1793*10465441SEvalZero 
1794*10465441SEvalZero     break;
1795*10465441SEvalZero 
1796*10465441SEvalZero   case 70:
1797*10465441SEvalZero 
1798*10465441SEvalZero     {
1799*10465441SEvalZero 	if (zconf_endtoken((yyvsp[0].id), T_IF, T_ENDIF)) {
1800*10465441SEvalZero 		menu_end_menu();
1801*10465441SEvalZero 		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
1802*10465441SEvalZero 	}
1803*10465441SEvalZero }
1804*10465441SEvalZero 
1805*10465441SEvalZero     break;
1806*10465441SEvalZero 
1807*10465441SEvalZero   case 76:
1808*10465441SEvalZero 
1809*10465441SEvalZero     {
1810*10465441SEvalZero 	menu_add_prompt(P_MENU, (yyvsp[-1].string), NULL);
1811*10465441SEvalZero }
1812*10465441SEvalZero 
1813*10465441SEvalZero     break;
1814*10465441SEvalZero 
1815*10465441SEvalZero   case 77:
1816*10465441SEvalZero 
1817*10465441SEvalZero     {
1818*10465441SEvalZero 	menu_add_entry(NULL);
1819*10465441SEvalZero 	menu_add_prompt(P_MENU, (yyvsp[-1].string), NULL);
1820*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
1821*10465441SEvalZero }
1822*10465441SEvalZero 
1823*10465441SEvalZero     break;
1824*10465441SEvalZero 
1825*10465441SEvalZero   case 78:
1826*10465441SEvalZero 
1827*10465441SEvalZero     {
1828*10465441SEvalZero 	(yyval.menu) = menu_add_menu();
1829*10465441SEvalZero }
1830*10465441SEvalZero 
1831*10465441SEvalZero     break;
1832*10465441SEvalZero 
1833*10465441SEvalZero   case 79:
1834*10465441SEvalZero 
1835*10465441SEvalZero     {
1836*10465441SEvalZero 	if (zconf_endtoken((yyvsp[0].id), T_MENU, T_ENDMENU)) {
1837*10465441SEvalZero 		menu_end_menu();
1838*10465441SEvalZero 		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
1839*10465441SEvalZero 	}
1840*10465441SEvalZero }
1841*10465441SEvalZero 
1842*10465441SEvalZero     break;
1843*10465441SEvalZero 
1844*10465441SEvalZero   case 85:
1845*10465441SEvalZero 
1846*10465441SEvalZero     {
1847*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1848*10465441SEvalZero 	zconf_nextfile((yyvsp[-1].string));
1849*10465441SEvalZero }
1850*10465441SEvalZero 
1851*10465441SEvalZero     break;
1852*10465441SEvalZero 
1853*10465441SEvalZero   case 86:
1854*10465441SEvalZero 
1855*10465441SEvalZero     {
1856*10465441SEvalZero 	menu_add_entry(NULL);
1857*10465441SEvalZero 	menu_add_prompt(P_COMMENT, (yyvsp[-1].string), NULL);
1858*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
1859*10465441SEvalZero }
1860*10465441SEvalZero 
1861*10465441SEvalZero     break;
1862*10465441SEvalZero 
1863*10465441SEvalZero   case 87:
1864*10465441SEvalZero 
1865*10465441SEvalZero     {
1866*10465441SEvalZero 	menu_end_entry();
1867*10465441SEvalZero }
1868*10465441SEvalZero 
1869*10465441SEvalZero     break;
1870*10465441SEvalZero 
1871*10465441SEvalZero   case 88:
1872*10465441SEvalZero 
1873*10465441SEvalZero     {
1874*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
1875*10465441SEvalZero 	zconf_starthelp();
1876*10465441SEvalZero }
1877*10465441SEvalZero 
1878*10465441SEvalZero     break;
1879*10465441SEvalZero 
1880*10465441SEvalZero   case 89:
1881*10465441SEvalZero 
1882*10465441SEvalZero     {
1883*10465441SEvalZero 	current_entry->help = (yyvsp[0].string);
1884*10465441SEvalZero }
1885*10465441SEvalZero 
1886*10465441SEvalZero     break;
1887*10465441SEvalZero 
1888*10465441SEvalZero   case 94:
1889*10465441SEvalZero 
1890*10465441SEvalZero     {
1891*10465441SEvalZero 	menu_add_dep((yyvsp[-1].expr));
1892*10465441SEvalZero 	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1893*10465441SEvalZero }
1894*10465441SEvalZero 
1895*10465441SEvalZero     break;
1896*10465441SEvalZero 
1897*10465441SEvalZero   case 98:
1898*10465441SEvalZero 
1899*10465441SEvalZero     {
1900*10465441SEvalZero 	menu_add_visibility((yyvsp[0].expr));
1901*10465441SEvalZero }
1902*10465441SEvalZero 
1903*10465441SEvalZero     break;
1904*10465441SEvalZero 
1905*10465441SEvalZero   case 100:
1906*10465441SEvalZero 
1907*10465441SEvalZero     {
1908*10465441SEvalZero 	menu_add_prompt(P_PROMPT, (yyvsp[-1].string), (yyvsp[0].expr));
1909*10465441SEvalZero }
1910*10465441SEvalZero 
1911*10465441SEvalZero     break;
1912*10465441SEvalZero 
1913*10465441SEvalZero   case 103:
1914*10465441SEvalZero 
1915*10465441SEvalZero     { (yyval.id) = (yyvsp[-1].id); }
1916*10465441SEvalZero 
1917*10465441SEvalZero     break;
1918*10465441SEvalZero 
1919*10465441SEvalZero   case 104:
1920*10465441SEvalZero 
1921*10465441SEvalZero     { (yyval.id) = (yyvsp[-1].id); }
1922*10465441SEvalZero 
1923*10465441SEvalZero     break;
1924*10465441SEvalZero 
1925*10465441SEvalZero   case 105:
1926*10465441SEvalZero 
1927*10465441SEvalZero     { (yyval.id) = (yyvsp[-1].id); }
1928*10465441SEvalZero 
1929*10465441SEvalZero     break;
1930*10465441SEvalZero 
1931*10465441SEvalZero   case 108:
1932*10465441SEvalZero 
1933*10465441SEvalZero     { (yyval.expr) = NULL; }
1934*10465441SEvalZero 
1935*10465441SEvalZero     break;
1936*10465441SEvalZero 
1937*10465441SEvalZero   case 109:
1938*10465441SEvalZero 
1939*10465441SEvalZero     { (yyval.expr) = (yyvsp[0].expr); }
1940*10465441SEvalZero 
1941*10465441SEvalZero     break;
1942*10465441SEvalZero 
1943*10465441SEvalZero   case 110:
1944*10465441SEvalZero 
1945*10465441SEvalZero     { (yyval.expr) = expr_alloc_symbol((yyvsp[0].symbol)); }
1946*10465441SEvalZero 
1947*10465441SEvalZero     break;
1948*10465441SEvalZero 
1949*10465441SEvalZero   case 111:
1950*10465441SEvalZero 
1951*10465441SEvalZero     { (yyval.expr) = expr_alloc_comp(E_LTH, (yyvsp[-2].symbol), (yyvsp[0].symbol)); }
1952*10465441SEvalZero 
1953*10465441SEvalZero     break;
1954*10465441SEvalZero 
1955*10465441SEvalZero   case 112:
1956*10465441SEvalZero 
1957*10465441SEvalZero     { (yyval.expr) = expr_alloc_comp(E_LEQ, (yyvsp[-2].symbol), (yyvsp[0].symbol)); }
1958*10465441SEvalZero 
1959*10465441SEvalZero     break;
1960*10465441SEvalZero 
1961*10465441SEvalZero   case 113:
1962*10465441SEvalZero 
1963*10465441SEvalZero     { (yyval.expr) = expr_alloc_comp(E_GTH, (yyvsp[-2].symbol), (yyvsp[0].symbol)); }
1964*10465441SEvalZero 
1965*10465441SEvalZero     break;
1966*10465441SEvalZero 
1967*10465441SEvalZero   case 114:
1968*10465441SEvalZero 
1969*10465441SEvalZero     { (yyval.expr) = expr_alloc_comp(E_GEQ, (yyvsp[-2].symbol), (yyvsp[0].symbol)); }
1970*10465441SEvalZero 
1971*10465441SEvalZero     break;
1972*10465441SEvalZero 
1973*10465441SEvalZero   case 115:
1974*10465441SEvalZero 
1975*10465441SEvalZero     { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); }
1976*10465441SEvalZero 
1977*10465441SEvalZero     break;
1978*10465441SEvalZero 
1979*10465441SEvalZero   case 116:
1980*10465441SEvalZero 
1981*10465441SEvalZero     { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); }
1982*10465441SEvalZero 
1983*10465441SEvalZero     break;
1984*10465441SEvalZero 
1985*10465441SEvalZero   case 117:
1986*10465441SEvalZero 
1987*10465441SEvalZero     { (yyval.expr) = (yyvsp[-1].expr); }
1988*10465441SEvalZero 
1989*10465441SEvalZero     break;
1990*10465441SEvalZero 
1991*10465441SEvalZero   case 118:
1992*10465441SEvalZero 
1993*10465441SEvalZero     { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[0].expr)); }
1994*10465441SEvalZero 
1995*10465441SEvalZero     break;
1996*10465441SEvalZero 
1997*10465441SEvalZero   case 119:
1998*10465441SEvalZero 
1999*10465441SEvalZero     { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); }
2000*10465441SEvalZero 
2001*10465441SEvalZero     break;
2002*10465441SEvalZero 
2003*10465441SEvalZero   case 120:
2004*10465441SEvalZero 
2005*10465441SEvalZero     { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); }
2006*10465441SEvalZero 
2007*10465441SEvalZero     break;
2008*10465441SEvalZero 
2009*10465441SEvalZero   case 121:
2010*10465441SEvalZero 
2011*10465441SEvalZero     { (yyval.symbol) = sym_lookup((yyvsp[0].string), 0); free((yyvsp[0].string)); }
2012*10465441SEvalZero 
2013*10465441SEvalZero     break;
2014*10465441SEvalZero 
2015*10465441SEvalZero   case 122:
2016*10465441SEvalZero 
2017*10465441SEvalZero     { (yyval.symbol) = sym_lookup((yyvsp[0].string), SYMBOL_CONST); free((yyvsp[0].string)); }
2018*10465441SEvalZero 
2019*10465441SEvalZero     break;
2020*10465441SEvalZero 
2021*10465441SEvalZero   case 123:
2022*10465441SEvalZero 
2023*10465441SEvalZero     { (yyval.string) = NULL; }
2024*10465441SEvalZero 
2025*10465441SEvalZero     break;
2026*10465441SEvalZero 
2027*10465441SEvalZero 
2028*10465441SEvalZero 
2029*10465441SEvalZero       default: break;
2030*10465441SEvalZero     }
2031*10465441SEvalZero   /* User semantic actions sometimes alter yychar, and that requires
2032*10465441SEvalZero      that yytoken be updated with the new translation.  We take the
2033*10465441SEvalZero      approach of translating immediately before every use of yytoken.
2034*10465441SEvalZero      One alternative is translating here after every semantic action,
2035*10465441SEvalZero      but that translation would be missed if the semantic action invokes
2036*10465441SEvalZero      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
2037*10465441SEvalZero      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
2038*10465441SEvalZero      incorrect destructor might then be invoked immediately.  In the
2039*10465441SEvalZero      case of YYERROR or YYBACKUP, subsequent parser actions might lead
2040*10465441SEvalZero      to an incorrect destructor call or verbose syntax error message
2041*10465441SEvalZero      before the lookahead is translated.  */
2042*10465441SEvalZero   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2043*10465441SEvalZero 
2044*10465441SEvalZero   YYPOPSTACK (yylen);
2045*10465441SEvalZero   yylen = 0;
2046*10465441SEvalZero   YY_STACK_PRINT (yyss, yyssp);
2047*10465441SEvalZero 
2048*10465441SEvalZero   *++yyvsp = yyval;
2049*10465441SEvalZero 
2050*10465441SEvalZero   /* Now 'shift' the result of the reduction.  Determine what state
2051*10465441SEvalZero      that goes to, based on the state we popped back to and the rule
2052*10465441SEvalZero      number reduced by.  */
2053*10465441SEvalZero 
2054*10465441SEvalZero   yyn = yyr1[yyn];
2055*10465441SEvalZero 
2056*10465441SEvalZero   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
2057*10465441SEvalZero   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
2058*10465441SEvalZero     yystate = yytable[yystate];
2059*10465441SEvalZero   else
2060*10465441SEvalZero     yystate = yydefgoto[yyn - YYNTOKENS];
2061*10465441SEvalZero 
2062*10465441SEvalZero   goto yynewstate;
2063*10465441SEvalZero 
2064*10465441SEvalZero 
2065*10465441SEvalZero /*--------------------------------------.
2066*10465441SEvalZero | yyerrlab -- here on detecting error.  |
2067*10465441SEvalZero `--------------------------------------*/
2068*10465441SEvalZero yyerrlab:
2069*10465441SEvalZero   /* Make sure we have latest lookahead translation.  See comments at
2070*10465441SEvalZero      user semantic actions for why this is necessary.  */
2071*10465441SEvalZero   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
2072*10465441SEvalZero 
2073*10465441SEvalZero   /* If not already recovering from an error, report this error.  */
2074*10465441SEvalZero   if (!yyerrstatus)
2075*10465441SEvalZero     {
2076*10465441SEvalZero       ++yynerrs;
2077*10465441SEvalZero #if ! YYERROR_VERBOSE
2078*10465441SEvalZero       yyerror (YY_("syntax error"));
2079*10465441SEvalZero #else
2080*10465441SEvalZero # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
2081*10465441SEvalZero                                         yyssp, yytoken)
2082*10465441SEvalZero       {
2083*10465441SEvalZero         char const *yymsgp = YY_("syntax error");
2084*10465441SEvalZero         int yysyntax_error_status;
2085*10465441SEvalZero         yysyntax_error_status = YYSYNTAX_ERROR;
2086*10465441SEvalZero         if (yysyntax_error_status == 0)
2087*10465441SEvalZero           yymsgp = yymsg;
2088*10465441SEvalZero         else if (yysyntax_error_status == 1)
2089*10465441SEvalZero           {
2090*10465441SEvalZero             if (yymsg != yymsgbuf)
2091*10465441SEvalZero               YYSTACK_FREE (yymsg);
2092*10465441SEvalZero             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
2093*10465441SEvalZero             if (!yymsg)
2094*10465441SEvalZero               {
2095*10465441SEvalZero                 yymsg = yymsgbuf;
2096*10465441SEvalZero                 yymsg_alloc = sizeof yymsgbuf;
2097*10465441SEvalZero                 yysyntax_error_status = 2;
2098*10465441SEvalZero               }
2099*10465441SEvalZero             else
2100*10465441SEvalZero               {
2101*10465441SEvalZero                 yysyntax_error_status = YYSYNTAX_ERROR;
2102*10465441SEvalZero                 yymsgp = yymsg;
2103*10465441SEvalZero               }
2104*10465441SEvalZero           }
2105*10465441SEvalZero         yyerror (yymsgp);
2106*10465441SEvalZero         if (yysyntax_error_status == 2)
2107*10465441SEvalZero           goto yyexhaustedlab;
2108*10465441SEvalZero       }
2109*10465441SEvalZero # undef YYSYNTAX_ERROR
2110*10465441SEvalZero #endif
2111*10465441SEvalZero     }
2112*10465441SEvalZero 
2113*10465441SEvalZero 
2114*10465441SEvalZero 
2115*10465441SEvalZero   if (yyerrstatus == 3)
2116*10465441SEvalZero     {
2117*10465441SEvalZero       /* If just tried and failed to reuse lookahead token after an
2118*10465441SEvalZero          error, discard it.  */
2119*10465441SEvalZero 
2120*10465441SEvalZero       if (yychar <= YYEOF)
2121*10465441SEvalZero         {
2122*10465441SEvalZero           /* Return failure if at end of input.  */
2123*10465441SEvalZero           if (yychar == YYEOF)
2124*10465441SEvalZero             YYABORT;
2125*10465441SEvalZero         }
2126*10465441SEvalZero       else
2127*10465441SEvalZero         {
2128*10465441SEvalZero           yydestruct ("Error: discarding",
2129*10465441SEvalZero                       yytoken, &yylval);
2130*10465441SEvalZero           yychar = YYEMPTY;
2131*10465441SEvalZero         }
2132*10465441SEvalZero     }
2133*10465441SEvalZero 
2134*10465441SEvalZero   /* Else will try to reuse lookahead token after shifting the error
2135*10465441SEvalZero      token.  */
2136*10465441SEvalZero   goto yyerrlab1;
2137*10465441SEvalZero 
2138*10465441SEvalZero 
2139*10465441SEvalZero /*---------------------------------------------------.
2140*10465441SEvalZero | yyerrorlab -- error raised explicitly by YYERROR.  |
2141*10465441SEvalZero `---------------------------------------------------*/
2142*10465441SEvalZero yyerrorlab:
2143*10465441SEvalZero 
2144*10465441SEvalZero   /* Pacify compilers like GCC when the user code never invokes
2145*10465441SEvalZero      YYERROR and the label yyerrorlab therefore never appears in user
2146*10465441SEvalZero      code.  */
2147*10465441SEvalZero   if (/*CONSTCOND*/ 0)
2148*10465441SEvalZero      goto yyerrorlab;
2149*10465441SEvalZero 
2150*10465441SEvalZero   /* Do not reclaim the symbols of the rule whose action triggered
2151*10465441SEvalZero      this YYERROR.  */
2152*10465441SEvalZero   YYPOPSTACK (yylen);
2153*10465441SEvalZero   yylen = 0;
2154*10465441SEvalZero   YY_STACK_PRINT (yyss, yyssp);
2155*10465441SEvalZero   yystate = *yyssp;
2156*10465441SEvalZero   goto yyerrlab1;
2157*10465441SEvalZero 
2158*10465441SEvalZero 
2159*10465441SEvalZero /*-------------------------------------------------------------.
2160*10465441SEvalZero | yyerrlab1 -- common code for both syntax error and YYERROR.  |
2161*10465441SEvalZero `-------------------------------------------------------------*/
2162*10465441SEvalZero yyerrlab1:
2163*10465441SEvalZero   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
2164*10465441SEvalZero 
2165*10465441SEvalZero   for (;;)
2166*10465441SEvalZero     {
2167*10465441SEvalZero       yyn = yypact[yystate];
2168*10465441SEvalZero       if (!yypact_value_is_default (yyn))
2169*10465441SEvalZero         {
2170*10465441SEvalZero           yyn += YYTERROR;
2171*10465441SEvalZero           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2172*10465441SEvalZero             {
2173*10465441SEvalZero               yyn = yytable[yyn];
2174*10465441SEvalZero               if (0 < yyn)
2175*10465441SEvalZero                 break;
2176*10465441SEvalZero             }
2177*10465441SEvalZero         }
2178*10465441SEvalZero 
2179*10465441SEvalZero       /* Pop the current state because it cannot handle the error token.  */
2180*10465441SEvalZero       if (yyssp == yyss)
2181*10465441SEvalZero         YYABORT;
2182*10465441SEvalZero 
2183*10465441SEvalZero 
2184*10465441SEvalZero       yydestruct ("Error: popping",
2185*10465441SEvalZero                   yystos[yystate], yyvsp);
2186*10465441SEvalZero       YYPOPSTACK (1);
2187*10465441SEvalZero       yystate = *yyssp;
2188*10465441SEvalZero       YY_STACK_PRINT (yyss, yyssp);
2189*10465441SEvalZero     }
2190*10465441SEvalZero 
2191*10465441SEvalZero   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2192*10465441SEvalZero   *++yyvsp = yylval;
2193*10465441SEvalZero   YY_IGNORE_MAYBE_UNINITIALIZED_END
2194*10465441SEvalZero 
2195*10465441SEvalZero 
2196*10465441SEvalZero   /* Shift the error token.  */
2197*10465441SEvalZero   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2198*10465441SEvalZero 
2199*10465441SEvalZero   yystate = yyn;
2200*10465441SEvalZero   goto yynewstate;
2201*10465441SEvalZero 
2202*10465441SEvalZero 
2203*10465441SEvalZero /*-------------------------------------.
2204*10465441SEvalZero | yyacceptlab -- YYACCEPT comes here.  |
2205*10465441SEvalZero `-------------------------------------*/
2206*10465441SEvalZero yyacceptlab:
2207*10465441SEvalZero   yyresult = 0;
2208*10465441SEvalZero   goto yyreturn;
2209*10465441SEvalZero 
2210*10465441SEvalZero /*-----------------------------------.
2211*10465441SEvalZero | yyabortlab -- YYABORT comes here.  |
2212*10465441SEvalZero `-----------------------------------*/
2213*10465441SEvalZero yyabortlab:
2214*10465441SEvalZero   yyresult = 1;
2215*10465441SEvalZero   goto yyreturn;
2216*10465441SEvalZero 
2217*10465441SEvalZero #if !defined yyoverflow || YYERROR_VERBOSE
2218*10465441SEvalZero /*-------------------------------------------------.
2219*10465441SEvalZero | yyexhaustedlab -- memory exhaustion comes here.  |
2220*10465441SEvalZero `-------------------------------------------------*/
2221*10465441SEvalZero yyexhaustedlab:
2222*10465441SEvalZero   yyerror (YY_("memory exhausted"));
2223*10465441SEvalZero   yyresult = 2;
2224*10465441SEvalZero   /* Fall through.  */
2225*10465441SEvalZero #endif
2226*10465441SEvalZero 
2227*10465441SEvalZero yyreturn:
2228*10465441SEvalZero   if (yychar != YYEMPTY)
2229*10465441SEvalZero     {
2230*10465441SEvalZero       /* Make sure we have latest lookahead translation.  See comments at
2231*10465441SEvalZero          user semantic actions for why this is necessary.  */
2232*10465441SEvalZero       yytoken = YYTRANSLATE (yychar);
2233*10465441SEvalZero       yydestruct ("Cleanup: discarding lookahead",
2234*10465441SEvalZero                   yytoken, &yylval);
2235*10465441SEvalZero     }
2236*10465441SEvalZero   /* Do not reclaim the symbols of the rule whose action triggered
2237*10465441SEvalZero      this YYABORT or YYACCEPT.  */
2238*10465441SEvalZero   YYPOPSTACK (yylen);
2239*10465441SEvalZero   YY_STACK_PRINT (yyss, yyssp);
2240*10465441SEvalZero   while (yyssp != yyss)
2241*10465441SEvalZero     {
2242*10465441SEvalZero       yydestruct ("Cleanup: popping",
2243*10465441SEvalZero                   yystos[*yyssp], yyvsp);
2244*10465441SEvalZero       YYPOPSTACK (1);
2245*10465441SEvalZero     }
2246*10465441SEvalZero #ifndef yyoverflow
2247*10465441SEvalZero   if (yyss != yyssa)
2248*10465441SEvalZero     YYSTACK_FREE (yyss);
2249*10465441SEvalZero #endif
2250*10465441SEvalZero #if YYERROR_VERBOSE
2251*10465441SEvalZero   if (yymsg != yymsgbuf)
2252*10465441SEvalZero     YYSTACK_FREE (yymsg);
2253*10465441SEvalZero #endif
2254*10465441SEvalZero   return yyresult;
2255*10465441SEvalZero }
2256*10465441SEvalZero 
2257*10465441SEvalZero 
2258*10465441SEvalZero 
conf_parse(const char * name)2259*10465441SEvalZero void conf_parse(const char *name)
2260*10465441SEvalZero {
2261*10465441SEvalZero 	struct symbol *sym;
2262*10465441SEvalZero 	int i;
2263*10465441SEvalZero 
2264*10465441SEvalZero 	zconf_initscan(name);
2265*10465441SEvalZero 
2266*10465441SEvalZero 	sym_init();
2267*10465441SEvalZero 	_menu_init();
2268*10465441SEvalZero 	rootmenu.prompt = menu_add_prompt(P_MENU, ROOTMENU, NULL);
2269*10465441SEvalZero 
2270*10465441SEvalZero 	if (getenv("ZCONF_DEBUG"))
2271*10465441SEvalZero 		zconfdebug = 1;
2272*10465441SEvalZero 	zconfparse();
2273*10465441SEvalZero 	if (zconfnerrs)
2274*10465441SEvalZero 		exit(1);
2275*10465441SEvalZero 	if (!modules_sym)
2276*10465441SEvalZero 		modules_sym = sym_find( "n" );
2277*10465441SEvalZero 
2278*10465441SEvalZero 	rootmenu.prompt->text = _(rootmenu.prompt->text);
2279*10465441SEvalZero 	rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
2280*10465441SEvalZero 
2281*10465441SEvalZero 	menu_finalize(&rootmenu);
2282*10465441SEvalZero 	for_all_symbols(i, sym) {
2283*10465441SEvalZero 		if (sym_check_deps(sym))
2284*10465441SEvalZero 			zconfnerrs++;
2285*10465441SEvalZero 	}
2286*10465441SEvalZero 	if (zconfnerrs)
2287*10465441SEvalZero 		exit(1);
2288*10465441SEvalZero 	sym_set_change_count(1);
2289*10465441SEvalZero }
2290*10465441SEvalZero 
zconf_tokenname(int token)2291*10465441SEvalZero static const char *zconf_tokenname(int token)
2292*10465441SEvalZero {
2293*10465441SEvalZero 	switch (token) {
2294*10465441SEvalZero 	case T_MENU:		return "menu";
2295*10465441SEvalZero 	case T_ENDMENU:		return "endmenu";
2296*10465441SEvalZero 	case T_CHOICE:		return "choice";
2297*10465441SEvalZero 	case T_ENDCHOICE:	return "endchoice";
2298*10465441SEvalZero 	case T_IF:		return "if";
2299*10465441SEvalZero 	case T_ENDIF:		return "endif";
2300*10465441SEvalZero 	case T_DEPENDS:		return "depends";
2301*10465441SEvalZero 	case T_VISIBLE:		return "visible";
2302*10465441SEvalZero 	}
2303*10465441SEvalZero 	return "<token>";
2304*10465441SEvalZero }
2305*10465441SEvalZero 
zconf_endtoken(const struct kconf_id * id,int starttoken,int endtoken)2306*10465441SEvalZero static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
2307*10465441SEvalZero {
2308*10465441SEvalZero 	if (id->token != endtoken) {
2309*10465441SEvalZero 		zconf_error("unexpected '%s' within %s block",
2310*10465441SEvalZero 			kconf_id_strings + id->name, zconf_tokenname(starttoken));
2311*10465441SEvalZero 		zconfnerrs++;
2312*10465441SEvalZero 		return false;
2313*10465441SEvalZero 	}
2314*10465441SEvalZero 	if (current_menu->file != current_file) {
2315*10465441SEvalZero 		zconf_error("'%s' in different file than '%s'",
2316*10465441SEvalZero 			kconf_id_strings + id->name, zconf_tokenname(starttoken));
2317*10465441SEvalZero 		fprintf(stderr, "%s:%d: location of the '%s'\n",
2318*10465441SEvalZero 			current_menu->file->name, current_menu->lineno,
2319*10465441SEvalZero 			zconf_tokenname(starttoken));
2320*10465441SEvalZero 		zconfnerrs++;
2321*10465441SEvalZero 		return false;
2322*10465441SEvalZero 	}
2323*10465441SEvalZero 	return true;
2324*10465441SEvalZero }
2325*10465441SEvalZero 
zconfprint(const char * err,...)2326*10465441SEvalZero static void zconfprint(const char *err, ...)
2327*10465441SEvalZero {
2328*10465441SEvalZero 	va_list ap;
2329*10465441SEvalZero 
2330*10465441SEvalZero 	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
2331*10465441SEvalZero 	va_start(ap, err);
2332*10465441SEvalZero 	vfprintf(stderr, err, ap);
2333*10465441SEvalZero 	va_end(ap);
2334*10465441SEvalZero 	fprintf(stderr, "\n");
2335*10465441SEvalZero }
2336*10465441SEvalZero 
zconf_error(const char * err,...)2337*10465441SEvalZero static void zconf_error(const char *err, ...)
2338*10465441SEvalZero {
2339*10465441SEvalZero 	va_list ap;
2340*10465441SEvalZero 
2341*10465441SEvalZero 	zconfnerrs++;
2342*10465441SEvalZero 	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
2343*10465441SEvalZero 	va_start(ap, err);
2344*10465441SEvalZero 	vfprintf(stderr, err, ap);
2345*10465441SEvalZero 	va_end(ap);
2346*10465441SEvalZero 	fprintf(stderr, "\n");
2347*10465441SEvalZero }
2348*10465441SEvalZero 
zconferror(const char * err)2349*10465441SEvalZero static void zconferror(const char *err)
2350*10465441SEvalZero {
2351*10465441SEvalZero 	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
2352*10465441SEvalZero }
2353*10465441SEvalZero 
print_quoted_string(FILE * out,const char * str)2354*10465441SEvalZero static void print_quoted_string(FILE *out, const char *str)
2355*10465441SEvalZero {
2356*10465441SEvalZero 	const char *p;
2357*10465441SEvalZero 	int len;
2358*10465441SEvalZero 
2359*10465441SEvalZero 	putc('"', out);
2360*10465441SEvalZero 	while ((p = strchr(str, '"'))) {
2361*10465441SEvalZero 		len = p - str;
2362*10465441SEvalZero 		if (len)
2363*10465441SEvalZero 			fprintf(out, "%.*s", len, str);
2364*10465441SEvalZero 		fputs("\\\"", out);
2365*10465441SEvalZero 		str = p + 1;
2366*10465441SEvalZero 	}
2367*10465441SEvalZero 	fputs(str, out);
2368*10465441SEvalZero 	putc('"', out);
2369*10465441SEvalZero }
2370*10465441SEvalZero 
print_symbol(FILE * out,struct menu * menu)2371*10465441SEvalZero static void print_symbol(FILE *out, struct menu *menu)
2372*10465441SEvalZero {
2373*10465441SEvalZero 	struct symbol *sym = menu->sym;
2374*10465441SEvalZero 	struct property *prop;
2375*10465441SEvalZero 
2376*10465441SEvalZero 	if (sym_is_choice(sym))
2377*10465441SEvalZero 		fprintf(out, "\nchoice\n");
2378*10465441SEvalZero 	else
2379*10465441SEvalZero 		fprintf(out, "\nconfig %s\n", sym->name);
2380*10465441SEvalZero 	switch (sym->type) {
2381*10465441SEvalZero 	case S_BOOLEAN:
2382*10465441SEvalZero 		fputs("  boolean\n", out);
2383*10465441SEvalZero 		break;
2384*10465441SEvalZero 	case S_TRISTATE:
2385*10465441SEvalZero 		fputs("  tristate\n", out);
2386*10465441SEvalZero 		break;
2387*10465441SEvalZero 	case S_STRING:
2388*10465441SEvalZero 		fputs("  string\n", out);
2389*10465441SEvalZero 		break;
2390*10465441SEvalZero 	case S_INT:
2391*10465441SEvalZero 		fputs("  integer\n", out);
2392*10465441SEvalZero 		break;
2393*10465441SEvalZero 	case S_HEX:
2394*10465441SEvalZero 		fputs("  hex\n", out);
2395*10465441SEvalZero 		break;
2396*10465441SEvalZero 	default:
2397*10465441SEvalZero 		fputs("  ???\n", out);
2398*10465441SEvalZero 		break;
2399*10465441SEvalZero 	}
2400*10465441SEvalZero 	for (prop = sym->prop; prop; prop = prop->next) {
2401*10465441SEvalZero 		if (prop->menu != menu)
2402*10465441SEvalZero 			continue;
2403*10465441SEvalZero 		switch (prop->type) {
2404*10465441SEvalZero 		case P_PROMPT:
2405*10465441SEvalZero 			fputs("  prompt ", out);
2406*10465441SEvalZero 			print_quoted_string(out, prop->text);
2407*10465441SEvalZero 			if (!expr_is_yes(prop->visible.expr)) {
2408*10465441SEvalZero 				fputs(" if ", out);
2409*10465441SEvalZero 				expr_fprint(prop->visible.expr, out);
2410*10465441SEvalZero 			}
2411*10465441SEvalZero 			fputc('\n', out);
2412*10465441SEvalZero 			break;
2413*10465441SEvalZero 		case P_DEFAULT:
2414*10465441SEvalZero 			fputs( "  default ", out);
2415*10465441SEvalZero 			expr_fprint(prop->expr, out);
2416*10465441SEvalZero 			if (!expr_is_yes(prop->visible.expr)) {
2417*10465441SEvalZero 				fputs(" if ", out);
2418*10465441SEvalZero 				expr_fprint(prop->visible.expr, out);
2419*10465441SEvalZero 			}
2420*10465441SEvalZero 			fputc('\n', out);
2421*10465441SEvalZero 			break;
2422*10465441SEvalZero 		case P_CHOICE:
2423*10465441SEvalZero 			fputs("  #choice value\n", out);
2424*10465441SEvalZero 			break;
2425*10465441SEvalZero 		case P_SELECT:
2426*10465441SEvalZero 			fputs( "  select ", out);
2427*10465441SEvalZero 			expr_fprint(prop->expr, out);
2428*10465441SEvalZero 			fputc('\n', out);
2429*10465441SEvalZero 			break;
2430*10465441SEvalZero 		case P_IMPLY:
2431*10465441SEvalZero 			fputs( "  imply ", out);
2432*10465441SEvalZero 			expr_fprint(prop->expr, out);
2433*10465441SEvalZero 			fputc('\n', out);
2434*10465441SEvalZero 			break;
2435*10465441SEvalZero 		case P_RANGE:
2436*10465441SEvalZero 			fputs( "  range ", out);
2437*10465441SEvalZero 			expr_fprint(prop->expr, out);
2438*10465441SEvalZero 			fputc('\n', out);
2439*10465441SEvalZero 			break;
2440*10465441SEvalZero 		case P_MENU:
2441*10465441SEvalZero 			fputs( "  menu ", out);
2442*10465441SEvalZero 			print_quoted_string(out, prop->text);
2443*10465441SEvalZero 			fputc('\n', out);
2444*10465441SEvalZero 			break;
2445*10465441SEvalZero 		default:
2446*10465441SEvalZero 			fprintf(out, "  unknown prop %d!\n", prop->type);
2447*10465441SEvalZero 			break;
2448*10465441SEvalZero 		}
2449*10465441SEvalZero 	}
2450*10465441SEvalZero 	if (menu->help) {
2451*10465441SEvalZero 		int len = strlen(menu->help);
2452*10465441SEvalZero 		while (menu->help[--len] == '\n')
2453*10465441SEvalZero 			menu->help[len] = 0;
2454*10465441SEvalZero 		fprintf(out, "  help\n%s\n", menu->help);
2455*10465441SEvalZero 	}
2456*10465441SEvalZero }
2457*10465441SEvalZero 
zconfdump(FILE * out)2458*10465441SEvalZero void zconfdump(FILE *out)
2459*10465441SEvalZero {
2460*10465441SEvalZero 	struct property *prop;
2461*10465441SEvalZero 	struct symbol *sym;
2462*10465441SEvalZero 	struct menu *menu;
2463*10465441SEvalZero 
2464*10465441SEvalZero 	menu = rootmenu.list;
2465*10465441SEvalZero 	while (menu) {
2466*10465441SEvalZero 		if ((sym = menu->sym))
2467*10465441SEvalZero 			print_symbol(out, menu);
2468*10465441SEvalZero 		else if ((prop = menu->prompt)) {
2469*10465441SEvalZero 			switch (prop->type) {
2470*10465441SEvalZero 			case P_COMMENT:
2471*10465441SEvalZero 				fputs("\ncomment ", out);
2472*10465441SEvalZero 				print_quoted_string(out, prop->text);
2473*10465441SEvalZero 				fputs("\n", out);
2474*10465441SEvalZero 				break;
2475*10465441SEvalZero 			case P_MENU:
2476*10465441SEvalZero 				fputs("\nmenu ", out);
2477*10465441SEvalZero 				print_quoted_string(out, prop->text);
2478*10465441SEvalZero 				fputs("\n", out);
2479*10465441SEvalZero 				break;
2480*10465441SEvalZero 			default:
2481*10465441SEvalZero 				;
2482*10465441SEvalZero 			}
2483*10465441SEvalZero 			if (!expr_is_yes(prop->visible.expr)) {
2484*10465441SEvalZero 				fputs("  depends ", out);
2485*10465441SEvalZero 				expr_fprint(prop->visible.expr, out);
2486*10465441SEvalZero 				fputc('\n', out);
2487*10465441SEvalZero 			}
2488*10465441SEvalZero 		}
2489*10465441SEvalZero 
2490*10465441SEvalZero 		if (menu->list)
2491*10465441SEvalZero 			menu = menu->list;
2492*10465441SEvalZero 		else if (menu->next)
2493*10465441SEvalZero 			menu = menu->next;
2494*10465441SEvalZero 		else while ((menu = menu->parent)) {
2495*10465441SEvalZero 			if (menu->prompt && menu->prompt->type == P_MENU)
2496*10465441SEvalZero 				fputs("\nendmenu\n", out);
2497*10465441SEvalZero 			if (menu->next) {
2498*10465441SEvalZero 				menu = menu->next;
2499*10465441SEvalZero 				break;
2500*10465441SEvalZero 			}
2501*10465441SEvalZero 		}
2502*10465441SEvalZero 	}
2503*10465441SEvalZero }
2504*10465441SEvalZero 
2505*10465441SEvalZero #include "lconf.c"
2506*10465441SEvalZero #include "util.c"
2507*10465441SEvalZero #include "confdata.c"
2508*10465441SEvalZero #include "expr.c"
2509*10465441SEvalZero #include "symbol.c"
2510*10465441SEvalZero #include "menu.c"
2511