Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 204855
b: refs/heads/master
c: c252147
h: refs/heads/master
i:
  204853: 8f0faa0
  204851: 35aee83
  204847: 6c65089
v: v3
  • Loading branch information
Sam Ravnborg authored and Michal Marek committed Aug 3, 2010
1 parent fc5af17 commit c8c1b33
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0748cb3e1fbd89c03a98c15e91ad65797981de77
refs/heads/master: c252147de68cf58ba601278481e473dab432cee4
1 change: 1 addition & 0 deletions trunk/scripts/kconfig/lkc.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ void sym_init(void);
void sym_clear_all_valid(void);
void sym_set_all_changed(void);
void sym_set_changed(struct symbol *sym);
struct symbol *sym_choice_default(struct symbol *sym);
struct symbol *sym_check_deps(struct symbol *sym);
struct property *prop_alloc(enum prop_type type, struct symbol *sym);
struct symbol *prop_get_symbol(struct property *prop);
Expand Down
46 changes: 33 additions & 13 deletions trunk/scripts/kconfig/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,22 +226,18 @@ static void sym_calc_visibility(struct symbol *sym)
}
}

static struct symbol *sym_calc_choice(struct symbol *sym)
/*
* Find the default symbol for a choice.
* First try the default values for the choice symbol
* Next locate the first visible choice value
* Return NULL if none was found
*/
struct symbol *sym_choice_default(struct symbol *sym)
{
struct symbol *def_sym;
struct property *prop;
struct expr *e;

/* first calculate all choice values' visibilities */
prop = sym_get_choice_prop(sym);
expr_list_for_each_sym(prop->expr, e, def_sym)
sym_calc_visibility(def_sym);

/* is the user choice visible? */
def_sym = sym->def[S_DEF_USER].val;
if (def_sym && def_sym->visible != no)
return def_sym;

/* any of the defaults visible? */
for_all_defaults(sym, prop) {
prop->visible.tri = expr_calc_value(prop->visible.expr);
Expand All @@ -258,11 +254,35 @@ static struct symbol *sym_calc_choice(struct symbol *sym)
if (def_sym->visible != no)
return def_sym;

/* no choice? reset tristate value */
sym->curr.tri = no;
/* failed to locate any defaults */
return NULL;
}

static struct symbol *sym_calc_choice(struct symbol *sym)
{
struct symbol *def_sym;
struct property *prop;
struct expr *e;

/* first calculate all choice values' visibilities */
prop = sym_get_choice_prop(sym);
expr_list_for_each_sym(prop->expr, e, def_sym)
sym_calc_visibility(def_sym);

/* is the user choice visible? */
def_sym = sym->def[S_DEF_USER].val;
if (def_sym && def_sym->visible != no)
return def_sym;

def_sym = sym_choice_default(sym);

if (def_sym == NULL)
/* no choice? reset tristate value */
sym->curr.tri = no;

return def_sym;
}

void sym_calc_value(struct symbol *sym)
{
struct symbol_value newval, oldval;
Expand Down

0 comments on commit c8c1b33

Please sign in to comment.