Lines Matching +full:tri +full:- +full:state
2 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
42 prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST)); in sym_add_default()
58 sym->type = S_STRING; in sym_init()
59 sym->flags |= SYMBOL_AUTO; in sym_init()
65 enum symbol_type type = sym->type; in sym_get_type()
68 if (sym_is_choice_value(sym) && sym->visible == yes) in sym_get_type()
120 prop->visible.tri = expr_calc_value(prop->visible.expr); in sym_get_default_prop()
121 if (prop->visible.tri != no) in sym_get_default_prop()
132 prop->visible.tri = expr_calc_value(prop->visible.expr); in sym_get_range_prop()
133 if (prop->visible.tri != no) in sym_get_range_prop()
142 switch (sym->type) { in sym_get_range_val()
152 return strtoll(sym->curr.val, NULL, base); in sym_get_range_val()
162 switch (sym->type) { in sym_validate_range()
175 val = strtoll(sym->curr.val, NULL, base); in sym_validate_range()
176 val2 = sym_get_range_val(prop->expr->left.sym, base); in sym_validate_range()
178 val2 = sym_get_range_val(prop->expr->right.sym, base); in sym_validate_range()
182 if (sym->type == S_INT) in sym_validate_range()
186 sym->curr.val = xstrdup(str); in sym_validate_range()
193 sym->flags |= SYMBOL_CHANGED; in sym_set_changed()
194 for (prop = sym->prop; prop; prop = prop->next) { in sym_set_changed()
195 if (prop->menu) in sym_set_changed()
196 prop->menu->flags |= MENU_CHANGED; in sym_set_changed()
213 tristate tri; in sym_calc_visibility() local
216 tri = no; in sym_calc_visibility()
222 prop->visible.tri = expr_calc_value(prop->visible.expr); in sym_calc_visibility()
228 if (choice_sym && sym->type == S_TRISTATE && in sym_calc_visibility()
229 prop->visible.tri == mod && choice_sym->curr.tri == yes) in sym_calc_visibility()
230 prop->visible.tri = no; in sym_calc_visibility()
232 tri = EXPR_OR(tri, prop->visible.tri); in sym_calc_visibility()
234 if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) in sym_calc_visibility()
235 tri = yes; in sym_calc_visibility()
236 if (sym->visible != tri) { in sym_calc_visibility()
237 sym->visible = tri; in sym_calc_visibility()
243 tri = yes; in sym_calc_visibility()
244 if (sym->dir_dep.expr) in sym_calc_visibility()
245 tri = expr_calc_value(sym->dir_dep.expr); in sym_calc_visibility()
246 if (tri == mod && sym_get_type(sym) == S_BOOLEAN) in sym_calc_visibility()
247 tri = yes; in sym_calc_visibility()
248 if (sym->dir_dep.tri != tri) { in sym_calc_visibility()
249 sym->dir_dep.tri = tri; in sym_calc_visibility()
252 tri = no; in sym_calc_visibility()
253 if (sym->rev_dep.expr) in sym_calc_visibility()
254 tri = expr_calc_value(sym->rev_dep.expr); in sym_calc_visibility()
255 if (tri == mod && sym_get_type(sym) == S_BOOLEAN) in sym_calc_visibility()
256 tri = yes; in sym_calc_visibility()
257 if (sym->rev_dep.tri != tri) { in sym_calc_visibility()
258 sym->rev_dep.tri = tri; in sym_calc_visibility()
261 tri = no; in sym_calc_visibility()
262 if (sym->implied.expr && sym->dir_dep.tri != no) in sym_calc_visibility()
263 tri = expr_calc_value(sym->implied.expr); in sym_calc_visibility()
264 if (tri == mod && sym_get_type(sym) == S_BOOLEAN) in sym_calc_visibility()
265 tri = yes; in sym_calc_visibility()
266 if (sym->implied.tri != tri) { in sym_calc_visibility()
267 sym->implied.tri = tri; in sym_calc_visibility()
286 prop->visible.tri = expr_calc_value(prop->visible.expr); in sym_choice_default()
287 if (prop->visible.tri == no) in sym_choice_default()
290 if (def_sym->visible != no) in sym_choice_default()
296 expr_list_for_each_sym(prop->expr, e, def_sym) in sym_choice_default()
297 if (def_sym->visible != no) in sym_choice_default()
312 flags = sym->flags; in sym_calc_choice()
314 expr_list_for_each_sym(prop->expr, e, def_sym) { in sym_calc_choice()
316 if (def_sym->visible != no) in sym_calc_choice()
317 flags &= def_sym->flags; in sym_calc_choice()
320 sym->flags &= flags | ~SYMBOL_DEF_USER; in sym_calc_choice()
323 def_sym = sym->def[S_DEF_USER].val; in sym_calc_choice()
324 if (def_sym && def_sym->visible != no) in sym_calc_choice()
331 sym->curr.tri = no; in sym_calc_choice()
342 sym->name); in sym_warn_unmet_dep()
345 sym->dir_dep.tri == mod ? 'm' : 'n'); in sym_warn_unmet_dep()
346 expr_gstr_print(sym->dir_dep.expr, &gs); in sym_warn_unmet_dep()
349 expr_gstr_print_revdep(sym->rev_dep.expr, &gs, yes, in sym_warn_unmet_dep()
351 expr_gstr_print_revdep(sym->rev_dep.expr, &gs, mod, in sym_warn_unmet_dep()
366 if (sym->flags & SYMBOL_VALID) in sym_calc_value()
370 sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) { in sym_calc_value()
371 sym->flags &= ~SYMBOL_NEED_SET_CHOICE_VALUES; in sym_calc_value()
376 sym->flags |= SYMBOL_VALID; in sym_calc_value()
378 oldval = sym->curr; in sym_calc_value()
380 switch (sym->type) { in sym_calc_value()
391 sym->curr.val = sym->name; in sym_calc_value()
392 sym->curr.tri = no; in sym_calc_value()
395 sym->flags &= ~SYMBOL_WRITE; in sym_calc_value()
399 if (sym->visible != no) in sym_calc_value()
400 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
403 sym->curr = newval; in sym_calc_value()
408 if (sym_is_choice_value(sym) && sym->visible == yes) { in sym_calc_value()
410 newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no; in sym_calc_value()
412 if (sym->visible != no) { in sym_calc_value()
417 newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri, in sym_calc_value()
418 sym->visible); in sym_calc_value()
422 if (sym->rev_dep.tri != no) in sym_calc_value()
423 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
427 newval.tri = EXPR_AND(expr_calc_value(prop->expr), in sym_calc_value()
428 prop->visible.tri); in sym_calc_value()
429 if (newval.tri != no) in sym_calc_value()
430 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
432 if (sym->implied.tri != no) { in sym_calc_value()
433 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
434 newval.tri = EXPR_OR(newval.tri, sym->implied.tri); in sym_calc_value()
438 if (sym->dir_dep.tri < sym->rev_dep.tri) in sym_calc_value()
440 newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri); in sym_calc_value()
442 if (newval.tri == mod && in sym_calc_value()
443 (sym_get_type(sym) == S_BOOLEAN || sym->implied.tri == yes)) in sym_calc_value()
444 newval.tri = yes; in sym_calc_value()
449 if (sym->visible != no && sym_has_value(sym)) { in sym_calc_value()
450 newval.val = sym->def[S_DEF_USER].val; in sym_calc_value()
457 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
459 newval.val = ds->curr.val; in sym_calc_value()
467 sym->curr = newval; in sym_calc_value()
468 if (sym_is_choice(sym) && newval.tri == yes) in sym_calc_value()
469 sym->curr.val = sym_calc_choice(sym); in sym_calc_value()
472 if (memcmp(&oldval, &sym->curr, sizeof(oldval))) { in sym_calc_value()
476 modules_val = modules_sym->curr.tri; in sym_calc_value()
484 expr_list_for_each_sym(prop->expr, e, choice_sym) { in sym_calc_value()
485 if ((sym->flags & SYMBOL_WRITE) && in sym_calc_value()
486 choice_sym->visible != no) in sym_calc_value()
487 choice_sym->flags |= SYMBOL_WRITE; in sym_calc_value()
488 if (sym->flags & SYMBOL_CHANGED) in sym_calc_value()
493 if (sym->flags & SYMBOL_AUTO) in sym_calc_value()
494 sym->flags &= ~SYMBOL_WRITE; in sym_calc_value()
496 if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) in sym_calc_value()
506 sym->flags &= ~SYMBOL_VALID; in sym_clear_all_valid()
515 if (sym->visible == no) in sym_tristate_within_range()
523 if (sym->visible <= sym->rev_dep.tri) in sym_tristate_within_range()
525 if (sym->implied.tri == yes && val == mod) in sym_tristate_within_range()
527 if (sym_is_choice_value(sym) && sym->visible == yes) in sym_tristate_within_range()
529 return val >= sym->rev_dep.tri && val <= sym->visible; in sym_tristate_within_range()
539 if (!(sym->flags & SYMBOL_DEF_USER)) { in sym_set_tristate_value()
540 sym->flags |= SYMBOL_DEF_USER; in sym_set_tristate_value()
552 cs->def[S_DEF_USER].val = sym; in sym_set_tristate_value()
553 cs->flags |= SYMBOL_DEF_USER; in sym_set_tristate_value()
555 for (e = prop->expr; e; e = e->left.expr) { in sym_set_tristate_value()
556 if (e->right.sym->visible != no) in sym_set_tristate_value()
557 e->right.sym->flags |= SYMBOL_DEF_USER; in sym_set_tristate_value()
561 sym->def[S_DEF_USER].tri = val; in sym_set_tristate_value()
595 switch (sym->type) { in sym_string_valid()
600 if (ch == '-') in sym_string_valid()
639 switch (sym->type) { in sym_string_within_range()
649 return val >= sym_get_range_val(prop->expr->left.sym, 10) && in sym_string_within_range()
650 val <= sym_get_range_val(prop->expr->right.sym, 10); in sym_string_within_range()
658 return val >= sym_get_range_val(prop->expr->left.sym, 16) && in sym_string_within_range()
659 val <= sym_get_range_val(prop->expr->right.sym, 16); in sym_string_within_range()
682 switch (sym->type) { in sym_set_string_value()
701 if (!(sym->flags & SYMBOL_DEF_USER)) { in sym_set_string_value()
702 sym->flags |= SYMBOL_DEF_USER; in sym_set_string_value()
706 oldval = sym->def[S_DEF_USER].val; in sym_set_string_value()
708 if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) { in sym_set_string_value()
710 sym->def[S_DEF_USER].val = val = xmalloc(size); in sym_set_string_value()
714 sym->def[S_DEF_USER].val = val = xmalloc(size); in sym_set_string_value()
741 val = symbol_no.curr.tri; in sym_get_string_default()
747 switch (sym->type) { in sym_get_string_default()
751 val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri); in sym_get_string_default()
762 str = (const char *)ds->curr.val; in sym_get_string_default()
768 val = EXPR_OR(val, sym->rev_dep.tri); in sym_get_string_default()
772 if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no) in sym_get_string_default()
776 if (sym->type == S_BOOLEAN && val == mod) in sym_get_string_default()
780 if (val < sym->implied.tri) in sym_get_string_default()
781 val = sym->implied.tri; in sym_get_string_default()
783 switch (sym->type) { in sym_get_string_default()
807 switch (sym->type) { in sym_get_string_value()
816 return (modules_sym->curr.tri == no) ? "n" : "m"; in sym_get_string_value()
824 return (const char *)sym->curr.val; in sym_get_string_value()
829 return sym->visible > sym->rev_dep.tri; in sym_is_changable()
857 for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { in sym_lookup()
858 if (symbol->name && in sym_lookup()
859 !strcmp(symbol->name, name) && in sym_lookup()
860 (flags ? symbol->flags & flags in sym_lookup()
861 : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE)))) in sym_lookup()
872 symbol->name = new_name; in sym_lookup()
873 symbol->type = S_UNKNOWN; in sym_lookup()
874 symbol->flags |= flags; in sym_lookup()
876 symbol->next = symbol_hash[hash]; in sym_lookup()
899 for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { in sym_find()
900 if (symbol->name && in sym_find()
901 !strcmp(symbol->name, name) && in sym_find()
902 !(symbol->flags & SYMBOL_CONST)) in sym_find()
934 strncat(res, in, src - in); in sym_expand_string_value()
1011 * - first, symbols that match exactly
1012 * - then, alphabetical sort
1021 * - if matched length on symbol s1 is the length of that symbol, in sym_rel_comp()
1023 * - if matched length on symbol s2 is the length of that symbol, in sym_rel_comp()
1029 exact1 = (s1->eo - s1->so) == strlen(s1->sym->name); in sym_rel_comp()
1030 exact2 = (s2->eo - s2->so) == strlen(s2->sym->name); in sym_rel_comp()
1032 return -1; in sym_rel_comp()
1037 return strcmp(s1->sym->name, s2->sym->name); in sym_rel_comp()
1056 if (sym->flags & SYMBOL_CONST || !sym->name) in sym_re_search()
1058 if (regexec(&re, sym->name, 1, match, 0)) in sym_re_search()
1095 * current state so we can print out relevant info to user.
1110 check_top->next = stack; in dep_stack_insert()
1111 stack->prev = check_top; in dep_stack_insert()
1112 stack->sym = sym; in dep_stack_insert()
1118 check_top = check_top->prev; in dep_stack_remove()
1120 check_top->next = NULL; in dep_stack_remove()
1126 * the ->prev pointer to locate the bottom of the stack.
1141 for (stack = check_top; stack != NULL; stack = stack->prev) in sym_check_print_recursive()
1142 if (stack->sym == last_sym) in sym_check_print_recursive()
1149 for (; stack; stack = stack->next) { in sym_check_print_recursive()
1150 sym = stack->sym; in sym_check_print_recursive()
1151 next_sym = stack->next ? stack->next->sym : last_sym; in sym_check_print_recursive()
1152 prop = stack->prop; in sym_check_print_recursive()
1154 prop = stack->sym->prop; in sym_check_print_recursive()
1158 for (prop = sym->prop; prop; prop = prop->next) { in sym_check_print_recursive()
1159 menu = prop->menu; in sym_check_print_recursive()
1160 if (prop->menu) in sym_check_print_recursive()
1164 if (stack->sym == last_sym) in sym_check_print_recursive()
1166 prop->file->name, prop->lineno); in sym_check_print_recursive()
1168 if (stack->expr) { in sym_check_print_recursive()
1170 prop->file->name, prop->lineno, in sym_check_print_recursive()
1171 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1172 prop_get_type_name(prop->type), in sym_check_print_recursive()
1173 next_sym->name ? next_sym->name : "<choice>"); in sym_check_print_recursive()
1174 } else if (stack->prop) { in sym_check_print_recursive()
1176 prop->file->name, prop->lineno, in sym_check_print_recursive()
1177 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1178 next_sym->name ? next_sym->name : "<choice>"); in sym_check_print_recursive()
1181 menu->file->name, menu->lineno, in sym_check_print_recursive()
1182 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1183 next_sym->name ? next_sym->name : "<choice>"); in sym_check_print_recursive()
1186 menu->file->name, menu->lineno, in sym_check_print_recursive()
1187 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1188 next_sym->name ? next_sym->name : "<choice>"); in sym_check_print_recursive()
1191 prop->file->name, prop->lineno, in sym_check_print_recursive()
1192 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1193 next_sym->name ? next_sym->name : "<choice>"); in sym_check_print_recursive()
1198 "For a resolution refer to Documentation/kbuild/kconfig-language.txt\n" in sym_check_print_recursive()
1212 switch (e->type) { in sym_check_expr_deps()
1215 sym = sym_check_expr_deps(e->left.expr); in sym_check_expr_deps()
1218 return sym_check_expr_deps(e->right.expr); in sym_check_expr_deps()
1220 return sym_check_expr_deps(e->left.expr); in sym_check_expr_deps()
1227 sym = sym_check_deps(e->left.sym); in sym_check_expr_deps()
1230 return sym_check_deps(e->right.sym); in sym_check_expr_deps()
1232 return sym_check_deps(e->left.sym); in sym_check_expr_deps()
1236 fprintf(stderr, "Oops! How to check %d?\n", e->type); in sym_check_expr_deps()
1249 sym2 = sym_check_expr_deps(sym->rev_dep.expr); in sym_check_sym_deps()
1253 for (prop = sym->prop; prop; prop = prop->next) { in sym_check_sym_deps()
1254 if (prop->type == P_CHOICE || prop->type == P_SELECT) in sym_check_sym_deps()
1257 sym2 = sym_check_expr_deps(prop->visible.expr); in sym_check_sym_deps()
1260 if (prop->type != P_DEFAULT || sym_is_choice(sym)) in sym_check_sym_deps()
1262 stack.expr = prop->expr; in sym_check_sym_deps()
1263 sym2 = sym_check_expr_deps(prop->expr); in sym_check_sym_deps()
1285 expr_list_for_each_sym(prop->expr, e, sym) in sym_check_choice_deps()
1286 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); in sym_check_choice_deps()
1288 choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); in sym_check_choice_deps()
1290 choice->flags &= ~SYMBOL_CHECK; in sym_check_choice_deps()
1294 expr_list_for_each_sym(prop->expr, e, sym) { in sym_check_choice_deps()
1300 expr_list_for_each_sym(prop->expr, e, sym) in sym_check_choice_deps()
1301 sym->flags &= ~SYMBOL_CHECK; in sym_check_choice_deps()
1317 if (sym->flags & SYMBOL_CHECK) { in sym_check_deps()
1321 if (sym->flags & SYMBOL_CHECKED) in sym_check_deps()
1335 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); in sym_check_deps()
1337 sym->flags &= ~SYMBOL_CHECK; in sym_check_deps()
1353 prop->type = type; in prop_alloc()
1354 prop->sym = sym; in prop_alloc()
1355 prop->file = current_file; in prop_alloc()
1356 prop->lineno = zconf_lineno(); in prop_alloc()
1360 for (propp = &sym->prop; *propp; propp = &(*propp)->next) in prop_alloc()
1370 if (prop->expr && (prop->expr->type == E_SYMBOL || in prop_get_symbol()
1371 prop->expr->type == E_LIST)) in prop_get_symbol()
1372 return prop->expr->left.sym; in prop_get_symbol()
1411 sym = current_entry->sym; in prop_add_env()
1412 sym->flags |= SYMBOL_AUTO; in prop_add_env()
1415 if (strcmp(sym2->name, env)) in prop_add_env()
1417 sym2->name); in prop_add_env()
1422 prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST)); in prop_add_env()
1425 sym_env_list->right.sym = sym; in prop_add_env()