summaryrefslogtreecommitdiff
path: root/scripts/kconfig/symbol.c
Side-by-side diff
Diffstat (limited to 'scripts/kconfig/symbol.c') (more/less context) (ignore whitespace changes)
-rw-r--r--scripts/kconfig/symbol.c35
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,6 +557,4 @@ 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;
- }
}
@@ -566,3 +578,2 @@ struct symbol *sym_lookup(const char *name, int isconst)
- //printf("n:%p\n", symbol);
return symbol;