* Find the default value associated to a symbol. * For tristate symbol handle the modules=n case * in which case "m" becomes "y". * If the symbol does not have any default then fallback * to the fixed default values. */
| 703 | * to the fixed default values. |
| 704 | */ |
| 705 | const char *sym_get_string_default(struct symbol *sym) |
| 706 | { |
| 707 | struct property *prop; |
| 708 | struct symbol *ds; |
| 709 | const char *str = ""; |
| 710 | tristate val; |
| 711 | |
| 712 | sym_calc_visibility(sym); |
| 713 | sym_calc_value(modules_sym); |
| 714 | val = symbol_no.curr.tri; |
| 715 | |
| 716 | /* If symbol has a default value look it up */ |
| 717 | prop = sym_get_default_prop(sym); |
| 718 | if (prop != NULL) { |
| 719 | switch (sym->type) { |
| 720 | case S_BOOLEAN: |
| 721 | case S_TRISTATE: |
| 722 | /* The visibility may limit the value from yes => mod */ |
| 723 | val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri); |
| 724 | break; |
| 725 | default: |
| 726 | /* |
| 727 | * The following fails to handle the situation |
| 728 | * where a default value is further limited by |
| 729 | * the valid range. |
| 730 | */ |
| 731 | ds = prop_get_symbol(prop); |
| 732 | if (ds != NULL) { |
| 733 | sym_calc_value(ds); |
| 734 | str = (const char *)ds->curr.val; |
| 735 | } |
| 736 | } |
| 737 | } |
| 738 | |
| 739 | /* Handle select statements */ |
| 740 | val = EXPR_OR(val, sym->rev_dep.tri); |
| 741 | |
| 742 | /* transpose mod to yes if modules are not enabled */ |
| 743 | if (val == mod) |
| 744 | if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no) |
| 745 | val = yes; |
| 746 | |
| 747 | /* transpose mod to yes if type is bool */ |
| 748 | if (sym->type == S_BOOLEAN && val == mod) |
| 749 | val = yes; |
| 750 | |
| 751 | /* adjust the default value if this symbol is implied by another */ |
| 752 | if (val < sym->implied.tri) |
| 753 | val = sym->implied.tri; |
| 754 | |
| 755 | switch (sym->type) { |
| 756 | case S_BOOLEAN: |
| 757 | case S_TRISTATE: |
| 758 | switch (val) { |
| 759 | case no: return "n"; |
| 760 | case mod: return "m"; |
| 761 | case yes: return "y"; |
| 762 | } |
no test coverage detected