Lines Matching refs:sym
45 enum symbol_type sym_get_type(const struct symbol *sym) in sym_get_type() argument
47 enum symbol_type type = sym->type; in sym_get_type()
80 struct menu *sym_get_prompt_menu(const struct symbol *sym) in sym_get_prompt_menu() argument
84 list_for_each_entry(m, &sym->menus, link) in sym_get_prompt_menu()
98 struct menu *sym_get_choice_menu(const struct symbol *sym) in sym_get_choice_menu() argument
106 menu = sym_get_prompt_menu(sym); in sym_get_choice_menu()
112 } while (menu && !menu->sym); in sym_get_choice_menu()
114 if (menu && menu->sym && sym_is_choice(menu->sym)) in sym_get_choice_menu()
120 static struct property *sym_get_default_prop(struct symbol *sym) in sym_get_default_prop() argument
124 for_all_defaults(sym, prop) { in sym_get_default_prop()
132 struct property *sym_get_range_prop(struct symbol *sym) in sym_get_range_prop() argument
136 for_all_properties(sym, prop, P_RANGE) { in sym_get_range_prop()
144 static long long sym_get_range_val(struct symbol *sym, int base) in sym_get_range_val() argument
146 sym_calc_value(sym); in sym_get_range_val()
147 switch (sym->type) { in sym_get_range_val()
157 return strtoll(sym->curr.val, NULL, base); in sym_get_range_val()
160 static void sym_validate_range(struct symbol *sym) in sym_validate_range() argument
167 switch (sym->type) { in sym_validate_range()
177 prop = sym_get_range_prop(sym); in sym_validate_range()
180 val = strtoll(sym->curr.val, NULL, base); in sym_validate_range()
181 range_sym = prop->expr->left.sym; in sym_validate_range()
184 range_sym = prop->expr->right.sym; in sym_validate_range()
189 sym->curr.val = range_sym->curr.val; in sym_validate_range()
192 static void sym_set_changed(struct symbol *sym) in sym_set_changed() argument
196 list_for_each_entry(menu, &sym->menus, link) in sym_set_changed()
199 menu = sym_get_choice_menu(sym); in sym_set_changed()
206 struct symbol *sym; in sym_set_all_changed() local
208 for_all_symbols(sym) in sym_set_all_changed()
209 sym_set_changed(sym); in sym_set_all_changed()
212 static void sym_calc_visibility(struct symbol *sym) in sym_calc_visibility() argument
217 if (sym->flags & SYMBOL_TRANS) { in sym_calc_visibility()
218 sym->visible = yes; in sym_calc_visibility()
224 for_all_prompts(sym, prop) { in sym_calc_visibility()
228 if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) in sym_calc_visibility()
230 if (sym->visible != tri) { in sym_calc_visibility()
231 sym->visible = tri; in sym_calc_visibility()
232 sym_set_changed(sym); in sym_calc_visibility()
234 if (sym_is_choice_value(sym)) in sym_calc_visibility()
238 if (sym->dir_dep.expr) in sym_calc_visibility()
239 tri = expr_calc_value(sym->dir_dep.expr); in sym_calc_visibility()
240 if (tri == mod && sym_get_type(sym) == S_BOOLEAN) in sym_calc_visibility()
242 if (sym->dir_dep.tri != tri) { in sym_calc_visibility()
243 sym->dir_dep.tri = tri; in sym_calc_visibility()
244 sym_set_changed(sym); in sym_calc_visibility()
247 if (sym->rev_dep.expr) in sym_calc_visibility()
248 tri = expr_calc_value(sym->rev_dep.expr); in sym_calc_visibility()
249 if (tri == mod && sym_get_type(sym) == S_BOOLEAN) in sym_calc_visibility()
251 if (sym->rev_dep.tri != tri) { in sym_calc_visibility()
252 sym->rev_dep.tri = tri; in sym_calc_visibility()
253 sym_set_changed(sym); in sym_calc_visibility()
256 if (sym->implied.expr) in sym_calc_visibility()
257 tri = expr_calc_value(sym->implied.expr); in sym_calc_visibility()
258 if (tri == mod && sym_get_type(sym) == S_BOOLEAN) in sym_calc_visibility()
260 if (sym->implied.tri != tri) { in sym_calc_visibility()
261 sym->implied.tri = tri; in sym_calc_visibility()
262 sym_set_changed(sym); in sym_calc_visibility()
279 for_all_defaults(choice->sym, prop) { in sym_choice_default()
290 if (menu->sym && menu->sym->visible != no) in sym_choice_default()
291 return menu->sym; in sym_choice_default()
307 struct symbol *sym; in sym_calc_choice() local
311 list_for_each_entry(sym, &choice->choice_members, choice_link) { in sym_calc_choice()
312 sym_calc_visibility(sym); in sym_calc_choice()
313 if (sym->visible == no) in sym_calc_choice()
317 if (sym_has_value(sym) && sym->def[S_DEF_USER].tri == yes) { in sym_calc_choice()
318 res = sym; in sym_calc_choice()
336 sym = menu->sym; in sym_calc_choice()
338 if (!sym || sym->visible == no || sym_has_value(sym)) in sym_calc_choice()
341 res = sym; in sym_calc_choice()
351 list_for_each_entry_reverse(sym, &choice->choice_members, in sym_calc_choice()
353 if (sym->visible == no) in sym_calc_choice()
356 res = sym; in sym_calc_choice()
364 sym = menu->sym; in sym_calc_choice()
366 if (!sym || sym->visible == no) in sym_calc_choice()
369 val = sym == res ? yes : no; in sym_calc_choice()
371 if (sym->curr.tri != val) in sym_calc_choice()
372 sym_set_changed(sym); in sym_calc_choice()
374 sym->curr.tri = val; in sym_calc_choice()
375 sym->flags |= SYMBOL_VALID | SYMBOL_WRITE; in sym_calc_choice()
381 static void sym_warn_unmet_dep(const struct symbol *sym) in sym_warn_unmet_dep() argument
387 sym->name); in sym_warn_unmet_dep()
390 sym->dir_dep.tri == mod ? 'm' : 'n'); in sym_warn_unmet_dep()
391 expr_gstr_print(sym->dir_dep.expr, &gs); in sym_warn_unmet_dep()
394 expr_gstr_print_revdep(sym->rev_dep.expr, &gs, yes, in sym_warn_unmet_dep()
396 expr_gstr_print_revdep(sym->rev_dep.expr, &gs, mod, in sym_warn_unmet_dep()
411 void sym_calc_value(struct symbol *sym) in sym_calc_value() argument
417 if (!sym) in sym_calc_value()
420 if (sym->flags & SYMBOL_VALID) in sym_calc_value()
423 sym->flags |= SYMBOL_VALID; in sym_calc_value()
425 oldval = sym->curr; in sym_calc_value()
429 switch (sym->type) { in sym_calc_value()
444 sym->curr.val = sym->name; in sym_calc_value()
445 sym->curr.tri = no; in sym_calc_value()
448 sym->flags &= ~SYMBOL_WRITE; in sym_calc_value()
450 sym_calc_visibility(sym); in sym_calc_value()
452 if (sym->visible != no) in sym_calc_value()
453 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
456 sym->curr = newval; in sym_calc_value()
458 switch (sym_get_type(sym)) { in sym_calc_value()
461 choice_menu = sym_get_choice_menu(sym); in sym_calc_value()
465 newval.tri = sym->curr.tri; in sym_calc_value()
467 if (sym->visible != no) { in sym_calc_value()
471 if (sym_has_value(sym)) { in sym_calc_value()
472 newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri, in sym_calc_value()
473 sym->visible); in sym_calc_value()
477 if (sym->rev_dep.tri != no) in sym_calc_value()
478 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
479 if (!sym_is_choice(sym)) { in sym_calc_value()
480 prop = sym_get_default_prop(sym); in sym_calc_value()
485 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
487 if (sym->implied.tri != no) { in sym_calc_value()
488 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
489 newval.tri = EXPR_OR(newval.tri, sym->implied.tri); in sym_calc_value()
491 sym->dir_dep.tri); in sym_calc_value()
495 if (sym->dir_dep.tri < sym->rev_dep.tri) in sym_calc_value()
496 sym_warn_unmet_dep(sym); in sym_calc_value()
497 newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri); in sym_calc_value()
499 if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) in sym_calc_value()
505 if (sym->visible != no && sym_has_value(sym)) { in sym_calc_value()
506 newval.val = sym->def[S_DEF_USER].val; in sym_calc_value()
509 prop = sym_get_default_prop(sym); in sym_calc_value()
513 sym->flags |= SYMBOL_WRITE; in sym_calc_value()
528 if (prop && !sym_has_value(sym)) { in sym_calc_value()
531 sym->def[S_DEF_USER] = newval; in sym_calc_value()
532 sym->flags |= SYMBOL_DEF_USER; in sym_calc_value()
536 sym->curr = newval; in sym_calc_value()
537 sym_validate_range(sym); in sym_calc_value()
539 if (memcmp(&oldval, &sym->curr, sizeof(oldval))) { in sym_calc_value()
540 sym_set_changed(sym); in sym_calc_value()
541 if (modules_sym == sym) { in sym_calc_value()
547 if (sym_is_choice(sym) || sym->flags & SYMBOL_TRANS) in sym_calc_value()
548 sym->flags &= ~SYMBOL_WRITE; in sym_calc_value()
553 struct symbol *sym; in sym_clear_all_valid() local
555 for_all_symbols(sym) in sym_clear_all_valid()
556 sym->flags &= ~SYMBOL_VALID; in sym_clear_all_valid()
562 bool sym_tristate_within_range(const struct symbol *sym, tristate val) in sym_tristate_within_range() argument
564 int type = sym_get_type(sym); in sym_tristate_within_range()
566 if (sym->visible == no) in sym_tristate_within_range()
574 if (sym->visible <= sym->rev_dep.tri) in sym_tristate_within_range()
576 return val >= sym->rev_dep.tri && val <= sym->visible; in sym_tristate_within_range()
579 bool sym_set_tristate_value(struct symbol *sym, tristate val) in sym_set_tristate_value() argument
581 tristate oldval = sym_get_tristate_value(sym); in sym_set_tristate_value()
583 if (!sym_tristate_within_range(sym, val)) in sym_set_tristate_value()
586 if (!(sym->flags & SYMBOL_DEF_USER) || sym->def[S_DEF_USER].tri != val) { in sym_set_tristate_value()
587 sym->def[S_DEF_USER].tri = val; in sym_set_tristate_value()
588 sym->flags |= SYMBOL_DEF_USER; in sym_set_tristate_value()
589 sym_set_changed(sym); in sym_set_tristate_value()
604 void choice_set_value(struct menu *choice, struct symbol *sym) in choice_set_value() argument
612 if (!menu->sym) in choice_set_value()
615 if (menu->sym->visible == no) in choice_set_value()
618 val = menu->sym == sym ? yes : no; in choice_set_value()
620 if (menu->sym->curr.tri != val) in choice_set_value()
623 menu->sym->def[S_DEF_USER].tri = val; in choice_set_value()
624 menu->sym->flags |= SYMBOL_DEF_USER; in choice_set_value()
634 list_move(&menu->sym->choice_link, &choice->choice_members); in choice_set_value()
641 tristate sym_toggle_tristate_value(struct symbol *sym) in sym_toggle_tristate_value() argument
646 choice = sym_get_choice_menu(sym); in sym_toggle_tristate_value()
648 choice_set_value(choice, sym); in sym_toggle_tristate_value()
652 oldval = newval = sym_get_tristate_value(sym); in sym_toggle_tristate_value()
665 if (sym_set_tristate_value(sym, newval)) in sym_toggle_tristate_value()
671 bool sym_string_valid(struct symbol *sym, const char *str) in sym_string_valid() argument
675 switch (sym->type) { in sym_string_valid()
714 bool sym_string_within_range(struct symbol *sym, const char *str) in sym_string_within_range() argument
719 switch (sym->type) { in sym_string_within_range()
721 return sym_string_valid(sym, str); in sym_string_within_range()
723 if (!sym_string_valid(sym, str)) in sym_string_within_range()
725 prop = sym_get_range_prop(sym); in sym_string_within_range()
729 return val >= sym_get_range_val(prop->expr->left.sym, 10) && in sym_string_within_range()
730 val <= sym_get_range_val(prop->expr->right.sym, 10); in sym_string_within_range()
732 if (!sym_string_valid(sym, str)) in sym_string_within_range()
734 prop = sym_get_range_prop(sym); in sym_string_within_range()
738 return val >= sym_get_range_val(prop->expr->left.sym, 16) && in sym_string_within_range()
739 val <= sym_get_range_val(prop->expr->right.sym, 16); in sym_string_within_range()
744 return sym_tristate_within_range(sym, yes); in sym_string_within_range()
746 return sym_tristate_within_range(sym, mod); in sym_string_within_range()
748 return sym_tristate_within_range(sym, no); in sym_string_within_range()
756 bool sym_set_string_value(struct symbol *sym, const char *newval) in sym_set_string_value() argument
762 switch (sym->type) { in sym_set_string_value()
767 return sym_set_tristate_value(sym, yes); in sym_set_string_value()
769 return sym_set_tristate_value(sym, mod); in sym_set_string_value()
771 return sym_set_tristate_value(sym, no); in sym_set_string_value()
778 if (!sym_string_within_range(sym, newval)) in sym_set_string_value()
781 if (!(sym->flags & SYMBOL_DEF_USER)) { in sym_set_string_value()
782 sym->flags |= SYMBOL_DEF_USER; in sym_set_string_value()
783 sym_set_changed(sym); in sym_set_string_value()
786 oldval = sym->def[S_DEF_USER].val; in sym_set_string_value()
788 if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) { in sym_set_string_value()
790 sym->def[S_DEF_USER].val = val = xmalloc(size); in sym_set_string_value()
794 sym->def[S_DEF_USER].val = val = xmalloc(size); in sym_set_string_value()
812 const char *sym_get_string_default(struct symbol *sym) in sym_get_string_default() argument
819 sym_calc_visibility(sym); in sym_get_string_default()
824 prop = sym_get_default_prop(sym); in sym_get_string_default()
826 switch (sym->type) { in sym_get_string_default()
847 val = EXPR_OR(val, sym->rev_dep.tri); in sym_get_string_default()
851 if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no) in sym_get_string_default()
855 if (sym->type == S_BOOLEAN && val == mod) in sym_get_string_default()
859 if (val < sym->implied.tri) in sym_get_string_default()
860 val = sym->implied.tri; in sym_get_string_default()
862 switch (sym->type) { in sym_get_string_default()
884 const char *sym_get_string_value(struct symbol *sym) in sym_get_string_value() argument
888 switch (sym->type) { in sym_get_string_value()
891 val = sym_get_tristate_value(sym); in sym_get_string_value()
904 return sym->curr.val; in sym_get_string_value()
907 bool sym_is_changeable(const struct symbol *sym) in sym_is_changeable() argument
909 return !sym_is_choice(sym) && sym->visible > sym->rev_dep.tri; in sym_is_changeable()
912 bool sym_is_choice_value(const struct symbol *sym) in sym_is_choice_value() argument
914 return !list_empty(&sym->choice_link); in sym_is_choice_value()
989 struct symbol *sym; member
1012 exact1 = (s1->eo - s1->so) == strlen(s1->sym->name); in sym_rel_comp()
1013 exact2 = (s2->eo - s2->so) == strlen(s2->sym->name); in sym_rel_comp()
1020 return strcmp(s1->sym->name, s2->sym->name); in sym_rel_comp()
1025 struct symbol *sym, **sym_arr = NULL; in sym_re_search() local
1038 for_all_symbols(sym) { in sym_re_search()
1039 if (sym->flags & SYMBOL_CONST || !sym->name) in sym_re_search()
1041 if (regexec(&re, sym->name, 1, match, 0)) in sym_re_search()
1051 sym_calc_value(sym); in sym_re_search()
1057 sym_match_arr[cnt++].sym = sym; in sym_re_search()
1065 sym_arr[i] = sym_match_arr[i].sym; in sym_re_search()
1084 struct symbol *sym; member
1089 static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym) in dep_stack_insert() argument
1095 stack->sym = sym; in dep_stack_insert()
1114 struct symbol *sym, *next_sym; in sym_check_print_recursive() local
1122 last_sym = choice->sym; in sym_check_print_recursive()
1126 if (stack->sym == last_sym) in sym_check_print_recursive()
1134 sym = stack->sym; in sym_check_print_recursive()
1135 next_sym = stack->next ? stack->next->sym : last_sym; in sym_check_print_recursive()
1138 if (stack->sym == last_sym) in sym_check_print_recursive()
1145 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1147 } else if (stack->expr == &sym->dir_dep.expr) { in sym_check_print_recursive()
1149 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1151 } else if (stack->expr == &sym->rev_dep.expr) { in sym_check_print_recursive()
1153 sym->name, next_sym->name); in sym_check_print_recursive()
1154 } else if (stack->expr == &sym->implied.expr) { in sym_check_print_recursive()
1156 sym->name, next_sym->name); in sym_check_print_recursive()
1159 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1164 sym->name ? sym->name : "<choice>", in sym_check_print_recursive()
1181 struct symbol *sym; in sym_check_expr_deps() local
1188 sym = sym_check_expr_deps(e->left.expr); in sym_check_expr_deps()
1189 if (sym) in sym_check_expr_deps()
1190 return sym; in sym_check_expr_deps()
1200 sym = sym_check_deps(e->left.sym); in sym_check_expr_deps()
1201 if (sym) in sym_check_expr_deps()
1202 return sym; in sym_check_expr_deps()
1203 return sym_check_deps(e->right.sym); in sym_check_expr_deps()
1205 return sym_check_deps(e->left.sym); in sym_check_expr_deps()
1214 static struct symbol *sym_check_sym_deps(struct symbol *sym) in sym_check_sym_deps() argument
1220 dep_stack_insert(&stack, sym); in sym_check_sym_deps()
1222 stack.expr = &sym->dir_dep.expr; in sym_check_sym_deps()
1223 sym2 = sym_check_expr_deps(sym->dir_dep.expr); in sym_check_sym_deps()
1227 stack.expr = &sym->rev_dep.expr; in sym_check_sym_deps()
1228 sym2 = sym_check_expr_deps(sym->rev_dep.expr); in sym_check_sym_deps()
1232 stack.expr = &sym->implied.expr; in sym_check_sym_deps()
1233 sym2 = sym_check_expr_deps(sym->implied.expr); in sym_check_sym_deps()
1239 for (prop = sym->prop; prop; prop = prop->next) { in sym_check_sym_deps()
1246 if (prop->type != P_DEFAULT || sym_is_choice(sym)) in sym_check_sym_deps()
1272 if (menu->sym) in sym_check_choice_deps()
1273 menu->sym->flags |= SYMBOL_CHECK | SYMBOL_CHECKED; in sym_check_choice_deps()
1283 if (!menu->sym) in sym_check_choice_deps()
1285 sym2 = sym_check_sym_deps(menu->sym); in sym_check_choice_deps()
1291 if (menu->sym) in sym_check_choice_deps()
1292 menu->sym->flags &= ~SYMBOL_CHECK; in sym_check_choice_deps()
1307 struct symbol *sym_check_deps(struct symbol *sym) in sym_check_deps() argument
1312 if (sym->flags & SYMBOL_CHECK) { in sym_check_deps()
1313 sym_check_print_recursive(sym); in sym_check_deps()
1314 return sym; in sym_check_deps()
1316 if (sym->flags & SYMBOL_CHECKED) in sym_check_deps()
1319 choice = sym_get_choice_menu(sym); in sym_check_deps()
1324 dep_stack_insert(&stack, sym); in sym_check_deps()
1325 sym2 = sym_check_deps(choice->sym); in sym_check_deps()
1327 } else if (sym_is_choice(sym)) { in sym_check_deps()
1328 sym2 = sym_check_choice_deps(sym); in sym_check_deps()
1330 sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); in sym_check_deps()
1331 sym2 = sym_check_sym_deps(sym); in sym_check_deps()
1332 sym->flags &= ~SYMBOL_CHECK; in sym_check_deps()
1341 return prop->expr->left.sym; in prop_get_symbol()