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>
This commit is contained in:
Родитель
4898117886
Коммит
5a1aa8a1af
|
@ -5,25 +5,6 @@
|
|||
|
||||
/* A lexical scanner generated by flex */
|
||||
|
||||
#define yy_create_buffer zconf_create_buffer
|
||||
#define yy_delete_buffer zconf_delete_buffer
|
||||
#define yy_flex_debug zconf_flex_debug
|
||||
#define yy_init_buffer zconf_init_buffer
|
||||
#define yy_flush_buffer zconf_flush_buffer
|
||||
#define yy_load_buffer_state zconf_load_buffer_state
|
||||
#define yy_switch_to_buffer zconf_switch_to_buffer
|
||||
#define yyin zconfin
|
||||
#define yyleng zconfleng
|
||||
#define yylex zconflex
|
||||
#define yylineno zconflineno
|
||||
#define yyout zconfout
|
||||
#define yyrestart zconfrestart
|
||||
#define yytext zconftext
|
||||
#define yywrap zconfwrap
|
||||
#define yyalloc zconfalloc
|
||||
#define yyrealloc zconfrealloc
|
||||
#define yyfree zconffree
|
||||
|
||||
#define FLEX_SCANNER
|
||||
#define YY_FLEX_MAJOR_VERSION 2
|
||||
#define YY_FLEX_MINOR_VERSION 5
|
||||
|
@ -354,7 +335,7 @@ void zconffree (void * );
|
|||
|
||||
/* Begin user sect3 */
|
||||
|
||||
#define zconfwrap(n) 1
|
||||
#define zconfwrap() 1
|
||||
#define YY_SKIP_YYWRAP
|
||||
|
||||
typedef unsigned char YY_CHAR;
|
||||
|
@ -1535,7 +1516,7 @@ static int yy_get_next_buffer (void)
|
|||
|
||||
/* Read in more data. */
|
||||
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
|
||||
(yy_n_chars), num_to_read );
|
||||
(yy_n_chars), (size_t) num_to_read );
|
||||
|
||||
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
|
||||
}
|
||||
|
@ -2007,7 +1988,7 @@ YY_BUFFER_STATE zconf_scan_buffer (char * base, yy_size_t size )
|
|||
|
||||
/** Setup the input buffer state to scan a string. The next call to zconflex() will
|
||||
* scan from a @e copy of @a str.
|
||||
* @param str a NUL-terminated string to scan
|
||||
* @param yystr a NUL-terminated string to scan
|
||||
*
|
||||
* @return the newly allocated buffer state object.
|
||||
* @note If you want to scan bytes that may contain NUL values, then use
|
||||
|
|
|
@ -21,7 +21,7 @@ P(menu_get_help,const char *,(struct menu *menu));
|
|||
/* symbol.c */
|
||||
P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
|
||||
|
||||
P(sym_lookup,struct symbol *,(const char *name, int isconst));
|
||||
P(sym_lookup,struct symbol *,(const char *name, int flags));
|
||||
P(sym_find,struct symbol *,(const char *name));
|
||||
P(sym_re_search,struct symbol **,(const char *pattern));
|
||||
P(sym_type_name,const char *,(enum symbol_type type));
|
||||
|
|
|
@ -235,18 +235,22 @@ void menu_finalize(struct menu *parent)
|
|||
sym = parent->sym;
|
||||
if (parent->list) {
|
||||
if (sym && sym_is_choice(sym)) {
|
||||
/* find the first choice value and find out choice type */
|
||||
for (menu = parent->list; menu; menu = menu->next) {
|
||||
if (menu->sym) {
|
||||
current_entry = parent;
|
||||
if (sym->type == S_UNKNOWN)
|
||||
if (sym->type == S_UNKNOWN) {
|
||||
/* find the first choice value to find out choice type */
|
||||
current_entry = parent;
|
||||
for (menu = parent->list; menu; menu = menu->next) {
|
||||
if (menu->sym && menu->sym->type != S_UNKNOWN) {
|
||||
menu_set_type(menu->sym->type);
|
||||
current_entry = menu;
|
||||
if (menu->sym->type == S_UNKNOWN)
|
||||
menu_set_type(sym->type);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* set the type of the remaining choice values */
|
||||
for (menu = parent->list; menu; menu = menu->next) {
|
||||
current_entry = menu;
|
||||
if (menu->sym && menu->sym->type == S_UNKNOWN)
|
||||
menu_set_type(sym->type);
|
||||
}
|
||||
parentdep = expr_alloc_symbol(sym);
|
||||
} else if (parent->prompt)
|
||||
parentdep = parent->prompt->visible.expr;
|
||||
|
@ -313,50 +317,36 @@ void menu_finalize(struct menu *parent)
|
|||
}
|
||||
}
|
||||
for (menu = parent->list; menu; menu = menu->next) {
|
||||
if (sym && sym_is_choice(sym) && menu->sym) {
|
||||
if (sym && sym_is_choice(sym) &&
|
||||
menu->sym && !sym_is_choice_value(menu->sym)) {
|
||||
current_entry = menu;
|
||||
menu->sym->flags |= SYMBOL_CHOICEVAL;
|
||||
if (!menu->prompt)
|
||||
menu_warn(menu, "choice value must have a prompt");
|
||||
for (prop = menu->sym->prop; prop; prop = prop->next) {
|
||||
if (prop->type == P_PROMPT && prop->menu != menu) {
|
||||
prop_warn(prop, "choice values "
|
||||
"currently only support a "
|
||||
"single prompt");
|
||||
}
|
||||
if (prop->type == P_DEFAULT)
|
||||
prop_warn(prop, "defaults for choice "
|
||||
"values not supported");
|
||||
"values not supported");
|
||||
if (prop->menu == menu)
|
||||
continue;
|
||||
if (prop->type == P_PROMPT &&
|
||||
prop->menu->parent->sym != sym)
|
||||
prop_warn(prop, "choice value used outside its choice group");
|
||||
}
|
||||
current_entry = menu;
|
||||
if (menu->sym->type == S_UNKNOWN)
|
||||
menu_set_type(sym->type);
|
||||
/* Non-tristate choice values of tristate choices must
|
||||
* depend on the choice being set to Y. The choice
|
||||
* values' dependencies were propagated to their
|
||||
* properties above, so the change here must be re-
|
||||
* propagated. */
|
||||
* propagated.
|
||||
*/
|
||||
if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
|
||||
basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
|
||||
basedep = expr_alloc_and(basedep, menu->dep);
|
||||
basedep = expr_eliminate_dups(basedep);
|
||||
menu->dep = basedep;
|
||||
menu->dep = expr_alloc_and(basedep, menu->dep);
|
||||
for (prop = menu->sym->prop; prop; prop = prop->next) {
|
||||
if (prop->menu != menu)
|
||||
continue;
|
||||
dep = expr_alloc_and(expr_copy(basedep),
|
||||
prop->visible.expr);
|
||||
dep = expr_eliminate_dups(dep);
|
||||
dep = expr_trans_bool(dep);
|
||||
prop->visible.expr = dep;
|
||||
if (prop->type == P_SELECT) {
|
||||
struct symbol *es = prop_get_symbol(prop);
|
||||
dep2 = expr_alloc_symbol(menu->sym);
|
||||
dep = expr_alloc_and(dep2,
|
||||
expr_copy(dep));
|
||||
dep = expr_alloc_or(es->rev_dep.expr, dep);
|
||||
dep = expr_eliminate_dups(dep);
|
||||
es->rev_dep.expr = dep;
|
||||
}
|
||||
prop->visible.expr = expr_alloc_and(expr_copy(basedep),
|
||||
prop->visible.expr);
|
||||
}
|
||||
}
|
||||
menu_add_symbol(P_CHOICE, sym, NULL);
|
||||
|
|
|
@ -40,7 +40,7 @@ void sym_add_default(struct symbol *sym, const char *def)
|
|||
{
|
||||
struct property *prop = prop_alloc(P_DEFAULT, sym);
|
||||
|
||||
prop->expr = expr_alloc_symbol(sym_lookup(def, 1));
|
||||
prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
|
||||
}
|
||||
|
||||
void sym_init(void)
|
||||
|
@ -350,9 +350,6 @@ void sym_calc_value(struct symbol *sym)
|
|||
;
|
||||
}
|
||||
|
||||
if (sym->flags & SYMBOL_AUTO)
|
||||
sym->flags &= ~SYMBOL_WRITE;
|
||||
|
||||
sym->curr = newval;
|
||||
if (sym_is_choice(sym) && newval.tri == yes)
|
||||
sym->curr.val = sym_calc_choice(sym);
|
||||
|
@ -377,6 +374,9 @@ void sym_calc_value(struct symbol *sym)
|
|||
sym_set_changed(choice_sym);
|
||||
}
|
||||
}
|
||||
|
||||
if (sym->flags & SYMBOL_AUTO)
|
||||
sym->flags &= ~SYMBOL_WRITE;
|
||||
}
|
||||
|
||||
void sym_clear_all_valid(void)
|
||||
|
@ -651,7 +651,7 @@ bool sym_is_changable(struct symbol *sym)
|
|||
return sym->visible > sym->rev_dep.tri;
|
||||
}
|
||||
|
||||
struct symbol *sym_lookup(const char *name, int isconst)
|
||||
struct symbol *sym_lookup(const char *name, int flags)
|
||||
{
|
||||
struct symbol *symbol;
|
||||
const char *ptr;
|
||||
|
@ -671,11 +671,10 @@ struct symbol *sym_lookup(const char *name, int isconst)
|
|||
hash &= 0xff;
|
||||
|
||||
for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
|
||||
if (!strcmp(symbol->name, name)) {
|
||||
if ((isconst && symbol->flags & SYMBOL_CONST) ||
|
||||
(!isconst && !(symbol->flags & SYMBOL_CONST)))
|
||||
return symbol;
|
||||
}
|
||||
if (!strcmp(symbol->name, name) &&
|
||||
(flags ? symbol->flags & flags
|
||||
: !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
|
||||
return symbol;
|
||||
}
|
||||
new_name = strdup(name);
|
||||
} else {
|
||||
|
@ -687,8 +686,7 @@ struct symbol *sym_lookup(const char *name, int isconst)
|
|||
memset(symbol, 0, sizeof(*symbol));
|
||||
symbol->name = new_name;
|
||||
symbol->type = S_UNKNOWN;
|
||||
if (isconst)
|
||||
symbol->flags |= SYMBOL_CONST;
|
||||
symbol->flags |= flags;
|
||||
|
||||
symbol->next = symbol_hash[hash];
|
||||
symbol_hash[hash] = symbol;
|
||||
|
@ -962,7 +960,7 @@ void prop_add_env(const char *env)
|
|||
}
|
||||
|
||||
prop = prop_alloc(P_ENV, sym);
|
||||
prop->expr = expr_alloc_symbol(sym_lookup(env, 1));
|
||||
prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
|
||||
|
||||
sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
|
||||
sym_env_list->right.sym = sym;
|
||||
|
|
|
@ -446,16 +446,16 @@ union yyalloc
|
|||
/* YYFINAL -- State number of the termination state. */
|
||||
#define YYFINAL 3
|
||||
/* YYLAST -- Last index in YYTABLE. */
|
||||
#define YYLAST 258
|
||||
#define YYLAST 259
|
||||
|
||||
/* YYNTOKENS -- Number of terminals. */
|
||||
#define YYNTOKENS 35
|
||||
/* YYNNTS -- Number of nonterminals. */
|
||||
#define YYNNTS 45
|
||||
#define YYNNTS 46
|
||||
/* YYNRULES -- Number of rules. */
|
||||
#define YYNRULES 108
|
||||
#define YYNRULES 110
|
||||
/* YYNRULES -- Number of states. */
|
||||
#define YYNSTATES 178
|
||||
#define YYNSTATES 180
|
||||
|
||||
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
|
||||
#define YYUNDEFTOK 2
|
||||
|
@ -507,13 +507,14 @@ static const yytype_uint16 yyprhs[] =
|
|||
28, 33, 37, 39, 41, 43, 45, 47, 49, 51,
|
||||
53, 55, 57, 59, 61, 63, 67, 70, 74, 77,
|
||||
81, 84, 85, 88, 91, 94, 97, 100, 103, 107,
|
||||
112, 117, 122, 128, 132, 133, 137, 138, 141, 144,
|
||||
147, 149, 153, 154, 157, 160, 163, 166, 169, 174,
|
||||
178, 181, 186, 187, 190, 194, 196, 200, 201, 204,
|
||||
207, 210, 214, 217, 219, 223, 224, 227, 230, 233,
|
||||
237, 241, 244, 247, 250, 251, 254, 257, 260, 265,
|
||||
266, 269, 271, 273, 276, 279, 282, 284, 287, 288,
|
||||
291, 293, 297, 301, 305, 308, 312, 316, 318
|
||||
112, 117, 122, 128, 132, 133, 137, 138, 141, 145,
|
||||
148, 150, 154, 155, 158, 161, 164, 167, 170, 175,
|
||||
179, 182, 187, 188, 191, 195, 197, 201, 202, 205,
|
||||
208, 211, 215, 218, 220, 224, 225, 228, 231, 234,
|
||||
238, 242, 245, 248, 251, 252, 255, 258, 261, 266,
|
||||
267, 270, 272, 274, 277, 280, 283, 285, 288, 289,
|
||||
292, 294, 298, 302, 306, 309, 313, 317, 319, 321,
|
||||
322
|
||||
};
|
||||
|
||||
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
|
||||
|
@ -533,24 +534,25 @@ static const yytype_int8 yyrhs[] =
|
|||
30, -1, 20, 78, 77, 30, -1, 21, 25, 77,
|
||||
30, -1, 22, 79, 79, 77, 30, -1, 23, 48,
|
||||
30, -1, -1, 48, 25, 49, -1, -1, 33, 74,
|
||||
-1, 7, 30, -1, 50, 54, -1, 75, -1, 51,
|
||||
56, 52, -1, -1, 54, 55, -1, 54, 72, -1,
|
||||
54, 70, -1, 54, 30, -1, 54, 40, -1, 18,
|
||||
74, 77, 30, -1, 19, 73, 30, -1, 17, 30,
|
||||
-1, 20, 25, 77, 30, -1, -1, 56, 39, -1,
|
||||
14, 78, 76, -1, 75, -1, 57, 60, 58, -1,
|
||||
-1, 60, 39, -1, 60, 64, -1, 60, 53, -1,
|
||||
4, 74, 30, -1, 61, 71, -1, 75, -1, 62,
|
||||
65, 63, -1, -1, 65, 39, -1, 65, 64, -1,
|
||||
65, 53, -1, 6, 74, 30, -1, 9, 74, 30,
|
||||
-1, 67, 71, -1, 12, 30, -1, 69, 13, -1,
|
||||
-1, 71, 72, -1, 71, 30, -1, 71, 40, -1,
|
||||
16, 24, 78, 30, -1, -1, 74, 77, -1, 25,
|
||||
-1, 26, -1, 5, 30, -1, 8, 30, -1, 15,
|
||||
30, -1, 30, -1, 76, 30, -1, -1, 14, 78,
|
||||
-1, 79, -1, 79, 33, 79, -1, 79, 27, 79,
|
||||
-1, 29, 78, 28, -1, 34, 78, -1, 78, 31,
|
||||
78, -1, 78, 32, 78, -1, 25, -1, 26, -1
|
||||
-1, 7, 80, 30, -1, 50, 54, -1, 75, -1,
|
||||
51, 56, 52, -1, -1, 54, 55, -1, 54, 72,
|
||||
-1, 54, 70, -1, 54, 30, -1, 54, 40, -1,
|
||||
18, 74, 77, 30, -1, 19, 73, 30, -1, 17,
|
||||
30, -1, 20, 25, 77, 30, -1, -1, 56, 39,
|
||||
-1, 14, 78, 76, -1, 75, -1, 57, 60, 58,
|
||||
-1, -1, 60, 39, -1, 60, 64, -1, 60, 53,
|
||||
-1, 4, 74, 30, -1, 61, 71, -1, 75, -1,
|
||||
62, 65, 63, -1, -1, 65, 39, -1, 65, 64,
|
||||
-1, 65, 53, -1, 6, 74, 30, -1, 9, 74,
|
||||
30, -1, 67, 71, -1, 12, 30, -1, 69, 13,
|
||||
-1, -1, 71, 72, -1, 71, 30, -1, 71, 40,
|
||||
-1, 16, 24, 78, 30, -1, -1, 74, 77, -1,
|
||||
25, -1, 26, -1, 5, 30, -1, 8, 30, -1,
|
||||
15, 30, -1, 30, -1, 76, 30, -1, -1, 14,
|
||||
78, -1, 79, -1, 79, 33, 79, -1, 79, 27,
|
||||
79, -1, 29, 78, 28, -1, 34, 78, -1, 78,
|
||||
31, 78, -1, 78, 32, 78, -1, 25, -1, 26,
|
||||
-1, -1, 25, -1
|
||||
};
|
||||
|
||||
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
||||
|
@ -566,7 +568,8 @@ static const yytype_uint16 yyrline[] =
|
|||
339, 344, 351, 356, 364, 367, 369, 370, 371, 374,
|
||||
382, 389, 396, 402, 409, 411, 412, 413, 416, 424,
|
||||
426, 431, 432, 435, 436, 437, 441, 442, 445, 446,
|
||||
449, 450, 451, 452, 453, 454, 455, 458, 459
|
||||
449, 450, 451, 452, 453, 454, 455, 458, 459, 462,
|
||||
463
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -590,7 +593,8 @@ static const char *const yytname[] =
|
|||
"if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
|
||||
"menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
|
||||
"comment_stmt", "help_start", "help", "depends_list", "depends",
|
||||
"prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", 0
|
||||
"prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol",
|
||||
"word_opt", 0
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -619,7 +623,8 @@ static const yytype_uint8 yyr1[] =
|
|||
60, 61, 62, 63, 64, 65, 65, 65, 65, 66,
|
||||
67, 68, 69, 70, 71, 71, 71, 71, 72, 73,
|
||||
73, 74, 74, 75, 75, 75, 76, 76, 77, 77,
|
||||
78, 78, 78, 78, 78, 78, 78, 79, 79
|
||||
78, 78, 78, 78, 78, 78, 78, 79, 79, 80,
|
||||
80
|
||||
};
|
||||
|
||||
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
|
||||
|
@ -629,13 +634,14 @@ static const yytype_uint8 yyr2[] =
|
|||
4, 3, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 3, 2, 3, 2, 3,
|
||||
2, 0, 2, 2, 2, 2, 2, 2, 3, 4,
|
||||
4, 4, 5, 3, 0, 3, 0, 2, 2, 2,
|
||||
4, 4, 5, 3, 0, 3, 0, 2, 3, 2,
|
||||
1, 3, 0, 2, 2, 2, 2, 2, 4, 3,
|
||||
2, 4, 0, 2, 3, 1, 3, 0, 2, 2,
|
||||
2, 3, 2, 1, 3, 0, 2, 2, 2, 3,
|
||||
3, 2, 2, 2, 0, 2, 2, 2, 4, 0,
|
||||
2, 1, 1, 2, 2, 2, 1, 2, 0, 2,
|
||||
1, 3, 3, 3, 2, 3, 3, 1, 1
|
||||
1, 3, 3, 3, 2, 3, 3, 1, 1, 0,
|
||||
1
|
||||
};
|
||||
|
||||
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
|
||||
|
@ -643,69 +649,69 @@ static const yytype_uint8 yyr2[] =
|
|||
means the default is an error. */
|
||||
static const yytype_uint8 yydefact[] =
|
||||
{
|
||||
3, 0, 0, 1, 0, 0, 0, 0, 0, 0,
|
||||
3, 0, 0, 1, 0, 0, 0, 0, 0, 109,
|
||||
0, 0, 0, 0, 0, 0, 12, 16, 13, 14,
|
||||
18, 15, 17, 0, 19, 0, 4, 31, 22, 31,
|
||||
23, 52, 62, 5, 67, 20, 84, 75, 6, 24,
|
||||
84, 21, 8, 11, 91, 92, 0, 0, 93, 0,
|
||||
48, 94, 0, 0, 0, 107, 108, 0, 0, 0,
|
||||
100, 95, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 96, 7, 71, 79, 80, 27, 29, 0,
|
||||
104, 0, 0, 64, 0, 0, 9, 10, 0, 0,
|
||||
0, 0, 89, 0, 0, 0, 44, 0, 37, 36,
|
||||
32, 33, 0, 35, 34, 0, 0, 89, 0, 56,
|
||||
57, 53, 55, 54, 63, 51, 50, 68, 70, 66,
|
||||
69, 65, 86, 87, 85, 76, 78, 74, 77, 73,
|
||||
97, 103, 105, 106, 102, 101, 26, 82, 0, 98,
|
||||
0, 98, 98, 98, 0, 0, 0, 83, 60, 98,
|
||||
0, 98, 0, 0, 0, 38, 90, 0, 0, 98,
|
||||
46, 43, 25, 0, 59, 0, 88, 99, 39, 40,
|
||||
41, 0, 0, 45, 58, 61, 42, 47
|
||||
110, 0, 94, 0, 0, 0, 107, 108, 0, 0,
|
||||
0, 100, 95, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 96, 7, 71, 79, 48, 80, 27,
|
||||
29, 0, 104, 0, 0, 64, 0, 0, 9, 10,
|
||||
0, 0, 0, 0, 89, 0, 0, 0, 44, 0,
|
||||
37, 36, 32, 33, 0, 35, 34, 0, 0, 89,
|
||||
0, 56, 57, 53, 55, 54, 63, 51, 50, 68,
|
||||
70, 66, 69, 65, 86, 87, 85, 76, 78, 74,
|
||||
77, 73, 97, 103, 105, 106, 102, 101, 26, 82,
|
||||
0, 98, 0, 98, 98, 98, 0, 0, 0, 83,
|
||||
60, 98, 0, 98, 0, 0, 0, 38, 90, 0,
|
||||
0, 98, 46, 43, 25, 0, 59, 0, 88, 99,
|
||||
39, 40, 41, 0, 0, 45, 58, 61, 42, 47
|
||||
};
|
||||
|
||||
/* YYDEFGOTO[NTERM-NUM]. */
|
||||
static const yytype_int16 yydefgoto[] =
|
||||
{
|
||||
-1, 1, 2, 25, 26, 99, 27, 28, 29, 30,
|
||||
64, 100, 101, 145, 173, 31, 32, 115, 33, 66,
|
||||
111, 67, 34, 119, 35, 68, 36, 37, 127, 38,
|
||||
70, 39, 40, 41, 102, 103, 69, 104, 140, 141,
|
||||
42, 73, 154, 59, 60
|
||||
-1, 1, 2, 25, 26, 101, 27, 28, 29, 30,
|
||||
65, 102, 103, 147, 175, 31, 32, 117, 33, 67,
|
||||
113, 68, 34, 121, 35, 69, 36, 37, 129, 38,
|
||||
71, 39, 40, 41, 104, 105, 70, 106, 142, 143,
|
||||
42, 74, 156, 60, 61, 51
|
||||
};
|
||||
|
||||
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
|
||||
STATE-NUM. */
|
||||
#define YYPACT_NINF -78
|
||||
#define YYPACT_NINF -80
|
||||
static const yytype_int16 yypact[] =
|
||||
{
|
||||
-78, 33, 130, -78, -28, 73, 73, 7, 73, 36,
|
||||
41, 73, 26, 52, -4, 58, -78, -78, -78, -78,
|
||||
-78, -78, -78, 90, -78, 94, -78, -78, -78, -78,
|
||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
|
||||
-78, -78, -78, -78, -78, -78, 74, 85, -78, 96,
|
||||
-78, -78, 131, 134, 147, -78, -78, -4, -4, 193,
|
||||
-10, -78, 162, 164, 38, 102, 64, 148, 5, 192,
|
||||
5, 165, -78, 174, -78, -78, -78, -78, -78, 65,
|
||||
-78, -4, -4, 174, 103, 103, -78, -78, 175, 185,
|
||||
197, 73, 73, -4, 194, 103, -78, 231, -78, -78,
|
||||
-78, -78, 220, -78, -78, 204, 73, 73, 210, -78,
|
||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
|
||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -78,
|
||||
-78, -78, 205, -78, -78, -78, -78, -78, -4, 222,
|
||||
208, 222, 195, 222, 103, 2, 209, -78, -78, 222,
|
||||
211, 222, 199, -4, 212, -78, -78, 213, 214, 222,
|
||||
207, -78, -78, 215, -78, 216, -78, 111, -78, -78,
|
||||
-78, 217, 73, -78, -78, -78, -78, -78
|
||||
-80, 2, 132, -80, -13, -1, -1, -2, -1, 9,
|
||||
33, -1, 27, 40, -3, 38, -80, -80, -80, -80,
|
||||
-80, -80, -80, 71, -80, 77, -80, -80, -80, -80,
|
||||
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
|
||||
-80, -80, -80, -80, -80, -80, 57, 61, -80, 63,
|
||||
-80, 76, -80, 87, 101, 133, -80, -80, -3, -3,
|
||||
195, -6, -80, 136, 149, 39, 104, 65, 150, 5,
|
||||
194, 5, 167, -80, 176, -80, -80, -80, -80, -80,
|
||||
-80, 68, -80, -3, -3, 176, 72, 72, -80, -80,
|
||||
177, 187, 78, -1, -1, -3, 196, 72, -80, 222,
|
||||
-80, -80, -80, -80, 221, -80, -80, 205, -1, -1,
|
||||
211, -80, -80, -80, -80, -80, -80, -80, -80, -80,
|
||||
-80, -80, -80, -80, -80, -80, -80, -80, -80, -80,
|
||||
-80, -80, -80, -80, 206, -80, -80, -80, -80, -80,
|
||||
-3, 223, 209, 223, 197, 223, 72, 7, 210, -80,
|
||||
-80, 223, 212, 223, 201, -3, 213, -80, -80, 214,
|
||||
215, 223, 208, -80, -80, 216, -80, 217, -80, 113,
|
||||
-80, -80, -80, 218, -1, -80, -80, -80, -80, -80
|
||||
};
|
||||
|
||||
/* YYPGOTO[NTERM-NUM]. */
|
||||
static const yytype_int16 yypgoto[] =
|
||||
{
|
||||
-78, -78, -78, -78, 121, -35, -78, -78, -78, -78,
|
||||
219, -78, -78, -78, -78, -78, -78, -78, -44, -78,
|
||||
-78, -78, -78, -78, -78, -78, -78, -78, -78, -6,
|
||||
-78, -78, -78, -78, -78, 183, 218, 21, 143, -5,
|
||||
146, 196, 69, -53, -77
|
||||
-80, -80, -80, -80, 122, -34, -80, -80, -80, -80,
|
||||
220, -80, -80, -80, -80, -80, -80, -80, 59, -80,
|
||||
-80, -80, -80, -80, -80, -80, -80, -80, -80, 125,
|
||||
-80, -80, -80, -80, -80, 183, 219, 22, 142, -5,
|
||||
147, 192, 69, -54, -79, -80
|
||||
};
|
||||
|
||||
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
|
||||
|
@ -715,62 +721,62 @@ static const yytype_int16 yypgoto[] =
|
|||
#define YYTABLE_NINF -82
|
||||
static const yytype_int16 yytable[] =
|
||||
{
|
||||
46, 47, 43, 49, 79, 80, 52, 134, 135, 6,
|
||||
7, 8, 9, 10, 11, 12, 13, 84, 144, 14,
|
||||
15, 55, 56, 85, 118, 57, 126, 160, 132, 133,
|
||||
58, 110, 161, 3, 123, 24, 123, 48, -28, 88,
|
||||
142, -28, -28, -28, -28, -28, -28, -28, -28, -28,
|
||||
89, 53, -28, -28, 90, -28, 91, 92, 93, 94,
|
||||
95, 96, 120, 97, 128, 88, 50, 159, 98, -49,
|
||||
-49, 51, -49, -49, -49, -49, 89, 54, -49, -49,
|
||||
90, 105, 106, 107, 108, 152, 139, 113, 61, 97,
|
||||
124, 62, 124, 131, 109, 63, 81, 82, 44, 45,
|
||||
167, 149, -30, 88, 72, -30, -30, -30, -30, -30,
|
||||
-30, -30, -30, -30, 89, 74, -30, -30, 90, -30,
|
||||
91, 92, 93, 94, 95, 96, 75, 97, 55, 56,
|
||||
-2, 4, 98, 5, 6, 7, 8, 9, 10, 11,
|
||||
12, 13, 81, 82, 14, 15, 16, 17, 18, 19,
|
||||
20, 21, 22, 7, 8, 23, 10, 11, 12, 13,
|
||||
24, 76, 14, 15, 77, -81, 88, 177, -81, -81,
|
||||
-81, -81, -81, -81, -81, -81, -81, 78, 24, -81,
|
||||
-81, 90, -81, -81, -81, -81, -81, -81, 114, 117,
|
||||
97, 125, 86, 88, 87, 122, -72, -72, -72, -72,
|
||||
-72, -72, -72, -72, 130, 136, -72, -72, 90, 153,
|
||||
156, 157, 158, 116, 121, 137, 129, 97, 163, 143,
|
||||
165, 138, 122, 72, 81, 82, 81, 82, 171, 166,
|
||||
81, 82, 146, 147, 148, 151, 153, 82, 155, 162,
|
||||
172, 164, 168, 169, 170, 174, 175, 176, 65, 112,
|
||||
150, 0, 0, 0, 0, 83, 0, 0, 71
|
||||
46, 47, 3, 49, 81, 82, 53, 136, 137, 6,
|
||||
7, 8, 9, 10, 11, 12, 13, 43, 146, 14,
|
||||
15, 86, 56, 57, 44, 45, 58, 87, 48, 134,
|
||||
135, 59, 162, 112, 50, 24, 125, 163, 125, -28,
|
||||
90, 144, -28, -28, -28, -28, -28, -28, -28, -28,
|
||||
-28, 91, 54, -28, -28, 92, -28, 93, 94, 95,
|
||||
96, 97, 98, 52, 99, 55, 90, 161, 62, 100,
|
||||
-49, -49, 63, -49, -49, -49, -49, 91, 64, -49,
|
||||
-49, 92, 107, 108, 109, 110, 154, 73, 141, 115,
|
||||
99, 75, 126, 76, 126, 111, 133, 56, 57, 83,
|
||||
84, 169, 140, 151, -30, 90, 77, -30, -30, -30,
|
||||
-30, -30, -30, -30, -30, -30, 91, 78, -30, -30,
|
||||
92, -30, 93, 94, 95, 96, 97, 98, 120, 99,
|
||||
128, 79, -2, 4, 100, 5, 6, 7, 8, 9,
|
||||
10, 11, 12, 13, 83, 84, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 7, 8, 23, 10, 11,
|
||||
12, 13, 24, 80, 14, 15, 88, -81, 90, 179,
|
||||
-81, -81, -81, -81, -81, -81, -81, -81, -81, 89,
|
||||
24, -81, -81, 92, -81, -81, -81, -81, -81, -81,
|
||||
116, 119, 99, 127, 122, 90, 130, 124, -72, -72,
|
||||
-72, -72, -72, -72, -72, -72, 132, 138, -72, -72,
|
||||
92, 155, 158, 159, 160, 118, 123, 139, 131, 99,
|
||||
165, 145, 167, 148, 124, 73, 83, 84, 83, 84,
|
||||
173, 168, 83, 84, 149, 150, 153, 155, 84, 157,
|
||||
164, 174, 166, 170, 171, 172, 176, 177, 178, 66,
|
||||
114, 152, 85, 0, 0, 0, 0, 0, 0, 72
|
||||
};
|
||||
|
||||
static const yytype_int16 yycheck[] =
|
||||
{
|
||||
5, 6, 30, 8, 57, 58, 11, 84, 85, 4,
|
||||
5, 6, 7, 8, 9, 10, 11, 27, 95, 14,
|
||||
15, 25, 26, 33, 68, 29, 70, 25, 81, 82,
|
||||
34, 66, 30, 0, 69, 30, 71, 30, 0, 1,
|
||||
93, 3, 4, 5, 6, 7, 8, 9, 10, 11,
|
||||
12, 25, 14, 15, 16, 17, 18, 19, 20, 21,
|
||||
22, 23, 68, 25, 70, 1, 30, 144, 30, 5,
|
||||
6, 30, 8, 9, 10, 11, 12, 25, 14, 15,
|
||||
16, 17, 18, 19, 20, 138, 91, 66, 30, 25,
|
||||
69, 1, 71, 28, 30, 1, 31, 32, 25, 26,
|
||||
153, 106, 0, 1, 30, 3, 4, 5, 6, 7,
|
||||
8, 9, 10, 11, 12, 30, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 23, 30, 25, 25, 26,
|
||||
0, 1, 30, 3, 4, 5, 6, 7, 8, 9,
|
||||
10, 11, 31, 32, 14, 15, 16, 17, 18, 19,
|
||||
20, 21, 22, 5, 6, 25, 8, 9, 10, 11,
|
||||
30, 30, 14, 15, 30, 0, 1, 172, 3, 4,
|
||||
5, 6, 7, 8, 9, 10, 11, 30, 30, 14,
|
||||
15, 16, 17, 18, 19, 20, 21, 22, 67, 68,
|
||||
25, 70, 30, 1, 30, 30, 4, 5, 6, 7,
|
||||
8, 9, 10, 11, 30, 30, 14, 15, 16, 14,
|
||||
141, 142, 143, 67, 68, 30, 70, 25, 149, 25,
|
||||
151, 24, 30, 30, 31, 32, 31, 32, 159, 30,
|
||||
31, 32, 1, 13, 30, 25, 14, 32, 30, 30,
|
||||
33, 30, 30, 30, 30, 30, 30, 30, 29, 66,
|
||||
107, -1, -1, -1, -1, 59, -1, -1, 40
|
||||
5, 6, 0, 8, 58, 59, 11, 86, 87, 4,
|
||||
5, 6, 7, 8, 9, 10, 11, 30, 97, 14,
|
||||
15, 27, 25, 26, 25, 26, 29, 33, 30, 83,
|
||||
84, 34, 25, 67, 25, 30, 70, 30, 72, 0,
|
||||
1, 95, 3, 4, 5, 6, 7, 8, 9, 10,
|
||||
11, 12, 25, 14, 15, 16, 17, 18, 19, 20,
|
||||
21, 22, 23, 30, 25, 25, 1, 146, 30, 30,
|
||||
5, 6, 1, 8, 9, 10, 11, 12, 1, 14,
|
||||
15, 16, 17, 18, 19, 20, 140, 30, 93, 67,
|
||||
25, 30, 70, 30, 72, 30, 28, 25, 26, 31,
|
||||
32, 155, 24, 108, 0, 1, 30, 3, 4, 5,
|
||||
6, 7, 8, 9, 10, 11, 12, 30, 14, 15,
|
||||
16, 17, 18, 19, 20, 21, 22, 23, 69, 25,
|
||||
71, 30, 0, 1, 30, 3, 4, 5, 6, 7,
|
||||
8, 9, 10, 11, 31, 32, 14, 15, 16, 17,
|
||||
18, 19, 20, 21, 22, 5, 6, 25, 8, 9,
|
||||
10, 11, 30, 30, 14, 15, 30, 0, 1, 174,
|
||||
3, 4, 5, 6, 7, 8, 9, 10, 11, 30,
|
||||
30, 14, 15, 16, 17, 18, 19, 20, 21, 22,
|
||||
68, 69, 25, 71, 69, 1, 71, 30, 4, 5,
|
||||
6, 7, 8, 9, 10, 11, 30, 30, 14, 15,
|
||||
16, 14, 143, 144, 145, 68, 69, 30, 71, 25,
|
||||
151, 25, 153, 1, 30, 30, 31, 32, 31, 32,
|
||||
161, 30, 31, 32, 13, 30, 25, 14, 32, 30,
|
||||
30, 33, 30, 30, 30, 30, 30, 30, 30, 29,
|
||||
67, 109, 60, -1, -1, -1, -1, -1, -1, 40
|
||||
};
|
||||
|
||||
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
|
||||
|
@ -782,19 +788,19 @@ static const yytype_uint8 yystos[] =
|
|||
20, 21, 22, 25, 30, 38, 39, 41, 42, 43,
|
||||
44, 50, 51, 53, 57, 59, 61, 62, 64, 66,
|
||||
67, 68, 75, 30, 25, 26, 74, 74, 30, 74,
|
||||
30, 30, 74, 25, 25, 25, 26, 29, 34, 78,
|
||||
79, 30, 1, 1, 45, 45, 54, 56, 60, 71,
|
||||
65, 71, 30, 76, 30, 30, 30, 30, 30, 78,
|
||||
78, 31, 32, 76, 27, 33, 30, 30, 1, 12,
|
||||
16, 18, 19, 20, 21, 22, 23, 25, 30, 40,
|
||||
46, 47, 69, 70, 72, 17, 18, 19, 20, 30,
|
||||
40, 55, 70, 72, 39, 52, 75, 39, 53, 58,
|
||||
64, 75, 30, 40, 72, 39, 53, 63, 64, 75,
|
||||
30, 28, 78, 78, 79, 79, 30, 30, 24, 74,
|
||||
73, 74, 78, 25, 79, 48, 1, 13, 30, 74,
|
||||
73, 25, 78, 14, 77, 30, 77, 77, 77, 79,
|
||||
25, 30, 30, 77, 30, 77, 30, 78, 30, 30,
|
||||
30, 77, 33, 49, 30, 30, 30, 74
|
||||
25, 80, 30, 74, 25, 25, 25, 26, 29, 34,
|
||||
78, 79, 30, 1, 1, 45, 45, 54, 56, 60,
|
||||
71, 65, 71, 30, 76, 30, 30, 30, 30, 30,
|
||||
30, 78, 78, 31, 32, 76, 27, 33, 30, 30,
|
||||
1, 12, 16, 18, 19, 20, 21, 22, 23, 25,
|
||||
30, 40, 46, 47, 69, 70, 72, 17, 18, 19,
|
||||
20, 30, 40, 55, 70, 72, 39, 52, 75, 39,
|
||||
53, 58, 64, 75, 30, 40, 72, 39, 53, 63,
|
||||
64, 75, 30, 28, 78, 78, 79, 79, 30, 30,
|
||||
24, 74, 73, 74, 78, 25, 79, 48, 1, 13,
|
||||
30, 74, 73, 25, 78, 14, 77, 30, 77, 77,
|
||||
77, 79, 25, 30, 30, 77, 30, 77, 30, 78,
|
||||
30, 30, 30, 77, 33, 49, 30, 30, 30, 74
|
||||
};
|
||||
|
||||
#define yyerrok (yyerrstatus = 0)
|
||||
|
@ -1781,8 +1787,8 @@ yyreduce:
|
|||
case 48:
|
||||
|
||||
{
|
||||
struct symbol *sym = sym_lookup(NULL, 0);
|
||||
sym->flags |= SYMBOL_CHOICE;
|
||||
struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
|
||||
sym->flags |= SYMBOL_AUTO;
|
||||
menu_add_entry(sym);
|
||||
menu_add_expr(P_CHOICE, NULL, NULL);
|
||||
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
|
||||
|
@ -2014,7 +2020,12 @@ yyreduce:
|
|||
|
||||
case 108:
|
||||
|
||||
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 1); free((yyvsp[(1) - (1)].string)); ;}
|
||||
{ (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
|
||||
break;
|
||||
|
||||
case 109:
|
||||
|
||||
{ (yyval.string) = NULL; ;}
|
||||
break;
|
||||
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ static struct menu *current_menu, *current_entry;
|
|||
%type <id> end
|
||||
%type <id> option_name
|
||||
%type <menu> if_entry menu_entry choice_entry
|
||||
%type <string> symbol_option_arg
|
||||
%type <string> symbol_option_arg word_opt
|
||||
|
||||
%destructor {
|
||||
fprintf(stderr, "%s:%d: missing end statement for this entry\n",
|
||||
|
@ -239,10 +239,10 @@ symbol_option_arg:
|
|||
|
||||
/* choice entry */
|
||||
|
||||
choice: T_CHOICE T_EOL
|
||||
choice: T_CHOICE word_opt T_EOL
|
||||
{
|
||||
struct symbol *sym = sym_lookup(NULL, 0);
|
||||
sym->flags |= SYMBOL_CHOICE;
|
||||
struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
|
||||
sym->flags |= SYMBOL_AUTO;
|
||||
menu_add_entry(sym);
|
||||
menu_add_expr(P_CHOICE, NULL, NULL);
|
||||
printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
|
||||
|
@ -456,9 +456,12 @@ expr: symbol { $$ = expr_alloc_symbol($1); }
|
|||
;
|
||||
|
||||
symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }
|
||||
| T_WORD_QUOTE { $$ = sym_lookup($1, 1); free($1); }
|
||||
| T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
|
||||
;
|
||||
|
||||
word_opt: /* empty */ { $$ = NULL; }
|
||||
| T_WORD
|
||||
|
||||
%%
|
||||
|
||||
void conf_parse(const char *name)
|
||||
|
|
Загрузка…
Ссылка в новой задаче