Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 77982
b: refs/heads/master
c: 7a96292
h: refs/heads/master
v: v3
  • Loading branch information
Roman Zippel authored and Sam Ravnborg committed Jan 28, 2008
1 parent d4dc909 commit a35be24
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 21 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: 0ffce8d94487abbd332cd36f98db61b7c8a3db3c
refs/heads/master: 7a962923359768e04137125bd479fd0dfa6117d3
8 changes: 4 additions & 4 deletions trunk/scripts/kconfig/confdata.c
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ int conf_read_simple(const char *name, int def)

int conf_read(const char *name)
{
struct symbol *sym;
struct symbol *sym, *choice_sym;
struct property *prop;
struct expr *e;
int i, flags;
Expand Down Expand Up @@ -353,9 +353,9 @@ int conf_read(const char *name)
*/
prop = sym_get_choice_prop(sym);
flags = sym->flags;
for (e = prop->expr; e; e = e->left.expr)
if (e->right.sym->visible != no)
flags &= e->right.sym->flags;
expr_list_for_each_sym(prop->expr, e, choice_sym)
if (choice_sym->visible != no)
flags &= choice_sym->flags;
sym->flags &= flags | ~SYMBOL_DEF_USER;
}

Expand Down
16 changes: 8 additions & 8 deletions trunk/scripts/kconfig/expr.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ struct expr *expr_copy(struct expr *org)
break;
case E_AND:
case E_OR:
case E_CHOICE:
case E_LIST:
e->left.expr = expr_copy(org->left.expr);
e->right.expr = expr_copy(org->right.expr);
break;
Expand Down Expand Up @@ -217,7 +217,7 @@ int expr_eq(struct expr *e1, struct expr *e2)
expr_free(e2);
trans_count = old_count;
return res;
case E_CHOICE:
case E_LIST:
case E_RANGE:
case E_NONE:
/* panic */;
Expand Down Expand Up @@ -648,7 +648,7 @@ struct expr *expr_transform(struct expr *e)
case E_EQUAL:
case E_UNEQUAL:
case E_SYMBOL:
case E_CHOICE:
case E_LIST:
break;
default:
e->left.expr = expr_transform(e->left.expr);
Expand Down Expand Up @@ -932,7 +932,7 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symb
break;
case E_SYMBOL:
return expr_alloc_comp(type, e->left.sym, sym);
case E_CHOICE:
case E_LIST:
case E_RANGE:
case E_NONE:
/* panic */;
Expand Down Expand Up @@ -1000,9 +1000,9 @@ int expr_compare_type(enum expr_type t1, enum expr_type t2)
if (t2 == E_OR)
return 1;
case E_OR:
if (t2 == E_CHOICE)
if (t2 == E_LIST)
return 1;
case E_CHOICE:
case E_LIST:
if (t2 == 0)
return 1;
default:
Expand Down Expand Up @@ -1053,11 +1053,11 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *
fn(data, NULL, " && ");
expr_print(e->right.expr, fn, data, E_AND);
break;
case E_CHOICE:
case E_LIST:
fn(data, e->right.sym, e->right.sym->name);
if (e->left.expr) {
fn(data, NULL, " ^ ");
expr_print(e->left.expr, fn, data, E_CHOICE);
expr_print(e->left.expr, fn, data, E_LIST);
}
break;
case E_RANGE:
Expand Down
5 changes: 4 additions & 1 deletion trunk/scripts/kconfig/expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ typedef enum tristate {
} tristate;

enum expr_type {
E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE
E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_LIST, E_SYMBOL, E_RANGE
};

union expr_data {
Expand All @@ -48,6 +48,9 @@ struct expr {
#define EXPR_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2))
#define EXPR_NOT(dep) (2-(dep))

#define expr_list_for_each_sym(l, e, s) \
for (e = (l); e && (s = e->right.sym); e = e->left.expr)

struct expr_value {
struct expr *expr;
tristate tri;
Expand Down
2 changes: 1 addition & 1 deletion trunk/scripts/kconfig/menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ void menu_finalize(struct menu *parent)
prop = sym_get_choice_prop(sym);
for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
;
*ep = expr_alloc_one(E_CHOICE, NULL);
*ep = expr_alloc_one(E_LIST, NULL);
(*ep)->right.sym = menu->sym;
}
if (menu->list && (!menu->prompt || !menu->prompt->text)) {
Expand Down
13 changes: 7 additions & 6 deletions trunk/scripts/kconfig/symbol.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,8 +247,7 @@ static struct symbol *sym_calc_choice(struct symbol *sym)

/* just get the first visible value */
prop = sym_get_choice_prop(sym);
for (e = prop->expr; e; e = e->left.expr) {
def_sym = e->right.sym;
expr_list_for_each_sym(prop->expr, e, def_sym) {
sym_calc_visibility(def_sym);
if (def_sym->visible != no)
return def_sym;
Expand Down Expand Up @@ -361,12 +360,14 @@ void sym_calc_value(struct symbol *sym)
}

if (sym_is_choice(sym)) {
struct symbol *choice_sym;
int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);

prop = sym_get_choice_prop(sym);
for (e = prop->expr; e; e = e->left.expr) {
e->right.sym->flags |= flags;
expr_list_for_each_sym(prop->expr, e, choice_sym) {
choice_sym->flags |= flags;
if (flags & SYMBOL_CHANGED)
sym_set_changed(e->right.sym);
sym_set_changed(choice_sym);
}
}
}
Expand Down Expand Up @@ -849,7 +850,7 @@ struct property *prop_alloc(enum prop_type type, struct symbol *sym)
struct symbol *prop_get_symbol(struct property *prop)
{
if (prop->expr && (prop->expr->type == E_SYMBOL ||
prop->expr->type == E_CHOICE))
prop->expr->type == E_LIST))
return prop->expr->left.sym;
return NULL;
}
Expand Down

0 comments on commit a35be24

Please sign in to comment.