-rw-r--r-- | scripts/kconfig/symbol.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c index 59c88d2..845d8a3 100644 --- a/scripts/kconfig/symbol.c +++ b/scripts/kconfig/symbol.c @@ -151,3 +151,3 @@ void sym_calc_visibility(struct symbol *sym) sym->visible = visible; - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -206,3 +206,4 @@ void sym_calc_value(struct symbol *sym) } - } + } else + S_TRI(newval) = S_TRI(sym->def); } else @@ -278,3 +279,3 @@ out: if (memcmp(&oldval, &newval, sizeof(newval))) - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); sym->curr = newval; @@ -284,4 +285,7 @@ out: prop = sym_get_choice_prop(sym); - for (e = prop->dep; e; e = e->left.expr) + for (e = prop->dep; e; e = e->left.expr) { e->right.sym->flags |= flags; + if (flags & SYMBOL_CHANGED) + sym_set_changed(e->right.sym); + } } @@ -299,2 +303,13 @@ void sym_clear_all_valid(void) +void sym_set_changed(struct symbol *sym) +{ + struct property *prop; + + sym->flags |= SYMBOL_CHANGED; + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu) + prop->menu->flags |= MENU_CHANGED; + } +} + void sym_set_all_changed(void) @@ -305,3 +320,3 @@ void sym_set_all_changed(void) for_all_symbols(i, sym) - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -342,3 +357,3 @@ bool sym_set_tristate_value(struct symbol *sym, tristate val) sym->flags &= ~SYMBOL_NEW; - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -462,3 +477,3 @@ bool sym_set_string_value(struct symbol *sym, const char *newval) sym->flags &= ~SYMBOL_NEW; - sym->flags |= SYMBOL_CHANGED; + sym_set_changed(sym); } @@ -527,3 +542,2 @@ struct symbol *sym_lookup(const char *name, int isconst) - //printf("lookup: %s -> ", name); if (name) { @@ -543,4 +557,3 @@ struct symbol *sym_lookup(const char *name, int isconst) if ((isconst && symbol->flags & SYMBOL_CONST) || - (!isconst && !(symbol->flags & SYMBOL_CONST))) { - //printf("h:%p\n", symbol); + (!isconst && !(symbol->flags & SYMBOL_CONST))) return symbol; @@ -548,3 +561,2 @@ struct symbol *sym_lookup(const char *name, int isconst) } - } new_name = strdup(name); @@ -566,3 +578,2 @@ struct symbol *sym_lookup(const char *name, int isconst) - //printf("n:%p\n", symbol); return symbol; |