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