struct symbol symbol_yes = {
.name = "y",
.curr = { "y", yes },
- .flags = SYMBOL_CONST|SYMBOL_VALID,
+ .flags = SYMBOL_YES|SYMBOL_VALID,
}, symbol_mod = {
.name = "m",
.curr = { "m", mod },
- .flags = SYMBOL_CONST|SYMBOL_VALID,
+ .flags = SYMBOL_MOD|SYMBOL_VALID,
}, symbol_no = {
.name = "n",
.curr = { "n", no },
- .flags = SYMBOL_CONST|SYMBOL_VALID,
+ .flags = SYMBOL_NO|SYMBOL_VALID,
}, symbol_empty = {
.name = "",
.curr = { "", no },
};
int sym_change_count;
-struct symbol *sym_defconfig_list;
struct symbol *modules_sym;
tristate modules_val;
struct expr *e;
/* is the user choice visible? */
- def_sym = sym->def[S_DEF_USER].val;
+ def_sym = sym->user.val;
if (def_sym) {
sym_calc_visibility(def_sym);
if (def_sym->visible != no)
} else if (E_OR(sym->visible, sym->rev_dep.tri) != no) {
sym->flags |= SYMBOL_WRITE;
if (sym_has_value(sym))
- newval.tri = sym->def[S_DEF_USER].tri;
+ newval.tri = sym->user.tri;
else if (!sym_is_choice(sym)) {
prop = sym_get_default_prop(sym);
if (prop)
if (sym->visible != no) {
sym->flags |= SYMBOL_WRITE;
if (sym_has_value(sym)) {
- newval.val = sym->def[S_DEF_USER].val;
+ newval.val = sym->user.val;
break;
}
}
sym->curr.val = sym_calc_choice(sym);
sym_validate_range(sym);
- if (memcmp(&oldval, &sym->curr, sizeof(oldval))) {
+ if (memcmp(&oldval, &sym->curr, sizeof(oldval)))
sym_set_changed(sym);
- if (modules_sym == sym) {
- sym_set_all_changed();
- modules_val = modules_sym->curr.tri;
- }
- }
+ if (modules_sym == sym)
+ modules_val = modules_sym->curr.tri;
if (sym_is_choice(sym)) {
int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);
if (oldval != val && !sym_tristate_within_range(sym, val))
return false;
- if (!(sym->flags & SYMBOL_DEF_USER)) {
- sym->flags |= SYMBOL_DEF_USER;
+ if (sym->flags & SYMBOL_NEW) {
+ sym->flags &= ~SYMBOL_NEW;
sym_set_changed(sym);
}
/*
struct property *prop;
struct expr *e;
- cs->def[S_DEF_USER].val = sym;
- cs->flags |= SYMBOL_DEF_USER;
+ cs->user.val = sym;
+ cs->flags &= ~SYMBOL_NEW;
prop = sym_get_choice_prop(cs);
for (e = prop->expr; e; e = e->left.expr) {
if (e->right.sym->visible != no)
- e->right.sym->flags |= SYMBOL_DEF_USER;
+ e->right.sym->flags &= ~SYMBOL_NEW;
}
}
- sym->def[S_DEF_USER].tri = val;
- if (oldval != val)
+ sym->user.tri = val;
+ if (oldval != val) {
sym_clear_all_valid();
+ if (sym == modules_sym)
+ sym_set_all_changed();
+ }
return true;
}
if (!sym_string_within_range(sym, newval))
return false;
- if (!(sym->flags & SYMBOL_DEF_USER)) {
- sym->flags |= SYMBOL_DEF_USER;
+ if (sym->flags & SYMBOL_NEW) {
+ sym->flags &= ~SYMBOL_NEW;
sym_set_changed(sym);
}
- oldval = sym->def[S_DEF_USER].val;
+ oldval = sym->user.val;
size = strlen(newval) + 1;
if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
size += 2;
- sym->def[S_DEF_USER].val = val = malloc(size);
+ sym->user.val = val = malloc(size);
*val++ = '0';
*val++ = 'x';
} else if (!oldval || strcmp(oldval, newval))
- sym->def[S_DEF_USER].val = val = malloc(size);
+ sym->user.val = val = malloc(size);
else
return true;
memset(symbol, 0, sizeof(*symbol));
symbol->name = new_name;
symbol->type = S_UNKNOWN;
+ symbol->flags = SYMBOL_NEW;
if (isconst)
symbol->flags |= SYMBOL_CONST;