aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/kconfig
diff options
context:
space:
mode:
authorRoman Zippel <zippel@linux-m68k.org>2008-02-28 23:11:50 -0500
committerSam Ravnborg <sam@uranus.ravnborg.org>2008-04-28 17:05:48 -0400
commit5a1aa8a1aff6191ecc55f21d8b5f0e47108ed91b (patch)
tree3e812a8027332c872f3ae3afb39212f4f9639361 /scripts/kconfig
parent48981178869bf7d9770f11fc361996ad11217a75 (diff)
kconfig: add named choice group
As choice dependency are now fully checked, it's quite easy to add support for named choices. This lifts the restriction that a choice value can only appear once, although it still has to be within the same group, but multiple choices can be joined by giving them a name. While at it I cleaned up a little the choice type logic to simplify it a bit. Signed-off-by: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'scripts/kconfig')
-rw-r--r--scripts/kconfig/lex.zconf.c_shipped25
-rw-r--r--scripts/kconfig/lkc_proto.h2
-rw-r--r--scripts/kconfig/menu.c64
-rw-r--r--scripts/kconfig/symbol.c24
-rw-r--r--scripts/kconfig/zconf.tab.c_shipped301
-rw-r--r--scripts/kconfig/zconf.y13
6 files changed, 206 insertions, 223 deletions
diff --git a/scripts/kconfig/lex.zconf.c_shipped b/scripts/kconfig/lex.zconf.c_shipped
index bed0f4e2d2f7..6a61cee4a32c 100644
--- a/scripts/kconfig/lex.zconf.c_shipped
+++ b/scripts/kconfig/lex.zconf.c_shipped
@@ -5,25 +5,6 @@
5 5
6/* A lexical scanner generated by flex */ 6/* A lexical scanner generated by flex */
7 7
8#define yy_create_buffer zconf_create_buffer
9#define yy_delete_buffer zconf_delete_buffer
10#define yy_flex_debug zconf_flex_debug
11#define yy_init_buffer zconf_init_buffer
12#define yy_flush_buffer zconf_flush_buffer
13#define yy_load_buffer_state zconf_load_buffer_state
14#define yy_switch_to_buffer zconf_switch_to_buffer
15#define yyin zconfin
16#define yyleng zconfleng
17#define yylex zconflex
18#define yylineno zconflineno
19#define yyout zconfout
20#define yyrestart zconfrestart
21#define yytext zconftext
22#define yywrap zconfwrap
23#define yyalloc zconfalloc
24#define yyrealloc zconfrealloc
25#define yyfree zconffree
26
27#define FLEX_SCANNER 8#define FLEX_SCANNER
28#define YY_FLEX_MAJOR_VERSION 2 9#define YY_FLEX_MAJOR_VERSION 2
29#define YY_FLEX_MINOR_VERSION 5 10#define YY_FLEX_MINOR_VERSION 5
@@ -354,7 +335,7 @@ void zconffree (void * );
354 335
355/* Begin user sect3 */ 336/* Begin user sect3 */
356 337
357#define zconfwrap(n) 1 338#define zconfwrap() 1
358#define YY_SKIP_YYWRAP 339#define YY_SKIP_YYWRAP
359 340
360typedef unsigned char YY_CHAR; 341typedef unsigned char YY_CHAR;
@@ -1535,7 +1516,7 @@ static int yy_get_next_buffer (void)
1535 1516
1536 /* Read in more data. */ 1517 /* Read in more data. */
1537 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), 1518 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1538 (yy_n_chars), num_to_read ); 1519 (yy_n_chars), (size_t) num_to_read );
1539 1520
1540 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); 1521 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1541 } 1522 }
@@ -2007,7 +1988,7 @@ YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
2007 1988
2008/** Setup the input buffer state to scan a string. The next call to zconflex() will 1989/** Setup the input buffer state to scan a string. The next call to zconflex() will
2009 * scan from a @e copy of @a str. 1990 * scan from a @e copy of @a str.
2010 * @param str a NUL-terminated string to scan 1991 * @param yystr a NUL-terminated string to scan
2011 * 1992 *
2012 * @return the newly allocated buffer state object. 1993 * @return the newly allocated buffer state object.
2013 * @note If you want to scan bytes that may contain NUL values, then use 1994 * @note If you want to scan bytes that may contain NUL values, then use
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
index 4d09f6ddefe3..8e69461313d1 100644
--- a/scripts/kconfig/lkc_proto.h
+++ b/scripts/kconfig/lkc_proto.h
@@ -21,7 +21,7 @@ P(menu_get_help,const char *,(struct menu *menu));
21/* symbol.c */ 21/* symbol.c */
22P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]); 22P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
23 23
24P(sym_lookup,struct symbol *,(const char *name, int isconst)); 24P(sym_lookup,struct symbol *,(const char *name, int flags));
25P(sym_find,struct symbol *,(const char *name)); 25P(sym_find,struct symbol *,(const char *name));
26P(sym_re_search,struct symbol **,(const char *pattern)); 26P(sym_re_search,struct symbol **,(const char *pattern));
27P(sym_type_name,const char *,(enum symbol_type type)); 27P(sym_type_name,const char *,(enum symbol_type type));
diff --git a/scripts/kconfig/menu.c b/scripts/kconfig/menu.c
index 606ceb9e746e..07ff8d105c9d 100644
--- a/scripts/kconfig/menu.c
+++ b/scripts/kconfig/menu.c
@@ -235,18 +235,22 @@ void menu_finalize(struct menu *parent)
235 sym = parent->sym; 235 sym = parent->sym;
236 if (parent->list) { 236 if (parent->list) {
237 if (sym && sym_is_choice(sym)) { 237 if (sym && sym_is_choice(sym)) {
238 /* find the first choice value and find out choice type */ 238 if (sym->type == S_UNKNOWN) {
239 for (menu = parent->list; menu; menu = menu->next) { 239 /* find the first choice value to find out choice type */
240 if (menu->sym) { 240 current_entry = parent;
241 current_entry = parent; 241 for (menu = parent->list; menu; menu = menu->next) {
242 if (sym->type == S_UNKNOWN) 242 if (menu->sym && menu->sym->type != S_UNKNOWN) {
243 menu_set_type(menu->sym->type); 243 menu_set_type(menu->sym->type);
244 current_entry = menu; 244 break;
245 if (menu->sym->type == S_UNKNOWN) 245 }
246 menu_set_type(sym->type);
247 break;
248 } 246 }
249 } 247 }
248 /* set the type of the remaining choice values */
249 for (menu = parent->list; menu; menu = menu->next) {
250 current_entry = menu;
251 if (menu->sym && menu->sym->type == S_UNKNOWN)
252 menu_set_type(sym->type);
253 }
250 parentdep = expr_alloc_symbol(sym); 254 parentdep = expr_alloc_symbol(sym);
251 } else if (parent->prompt) 255 } else if (parent->prompt)
252 parentdep = parent->prompt->visible.expr; 256 parentdep = parent->prompt->visible.expr;
@@ -313,50 +317,36 @@ void menu_finalize(struct menu *parent)
313 } 317 }
314 } 318 }
315 for (menu = parent->list; menu; menu = menu->next) { 319 for (menu = parent->list; menu; menu = menu->next) {
316 if (sym && sym_is_choice(sym) && menu->sym) { 320 if (sym && sym_is_choice(sym) &&
321 menu->sym && !sym_is_choice_value(menu->sym)) {
322 current_entry = menu;
317 menu->sym->flags |= SYMBOL_CHOICEVAL; 323 menu->sym->flags |= SYMBOL_CHOICEVAL;
318 if (!menu->prompt) 324 if (!menu->prompt)
319 menu_warn(menu, "choice value must have a prompt"); 325 menu_warn(menu, "choice value must have a prompt");
320 for (prop = menu->sym->prop; prop; prop = prop->next) { 326 for (prop = menu->sym->prop; prop; prop = prop->next) {
321 if (prop->type == P_PROMPT && prop->menu != menu) {
322 prop_warn(prop, "choice values "
323 "currently only support a "
324 "single prompt");
325 }
326 if (prop->type == P_DEFAULT) 327 if (prop->type == P_DEFAULT)
327 prop_warn(prop, "defaults for choice " 328 prop_warn(prop, "defaults for choice "
328 "values not supported"); 329 "values not supported");
330 if (prop->menu == menu)
331 continue;
332 if (prop->type == P_PROMPT &&
333 prop->menu->parent->sym != sym)
334 prop_warn(prop, "choice value used outside its choice group");
329 } 335 }
330 current_entry = menu;
331 if (menu->sym->type == S_UNKNOWN)
332 menu_set_type(sym->type);
333 /* Non-tristate choice values of tristate choices must 336 /* Non-tristate choice values of tristate choices must
334 * depend on the choice being set to Y. The choice 337 * depend on the choice being set to Y. The choice
335 * values' dependencies were propagated to their 338 * values' dependencies were propagated to their
336 * properties above, so the change here must be re- 339 * properties above, so the change here must be re-
337 * propagated. */ 340 * propagated.
341 */
338 if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) { 342 if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
339 basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes); 343 basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
340 basedep = expr_alloc_and(basedep, menu->dep); 344 menu->dep = expr_alloc_and(basedep, menu->dep);
341 basedep = expr_eliminate_dups(basedep);
342 menu->dep = basedep;
343 for (prop = menu->sym->prop; prop; prop = prop->next) { 345 for (prop = menu->sym->prop; prop; prop = prop->next) {
344 if (prop->menu != menu) 346 if (prop->menu != menu)
345 continue; 347 continue;
346 dep = expr_alloc_and(expr_copy(basedep), 348 prop->visible.expr = expr_alloc_and(expr_copy(basedep),
347 prop->visible.expr); 349 prop->visible.expr);
348 dep = expr_eliminate_dups(dep);
349 dep = expr_trans_bool(dep);
350 prop->visible.expr = dep;
351 if (prop->type == P_SELECT) {
352 struct symbol *es = prop_get_symbol(prop);
353 dep2 = expr_alloc_symbol(menu->sym);
354 dep = expr_alloc_and(dep2,
355 expr_copy(dep));
356 dep = expr_alloc_or(es->rev_dep.expr, dep);
357 dep = expr_eliminate_dups(dep);
358 es->rev_dep.expr = dep;
359 }
360 } 350 }
361 } 351 }
362 menu_add_symbol(P_CHOICE, sym, NULL); 352 menu_add_symbol(P_CHOICE, sym, NULL);
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index 45f409a8f37f..18f3e5c33634 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -40,7 +40,7 @@ void sym_add_default(struct symbol *sym, const char *def)
40{ 40{
41 struct property *prop = prop_alloc(P_DEFAULT, sym); 41 struct property *prop = prop_alloc(P_DEFAULT, sym);
42 42
43 prop->expr = expr_alloc_symbol(sym_lookup(def, 1)); 43 prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
44} 44}
45 45
46void sym_init(void) 46void sym_init(void)
@@ -350,9 +350,6 @@ void sym_calc_value(struct symbol *sym)
350 ; 350 ;
351 } 351 }
352 352
353 if (sym->flags & SYMBOL_AUTO)
354 sym->flags &= ~SYMBOL_WRITE;
355
356 sym->curr = newval; 353 sym->curr = newval;
357 if (sym_is_choice(sym) && newval.tri == yes) 354 if (sym_is_choice(sym) && newval.tri == yes)
358 sym->curr.val = sym_calc_choice(sym); 355 sym->curr.val = sym_calc_choice(sym);
@@ -377,6 +374,9 @@ void sym_calc_value(struct symbol *sym)
377 sym_set_changed(choice_sym); 374 sym_set_changed(choice_sym);
378 } 375 }
379 } 376 }
377
378 if (sym->flags & SYMBOL_AUTO)
379 sym->flags &= ~SYMBOL_WRITE;
380} 380}
381 381
382void sym_clear_all_valid(void) 382void sym_clear_all_valid(void)
@@ -651,7 +651,7 @@ bool sym_is_changable(struct symbol *sym)
651 return sym->visible > sym->rev_dep.tri; 651 return sym->visible > sym->rev_dep.tri;
652} 652}
653 653
654struct symbol *sym_lookup(const char *name, int isconst) 654struct symbol *sym_lookup(const char *name, int flags)
655{ 655{
656 struct symbol *symbol; 656 struct symbol *symbol;
657 const char *ptr; 657 const char *ptr;
@@ -671,11 +671,10 @@ struct symbol *sym_lookup(const char *name, int isconst)
671 hash &= 0xff; 671 hash &= 0xff;
672 672
673 for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { 673 for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
674 if (!strcmp(symbol->name, name)) { 674 if (!strcmp(symbol->name, name) &&
675 if ((isconst && symbol->flags & SYMBOL_CONST) || 675 (flags ? symbol->flags & flags
676 (!isconst && !(symbol->flags & SYMBOL_CONST))) 676 : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
677 return symbol; 677 return symbol;
678 }
679 } 678 }
680 new_name = strdup(name); 679 new_name = strdup(name);
681 } else { 680 } else {
@@ -687,8 +686,7 @@ struct symbol *sym_lookup(const char *name, int isconst)
687 memset(symbol, 0, sizeof(*symbol)); 686 memset(symbol, 0, sizeof(*symbol));
688 symbol->name = new_name; 687 symbol->name = new_name;
689 symbol->type = S_UNKNOWN; 688 symbol->type = S_UNKNOWN;
690 if (isconst) 689 symbol->flags |= flags;
691 symbol->flags |= SYMBOL_CONST;
692 690
693 symbol->next = symbol_hash[hash]; 691 symbol->next = symbol_hash[hash];
694 symbol_hash[hash] = symbol; 692 symbol_hash[hash] = symbol;
@@ -962,7 +960,7 @@ void prop_add_env(const char *env)
962 } 960 }
963 961
964 prop = prop_alloc(P_ENV, sym); 962 prop = prop_alloc(P_ENV, sym);
965 prop->expr = expr_alloc_symbol(sym_lookup(env, 1)); 963 prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
966 964
967 sym_env_list = expr_alloc_one(E_LIST, sym_env_list); 965 sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
968 sym_env_list->right.sym = sym; 966 sym_env_list->right.sym = sym;
diff --git a/scripts/kconfig/zconf.tab.c_shipped b/scripts/kconfig/zconf.tab.c_shipped
index d22d92496f25..95df833b5a9d 100644
--- a/scripts/kconfig/zconf.tab.c_shipped
+++ b/scripts/kconfig/zconf.tab.c_shipped
@@ -446,16 +446,16 @@ union yyalloc
446/* YYFINAL -- State number of the termination state. */ 446/* YYFINAL -- State number of the termination state. */
447#define YYFINAL 3 447#define YYFINAL 3
448/* YYLAST -- Last index in YYTABLE. */ 448/* YYLAST -- Last index in YYTABLE. */
449#define YYLAST 258 449#define YYLAST 259
450 450
451/* YYNTOKENS -- Number of terminals. */ 451/* YYNTOKENS -- Number of terminals. */
452#define YYNTOKENS 35 452#define YYNTOKENS 35
453/* YYNNTS -- Number of nonterminals. */ 453/* YYNNTS -- Number of nonterminals. */
454#define YYNNTS 45 454#define YYNNTS 46
455/* YYNRULES -- Number of rules. */ 455/* YYNRULES -- Number of rules. */
456#define YYNRULES 108 456#define YYNRULES 110
457/* YYNRULES -- Number of states. */ 457/* YYNRULES -- Number of states. */
458#define YYNSTATES 178 458#define YYNSTATES 180
459 459
460/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 460/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
461#define YYUNDEFTOK 2 461#define YYUNDEFTOK 2
@@ -507,13 +507,14 @@ static const yytype_uint16 yyprhs[] =
507 28, 33, 37, 39, 41, 43, 45, 47, 49, 51, 507 28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
508 53, 55, 57, 59, 61, 63, 67, 70, 74, 77, 508 53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
509 81, 84, 85, 88, 91, 94, 97, 100, 103, 107, 509 81, 84, 85, 88, 91, 94, 97, 100, 103, 107,
510 112, 117, 122, 128, 132, 133, 137, 138, 141, 144, 510 112, 117, 122, 128, 132, 133, 137, 138, 141, 145,
511 147, 149, 153, 154, 157, 160, 163, 166, 169, 174, 511 148, 150, 154, 155, 158, 161, 164, 167, 170, 175,
512 178, 181, 186, 187, 190, 194, 196, 200, 201, 204, 512 179, 182, 187, 188, 191, 195, 197, 201, 202, 205,
513 207, 210, 214, 217, 219, 223, 224, 227, 230, 233, 513 208, 211, 215, 218, 220, 224, 225, 228, 231, 234,
514 237, 241, 244, 247, 250, 251, 254, 257, 260, 265, 514 238, 242, 245, 248, 251, 252, 255, 258, 261, 266,
515 266, 269, 271, 273, 276, 279, 282, 284, 287, 288, 515 267, 270, 272, 274, 277, 280, 283, 285, 288, 289,
516 291, 293, 297, 301, 305, 308, 312, 316, 318 516 292, 294, 298, 302, 306, 309, 313, 317, 319, 321,
517 322
517}; 518};
518 519
519/* YYRHS -- A `-1'-separated list of the rules' RHS. */ 520/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -533,24 +534,25 @@ static const yytype_int8 yyrhs[] =
533 30, -1, 20, 78, 77, 30, -1, 21, 25, 77, 534 30, -1, 20, 78, 77, 30, -1, 21, 25, 77,
534 30, -1, 22, 79, 79, 77, 30, -1, 23, 48, 535 30, -1, 22, 79, 79, 77, 30, -1, 23, 48,
535 30, -1, -1, 48, 25, 49, -1, -1, 33, 74, 536 30, -1, -1, 48, 25, 49, -1, -1, 33, 74,
536 -1, 7, 30, -1, 50, 54, -1, 75, -1, 51, 537 -1, 7, 80, 30, -1, 50, 54, -1, 75, -1,
537 56, 52, -1, -1, 54, 55, -1, 54, 72, -1, 538 51, 56, 52, -1, -1, 54, 55, -1, 54, 72,
538 54, 70, -1, 54, 30, -1, 54, 40, -1, 18, 539 -1, 54, 70, -1, 54, 30, -1, 54, 40, -1,
539 74, 77, 30, -1, 19, 73, 30, -1, 17, 30, 540 18, 74, 77, 30, -1, 19, 73, 30, -1, 17,
540 -1, 20, 25, 77, 30, -1, -1, 56, 39, -1, 541 30, -1, 20, 25, 77, 30, -1, -1, 56, 39,
541 14, 78, 76, -1, 75, -1, 57, 60, 58, -1, 542 -1, 14, 78, 76, -1, 75, -1, 57, 60, 58,
542 -1, 60, 39, -1, 60, 64, -1, 60, 53, -1, 543 -1, -1, 60, 39, -1, 60, 64, -1, 60, 53,
543 4, 74, 30, -1, 61, 71, -1, 75, -1, 62, 544 -1, 4, 74, 30, -1, 61, 71, -1, 75, -1,
544 65, 63, -1, -1, 65, 39, -1, 65, 64, -1, 545 62, 65, 63, -1, -1, 65, 39, -1, 65, 64,
545 65, 53, -1, 6, 74, 30, -1, 9, 74, 30, 546 -1, 65, 53, -1, 6, 74, 30, -1, 9, 74,
546 -1, 67, 71, -1, 12, 30, -1, 69, 13, -1, 547 30, -1, 67, 71, -1, 12, 30, -1, 69, 13,
547 -1, 71, 72, -1, 71, 30, -1, 71, 40, -1, 548 -1, -1, 71, 72, -1, 71, 30, -1, 71, 40,
548 16, 24, 78, 30, -1, -1, 74, 77, -1, 25, 549 -1, 16, 24, 78, 30, -1, -1, 74, 77, -1,
549 -1, 26, -1, 5, 30, -1, 8, 30, -1, 15, 550 25, -1, 26, -1, 5, 30, -1, 8, 30, -1,
550 30, -1, 30, -1, 76, 30, -1, -1, 14, 78, 551 15, 30, -1, 30, -1, 76, 30, -1, -1, 14,
551 -1, 79, -1, 79, 33, 79, -1, 79, 27, 79, 552 78, -1, 79, -1, 79, 33, 79, -1, 79, 27,
552 -1, 29, 78, 28, -1, 34, 78, -1, 78, 31, 553 79, -1, 29, 78, 28, -1, 34, 78, -1, 78,
553 78, -1, 78, 32, 78, -1, 25, -1, 26, -1 554 31, 78, -1, 78, 32, 78, -1, 25, -1, 26,
555 -1, -1, 25, -1
554}; 556};
555 557
556/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 558/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
@@ -566,7 +568,8 @@ static const yytype_uint16 yyrline[] =
566 339, 344, 351, 356, 364, 367, 369, 370, 371, 374, 568 339, 344, 351, 356, 364, 367, 369, 370, 371, 374,
567 382, 389, 396, 402, 409, 411, 412, 413, 416, 424, 569 382, 389, 396, 402, 409, 411, 412, 413, 416, 424,
568 426, 431, 432, 435, 436, 437, 441, 442, 445, 446, 570 426, 431, 432, 435, 436, 437, 441, 442, 445, 446,
569 449, 450, 451, 452, 453, 454, 455, 458, 459 571 449, 450, 451, 452, 453, 454, 455, 458, 459, 462,
572 463
570}; 573};
571#endif 574#endif
572 575
@@ -590,7 +593,8 @@ static const char *const yytname[] =
590 "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry", 593 "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
591 "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment", 594 "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
592 "comment_stmt", "help_start", "help", "depends_list", "depends", 595 "comment_stmt", "help_start", "help", "depends_list", "depends",
593 "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", 0 596 "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
597 "word_opt", 0
594}; 598};
595#endif 599#endif
596 600
@@ -619,7 +623,8 @@ static const yytype_uint8 yyr1[] =
619 60, 61, 62, 63, 64, 65, 65, 65, 65, 66, 623 60, 61, 62, 63, 64, 65, 65, 65, 65, 66,
620 67, 68, 69, 70, 71, 71, 71, 71, 72, 73, 624 67, 68, 69, 70, 71, 71, 71, 71, 72, 73,
621 73, 74, 74, 75, 75, 75, 76, 76, 77, 77, 625 73, 74, 74, 75, 75, 75, 76, 76, 77, 77,
622 78, 78, 78, 78, 78, 78, 78, 79, 79 626 78, 78, 78, 78, 78, 78, 78, 79, 79, 80,
627 80
623}; 628};
624 629
625/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 630/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -629,13 +634,14 @@ static const yytype_uint8 yyr2[] =
629 4, 3, 1, 1, 1, 1, 1, 1, 1, 1, 634 4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
630 1, 1, 1, 1, 1, 3, 2, 3, 2, 3, 635 1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
631 2, 0, 2, 2, 2, 2, 2, 2, 3, 4, 636 2, 0, 2, 2, 2, 2, 2, 2, 3, 4,
632 4, 4, 5, 3, 0, 3, 0, 2, 2, 2, 637 4, 4, 5, 3, 0, 3, 0, 2, 3, 2,
633 1, 3, 0, 2, 2, 2, 2, 2, 4, 3, 638 1, 3, 0, 2, 2, 2, 2, 2, 4, 3,
634 2, 4, 0, 2, 3, 1, 3, 0, 2, 2, 639 2, 4, 0, 2, 3, 1, 3, 0, 2, 2,
635 2, 3, 2, 1, 3, 0, 2, 2, 2, 3, 640 2, 3, 2, 1, 3, 0, 2, 2, 2, 3,
636 3, 2, 2, 2, 0, 2, 2, 2, 4, 0, 641 3, 2, 2, 2, 0, 2, 2, 2, 4, 0,
637 2, 1, 1, 2, 2, 2, 1, 2, 0, 2, 642 2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
638 1, 3, 3, 3, 2, 3, 3, 1, 1 643 1, 3, 3, 3, 2, 3, 3, 1, 1, 0,
644 1
639}; 645};
640 646
641/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state 647/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -643,69 +649,69 @@ static const yytype_uint8 yyr2[] =
643 means the default is an error. */ 649 means the default is an error. */
644static const yytype_uint8 yydefact[] = 650static const yytype_uint8 yydefact[] =
645{ 651{
646 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 652 3, 0, 0, 1, 0, 0, 0, 0, 0, 109,
647 0, 0, 0, 0, 0, 0, 12, 16, 13, 14, 653 0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
648 18, 15, 17, 0, 19, 0, 4, 31, 22, 31, 654 18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
649 23, 52, 62, 5, 67, 20, 84, 75, 6, 24, 655 23, 52, 62, 5, 67, 20, 84, 75, 6, 24,
650 84, 21, 8, 11, 91, 92, 0, 0, 93, 0, 656 84, 21, 8, 11, 91, 92, 0, 0, 93, 0,
651 48, 94, 0, 0, 0, 107, 108, 0, 0, 0, 657 110, 0, 94, 0, 0, 0, 107, 108, 0, 0,
652 100, 95, 0, 0, 0, 0, 0, 0, 0, 0, 658 0, 100, 95, 0, 0, 0, 0, 0, 0, 0,
653 0, 0, 96, 7, 71, 79, 80, 27, 29, 0, 659 0, 0, 0, 96, 7, 71, 79, 48, 80, 27,
654 104, 0, 0, 64, 0, 0, 9, 10, 0, 0, 660 29, 0, 104, 0, 0, 64, 0, 0, 9, 10,
655 0, 0, 89, 0, 0, 0, 44, 0, 37, 36, 661 0, 0, 0, 0, 89, 0, 0, 0, 44, 0,
656 32, 33, 0, 35, 34, 0, 0, 89, 0, 56, 662 37, 36, 32, 33, 0, 35, 34, 0, 0, 89,
657 57, 53, 55, 54, 63, 51, 50, 68, 70, 66, 663 0, 56, 57, 53, 55, 54, 63, 51, 50, 68,
658 69, 65, 86, 87, 85, 76, 78, 74, 77, 73, 664 70, 66, 69, 65, 86, 87, 85, 76, 78, 74,
659 97, 103, 105, 106, 102, 101, 26, 82, 0, 98, 665 77, 73, 97, 103, 105, 106, 102, 101, 26, 82,
660 0, 98, 98, 98, 0, 0, 0, 83, 60, 98, 666 0, 98, 0, 98, 98, 98, 0, 0, 0, 83,
661 0, 98, 0, 0, 0, 38, 90, 0, 0, 98, 667 60, 98, 0, 98, 0, 0, 0, 38, 90, 0,
662 46, 43, 25, 0, 59, 0, 88, 99, 39, 40, 668 0, 98, 46, 43, 25, 0, 59, 0, 88, 99,
663 41, 0, 0, 45, 58, 61, 42, 47 669 39, 40, 41, 0, 0, 45, 58, 61, 42, 47
664}; 670};
665 671
666/* YYDEFGOTO[NTERM-NUM]. */ 672/* YYDEFGOTO[NTERM-NUM]. */
667static const yytype_int16 yydefgoto[] = 673static const yytype_int16 yydefgoto[] =
668{ 674{
669 -1, 1, 2, 25, 26, 99, 27, 28, 29, 30, 675 -1, 1, 2, 25, 26, 101, 27, 28, 29, 30,
670 64, 100, 101, 145, 173, 31, 32, 115, 33, 66, 676 65, 102, 103, 147, 175, 31, 32, 117, 33, 67,
671 111, 67, 34, 119, 35, 68, 36, 37, 127, 38, 677 113, 68, 34, 121, 35, 69, 36, 37, 129, 38,
672 70, 39, 40, 41, 102, 103, 69, 104, 140, 141, 678 71, 39, 40, 41, 104, 105, 70, 106, 142, 143,
673 42, 73, 154, 59, 60 679 42, 74, 156, 60, 61, 51
674}; 680};
675 681
676/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 682/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
677 STATE-NUM. */ 683 STATE-NUM. */
678#define YYPACT_NINF -78 684#define YYPACT_NINF -80
679static const yytype_int16 yypact[] = 685static const yytype_int16 yypact[] =
680{ 686{
681 -78, 33, 130, -78, -28, 73, 73, 7, 73, 36, 687 -80, 2, 132, -80, -13, -1, -1, -2, -1, 9,
682 41, 73, 26, 52, -4, 58, -78, -78, -78, -78, 688 33, -1, 27, 40, -3, 38, -80, -80, -80, -80,
683 -78, -78, -78, 90, -78, 94, -78, -78, -78, -78, 689 -80, -80, -80, 71, -80, 77, -80, -80, -80, -80,
684 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 690 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
685 -78, -78, -78, -78, -78, -78, 74, 85, -78, 96, 691 -80, -80, -80, -80, -80, -80, 57, 61, -80, 63,
686 -78, -78, 131, 134, 147, -78, -78, -4, -4, 193, 692 -80, 76, -80, 87, 101, 133, -80, -80, -3, -3,
687 -10, -78, 162, 164, 38, 102, 64, 148, 5, 192, 693 195, -6, -80, 136, 149, 39, 104, 65, 150, 5,
688 5, 165, -78, 174, -78, -78, -78, -78, -78, 65, 694 194, 5, 167, -80, 176, -80, -80, -80, -80, -80,
689 -78, -4, -4, 174, 103, 103, -78, -78, 175, 185, 695 -80, 68, -80, -3, -3, 176, 72, 72, -80, -80,
690 197, 73, 73, -4, 194, 103, -78, 231, -78, -78, 696 177, 187, 78, -1, -1, -3, 196, 72, -80, 222,
691 -78, -78, 220, -78, -78, 204, 73, 73, 210, -78, 697 -80, -80, -80, -80, 221, -80, -80, 205, -1, -1,
692 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 698 211, -80, -80, -80, -80, -80, -80, -80, -80, -80,
693 -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, 699 -80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
694 -78, -78, 205, -78, -78, -78, -78, -78, -4, 222, 700 -80, -80, -80, -80, 206, -80, -80, -80, -80, -80,
695 208, 222, 195, 222, 103, 2, 209, -78, -78, 222, 701 -3, 223, 209, 223, 197, 223, 72, 7, 210, -80,
696 211, 222, 199, -4, 212, -78, -78, 213, 214, 222, 702 -80, 223, 212, 223, 201, -3, 213, -80, -80, 214,
697 207, -78, -78, 215, -78, 216, -78, 111, -78, -78, 703 215, 223, 208, -80, -80, 216, -80, 217, -80, 113,
698 -78, 217, 73, -78, -78, -78, -78, -78 704 -80, -80, -80, 218, -1, -80, -80, -80, -80, -80
699}; 705};
700 706
701/* YYPGOTO[NTERM-NUM]. */ 707/* YYPGOTO[NTERM-NUM]. */
702static const yytype_int16 yypgoto[] = 708static const yytype_int16 yypgoto[] =
703{ 709{
704 -78, -78, -78, -78, 121, -35, -78, -78, -78, -78, 710 -80, -80, -80, -80, 122, -34, -80, -80, -80, -80,
705 219, -78, -78, -78, -78, -78, -78, -78, -44, -78, 711 220, -80, -80, -80, -80, -80, -80, -80, 59, -80,
706 -78, -78, -78, -78, -78, -78, -78, -78, -78, -6, 712 -80, -80, -80, -80, -80, -80, -80, -80, -80, 125,
707 -78, -78, -78, -78, -78, 183, 218, 21, 143, -5, 713 -80, -80, -80, -80, -80, 183, 219, 22, 142, -5,
708 146, 196, 69, -53, -77 714 147, 192, 69, -54, -79, -80
709}; 715};
710 716
711/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 717/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -715,62 +721,62 @@ static const yytype_int16 yypgoto[] =
715#define YYTABLE_NINF -82 721#define YYTABLE_NINF -82
716static const yytype_int16 yytable[] = 722static const yytype_int16 yytable[] =
717{ 723{
718 46, 47, 43, 49, 79, 80, 52, 134, 135, 6, 724 46, 47, 3, 49, 81, 82, 53, 136, 137, 6,
719 7, 8, 9, 10, 11, 12, 13, 84, 144, 14, 725 7, 8, 9, 10, 11, 12, 13, 43, 146, 14,
720 15, 55, 56, 85, 118, 57, 126, 160, 132, 133, 726 15, 86, 56, 57, 44, 45, 58, 87, 48, 134,
721 58, 110, 161, 3, 123, 24, 123, 48, -28, 88, 727 135, 59, 162, 112, 50, 24, 125, 163, 125, -28,
722 142, -28, -28, -28, -28, -28, -28, -28, -28, -28, 728 90, 144, -28, -28, -28, -28, -28, -28, -28, -28,
723 89, 53, -28, -28, 90, -28, 91, 92, 93, 94, 729 -28, 91, 54, -28, -28, 92, -28, 93, 94, 95,
724 95, 96, 120, 97, 128, 88, 50, 159, 98, -49, 730 96, 97, 98, 52, 99, 55, 90, 161, 62, 100,
725 -49, 51, -49, -49, -49, -49, 89, 54, -49, -49, 731 -49, -49, 63, -49, -49, -49, -49, 91, 64, -49,
726 90, 105, 106, 107, 108, 152, 139, 113, 61, 97, 732 -49, 92, 107, 108, 109, 110, 154, 73, 141, 115,
727 124, 62, 124, 131, 109, 63, 81, 82, 44, 45, 733 99, 75, 126, 76, 126, 111, 133, 56, 57, 83,
728 167, 149, -30, 88, 72, -30, -30, -30, -30, -30, 734 84, 169, 140, 151, -30, 90, 77, -30, -30, -30,
729 -30, -30, -30, -30, 89, 74, -30, -30, 90, -30, 735 -30, -30, -30, -30, -30, -30, 91, 78, -30, -30,
730 91, 92, 93, 94, 95, 96, 75, 97, 55, 56, 736 92, -30, 93, 94, 95, 96, 97, 98, 120, 99,
731 -2, 4, 98, 5, 6, 7, 8, 9, 10, 11, 737 128, 79, -2, 4, 100, 5, 6, 7, 8, 9,
732 12, 13, 81, 82, 14, 15, 16, 17, 18, 19, 738 10, 11, 12, 13, 83, 84, 14, 15, 16, 17,
733 20, 21, 22, 7, 8, 23, 10, 11, 12, 13, 739 18, 19, 20, 21, 22, 7, 8, 23, 10, 11,
734 24, 76, 14, 15, 77, -81, 88, 177, -81, -81, 740 12, 13, 24, 80, 14, 15, 88, -81, 90, 179,
735 -81, -81, -81, -81, -81, -81, -81, 78, 24, -81, 741 -81, -81, -81, -81, -81, -81, -81, -81, -81, 89,
736 -81, 90, -81, -81, -81, -81, -81, -81, 114, 117, 742 24, -81, -81, 92, -81, -81, -81, -81, -81, -81,
737 97, 125, 86, 88, 87, 122, -72, -72, -72, -72, 743 116, 119, 99, 127, 122, 90, 130, 124, -72, -72,
738 -72, -72, -72, -72, 130, 136, -72, -72, 90, 153, 744 -72, -72, -72, -72, -72, -72, 132, 138, -72, -72,
739 156, 157, 158, 116, 121, 137, 129, 97, 163, 143, 745 92, 155, 158, 159, 160, 118, 123, 139, 131, 99,
740 165, 138, 122, 72, 81, 82, 81, 82, 171, 166, 746 165, 145, 167, 148, 124, 73, 83, 84, 83, 84,
741 81, 82, 146, 147, 148, 151, 153, 82, 155, 162, 747 173, 168, 83, 84, 149, 150, 153, 155, 84, 157,
742 172, 164, 168, 169, 170, 174, 175, 176, 65, 112, 748 164, 174, 166, 170, 171, 172, 176, 177, 178, 66,
743 150, 0, 0, 0, 0, 83, 0, 0, 71 749 114, 152, 85, 0, 0, 0, 0, 0, 0, 72
744}; 750};
745 751
746static const yytype_int16 yycheck[] = 752static const yytype_int16 yycheck[] =
747{ 753{
748 5, 6, 30, 8, 57, 58, 11, 84, 85, 4, 754 5, 6, 0, 8, 58, 59, 11, 86, 87, 4,
749 5, 6, 7, 8, 9, 10, 11, 27, 95, 14, 755 5, 6, 7, 8, 9, 10, 11, 30, 97, 14,
750 15, 25, 26, 33, 68, 29, 70, 25, 81, 82, 756 15, 27, 25, 26, 25, 26, 29, 33, 30, 83,
751 34, 66, 30, 0, 69, 30, 71, 30, 0, 1, 757 84, 34, 25, 67, 25, 30, 70, 30, 72, 0,
752 93, 3, 4, 5, 6, 7, 8, 9, 10, 11, 758 1, 95, 3, 4, 5, 6, 7, 8, 9, 10,
753 12, 25, 14, 15, 16, 17, 18, 19, 20, 21, 759 11, 12, 25, 14, 15, 16, 17, 18, 19, 20,
754 22, 23, 68, 25, 70, 1, 30, 144, 30, 5, 760 21, 22, 23, 30, 25, 25, 1, 146, 30, 30,
755 6, 30, 8, 9, 10, 11, 12, 25, 14, 15, 761 5, 6, 1, 8, 9, 10, 11, 12, 1, 14,
756 16, 17, 18, 19, 20, 138, 91, 66, 30, 25, 762 15, 16, 17, 18, 19, 20, 140, 30, 93, 67,
757 69, 1, 71, 28, 30, 1, 31, 32, 25, 26, 763 25, 30, 70, 30, 72, 30, 28, 25, 26, 31,
758 153, 106, 0, 1, 30, 3, 4, 5, 6, 7, 764 32, 155, 24, 108, 0, 1, 30, 3, 4, 5,
759 8, 9, 10, 11, 12, 30, 14, 15, 16, 17, 765 6, 7, 8, 9, 10, 11, 12, 30, 14, 15,
760 18, 19, 20, 21, 22, 23, 30, 25, 25, 26, 766 16, 17, 18, 19, 20, 21, 22, 23, 69, 25,
761 0, 1, 30, 3, 4, 5, 6, 7, 8, 9, 767 71, 30, 0, 1, 30, 3, 4, 5, 6, 7,
762 10, 11, 31, 32, 14, 15, 16, 17, 18, 19, 768 8, 9, 10, 11, 31, 32, 14, 15, 16, 17,
763 20, 21, 22, 5, 6, 25, 8, 9, 10, 11, 769 18, 19, 20, 21, 22, 5, 6, 25, 8, 9,
764 30, 30, 14, 15, 30, 0, 1, 172, 3, 4, 770 10, 11, 30, 30, 14, 15, 30, 0, 1, 174,
765 5, 6, 7, 8, 9, 10, 11, 30, 30, 14, 771 3, 4, 5, 6, 7, 8, 9, 10, 11, 30,
766 15, 16, 17, 18, 19, 20, 21, 22, 67, 68, 772 30, 14, 15, 16, 17, 18, 19, 20, 21, 22,
767 25, 70, 30, 1, 30, 30, 4, 5, 6, 7, 773 68, 69, 25, 71, 69, 1, 71, 30, 4, 5,
768 8, 9, 10, 11, 30, 30, 14, 15, 16, 14, 774 6, 7, 8, 9, 10, 11, 30, 30, 14, 15,
769 141, 142, 143, 67, 68, 30, 70, 25, 149, 25, 775 16, 14, 143, 144, 145, 68, 69, 30, 71, 25,
770 151, 24, 30, 30, 31, 32, 31, 32, 159, 30, 776 151, 25, 153, 1, 30, 30, 31, 32, 31, 32,
771 31, 32, 1, 13, 30, 25, 14, 32, 30, 30, 777 161, 30, 31, 32, 13, 30, 25, 14, 32, 30,
772 33, 30, 30, 30, 30, 30, 30, 30, 29, 66, 778 30, 33, 30, 30, 30, 30, 30, 30, 30, 29,
773 107, -1, -1, -1, -1, 59, -1, -1, 40 779 67, 109, 60, -1, -1, -1, -1, -1, -1, 40
774}; 780};
775 781
776/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 782/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -782,19 +788,19 @@ static const yytype_uint8 yystos[] =
782 20, 21, 22, 25, 30, 38, 39, 41, 42, 43, 788 20, 21, 22, 25, 30, 38, 39, 41, 42, 43,
783 44, 50, 51, 53, 57, 59, 61, 62, 64, 66, 789 44, 50, 51, 53, 57, 59, 61, 62, 64, 66,
784 67, 68, 75, 30, 25, 26, 74, 74, 30, 74, 790 67, 68, 75, 30, 25, 26, 74, 74, 30, 74,
785 30, 30, 74, 25, 25, 25, 26, 29, 34, 78, 791 25, 80, 30, 74, 25, 25, 25, 26, 29, 34,
786 79, 30, 1, 1, 45, 45, 54, 56, 60, 71, 792 78, 79, 30, 1, 1, 45, 45, 54, 56, 60,
787 65, 71, 30, 76, 30, 30, 30, 30, 30, 78, 793 71, 65, 71, 30, 76, 30, 30, 30, 30, 30,
788 78, 31, 32, 76, 27, 33, 30, 30, 1, 12, 794 30, 78, 78, 31, 32, 76, 27, 33, 30, 30,
789 16, 18, 19, 20, 21, 22, 23, 25, 30, 40, 795 1, 12, 16, 18, 19, 20, 21, 22, 23, 25,
790 46, 47, 69, 70, 72, 17, 18, 19, 20, 30, 796 30, 40, 46, 47, 69, 70, 72, 17, 18, 19,
791 40, 55, 70, 72, 39, 52, 75, 39, 53, 58, 797 20, 30, 40, 55, 70, 72, 39, 52, 75, 39,
792 64, 75, 30, 40, 72, 39, 53, 63, 64, 75, 798 53, 58, 64, 75, 30, 40, 72, 39, 53, 63,
793 30, 28, 78, 78, 79, 79, 30, 30, 24, 74, 799 64, 75, 30, 28, 78, 78, 79, 79, 30, 30,
794 73, 74, 78, 25, 79, 48, 1, 13, 30, 74, 800 24, 74, 73, 74, 78, 25, 79, 48, 1, 13,
795 73, 25, 78, 14, 77, 30, 77, 77, 77, 79, 801 30, 74, 73, 25, 78, 14, 77, 30, 77, 77,
796 25, 30, 30, 77, 30, 77, 30, 78, 30, 30, 802 77, 79, 25, 30, 30, 77, 30, 77, 30, 78,
797 30, 77, 33, 49, 30, 30, 30, 74 803 30, 30, 30, 77, 33, 49, 30, 30, 30, 74
798}; 804};
799 805
800#define yyerrok (yyerrstatus = 0) 806#define yyerrok (yyerrstatus = 0)
@@ -1781,8 +1787,8 @@ yyreduce:
1781 case 48: 1787 case 48:
1782 1788
1783 { 1789 {
1784 struct symbol *sym = sym_lookup(NULL, 0); 1790 struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
1785 sym->flags |= SYMBOL_CHOICE; 1791 sym->flags |= SYMBOL_AUTO;
1786 menu_add_entry(sym); 1792 menu_add_entry(sym);
1787 menu_add_expr(P_CHOICE, NULL, NULL); 1793 menu_add_expr(P_CHOICE, NULL, NULL);
1788 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); 1794 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
@@ -2014,7 +2020,12 @@ yyreduce:
2014 2020
2015 case 108: 2021 case 108:
2016 2022
2017 { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 1); free((yyvsp[(1) - (1)].string)); ;} 2023 { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
2024 break;
2025
2026 case 109:
2027
2028 { (yyval.string) = NULL; ;}
2018 break; 2029 break;
2019 2030
2020 2031
diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
index d9b96ba8e38c..9710b82466f2 100644
--- a/scripts/kconfig/zconf.y
+++ b/scripts/kconfig/zconf.y
@@ -91,7 +91,7 @@ static struct menu *current_menu, *current_entry;
91%type <id> end 91%type <id> end
92%type <id> option_name 92%type <id> option_name
93%type <menu> if_entry menu_entry choice_entry 93%type <menu> if_entry menu_entry choice_entry
94%type <string> symbol_option_arg 94%type <string> symbol_option_arg word_opt
95 95
96%destructor { 96%destructor {
97 fprintf(stderr, "%s:%d: missing end statement for this entry\n", 97 fprintf(stderr, "%s:%d: missing end statement for this entry\n",
@@ -239,10 +239,10 @@ symbol_option_arg:
239 239
240/* choice entry */ 240/* choice entry */
241 241
242choice: T_CHOICE T_EOL 242choice: T_CHOICE word_opt T_EOL
243{ 243{
244 struct symbol *sym = sym_lookup(NULL, 0); 244 struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
245 sym->flags |= SYMBOL_CHOICE; 245 sym->flags |= SYMBOL_AUTO;
246 menu_add_entry(sym); 246 menu_add_entry(sym);
247 menu_add_expr(P_CHOICE, NULL, NULL); 247 menu_add_expr(P_CHOICE, NULL, NULL);
248 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); 248 printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
@@ -456,9 +456,12 @@ expr: symbol { $$ = expr_alloc_symbol($1); }
456; 456;
457 457
458symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); } 458symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
459 | T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); } 459 | T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
460; 460;
461 461
462word_opt: /* empty */ { $$ = NULL; }
463 | T_WORD
464
462%% 465%%
463 466
464void conf_parse(const char *name) 467void conf_parse(const char *name)