mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-18 22:14:16 +00:00 
			
		
		
		
	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:
		
							parent
							
								
									4898117886
								
							
						
					
					
						commit
						5a1aa8a1af
					
				
					 6 changed files with 206 additions and 223 deletions
				
			
		|  | @ -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) | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Roman Zippel
						Roman Zippel