blob: be6bd4c0dc8a4991fc6dacf04a49baa63776cf9e [file] [log] [blame]
Eric Andersen72d8e442003-08-05 02:18:25 +00001/* A Bison parser, made by GNU Bison 1.875a. */
Eric Andersenc9f20d92002-12-05 08:41:41 +00002
3/* Skeleton parser for Yacc-like parsing with Bison,
Eric Andersen72d8e442003-08-05 02:18:25 +00004 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Eric Andersenc9f20d92002-12-05 08:41:41 +00005
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
Eric Andersen72d8e442003-08-05 02:18:25 +000037#define YYBISON 1
38
39/* Skeleton name. */
40#define YYSKELETON_NAME "yacc.c"
Eric Andersenc9f20d92002-12-05 08:41:41 +000041
42/* Pure parsers. */
Eric Andersen72d8e442003-08-05 02:18:25 +000043#define YYPURE 0
Eric Andersenc9f20d92002-12-05 08:41:41 +000044
45/* Using locations. */
46#define YYLSP_NEEDED 0
47
48/* If NAME_PREFIX is specified substitute the variables and functions
49 names. */
50#define yyparse zconfparse
51#define yylex zconflex
52#define yyerror zconferror
53#define yylval zconflval
54#define yychar zconfchar
55#define yydebug zconfdebug
56#define yynerrs zconfnerrs
57
58
59/* Tokens. */
60#ifndef YYTOKENTYPE
61# define YYTOKENTYPE
62 /* Put the tokens into the symbol table, so that GDB and other debuggers
63 know about them. */
64 enum yytokentype {
65 T_MAINMENU = 258,
66 T_MENU = 259,
67 T_ENDMENU = 260,
68 T_SOURCE = 261,
69 T_CHOICE = 262,
70 T_ENDCHOICE = 263,
71 T_COMMENT = 264,
72 T_CONFIG = 265,
Eric Andersen72d8e442003-08-05 02:18:25 +000073 T_MENUCONFIG = 266,
74 T_HELP = 267,
75 T_HELPTEXT = 268,
76 T_IF = 269,
77 T_ENDIF = 270,
78 T_DEPENDS = 271,
79 T_REQUIRES = 272,
80 T_OPTIONAL = 273,
81 T_PROMPT = 274,
82 T_DEFAULT = 275,
83 T_TRISTATE = 276,
84 T_DEF_TRISTATE = 277,
85 T_BOOLEAN = 278,
86 T_DEF_BOOLEAN = 279,
Eric Andersenc9f20d92002-12-05 08:41:41 +000087 T_STRING = 280,
Eric Andersen72d8e442003-08-05 02:18:25 +000088 T_INT = 281,
89 T_HEX = 282,
90 T_WORD = 283,
91 T_WORD_QUOTE = 284,
92 T_UNEQUAL = 285,
93 T_EOF = 286,
94 T_EOL = 287,
95 T_CLOSE_PAREN = 288,
96 T_OPEN_PAREN = 289,
97 T_ON = 290,
98 T_SELECT = 291,
99 T_RANGE = 292,
100 T_OR = 293,
101 T_AND = 294,
102 T_EQUAL = 295,
103 T_NOT = 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000104 };
105#endif
106#define T_MAINMENU 258
107#define T_MENU 259
108#define T_ENDMENU 260
109#define T_SOURCE 261
110#define T_CHOICE 262
111#define T_ENDCHOICE 263
112#define T_COMMENT 264
113#define T_CONFIG 265
Eric Andersen72d8e442003-08-05 02:18:25 +0000114#define T_MENUCONFIG 266
115#define T_HELP 267
116#define T_HELPTEXT 268
117#define T_IF 269
118#define T_ENDIF 270
119#define T_DEPENDS 271
120#define T_REQUIRES 272
121#define T_OPTIONAL 273
122#define T_PROMPT 274
123#define T_DEFAULT 275
124#define T_TRISTATE 276
125#define T_DEF_TRISTATE 277
126#define T_BOOLEAN 278
127#define T_DEF_BOOLEAN 279
Eric Andersenc9f20d92002-12-05 08:41:41 +0000128#define T_STRING 280
Eric Andersen72d8e442003-08-05 02:18:25 +0000129#define T_INT 281
130#define T_HEX 282
131#define T_WORD 283
132#define T_WORD_QUOTE 284
133#define T_UNEQUAL 285
134#define T_EOF 286
135#define T_EOL 287
136#define T_CLOSE_PAREN 288
137#define T_OPEN_PAREN 289
138#define T_ON 290
139#define T_SELECT 291
140#define T_RANGE 292
141#define T_OR 293
142#define T_AND 294
143#define T_EQUAL 295
144#define T_NOT 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000145
146
147
148
149/* Copy the first part of user declarations. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000150
Eric Andersenc9f20d92002-12-05 08:41:41 +0000151
152/*
153 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
154 * Released under the terms of the GNU GPL v2.0.
155 */
156
157#include <ctype.h>
158#include <stdarg.h>
159#include <stdio.h>
160#include <stdlib.h>
161#include <string.h>
162#include <stdbool.h>
163
164#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
165
166#define PRINTD 0x0001
167#define DEBUG_PARSE 0x0002
168
169int cdebug = PRINTD;
170
171extern int zconflex(void);
172static void zconfprint(const char *err, ...);
173static void zconferror(const char *err);
174static bool zconf_endtoken(int token, int starttoken, int endtoken);
175
176struct symbol *symbol_hash[257];
177
Peter Kjellerstedtbae38db2005-04-19 09:55:06 +0000178static struct menu *current_menu, *current_entry;
179
Eric Andersenc9f20d92002-12-05 08:41:41 +0000180#define YYERROR_VERBOSE
181
182
183/* Enabling traces. */
184#ifndef YYDEBUG
Eric Andersen72d8e442003-08-05 02:18:25 +0000185# define YYDEBUG 0
Eric Andersenc9f20d92002-12-05 08:41:41 +0000186#endif
187
188/* Enabling verbose error messages. */
189#ifdef YYERROR_VERBOSE
190# undef YYERROR_VERBOSE
191# define YYERROR_VERBOSE 1
192#else
193# define YYERROR_VERBOSE 0
194#endif
195
Eric Andersen72d8e442003-08-05 02:18:25 +0000196#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
197
198typedef union YYSTYPE {
Eric Andersenc9f20d92002-12-05 08:41:41 +0000199 int token;
200 char *string;
201 struct symbol *symbol;
202 struct expr *expr;
203 struct menu *menu;
Eric Andersen72d8e442003-08-05 02:18:25 +0000204} YYSTYPE;
205/* Line 191 of yacc.c. */
206
207# define yystype YYSTYPE /* obsolescent; will be withdrawn */
208# define YYSTYPE_IS_DECLARED 1
Eric Andersenc9f20d92002-12-05 08:41:41 +0000209# define YYSTYPE_IS_TRIVIAL 1
210#endif
211
Eric Andersen72d8e442003-08-05 02:18:25 +0000212
Eric Andersenc9f20d92002-12-05 08:41:41 +0000213
214/* Copy the second part of user declarations. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000215
Eric Andersenc9f20d92002-12-05 08:41:41 +0000216
217#define LKC_DIRECT_LINK
218#include "lkc.h"
219
220
Eric Andersen72d8e442003-08-05 02:18:25 +0000221/* Line 214 of yacc.c. */
222
Eric Andersenc9f20d92002-12-05 08:41:41 +0000223
224#if ! defined (yyoverflow) || YYERROR_VERBOSE
225
226/* The parser invokes alloca or malloc; define the necessary symbols. */
227
228# if YYSTACK_USE_ALLOCA
229# define YYSTACK_ALLOC alloca
230# else
231# ifndef YYSTACK_USE_ALLOCA
Mike Frysingera9ae74d2005-04-16 04:06:14 +0000232# if defined (alloca) || (defined (_ALLOCA_H) && defined (__GNUC__))
Eric Andersenc9f20d92002-12-05 08:41:41 +0000233# define YYSTACK_ALLOC alloca
234# else
235# ifdef __GNUC__
236# define YYSTACK_ALLOC __builtin_alloca
237# endif
238# endif
239# endif
240# endif
241
242# ifdef YYSTACK_ALLOC
243 /* Pacify GCC's `empty if-body' warning. */
244# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
245# else
246# if defined (__STDC__) || defined (__cplusplus)
247# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
248# define YYSIZE_T size_t
249# endif
250# define YYSTACK_ALLOC malloc
251# define YYSTACK_FREE free
252# endif
253#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
254
255
256#if (! defined (yyoverflow) \
257 && (! defined (__cplusplus) \
Eric Andersen72d8e442003-08-05 02:18:25 +0000258 || (YYSTYPE_IS_TRIVIAL)))
Eric Andersenc9f20d92002-12-05 08:41:41 +0000259
260/* A type that is properly aligned for any stack member. */
261union yyalloc
262{
263 short yyss;
264 YYSTYPE yyvs;
265 };
266
267/* The size of the maximum gap between one aligned stack and the next. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000268# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000269
270/* The size of an array large to enough to hold all stacks, each with
271 N elements. */
272# define YYSTACK_BYTES(N) \
273 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
Eric Andersen72d8e442003-08-05 02:18:25 +0000274 + YYSTACK_GAP_MAXIMUM)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000275
276/* Copy COUNT objects from FROM to TO. The source and destination do
277 not overlap. */
278# ifndef YYCOPY
279# if 1 < __GNUC__
280# define YYCOPY(To, From, Count) \
281 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
282# else
283# define YYCOPY(To, From, Count) \
284 do \
285 { \
286 register YYSIZE_T yyi; \
287 for (yyi = 0; yyi < (Count); yyi++) \
Eric Andersen72d8e442003-08-05 02:18:25 +0000288 (To)[yyi] = (From)[yyi]; \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000289 } \
290 while (0)
291# endif
292# endif
293
294/* Relocate STACK from its old location to the new one. The
295 local variables YYSIZE and YYSTACKSIZE give the old and new number of
296 elements in the stack, and YYPTR gives the new location of the
297 stack. Advance YYPTR to a properly aligned location for the next
298 stack. */
299# define YYSTACK_RELOCATE(Stack) \
300 do \
301 { \
302 YYSIZE_T yynewbytes; \
303 YYCOPY (&yyptr->Stack, Stack, yysize); \
304 Stack = &yyptr->Stack; \
Eric Andersen72d8e442003-08-05 02:18:25 +0000305 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000306 yyptr += yynewbytes / sizeof (*yyptr); \
307 } \
308 while (0)
309
310#endif
311
312#if defined (__STDC__) || defined (__cplusplus)
313 typedef signed char yysigned_char;
314#else
315 typedef short yysigned_char;
316#endif
317
318/* YYFINAL -- State number of the termination state. */
319#define YYFINAL 2
Eric Andersen72d8e442003-08-05 02:18:25 +0000320/* YYLAST -- Last index in YYTABLE. */
321#define YYLAST 201
Eric Andersenc9f20d92002-12-05 08:41:41 +0000322
323/* YYNTOKENS -- Number of terminals. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000324#define YYNTOKENS 42
Eric Andersenc9f20d92002-12-05 08:41:41 +0000325/* YYNNTS -- Number of nonterminals. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000326#define YYNNTS 41
Eric Andersenc9f20d92002-12-05 08:41:41 +0000327/* YYNRULES -- Number of rules. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000328#define YYNRULES 104
Eric Andersenc9f20d92002-12-05 08:41:41 +0000329/* YYNRULES -- Number of states. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000330#define YYNSTATES 182
Eric Andersenc9f20d92002-12-05 08:41:41 +0000331
332/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
333#define YYUNDEFTOK 2
Eric Andersen72d8e442003-08-05 02:18:25 +0000334#define YYMAXUTOK 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000335
Eric Andersen72d8e442003-08-05 02:18:25 +0000336#define YYTRANSLATE(YYX) \
337 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000338
339/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
340static const unsigned char yytranslate[] =
341{
342 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
343 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
344 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
345 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
346 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
347 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
348 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
349 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
350 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
351 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
352 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
353 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
354 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
355 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
356 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
357 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
358 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
359 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
360 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
361 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
362 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
363 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
364 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
365 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
366 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
367 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
368 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
369 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
370 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
Eric Andersen72d8e442003-08-05 02:18:25 +0000371 35, 36, 37, 38, 39, 40, 41
Eric Andersenc9f20d92002-12-05 08:41:41 +0000372};
373
374#if YYDEBUG
375/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
376 YYRHS. */
377static const unsigned short yyprhs[] =
378{
379 0, 0, 3, 4, 7, 9, 11, 13, 17, 19,
Eric Andersen72d8e442003-08-05 02:18:25 +0000380 21, 23, 26, 28, 30, 32, 34, 36, 38, 42,
381 45, 49, 52, 53, 56, 59, 62, 65, 69, 74,
382 78, 83, 87, 91, 95, 100, 105, 110, 116, 119,
383 122, 124, 128, 131, 132, 135, 138, 141, 144, 149,
384 153, 157, 160, 165, 166, 169, 173, 175, 179, 182,
385 183, 186, 189, 192, 196, 199, 201, 205, 208, 209,
386 212, 215, 218, 222, 226, 228, 232, 235, 238, 241,
387 242, 245, 248, 253, 257, 261, 262, 265, 267, 269,
388 272, 275, 278, 280, 282, 283, 286, 288, 292, 296,
389 300, 303, 307, 311, 313
Eric Andersenc9f20d92002-12-05 08:41:41 +0000390};
391
392/* YYRHS -- A `-1'-separated list of the rules' RHS. */
393static const yysigned_char yyrhs[] =
394{
Eric Andersen72d8e442003-08-05 02:18:25 +0000395 43, 0, -1, -1, 43, 44, -1, 45, -1, 55,
396 -1, 66, -1, 3, 77, 79, -1, 5, -1, 15,
397 -1, 8, -1, 1, 79, -1, 61, -1, 71, -1,
398 47, -1, 49, -1, 69, -1, 79, -1, 10, 28,
399 32, -1, 46, 50, -1, 11, 28, 32, -1, 48,
400 50, -1, -1, 50, 51, -1, 50, 75, -1, 50,
401 73, -1, 50, 32, -1, 21, 76, 32, -1, 22,
402 81, 80, 32, -1, 23, 76, 32, -1, 24, 81,
403 80, 32, -1, 26, 76, 32, -1, 27, 76, 32,
404 -1, 25, 76, 32, -1, 19, 77, 80, 32, -1,
405 20, 81, 80, 32, -1, 36, 28, 80, 32, -1,
406 37, 82, 82, 80, 32, -1, 7, 32, -1, 52,
407 56, -1, 78, -1, 53, 58, 54, -1, 53, 58,
408 -1, -1, 56, 57, -1, 56, 75, -1, 56, 73,
409 -1, 56, 32, -1, 19, 77, 80, 32, -1, 21,
410 76, 32, -1, 23, 76, 32, -1, 18, 32, -1,
411 20, 28, 80, 32, -1, -1, 58, 45, -1, 14,
412 81, 32, -1, 78, -1, 59, 62, 60, -1, 59,
413 62, -1, -1, 62, 45, -1, 62, 66, -1, 62,
414 55, -1, 4, 77, 32, -1, 63, 74, -1, 78,
415 -1, 64, 67, 65, -1, 64, 67, -1, -1, 67,
416 45, -1, 67, 66, -1, 67, 55, -1, 67, 1,
417 32, -1, 6, 77, 32, -1, 68, -1, 9, 77,
418 32, -1, 70, 74, -1, 12, 32, -1, 72, 13,
419 -1, -1, 74, 75, -1, 74, 32, -1, 16, 35,
420 81, 32, -1, 16, 81, 32, -1, 17, 81, 32,
421 -1, -1, 77, 80, -1, 28, -1, 29, -1, 5,
422 79, -1, 8, 79, -1, 15, 79, -1, 32, -1,
423 31, -1, -1, 14, 81, -1, 82, -1, 82, 40,
424 82, -1, 82, 30, 82, -1, 34, 81, 33, -1,
425 41, 81, -1, 81, 38, 81, -1, 81, 39, 81,
426 -1, 28, -1, 29, -1
Eric Andersenc9f20d92002-12-05 08:41:41 +0000427};
428
429/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
430static const unsigned short yyrline[] =
431{
Eric Andersen72d8e442003-08-05 02:18:25 +0000432 0, 94, 94, 95, 98, 99, 100, 101, 102, 103,
433 104, 105, 109, 110, 111, 112, 113, 114, 120, 128,
434 134, 142, 152, 154, 155, 156, 157, 160, 166, 173,
435 179, 186, 192, 198, 204, 210, 216, 222, 230, 239,
436 245, 254, 255, 261, 263, 264, 265, 266, 269, 275,
437 281, 287, 293, 299, 301, 306, 315, 324, 325, 331,
438 333, 334, 335, 340, 347, 353, 362, 363, 369, 371,
439 372, 373, 374, 377, 383, 390, 397, 404, 410, 417,
440 418, 419, 422, 427, 432, 440, 442, 447, 448, 451,
441 452, 453, 457, 457, 459, 460, 463, 464, 465, 466,
442 467, 468, 469, 472, 473
Eric Andersenc9f20d92002-12-05 08:41:41 +0000443};
444#endif
445
446#if YYDEBUG || YYERROR_VERBOSE
447/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
448 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
449static const char *const yytname[] =
450{
Eric Andersenc7bda1c2004-03-15 08:29:22 +0000451 "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
452 "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
453 "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
454 "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_DEFAULT", "T_TRISTATE",
455 "T_DEF_TRISTATE", "T_BOOLEAN", "T_DEF_BOOLEAN", "T_STRING", "T_INT",
456 "T_HEX", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL", "T_EOF", "T_EOL",
457 "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_ON", "T_SELECT", "T_RANGE", "T_OR",
458 "T_AND", "T_EQUAL", "T_NOT", "$accept", "input", "block",
459 "common_block", "config_entry_start", "config_stmt",
460 "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
461 "config_option", "choice", "choice_entry", "choice_end", "choice_stmt",
462 "choice_option_list", "choice_option", "choice_block", "if", "if_end",
463 "if_stmt", "if_block", "menu", "menu_entry", "menu_end", "menu_stmt",
464 "menu_block", "source", "source_stmt", "comment", "comment_stmt",
465 "help_start", "help", "depends_list", "depends", "prompt_stmt_opt",
Eric Andersenc9f20d92002-12-05 08:41:41 +0000466 "prompt", "end", "nl_or_eof", "if_expr", "expr", "symbol", 0
467};
468#endif
469
470# ifdef YYPRINT
471/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
472 token YYLEX-NUM. */
473static const unsigned short yytoknum[] =
474{
475 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
476 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
477 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
Eric Andersen72d8e442003-08-05 02:18:25 +0000478 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
479 295, 296
Eric Andersenc9f20d92002-12-05 08:41:41 +0000480};
481# endif
482
483/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
484static const unsigned char yyr1[] =
485{
Eric Andersen72d8e442003-08-05 02:18:25 +0000486 0, 42, 43, 43, 44, 44, 44, 44, 44, 44,
487 44, 44, 45, 45, 45, 45, 45, 45, 46, 47,
488 48, 49, 50, 50, 50, 50, 50, 51, 51, 51,
489 51, 51, 51, 51, 51, 51, 51, 51, 52, 53,
490 54, 55, 55, 56, 56, 56, 56, 56, 57, 57,
491 57, 57, 57, 58, 58, 59, 60, 61, 61, 62,
492 62, 62, 62, 63, 64, 65, 66, 66, 67, 67,
493 67, 67, 67, 68, 69, 70, 71, 72, 73, 74,
494 74, 74, 75, 75, 75, 76, 76, 77, 77, 78,
495 78, 78, 79, 79, 80, 80, 81, 81, 81, 81,
496 81, 81, 81, 82, 82
Eric Andersenc9f20d92002-12-05 08:41:41 +0000497};
498
499/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
500static const unsigned char yyr2[] =
501{
502 0, 2, 0, 2, 1, 1, 1, 3, 1, 1,
Eric Andersen72d8e442003-08-05 02:18:25 +0000503 1, 2, 1, 1, 1, 1, 1, 1, 3, 2,
504 3, 2, 0, 2, 2, 2, 2, 3, 4, 3,
505 4, 3, 3, 3, 4, 4, 4, 5, 2, 2,
506 1, 3, 2, 0, 2, 2, 2, 2, 4, 3,
507 3, 2, 4, 0, 2, 3, 1, 3, 2, 0,
508 2, 2, 2, 3, 2, 1, 3, 2, 0, 2,
509 2, 2, 3, 3, 1, 3, 2, 2, 2, 0,
510 2, 2, 4, 3, 3, 0, 2, 1, 1, 2,
511 2, 2, 1, 1, 0, 2, 1, 3, 3, 3,
512 2, 3, 3, 1, 1
Eric Andersenc9f20d92002-12-05 08:41:41 +0000513};
514
515/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
516 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
517 means the default is an error. */
518static const unsigned char yydefact[] =
519{
Eric Andersen72d8e442003-08-05 02:18:25 +0000520 2, 0, 1, 0, 0, 0, 8, 0, 0, 10,
521 0, 0, 0, 0, 9, 93, 92, 3, 4, 22,
522 14, 22, 15, 43, 53, 5, 59, 12, 79, 68,
523 6, 74, 16, 79, 13, 17, 11, 87, 88, 0,
524 0, 0, 38, 0, 0, 0, 103, 104, 0, 0,
525 0, 96, 19, 21, 39, 42, 58, 64, 0, 76,
526 7, 63, 73, 75, 18, 20, 0, 100, 55, 0,
527 0, 0, 0, 0, 0, 0, 0, 0, 85, 0,
528 85, 0, 85, 85, 85, 26, 0, 0, 23, 0,
529 25, 24, 0, 0, 0, 85, 85, 47, 44, 46,
530 45, 0, 0, 0, 54, 41, 40, 60, 62, 57,
531 61, 56, 81, 80, 0, 69, 71, 66, 70, 65,
532 99, 101, 102, 98, 97, 77, 0, 0, 0, 94,
533 94, 0, 94, 94, 0, 94, 0, 0, 0, 94,
534 0, 78, 51, 94, 94, 0, 0, 89, 90, 91,
535 72, 0, 83, 84, 0, 0, 0, 27, 86, 0,
536 29, 0, 33, 31, 32, 0, 94, 0, 0, 49,
537 50, 82, 95, 34, 35, 28, 30, 36, 0, 48,
538 52, 37
Eric Andersenc9f20d92002-12-05 08:41:41 +0000539};
540
541/* YYDEFGOTO[NTERM-NUM]. */
542static const short yydefgoto[] =
543{
Eric Andersen72d8e442003-08-05 02:18:25 +0000544 -1, 1, 17, 18, 19, 20, 21, 22, 52, 88,
545 23, 24, 105, 25, 54, 98, 55, 26, 109, 27,
546 56, 28, 29, 117, 30, 58, 31, 32, 33, 34,
547 89, 90, 57, 91, 131, 132, 106, 35, 155, 50,
548 51
Eric Andersenc9f20d92002-12-05 08:41:41 +0000549};
550
551/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
552 STATE-NUM. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000553#define YYPACT_NINF -99
Eric Andersenc9f20d92002-12-05 08:41:41 +0000554static const short yypact[] =
555{
Eric Andersen72d8e442003-08-05 02:18:25 +0000556 -99, 48, -99, 38, 46, 46, -99, 46, -29, -99,
557 46, -17, -3, -11, -99, -99, -99, -99, -99, -99,
558 -99, -99, -99, -99, -99, -99, -99, -99, -99, -99,
559 -99, -99, -99, -99, -99, -99, -99, -99, -99, 38,
560 12, 15, -99, 18, 51, 62, -99, -99, -11, -11,
561 4, -24, 138, 138, 160, 121, 110, -4, 81, -4,
562 -99, -99, -99, -99, -99, -99, -19, -99, -99, -11,
563 -11, 70, 70, 73, 32, -11, 46, -11, 46, -11,
564 46, -11, 46, 46, 46, -99, 36, 70, -99, 95,
565 -99, -99, 96, 46, 106, 46, 46, -99, -99, -99,
566 -99, 38, 38, 38, -99, -99, -99, -99, -99, -99,
567 -99, -99, -99, -99, 112, -99, -99, -99, -99, -99,
568 -99, 117, -99, -99, -99, -99, -11, 33, 65, 131,
569 1, 119, 131, 1, 136, 1, 153, 154, 155, 131,
570 70, -99, -99, 131, 131, 156, 157, -99, -99, -99,
571 -99, 101, -99, -99, -11, 158, 159, -99, -99, 161,
572 -99, 162, -99, -99, -99, 163, 131, 164, 165, -99,
573 -99, -99, 99, -99, -99, -99, -99, -99, 166, -99,
574 -99, -99
Eric Andersenc9f20d92002-12-05 08:41:41 +0000575};
576
577/* YYPGOTO[NTERM-NUM]. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000578static const short yypgoto[] =
Eric Andersenc9f20d92002-12-05 08:41:41 +0000579{
Eric Andersen72d8e442003-08-05 02:18:25 +0000580 -99, -99, -99, 111, -99, -99, -99, -99, 178, -99,
581 -99, -99, -99, 91, -99, -99, -99, -99, -99, -99,
582 -99, -99, -99, -99, 115, -99, -99, -99, -99, -99,
583 -99, 146, 168, 89, 27, 0, 126, -1, -98, -48,
584 -63
Eric Andersenc9f20d92002-12-05 08:41:41 +0000585};
586
587/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
588 positive, shift that token. If negative, reduce the rule which
589 number is the opposite. If zero, do what YYDEFACT says.
Eric Andersen72d8e442003-08-05 02:18:25 +0000590 If YYTABLE_NINF, syntax error. */
591#define YYTABLE_NINF -68
Eric Andersenc9f20d92002-12-05 08:41:41 +0000592static const short yytable[] =
593{
Eric Andersen72d8e442003-08-05 02:18:25 +0000594 66, 67, 36, 42, 39, 40, 71, 41, 123, 124,
595 43, 44, 74, 75, 120, 154, 72, 46, 47, 69,
596 70, 121, 122, 48, 140, 45, 127, 128, 112, 130,
597 49, 133, 156, 135, 158, 159, 68, 161, 60, 69,
598 70, 165, 69, 70, 61, 167, 168, 62, 2, 3,
599 63, 4, 5, 6, 7, 8, 9, 10, 11, 12,
600 46, 47, 13, 14, 139, 152, 48, 126, 178, 15,
601 16, 69, 70, 49, 37, 38, 129, 166, 151, 15,
602 16, -67, 114, 64, -67, 5, 101, 7, 8, 102,
603 10, 11, 12, 143, 65, 13, 103, 153, 46, 47,
604 147, 148, 149, 69, 70, 125, 172, 134, 141, 136,
605 137, 138, 15, 16, 5, 101, 7, 8, 102, 10,
606 11, 12, 145, 146, 13, 103, 101, 7, 142, 102,
607 10, 11, 12, 171, 144, 13, 103, 69, 70, 69,
608 70, 15, 16, 100, 150, 154, 113, 108, 113, 116,
609 73, 157, 15, 16, 74, 75, 70, 76, 77, 78,
610 79, 80, 81, 82, 83, 84, 104, 107, 160, 115,
611 85, 110, 73, 118, 86, 87, 74, 75, 92, 93,
612 94, 95, 111, 96, 119, 162, 163, 164, 169, 170,
613 173, 174, 97, 175, 176, 177, 179, 180, 181, 53,
614 99, 59
Eric Andersenc9f20d92002-12-05 08:41:41 +0000615};
616
617static const unsigned char yycheck[] =
618{
Eric Andersen72d8e442003-08-05 02:18:25 +0000619 48, 49, 3, 32, 4, 5, 30, 7, 71, 72,
620 10, 28, 16, 17, 33, 14, 40, 28, 29, 38,
621 39, 69, 70, 34, 87, 28, 74, 75, 32, 77,
622 41, 79, 130, 81, 132, 133, 32, 135, 39, 38,
623 39, 139, 38, 39, 32, 143, 144, 32, 0, 1,
624 32, 3, 4, 5, 6, 7, 8, 9, 10, 11,
625 28, 29, 14, 15, 28, 32, 34, 35, 166, 31,
626 32, 38, 39, 41, 28, 29, 76, 140, 126, 31,
627 32, 0, 1, 32, 3, 4, 5, 6, 7, 8,
628 9, 10, 11, 93, 32, 14, 15, 32, 28, 29,
629 101, 102, 103, 38, 39, 32, 154, 80, 13, 82,
630 83, 84, 31, 32, 4, 5, 6, 7, 8, 9,
631 10, 11, 95, 96, 14, 15, 5, 6, 32, 8,
632 9, 10, 11, 32, 28, 14, 15, 38, 39, 38,
633 39, 31, 32, 54, 32, 14, 57, 56, 59, 58,
634 12, 32, 31, 32, 16, 17, 39, 19, 20, 21,
635 22, 23, 24, 25, 26, 27, 55, 56, 32, 58,
636 32, 56, 12, 58, 36, 37, 16, 17, 18, 19,
637 20, 21, 56, 23, 58, 32, 32, 32, 32, 32,
638 32, 32, 32, 32, 32, 32, 32, 32, 32, 21,
639 54, 33
Eric Andersenc9f20d92002-12-05 08:41:41 +0000640};
641
642/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
643 symbol of state STATE-NUM. */
644static const unsigned char yystos[] =
645{
Eric Andersen72d8e442003-08-05 02:18:25 +0000646 0, 43, 0, 1, 3, 4, 5, 6, 7, 8,
647 9, 10, 11, 14, 15, 31, 32, 44, 45, 46,
648 47, 48, 49, 52, 53, 55, 59, 61, 63, 64,
649 66, 68, 69, 70, 71, 79, 79, 28, 29, 77,
650 77, 77, 32, 77, 28, 28, 28, 29, 34, 41,
651 81, 82, 50, 50, 56, 58, 62, 74, 67, 74,
652 79, 32, 32, 32, 32, 32, 81, 81, 32, 38,
653 39, 30, 40, 12, 16, 17, 19, 20, 21, 22,
654 23, 24, 25, 26, 27, 32, 36, 37, 51, 72,
655 73, 75, 18, 19, 20, 21, 23, 32, 57, 73,
656 75, 5, 8, 15, 45, 54, 78, 45, 55, 60,
657 66, 78, 32, 75, 1, 45, 55, 65, 66, 78,
658 33, 81, 81, 82, 82, 32, 35, 81, 81, 77,
659 81, 76, 77, 81, 76, 81, 76, 76, 76, 28,
660 82, 13, 32, 77, 28, 76, 76, 79, 79, 79,
661 32, 81, 32, 32, 14, 80, 80, 32, 80, 80,
662 32, 80, 32, 32, 32, 80, 82, 80, 80, 32,
663 32, 32, 81, 32, 32, 32, 32, 32, 80, 32,
664 32, 32
Eric Andersenc9f20d92002-12-05 08:41:41 +0000665};
666
667#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
668# define YYSIZE_T __SIZE_TYPE__
669#endif
670#if ! defined (YYSIZE_T) && defined (size_t)
671# define YYSIZE_T size_t
672#endif
673#if ! defined (YYSIZE_T)
674# if defined (__STDC__) || defined (__cplusplus)
675# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
676# define YYSIZE_T size_t
677# endif
678#endif
679#if ! defined (YYSIZE_T)
680# define YYSIZE_T unsigned int
681#endif
682
683#define yyerrok (yyerrstatus = 0)
684#define yyclearin (yychar = YYEMPTY)
Eric Andersen72d8e442003-08-05 02:18:25 +0000685#define YYEMPTY (-2)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000686#define YYEOF 0
687
688#define YYACCEPT goto yyacceptlab
689#define YYABORT goto yyabortlab
690#define YYERROR goto yyerrlab1
691
Eric Andersen72d8e442003-08-05 02:18:25 +0000692
Eric Andersenc9f20d92002-12-05 08:41:41 +0000693/* Like YYERROR except do call yyerror. This remains here temporarily
694 to ease the transition to the new meaning of YYERROR, for GCC.
695 Once GCC version 2 has supplanted version 1, this can go. */
696
697#define YYFAIL goto yyerrlab
698
699#define YYRECOVERING() (!!yyerrstatus)
700
701#define YYBACKUP(Token, Value) \
702do \
703 if (yychar == YYEMPTY && yylen == 1) \
704 { \
705 yychar = (Token); \
706 yylval = (Value); \
Eric Andersen72d8e442003-08-05 02:18:25 +0000707 yytoken = YYTRANSLATE (yychar); \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000708 YYPOPSTACK; \
709 goto yybackup; \
710 } \
711 else \
712 { \
Eric Andersen72d8e442003-08-05 02:18:25 +0000713 yyerror ("syntax error: cannot back up");\
Eric Andersenc9f20d92002-12-05 08:41:41 +0000714 YYERROR; \
715 } \
716while (0)
717
718#define YYTERROR 1
719#define YYERRCODE 256
720
721/* YYLLOC_DEFAULT -- Compute the default location (before the actions
722 are run). */
723
724#ifndef YYLLOC_DEFAULT
Eric Andersen72d8e442003-08-05 02:18:25 +0000725# define YYLLOC_DEFAULT(Current, Rhs, N) \
Eric Andersenc9f20d92002-12-05 08:41:41 +0000726 Current.first_line = Rhs[1].first_line; \
727 Current.first_column = Rhs[1].first_column; \
728 Current.last_line = Rhs[N].last_line; \
729 Current.last_column = Rhs[N].last_column;
730#endif
731
732/* YYLEX -- calling `yylex' with the right arguments. */
733
Eric Andersen72d8e442003-08-05 02:18:25 +0000734#ifdef YYLEX_PARAM
735# define YYLEX yylex (YYLEX_PARAM)
736#else
737# define YYLEX yylex ()
738#endif
Eric Andersenc9f20d92002-12-05 08:41:41 +0000739
740/* Enable debugging if requested. */
741#if YYDEBUG
742
743# ifndef YYFPRINTF
744# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
745# define YYFPRINTF fprintf
746# endif
747
748# define YYDPRINTF(Args) \
749do { \
750 if (yydebug) \
751 YYFPRINTF Args; \
752} while (0)
Eric Andersen72d8e442003-08-05 02:18:25 +0000753
Eric Andersenc9f20d92002-12-05 08:41:41 +0000754# define YYDSYMPRINT(Args) \
755do { \
756 if (yydebug) \
757 yysymprint Args; \
758} while (0)
Eric Andersen72d8e442003-08-05 02:18:25 +0000759
760# define YYDSYMPRINTF(Title, Token, Value, Location) \
761do { \
762 if (yydebug) \
763 { \
764 YYFPRINTF (stderr, "%s ", Title); \
765 yysymprint (stderr, \
766 Token, Value); \
767 YYFPRINTF (stderr, "\n"); \
768 } \
769} while (0)
770
771/*------------------------------------------------------------------.
772| yy_stack_print -- Print the state stack from its BOTTOM up to its |
773| TOP (cinluded). |
774`------------------------------------------------------------------*/
775
776#if defined (__STDC__) || defined (__cplusplus)
777static void
778yy_stack_print (short *bottom, short *top)
779#else
780static void
781yy_stack_print (bottom, top)
782 short *bottom;
783 short *top;
784#endif
785{
786 YYFPRINTF (stderr, "Stack now");
787 for (/* Nothing. */; bottom <= top; ++bottom)
788 YYFPRINTF (stderr, " %d", *bottom);
789 YYFPRINTF (stderr, "\n");
790}
791
792# define YY_STACK_PRINT(Bottom, Top) \
793do { \
794 if (yydebug) \
795 yy_stack_print ((Bottom), (Top)); \
796} while (0)
797
798
799/*------------------------------------------------.
800| Report that the YYRULE is going to be reduced. |
801`------------------------------------------------*/
802
803#if defined (__STDC__) || defined (__cplusplus)
804static void
805yy_reduce_print (int yyrule)
806#else
807static void
808yy_reduce_print (yyrule)
809 int yyrule;
810#endif
811{
812 int yyi;
813 unsigned int yylineno = yyrline[yyrule];
814 YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
815 yyrule - 1, yylineno);
816 /* Print the symbols being reduced, and their result. */
817 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
818 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
819 YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
820}
821
822# define YY_REDUCE_PRINT(Rule) \
823do { \
824 if (yydebug) \
825 yy_reduce_print (Rule); \
826} while (0)
827
Eric Andersenc9f20d92002-12-05 08:41:41 +0000828/* Nonzero means print parse trace. It is left uninitialized so that
829 multiple parsers can coexist. */
830int yydebug;
831#else /* !YYDEBUG */
832# define YYDPRINTF(Args)
833# define YYDSYMPRINT(Args)
Eric Andersen72d8e442003-08-05 02:18:25 +0000834# define YYDSYMPRINTF(Title, Token, Value, Location)
835# define YY_STACK_PRINT(Bottom, Top)
836# define YY_REDUCE_PRINT(Rule)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000837#endif /* !YYDEBUG */
838
Eric Andersen72d8e442003-08-05 02:18:25 +0000839
Eric Andersenc9f20d92002-12-05 08:41:41 +0000840/* YYINITDEPTH -- initial size of the parser's stacks. */
841#ifndef YYINITDEPTH
842# define YYINITDEPTH 200
843#endif
844
845/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
846 if the built-in stack extension method is used).
847
848 Do not make this value too large; the results are undefined if
849 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
850 evaluated with infinite-precision integer arithmetic. */
851
852#if YYMAXDEPTH == 0
853# undef YYMAXDEPTH
854#endif
855
856#ifndef YYMAXDEPTH
857# define YYMAXDEPTH 10000
858#endif
859
860
861
862#if YYERROR_VERBOSE
863
864# ifndef yystrlen
865# if defined (__GLIBC__) && defined (_STRING_H)
866# define yystrlen strlen
867# else
868/* Return the length of YYSTR. */
869static YYSIZE_T
870# if defined (__STDC__) || defined (__cplusplus)
871yystrlen (const char *yystr)
872# else
873yystrlen (yystr)
874 const char *yystr;
875# endif
876{
877 register const char *yys = yystr;
878
879 while (*yys++ != '\0')
880 continue;
881
882 return yys - yystr - 1;
883}
884# endif
885# endif
886
887# ifndef yystpcpy
888# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
889# define yystpcpy stpcpy
890# else
891/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
892 YYDEST. */
893static char *
894# if defined (__STDC__) || defined (__cplusplus)
895yystpcpy (char *yydest, const char *yysrc)
896# else
897yystpcpy (yydest, yysrc)
898 char *yydest;
899 const char *yysrc;
900# endif
901{
902 register char *yyd = yydest;
903 register const char *yys = yysrc;
904
905 while ((*yyd++ = *yys++) != '\0')
906 continue;
907
908 return yyd - 1;
909}
910# endif
911# endif
912
913#endif /* !YYERROR_VERBOSE */
914
915
916
917#if YYDEBUG
Eric Andersen72d8e442003-08-05 02:18:25 +0000918/*--------------------------------.
919| Print this symbol on YYOUTPUT. |
920`--------------------------------*/
Eric Andersenc9f20d92002-12-05 08:41:41 +0000921
Eric Andersenc9f20d92002-12-05 08:41:41 +0000922#if defined (__STDC__) || defined (__cplusplus)
Eric Andersen72d8e442003-08-05 02:18:25 +0000923static void
924yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000925#else
Eric Andersen72d8e442003-08-05 02:18:25 +0000926static void
927yysymprint (yyoutput, yytype, yyvaluep)
928 FILE *yyoutput;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000929 int yytype;
Eric Andersen72d8e442003-08-05 02:18:25 +0000930 YYSTYPE *yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000931#endif
932{
933 /* Pacify ``unused variable'' warnings. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000934 (void) yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000935
936 if (yytype < YYNTOKENS)
937 {
Eric Andersen72d8e442003-08-05 02:18:25 +0000938 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000939# ifdef YYPRINT
Eric Andersen72d8e442003-08-05 02:18:25 +0000940 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000941# endif
942 }
943 else
Eric Andersen72d8e442003-08-05 02:18:25 +0000944 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000945
946 switch (yytype)
947 {
948 default:
949 break;
950 }
Eric Andersen72d8e442003-08-05 02:18:25 +0000951 YYFPRINTF (yyoutput, ")");
Eric Andersenc9f20d92002-12-05 08:41:41 +0000952}
Eric Andersenc9f20d92002-12-05 08:41:41 +0000953
Eric Andersen72d8e442003-08-05 02:18:25 +0000954#endif /* ! YYDEBUG */
Eric Andersenc9f20d92002-12-05 08:41:41 +0000955/*-----------------------------------------------.
956| Release the memory associated to this symbol. |
957`-----------------------------------------------*/
958
Eric Andersenc9f20d92002-12-05 08:41:41 +0000959#if defined (__STDC__) || defined (__cplusplus)
Eric Andersen72d8e442003-08-05 02:18:25 +0000960static void
961yydestruct (int yytype, YYSTYPE *yyvaluep)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000962#else
Eric Andersen72d8e442003-08-05 02:18:25 +0000963static void
964yydestruct (yytype, yyvaluep)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000965 int yytype;
Eric Andersen72d8e442003-08-05 02:18:25 +0000966 YYSTYPE *yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000967#endif
968{
969 /* Pacify ``unused variable'' warnings. */
Eric Andersen72d8e442003-08-05 02:18:25 +0000970 (void) yyvaluep;
Eric Andersenc9f20d92002-12-05 08:41:41 +0000971
972 switch (yytype)
973 {
Eric Andersen72d8e442003-08-05 02:18:25 +0000974
Eric Andersenc9f20d92002-12-05 08:41:41 +0000975 default:
976 break;
977 }
978}
Eric Andersenc9f20d92002-12-05 08:41:41 +0000979
980
Eric Andersen72d8e442003-08-05 02:18:25 +0000981/* Prevent warnings from -Wmissing-prototypes. */
Eric Andersenc9f20d92002-12-05 08:41:41 +0000982
983#ifdef YYPARSE_PARAM
984# if defined (__STDC__) || defined (__cplusplus)
Eric Andersen72d8e442003-08-05 02:18:25 +0000985int yyparse (void *YYPARSE_PARAM);
Eric Andersenc9f20d92002-12-05 08:41:41 +0000986# else
Eric Andersen72d8e442003-08-05 02:18:25 +0000987int yyparse ();
Eric Andersenc9f20d92002-12-05 08:41:41 +0000988# endif
Eric Andersen72d8e442003-08-05 02:18:25 +0000989#else /* ! YYPARSE_PARAM */
990#if defined (__STDC__) || defined (__cplusplus)
Eric Andersenc9f20d92002-12-05 08:41:41 +0000991int yyparse (void);
Eric Andersen72d8e442003-08-05 02:18:25 +0000992#else
993int yyparse ();
Eric Andersenc9f20d92002-12-05 08:41:41 +0000994#endif
Eric Andersen72d8e442003-08-05 02:18:25 +0000995#endif /* ! YYPARSE_PARAM */
996
Eric Andersenc9f20d92002-12-05 08:41:41 +0000997
998
999/* The lookahead symbol. */
1000int yychar;
1001
1002/* The semantic value of the lookahead symbol. */
1003YYSTYPE yylval;
1004
Eric Andersen72d8e442003-08-05 02:18:25 +00001005/* Number of syntax errors so far. */
Eric Andersenc9f20d92002-12-05 08:41:41 +00001006int yynerrs;
1007
1008
Eric Andersen72d8e442003-08-05 02:18:25 +00001009
1010/*----------.
1011| yyparse. |
1012`----------*/
1013
1014#ifdef YYPARSE_PARAM
1015# if defined (__STDC__) || defined (__cplusplus)
1016int yyparse (void *YYPARSE_PARAM)
1017# else
1018int yyparse (YYPARSE_PARAM)
1019 void *YYPARSE_PARAM;
1020# endif
1021#else /* ! YYPARSE_PARAM */
1022#if defined (__STDC__) || defined (__cplusplus)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001023int
Eric Andersen72d8e442003-08-05 02:18:25 +00001024yyparse (void)
1025#else
1026int
1027yyparse ()
1028
1029#endif
1030#endif
Eric Andersenc9f20d92002-12-05 08:41:41 +00001031{
Eric Andersenc7bda1c2004-03-15 08:29:22 +00001032
Eric Andersenc9f20d92002-12-05 08:41:41 +00001033 register int yystate;
1034 register int yyn;
1035 int yyresult;
1036 /* Number of tokens to shift before error messages enabled. */
1037 int yyerrstatus;
1038 /* Lookahead token as an internal (translated) token number. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001039 int yytoken = 0;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001040
1041 /* Three stacks and their tools:
1042 `yyss': related to states,
1043 `yyvs': related to semantic values,
1044 `yyls': related to locations.
1045
1046 Refer to the stacks thru separate pointers, to allow yyoverflow
1047 to reallocate them elsewhere. */
1048
1049 /* The state stack. */
1050 short yyssa[YYINITDEPTH];
1051 short *yyss = yyssa;
1052 register short *yyssp;
1053
1054 /* The semantic value stack. */
1055 YYSTYPE yyvsa[YYINITDEPTH];
1056 YYSTYPE *yyvs = yyvsa;
1057 register YYSTYPE *yyvsp;
1058
1059
1060
1061#define YYPOPSTACK (yyvsp--, yyssp--)
1062
1063 YYSIZE_T yystacksize = YYINITDEPTH;
1064
1065 /* The variables used to return semantic value and location from the
1066 action routines. */
1067 YYSTYPE yyval;
1068
1069
1070 /* When reducing, the number of symbols on the RHS of the reduced
1071 rule. */
1072 int yylen;
1073
1074 YYDPRINTF ((stderr, "Starting parse\n"));
1075
1076 yystate = 0;
1077 yyerrstatus = 0;
1078 yynerrs = 0;
1079 yychar = YYEMPTY; /* Cause a token to be read. */
1080
1081 /* Initialize stack pointers.
1082 Waste one element of value and location stack
1083 so that they stay on the same level as the state stack.
1084 The wasted elements are never initialized. */
1085
1086 yyssp = yyss;
1087 yyvsp = yyvs;
1088
1089 goto yysetstate;
1090
1091/*------------------------------------------------------------.
1092| yynewstate -- Push a new state, which is found in yystate. |
1093`------------------------------------------------------------*/
1094 yynewstate:
1095 /* In all cases, when you get here, the value and location stacks
1096 have just been pushed. so pushing a state here evens the stacks.
1097 */
1098 yyssp++;
1099
1100 yysetstate:
1101 *yyssp = yystate;
1102
Eric Andersen72d8e442003-08-05 02:18:25 +00001103 if (yyss + yystacksize - 1 <= yyssp)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001104 {
1105 /* Get the current used size of the three stacks, in elements. */
1106 YYSIZE_T yysize = yyssp - yyss + 1;
1107
1108#ifdef yyoverflow
1109 {
1110 /* Give user a chance to reallocate the stack. Use copies of
1111 these so that the &'s don't force the real ones into
1112 memory. */
1113 YYSTYPE *yyvs1 = yyvs;
1114 short *yyss1 = yyss;
1115
1116
1117 /* Each stack pointer address is followed by the size of the
1118 data in use in that stack, in bytes. This used to be a
1119 conditional around just the two extra args, but that might
1120 be undefined if yyoverflow is a macro. */
1121 yyoverflow ("parser stack overflow",
1122 &yyss1, yysize * sizeof (*yyssp),
1123 &yyvs1, yysize * sizeof (*yyvsp),
1124
1125 &yystacksize);
1126
1127 yyss = yyss1;
1128 yyvs = yyvs1;
1129 }
1130#else /* no yyoverflow */
1131# ifndef YYSTACK_RELOCATE
1132 goto yyoverflowlab;
1133# else
1134 /* Extend the stack our own way. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001135 if (YYMAXDEPTH <= yystacksize)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001136 goto yyoverflowlab;
1137 yystacksize *= 2;
Eric Andersen72d8e442003-08-05 02:18:25 +00001138 if (YYMAXDEPTH < yystacksize)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001139 yystacksize = YYMAXDEPTH;
1140
1141 {
1142 short *yyss1 = yyss;
1143 union yyalloc *yyptr =
1144 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1145 if (! yyptr)
1146 goto yyoverflowlab;
1147 YYSTACK_RELOCATE (yyss);
1148 YYSTACK_RELOCATE (yyvs);
1149
1150# undef YYSTACK_RELOCATE
1151 if (yyss1 != yyssa)
1152 YYSTACK_FREE (yyss1);
1153 }
1154# endif
1155#endif /* no yyoverflow */
1156
1157 yyssp = yyss + yysize - 1;
1158 yyvsp = yyvs + yysize - 1;
1159
1160
1161 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1162 (unsigned long int) yystacksize));
1163
Eric Andersen72d8e442003-08-05 02:18:25 +00001164 if (yyss + yystacksize - 1 <= yyssp)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001165 YYABORT;
1166 }
1167
1168 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1169
1170 goto yybackup;
1171
1172/*-----------.
1173| yybackup. |
1174`-----------*/
1175yybackup:
1176
1177/* Do appropriate processing given the current state. */
1178/* Read a lookahead token if we need one and don't already have one. */
1179/* yyresume: */
1180
1181 /* First try to decide what to do without reference to lookahead token. */
1182
1183 yyn = yypact[yystate];
1184 if (yyn == YYPACT_NINF)
1185 goto yydefault;
1186
1187 /* Not known => get a lookahead token if don't already have one. */
1188
Eric Andersen72d8e442003-08-05 02:18:25 +00001189 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
Eric Andersenc9f20d92002-12-05 08:41:41 +00001190 if (yychar == YYEMPTY)
1191 {
1192 YYDPRINTF ((stderr, "Reading a token: "));
1193 yychar = YYLEX;
1194 }
1195
Eric Andersen72d8e442003-08-05 02:18:25 +00001196 if (yychar <= YYEOF)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001197 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001198 yychar = yytoken = YYEOF;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001199 YYDPRINTF ((stderr, "Now at end of input.\n"));
1200 }
1201 else
1202 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001203 yytoken = YYTRANSLATE (yychar);
1204 YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001205 }
1206
Eric Andersen72d8e442003-08-05 02:18:25 +00001207 /* If the proper action on seeing token YYTOKEN is to reduce or to
Eric Andersenc9f20d92002-12-05 08:41:41 +00001208 detect an error, take that action. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001209 yyn += yytoken;
1210 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001211 goto yydefault;
1212 yyn = yytable[yyn];
1213 if (yyn <= 0)
1214 {
1215 if (yyn == 0 || yyn == YYTABLE_NINF)
1216 goto yyerrlab;
1217 yyn = -yyn;
1218 goto yyreduce;
1219 }
1220
1221 if (yyn == YYFINAL)
1222 YYACCEPT;
1223
1224 /* Shift the lookahead token. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001225 YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
Eric Andersenc9f20d92002-12-05 08:41:41 +00001226
1227 /* Discard the token being shifted unless it is eof. */
1228 if (yychar != YYEOF)
1229 yychar = YYEMPTY;
1230
1231 *++yyvsp = yylval;
1232
1233
1234 /* Count tokens shifted since error; after three, turn off error
1235 status. */
1236 if (yyerrstatus)
1237 yyerrstatus--;
1238
1239 yystate = yyn;
1240 goto yynewstate;
1241
1242
1243/*-----------------------------------------------------------.
1244| yydefault -- do the default action for the current state. |
1245`-----------------------------------------------------------*/
1246yydefault:
1247 yyn = yydefact[yystate];
1248 if (yyn == 0)
1249 goto yyerrlab;
1250 goto yyreduce;
1251
1252
1253/*-----------------------------.
1254| yyreduce -- Do a reduction. |
1255`-----------------------------*/
1256yyreduce:
1257 /* yyn is the number of a rule to reduce with. */
1258 yylen = yyr2[yyn];
1259
1260 /* If YYLEN is nonzero, implement the default value of the action:
1261 `$$ = $1'.
1262
1263 Otherwise, the following line sets YYVAL to garbage.
1264 This behavior is undocumented and Bison
1265 users should not rely upon it. Assigning to YYVAL
1266 unconditionally makes the parser a bit smaller, and it avoids a
1267 GCC warning that YYVAL may be used uninitialized. */
1268 yyval = yyvsp[1-yylen];
1269
1270
Eric Andersen72d8e442003-08-05 02:18:25 +00001271 YY_REDUCE_PRINT (yyn);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001272 switch (yyn)
1273 {
1274 case 8:
Eric Andersen72d8e442003-08-05 02:18:25 +00001275
1276 { zconfprint("unexpected 'endmenu' statement"); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001277 break;
1278
1279 case 9:
Eric Andersen72d8e442003-08-05 02:18:25 +00001280
1281 { zconfprint("unexpected 'endif' statement"); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001282 break;
1283
1284 case 10:
Eric Andersen72d8e442003-08-05 02:18:25 +00001285
1286 { zconfprint("unexpected 'endchoice' statement"); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001287 break;
1288
1289 case 11:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001290
Eric Andersen72d8e442003-08-05 02:18:25 +00001291 { zconfprint("syntax error"); yyerrok; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001292 break;
1293
1294 case 18:
Eric Andersen72d8e442003-08-05 02:18:25 +00001295
1296 {
1297 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
1298 sym->flags |= SYMBOL_OPTIONAL;
1299 menu_add_entry(sym);
1300 printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1301;}
1302 break;
1303
1304 case 19:
1305
Eric Andersenc9f20d92002-12-05 08:41:41 +00001306 {
1307 menu_end_entry();
1308 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001309;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001310 break;
1311
Eric Andersen72d8e442003-08-05 02:18:25 +00001312 case 20:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001313
Eric Andersenc9f20d92002-12-05 08:41:41 +00001314 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001315 struct symbol *sym = sym_lookup(yyvsp[-1].string, 0);
1316 sym->flags |= SYMBOL_OPTIONAL;
1317 menu_add_entry(sym);
1318 printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1319;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001320 break;
1321
Eric Andersen72d8e442003-08-05 02:18:25 +00001322 case 21:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001323
Eric Andersenc9f20d92002-12-05 08:41:41 +00001324 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001325 if (current_entry->prompt)
1326 current_entry->prompt->type = P_MENU;
1327 else
1328 zconfprint("warning: menuconfig statement without prompt");
1329 menu_end_entry();
1330 printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1331;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001332 break;
1333
1334 case 27:
Eric Andersen72d8e442003-08-05 02:18:25 +00001335
Eric Andersenc9f20d92002-12-05 08:41:41 +00001336 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001337 menu_set_type(S_TRISTATE);
1338 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
1339;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001340 break;
1341
1342 case 28:
Eric Andersen72d8e442003-08-05 02:18:25 +00001343
Eric Andersenc9f20d92002-12-05 08:41:41 +00001344 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001345 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1346 menu_set_type(S_TRISTATE);
1347 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
1348;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001349 break;
1350
1351 case 29:
Eric Andersen72d8e442003-08-05 02:18:25 +00001352
Eric Andersenc9f20d92002-12-05 08:41:41 +00001353 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001354 menu_set_type(S_BOOLEAN);
1355 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
1356;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001357 break;
1358
1359 case 30:
Eric Andersen72d8e442003-08-05 02:18:25 +00001360
Eric Andersenc9f20d92002-12-05 08:41:41 +00001361 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001362 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1363 menu_set_type(S_BOOLEAN);
1364 printd(DEBUG_PARSE, "%s:%d:def_boolean\n", zconf_curname(), zconf_lineno());
1365;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001366 break;
1367
1368 case 31:
Eric Andersen72d8e442003-08-05 02:18:25 +00001369
1370 {
1371 menu_set_type(S_INT);
1372 printd(DEBUG_PARSE, "%s:%d:int\n", zconf_curname(), zconf_lineno());
1373;}
1374 break;
1375
1376 case 32:
1377
1378 {
1379 menu_set_type(S_HEX);
1380 printd(DEBUG_PARSE, "%s:%d:hex\n", zconf_curname(), zconf_lineno());
1381;}
1382 break;
1383
1384 case 33:
1385
1386 {
1387 menu_set_type(S_STRING);
1388 printd(DEBUG_PARSE, "%s:%d:string\n", zconf_curname(), zconf_lineno());
1389;}
1390 break;
1391
1392 case 34:
1393
1394 {
1395 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
1396 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1397;}
1398 break;
1399
1400 case 35:
1401
1402 {
1403 menu_add_expr(P_DEFAULT, yyvsp[-2].expr, yyvsp[-1].expr);
1404 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
1405;}
1406 break;
1407
1408 case 36:
1409
1410 {
1411 menu_add_symbol(P_SELECT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
1412 printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
1413;}
1414 break;
1415
1416 case 37:
1417
1418 {
1419 menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,yyvsp[-3].symbol, yyvsp[-2].symbol), yyvsp[-1].expr);
1420 printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
1421;}
1422 break;
1423
1424 case 38:
1425
Eric Andersenc9f20d92002-12-05 08:41:41 +00001426 {
1427 struct symbol *sym = sym_lookup(NULL, 0);
1428 sym->flags |= SYMBOL_CHOICE;
1429 menu_add_entry(sym);
Eric Andersen72d8e442003-08-05 02:18:25 +00001430 menu_add_expr(P_CHOICE, NULL, NULL);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001431 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001432;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001433 break;
1434
Eric Andersen72d8e442003-08-05 02:18:25 +00001435 case 39:
1436
Eric Andersenc9f20d92002-12-05 08:41:41 +00001437 {
1438 menu_end_entry();
1439 menu_add_menu();
Eric Andersen72d8e442003-08-05 02:18:25 +00001440;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001441 break;
1442
Eric Andersen72d8e442003-08-05 02:18:25 +00001443 case 40:
1444
Eric Andersenc9f20d92002-12-05 08:41:41 +00001445 {
1446 if (zconf_endtoken(yyvsp[0].token, T_CHOICE, T_ENDCHOICE)) {
1447 menu_end_menu();
1448 printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
1449 }
Eric Andersen72d8e442003-08-05 02:18:25 +00001450;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001451 break;
1452
1453 case 42:
Eric Andersen72d8e442003-08-05 02:18:25 +00001454
1455 {
1456 printf("%s:%d: missing 'endchoice' for this 'choice' statement\n", current_menu->file->name, current_menu->lineno);
1457 zconfnerrs++;
1458;}
1459 break;
1460
1461 case 48:
1462
1463 {
1464 menu_add_prompt(P_PROMPT, yyvsp[-2].string, yyvsp[-1].expr);
1465 printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1466;}
1467 break;
1468
1469 case 49:
1470
1471 {
1472 menu_set_type(S_TRISTATE);
1473 printd(DEBUG_PARSE, "%s:%d:tristate\n", zconf_curname(), zconf_lineno());
1474;}
1475 break;
1476
1477 case 50:
1478
1479 {
1480 menu_set_type(S_BOOLEAN);
1481 printd(DEBUG_PARSE, "%s:%d:boolean\n", zconf_curname(), zconf_lineno());
1482;}
1483 break;
1484
1485 case 51:
1486
Eric Andersenc9f20d92002-12-05 08:41:41 +00001487 {
1488 current_entry->sym->flags |= SYMBOL_OPTIONAL;
1489 printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001490;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001491 break;
1492
Eric Andersen72d8e442003-08-05 02:18:25 +00001493 case 52:
1494
Eric Andersenc9f20d92002-12-05 08:41:41 +00001495 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001496 menu_add_symbol(P_DEFAULT, sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].expr);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001497 printd(DEBUG_PARSE, "%s:%d:default\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001498;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001499 break;
1500
Eric Andersen72d8e442003-08-05 02:18:25 +00001501 case 55:
1502
Eric Andersenc9f20d92002-12-05 08:41:41 +00001503 {
1504 printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
1505 menu_add_entry(NULL);
Eric Andersen72d8e442003-08-05 02:18:25 +00001506 menu_add_dep(yyvsp[-1].expr);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001507 menu_end_entry();
1508 menu_add_menu();
Eric Andersen72d8e442003-08-05 02:18:25 +00001509;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001510 break;
1511
Eric Andersen72d8e442003-08-05 02:18:25 +00001512 case 56:
1513
Eric Andersenc9f20d92002-12-05 08:41:41 +00001514 {
1515 if (zconf_endtoken(yyvsp[0].token, T_IF, T_ENDIF)) {
1516 menu_end_menu();
1517 printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
1518 }
Eric Andersen72d8e442003-08-05 02:18:25 +00001519;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001520 break;
1521
Eric Andersen72d8e442003-08-05 02:18:25 +00001522 case 58:
1523
Eric Andersenc9f20d92002-12-05 08:41:41 +00001524 {
1525 printf("%s:%d: missing 'endif' for this 'if' statement\n", current_menu->file->name, current_menu->lineno);
1526 zconfnerrs++;
Eric Andersen72d8e442003-08-05 02:18:25 +00001527;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001528 break;
1529
Eric Andersen72d8e442003-08-05 02:18:25 +00001530 case 63:
1531
Eric Andersenc9f20d92002-12-05 08:41:41 +00001532 {
1533 menu_add_entry(NULL);
Eric Andersen72d8e442003-08-05 02:18:25 +00001534 menu_add_prop(P_MENU, yyvsp[-1].string, NULL, NULL);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001535 printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
Eric Andersen72d8e442003-08-05 02:18:25 +00001536;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001537 break;
1538
Eric Andersen72d8e442003-08-05 02:18:25 +00001539 case 64:
1540
Eric Andersenc9f20d92002-12-05 08:41:41 +00001541 {
1542 menu_end_entry();
1543 menu_add_menu();
Eric Andersen72d8e442003-08-05 02:18:25 +00001544;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001545 break;
1546
Eric Andersen72d8e442003-08-05 02:18:25 +00001547 case 65:
1548
Eric Andersenc9f20d92002-12-05 08:41:41 +00001549 {
1550 if (zconf_endtoken(yyvsp[0].token, T_MENU, T_ENDMENU)) {
1551 menu_end_menu();
1552 printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
1553 }
Eric Andersen72d8e442003-08-05 02:18:25 +00001554;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001555 break;
1556
1557 case 67:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001558
Eric Andersenc9f20d92002-12-05 08:41:41 +00001559 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001560 printf("%s:%d: missing 'endmenu' for this 'menu' statement\n", current_menu->file->name, current_menu->lineno);
1561 zconfnerrs++;
1562;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001563 break;
1564
1565 case 72:
Eric Andersen72d8e442003-08-05 02:18:25 +00001566
1567 { zconfprint("invalid menu option"); yyerrok; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001568 break;
1569
1570 case 73:
Eric Andersen72d8e442003-08-05 02:18:25 +00001571
Eric Andersenc9f20d92002-12-05 08:41:41 +00001572 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001573 yyval.string = yyvsp[-1].string;
1574 printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), yyvsp[-1].string);
1575;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001576 break;
1577
1578 case 74:
Eric Andersen72d8e442003-08-05 02:18:25 +00001579
Eric Andersenc9f20d92002-12-05 08:41:41 +00001580 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001581 zconf_nextfile(yyvsp[0].string);
1582;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001583 break;
1584
1585 case 75:
Eric Andersen72d8e442003-08-05 02:18:25 +00001586
Eric Andersenc9f20d92002-12-05 08:41:41 +00001587 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001588 menu_add_entry(NULL);
1589 menu_add_prop(P_COMMENT, yyvsp[-1].string, NULL, NULL);
1590 printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
1591;}
1592 break;
1593
1594 case 76:
1595
1596 {
1597 menu_end_entry();
1598;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001599 break;
1600
1601 case 77:
Eric Andersen72d8e442003-08-05 02:18:25 +00001602
Eric Andersenc9f20d92002-12-05 08:41:41 +00001603 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001604 printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
1605 zconf_starthelp();
1606;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001607 break;
1608
1609 case 78:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001610
Eric Andersen72d8e442003-08-05 02:18:25 +00001611 {
1612 current_entry->sym->help = yyvsp[0].string;
1613;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001614 break;
1615
1616 case 82:
Eric Andersen72d8e442003-08-05 02:18:25 +00001617
1618 {
1619 menu_add_dep(yyvsp[-1].expr);
1620 printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1621;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001622 break;
1623
1624 case 83:
Eric Andersen72d8e442003-08-05 02:18:25 +00001625
1626 {
1627 menu_add_dep(yyvsp[-1].expr);
1628 printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
1629;}
1630 break;
1631
1632 case 84:
1633
1634 {
1635 menu_add_dep(yyvsp[-1].expr);
1636 printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
1637;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001638 break;
1639
1640 case 86:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001641
Eric Andersen72d8e442003-08-05 02:18:25 +00001642 {
1643 menu_add_prop(P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].expr);
1644;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001645 break;
1646
1647 case 89:
Eric Andersen72d8e442003-08-05 02:18:25 +00001648
1649 { yyval.token = T_ENDMENU; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001650 break;
1651
1652 case 90:
Eric Andersen72d8e442003-08-05 02:18:25 +00001653
1654 { yyval.token = T_ENDCHOICE; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001655 break;
1656
1657 case 91:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001658
Eric Andersen72d8e442003-08-05 02:18:25 +00001659 { yyval.token = T_ENDIF; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001660 break;
1661
1662 case 94:
Eric Andersen72d8e442003-08-05 02:18:25 +00001663
1664 { yyval.expr = NULL; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001665 break;
1666
1667 case 95:
Eric Andersen72d8e442003-08-05 02:18:25 +00001668
1669 { yyval.expr = yyvsp[0].expr; ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001670 break;
1671
1672 case 96:
Eric Andersen72d8e442003-08-05 02:18:25 +00001673
1674 { yyval.expr = expr_alloc_symbol(yyvsp[0].symbol); ;}
1675 break;
1676
1677 case 97:
1678
1679 { yyval.expr = expr_alloc_comp(E_EQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1680 break;
1681
1682 case 98:
1683
1684 { yyval.expr = expr_alloc_comp(E_UNEQUAL, yyvsp[-2].symbol, yyvsp[0].symbol); ;}
1685 break;
1686
1687 case 99:
1688
1689 { yyval.expr = yyvsp[-1].expr; ;}
1690 break;
1691
1692 case 100:
1693
1694 { yyval.expr = expr_alloc_one(E_NOT, yyvsp[0].expr); ;}
1695 break;
1696
1697 case 101:
1698
1699 { yyval.expr = expr_alloc_two(E_OR, yyvsp[-2].expr, yyvsp[0].expr); ;}
1700 break;
1701
1702 case 102:
1703
1704 { yyval.expr = expr_alloc_two(E_AND, yyvsp[-2].expr, yyvsp[0].expr); ;}
1705 break;
1706
1707 case 103:
1708
1709 { yyval.symbol = sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;}
1710 break;
1711
1712 case 104:
1713
1714 { yyval.symbol = sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001715 break;
1716
1717
1718 }
1719
Eric Andersen72d8e442003-08-05 02:18:25 +00001720/* Line 999 of yacc.c. */
1721
Eric Andersenc9f20d92002-12-05 08:41:41 +00001722
1723 yyvsp -= yylen;
1724 yyssp -= yylen;
1725
1726
Eric Andersen72d8e442003-08-05 02:18:25 +00001727 YY_STACK_PRINT (yyss, yyssp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001728
1729 *++yyvsp = yyval;
1730
1731
1732 /* Now `shift' the result of the reduction. Determine what state
1733 that goes to, based on the state we popped back to and the rule
1734 number reduced by. */
1735
1736 yyn = yyr1[yyn];
1737
1738 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1739 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1740 yystate = yytable[yystate];
1741 else
1742 yystate = yydefgoto[yyn - YYNTOKENS];
1743
1744 goto yynewstate;
1745
1746
1747/*------------------------------------.
1748| yyerrlab -- here on detecting error |
1749`------------------------------------*/
1750yyerrlab:
1751 /* If not already recovering from an error, report this error. */
1752 if (!yyerrstatus)
1753 {
1754 ++yynerrs;
1755#if YYERROR_VERBOSE
1756 yyn = yypact[yystate];
1757
1758 if (YYPACT_NINF < yyn && yyn < YYLAST)
1759 {
1760 YYSIZE_T yysize = 0;
1761 int yytype = YYTRANSLATE (yychar);
1762 char *yymsg;
1763 int yyx, yycount;
1764
1765 yycount = 0;
1766 /* Start YYX at -YYN if negative to avoid negative indexes in
1767 YYCHECK. */
1768 for (yyx = yyn < 0 ? -yyn : 0;
1769 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
1770 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1771 yysize += yystrlen (yytname[yyx]) + 15, yycount++;
Eric Andersen72d8e442003-08-05 02:18:25 +00001772 yysize += yystrlen ("syntax error, unexpected ") + 1;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001773 yysize += yystrlen (yytname[yytype]);
1774 yymsg = (char *) YYSTACK_ALLOC (yysize);
1775 if (yymsg != 0)
1776 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001777 char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
Eric Andersenc9f20d92002-12-05 08:41:41 +00001778 yyp = yystpcpy (yyp, yytname[yytype]);
1779
1780 if (yycount < 5)
1781 {
1782 yycount = 0;
1783 for (yyx = yyn < 0 ? -yyn : 0;
1784 yyx < (int) (sizeof (yytname) / sizeof (char *));
1785 yyx++)
1786 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1787 {
1788 const char *yyq = ! yycount ? ", expecting " : " or ";
1789 yyp = yystpcpy (yyp, yyq);
1790 yyp = yystpcpy (yyp, yytname[yyx]);
1791 yycount++;
1792 }
1793 }
1794 yyerror (yymsg);
1795 YYSTACK_FREE (yymsg);
1796 }
1797 else
Eric Andersen72d8e442003-08-05 02:18:25 +00001798 yyerror ("syntax error; also virtual memory exhausted");
Eric Andersenc9f20d92002-12-05 08:41:41 +00001799 }
1800 else
1801#endif /* YYERROR_VERBOSE */
Eric Andersen72d8e442003-08-05 02:18:25 +00001802 yyerror ("syntax error");
Eric Andersenc9f20d92002-12-05 08:41:41 +00001803 }
Eric Andersenc9f20d92002-12-05 08:41:41 +00001804
1805
Eric Andersen72d8e442003-08-05 02:18:25 +00001806
Eric Andersenc9f20d92002-12-05 08:41:41 +00001807 if (yyerrstatus == 3)
1808 {
1809 /* If just tried and failed to reuse lookahead token after an
1810 error, discard it. */
1811
1812 /* Return failure if at end of input. */
1813 if (yychar == YYEOF)
1814 {
1815 /* Pop the error token. */
1816 YYPOPSTACK;
1817 /* Pop the rest of the stack. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001818 while (yyss < yyssp)
Eric Andersenc9f20d92002-12-05 08:41:41 +00001819 {
Eric Andersen72d8e442003-08-05 02:18:25 +00001820 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1821 yydestruct (yystos[*yyssp], yyvsp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001822 YYPOPSTACK;
1823 }
1824 YYABORT;
1825 }
1826
Eric Andersen72d8e442003-08-05 02:18:25 +00001827 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
1828 yydestruct (yytoken, &yylval);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001829 yychar = YYEMPTY;
Eric Andersen72d8e442003-08-05 02:18:25 +00001830
Eric Andersenc9f20d92002-12-05 08:41:41 +00001831 }
1832
1833 /* Else will try to reuse lookahead token after shifting the error
1834 token. */
Eric Andersen72d8e442003-08-05 02:18:25 +00001835 goto yyerrlab1;
Eric Andersenc9f20d92002-12-05 08:41:41 +00001836
Eric Andersen72d8e442003-08-05 02:18:25 +00001837
1838/*----------------------------------------------------.
1839| yyerrlab1 -- error raised explicitly by an action. |
1840`----------------------------------------------------*/
1841yyerrlab1:
Eric Andersenc9f20d92002-12-05 08:41:41 +00001842 yyerrstatus = 3; /* Each real token shifted decrements this. */
1843
1844 for (;;)
1845 {
1846 yyn = yypact[yystate];
1847 if (yyn != YYPACT_NINF)
1848 {
1849 yyn += YYTERROR;
1850 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1851 {
1852 yyn = yytable[yyn];
1853 if (0 < yyn)
1854 break;
1855 }
1856 }
1857
1858 /* Pop the current state because it cannot handle the error token. */
1859 if (yyssp == yyss)
1860 YYABORT;
1861
Eric Andersen72d8e442003-08-05 02:18:25 +00001862 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
1863 yydestruct (yystos[yystate], yyvsp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001864 yyvsp--;
1865 yystate = *--yyssp;
1866
Eric Andersen72d8e442003-08-05 02:18:25 +00001867 YY_STACK_PRINT (yyss, yyssp);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001868 }
1869
1870 if (yyn == YYFINAL)
1871 YYACCEPT;
1872
1873 YYDPRINTF ((stderr, "Shifting error token, "));
1874
1875 *++yyvsp = yylval;
1876
1877
1878 yystate = yyn;
1879 goto yynewstate;
1880
1881
1882/*-------------------------------------.
1883| yyacceptlab -- YYACCEPT comes here. |
1884`-------------------------------------*/
1885yyacceptlab:
1886 yyresult = 0;
1887 goto yyreturn;
1888
1889/*-----------------------------------.
1890| yyabortlab -- YYABORT comes here. |
1891`-----------------------------------*/
1892yyabortlab:
1893 yyresult = 1;
1894 goto yyreturn;
1895
1896#ifndef yyoverflow
1897/*----------------------------------------------.
1898| yyoverflowlab -- parser overflow comes here. |
1899`----------------------------------------------*/
1900yyoverflowlab:
1901 yyerror ("parser stack overflow");
1902 yyresult = 2;
1903 /* Fall through. */
1904#endif
1905
1906yyreturn:
1907#ifndef yyoverflow
1908 if (yyss != yyssa)
1909 YYSTACK_FREE (yyss);
1910#endif
1911 return yyresult;
1912}
1913
1914
Eric Andersen72d8e442003-08-05 02:18:25 +00001915
Eric Andersenc9f20d92002-12-05 08:41:41 +00001916
1917
1918void conf_parse(const char *name)
1919{
Eric Andersen72d8e442003-08-05 02:18:25 +00001920 struct symbol *sym;
1921 int i;
1922
Eric Andersenc9f20d92002-12-05 08:41:41 +00001923 zconf_initscan(name);
1924
1925 sym_init();
1926 menu_init();
Eric Andersen72d8e442003-08-05 02:18:25 +00001927 modules_sym = sym_lookup("MODULES", 0);
Eric Andersen70014802003-08-05 05:59:48 +00001928 rootmenu.prompt = menu_add_prop(P_MENU, "BusyBox Configuration", NULL, NULL);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001929
1930 //zconfdebug = 1;
1931 zconfparse();
1932 if (zconfnerrs)
1933 exit(1);
1934 menu_finalize(&rootmenu);
Eric Andersen72d8e442003-08-05 02:18:25 +00001935 for_all_symbols(i, sym) {
1936 if (!(sym->flags & SYMBOL_CHECKED) && sym_check_deps(sym))
1937 printf("\n");
1938 else
1939 sym->flags |= SYMBOL_CHECK_DONE;
1940 }
Eric Andersenc9f20d92002-12-05 08:41:41 +00001941
1942 sym_change_count = 1;
1943}
1944
1945const char *zconf_tokenname(int token)
1946{
1947 switch (token) {
1948 case T_MENU: return "menu";
1949 case T_ENDMENU: return "endmenu";
1950 case T_CHOICE: return "choice";
1951 case T_ENDCHOICE: return "endchoice";
1952 case T_IF: return "if";
1953 case T_ENDIF: return "endif";
1954 }
1955 return "<token>";
Eric Andersen72d8e442003-08-05 02:18:25 +00001956}
Eric Andersenc9f20d92002-12-05 08:41:41 +00001957
1958static bool zconf_endtoken(int token, int starttoken, int endtoken)
1959{
1960 if (token != endtoken) {
1961 zconfprint("unexpected '%s' within %s block", zconf_tokenname(token), zconf_tokenname(starttoken));
1962 zconfnerrs++;
1963 return false;
1964 }
1965 if (current_menu->file != current_file) {
1966 zconfprint("'%s' in different file than '%s'", zconf_tokenname(token), zconf_tokenname(starttoken));
1967 zconfprint("location of the '%s'", zconf_tokenname(starttoken));
1968 zconfnerrs++;
1969 return false;
1970 }
1971 return true;
1972}
1973
1974static void zconfprint(const char *err, ...)
1975{
1976 va_list ap;
1977
Eric Andersen72d8e442003-08-05 02:18:25 +00001978 fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno() + 1);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001979 va_start(ap, err);
1980 vfprintf(stderr, err, ap);
1981 va_end(ap);
1982 fprintf(stderr, "\n");
1983}
1984
1985static void zconferror(const char *err)
1986{
Eric Andersen72d8e442003-08-05 02:18:25 +00001987 fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
Eric Andersenc9f20d92002-12-05 08:41:41 +00001988}
1989
1990void print_quoted_string(FILE *out, const char *str)
1991{
1992 const char *p;
1993 int len;
1994
1995 putc('"', out);
1996 while ((p = strchr(str, '"'))) {
1997 len = p - str;
1998 if (len)
1999 fprintf(out, "%.*s", len, str);
2000 fputs("\\\"", out);
2001 str = p + 1;
2002 }
2003 fputs(str, out);
2004 putc('"', out);
2005}
2006
2007void print_symbol(FILE *out, struct menu *menu)
2008{
2009 struct symbol *sym = menu->sym;
2010 struct property *prop;
2011
Eric Andersenc9f20d92002-12-05 08:41:41 +00002012 if (sym_is_choice(sym))
2013 fprintf(out, "choice\n");
2014 else
2015 fprintf(out, "config %s\n", sym->name);
2016 switch (sym->type) {
2017 case S_BOOLEAN:
2018 fputs(" boolean\n", out);
2019 break;
2020 case S_TRISTATE:
2021 fputs(" tristate\n", out);
2022 break;
2023 case S_STRING:
2024 fputs(" string\n", out);
2025 break;
2026 case S_INT:
2027 fputs(" integer\n", out);
2028 break;
2029 case S_HEX:
2030 fputs(" hex\n", out);
2031 break;
2032 default:
2033 fputs(" ???\n", out);
2034 break;
2035 }
Eric Andersenc9f20d92002-12-05 08:41:41 +00002036 for (prop = sym->prop; prop; prop = prop->next) {
2037 if (prop->menu != menu)
2038 continue;
2039 switch (prop->type) {
2040 case P_PROMPT:
2041 fputs(" prompt ", out);
2042 print_quoted_string(out, prop->text);
Eric Andersen72d8e442003-08-05 02:18:25 +00002043 if (!expr_is_yes(prop->visible.expr)) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002044 fputs(" if ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002045 expr_fprint(prop->visible.expr, out);
Eric Andersenc9f20d92002-12-05 08:41:41 +00002046 }
2047 fputc('\n', out);
2048 break;
2049 case P_DEFAULT:
2050 fputs( " default ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002051 expr_fprint(prop->expr, out);
2052 if (!expr_is_yes(prop->visible.expr)) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002053 fputs(" if ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002054 expr_fprint(prop->visible.expr, out);
Eric Andersenc9f20d92002-12-05 08:41:41 +00002055 }
2056 fputc('\n', out);
2057 break;
2058 case P_CHOICE:
2059 fputs(" #choice value\n", out);
2060 break;
2061 default:
2062 fprintf(out, " unknown prop %d!\n", prop->type);
2063 break;
2064 }
2065 }
2066 if (sym->help) {
2067 int len = strlen(sym->help);
2068 while (sym->help[--len] == '\n')
2069 sym->help[len] = 0;
2070 fprintf(out, " help\n%s\n", sym->help);
2071 }
2072 fputc('\n', out);
2073}
2074
2075void zconfdump(FILE *out)
2076{
Eric Andersenc9f20d92002-12-05 08:41:41 +00002077 struct property *prop;
2078 struct symbol *sym;
2079 struct menu *menu;
2080
2081 menu = rootmenu.list;
2082 while (menu) {
2083 if ((sym = menu->sym))
2084 print_symbol(out, menu);
2085 else if ((prop = menu->prompt)) {
2086 switch (prop->type) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002087 case P_COMMENT:
2088 fputs("\ncomment ", out);
2089 print_quoted_string(out, prop->text);
2090 fputs("\n", out);
2091 break;
2092 case P_MENU:
2093 fputs("\nmenu ", out);
2094 print_quoted_string(out, prop->text);
2095 fputs("\n", out);
2096 break;
Eric Andersenc9f20d92002-12-05 08:41:41 +00002097 default:
2098 ;
2099 }
Eric Andersen72d8e442003-08-05 02:18:25 +00002100 if (!expr_is_yes(prop->visible.expr)) {
Eric Andersenc9f20d92002-12-05 08:41:41 +00002101 fputs(" depends ", out);
Eric Andersen72d8e442003-08-05 02:18:25 +00002102 expr_fprint(prop->visible.expr, out);
Eric Andersenc9f20d92002-12-05 08:41:41 +00002103 fputc('\n', out);
2104 }
2105 fputs("\n", out);
2106 }
2107
2108 if (menu->list)
2109 menu = menu->list;
2110 else if (menu->next)
2111 menu = menu->next;
2112 else while ((menu = menu->parent)) {
2113 if (menu->prompt && menu->prompt->type == P_MENU)
2114 fputs("\nendmenu\n", out);
2115 if (menu->next) {
2116 menu = menu->next;
2117 break;
2118 }
2119 }
2120 }
2121}
2122
2123#include "lex.zconf.c"
Peter Kjellerstedtbae38db2005-04-19 09:55:06 +00002124#include "util.c"
Eric Andersenc9f20d92002-12-05 08:41:41 +00002125#include "confdata.c"
2126#include "expr.c"
2127#include "symbol.c"
2128#include "menu.c"
2129
Eric Andersen72d8e442003-08-05 02:18:25 +00002130