Merge/rework config system per the latest from linux-2.6.0-test2.
Fix the config bugs revealed by the updated config system. -Erik
This commit is contained in:
@ -55,6 +55,13 @@ struct expr *expr_alloc_and(struct expr *e1, struct expr *e2)
|
||||
return e2 ? expr_alloc_two(E_AND, e1, e2) : e1;
|
||||
}
|
||||
|
||||
struct expr *expr_alloc_or(struct expr *e1, struct expr *e2)
|
||||
{
|
||||
if (!e1)
|
||||
return e2;
|
||||
return e2 ? expr_alloc_two(E_OR, e1, e2) : e1;
|
||||
}
|
||||
|
||||
struct expr *expr_copy(struct expr *org)
|
||||
{
|
||||
struct expr *e;
|
||||
@ -158,9 +165,22 @@ static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct e
|
||||
|
||||
void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
|
||||
{
|
||||
if (!e1 || !e2 || e1->type != e2->type)
|
||||
if (!e1 || !e2)
|
||||
return;
|
||||
__expr_eliminate_eq(e1->type, ep1, ep2);
|
||||
switch (e1->type) {
|
||||
case E_OR:
|
||||
case E_AND:
|
||||
__expr_eliminate_eq(e1->type, ep1, ep2);
|
||||
default:
|
||||
;
|
||||
}
|
||||
if (e1->type != e2->type) switch (e2->type) {
|
||||
case E_OR:
|
||||
case E_AND:
|
||||
__expr_eliminate_eq(e2->type, ep1, ep2);
|
||||
default:
|
||||
;
|
||||
}
|
||||
e1 = expr_eliminate_yn(e1);
|
||||
e2 = expr_eliminate_yn(e2);
|
||||
}
|
||||
@ -195,6 +215,7 @@ int expr_eq(struct expr *e1, struct expr *e2)
|
||||
trans_count = old_count;
|
||||
return res;
|
||||
case E_CHOICE:
|
||||
case E_RANGE:
|
||||
case E_NONE:
|
||||
/* panic */;
|
||||
}
|
||||
@ -897,6 +918,7 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symb
|
||||
case E_SYMBOL:
|
||||
return expr_alloc_comp(type, e->left.sym, sym);
|
||||
case E_CHOICE:
|
||||
case E_RANGE:
|
||||
case E_NONE:
|
||||
/* panic */;
|
||||
}
|
||||
@ -914,7 +936,7 @@ tristate expr_calc_value(struct expr *e)
|
||||
switch (e->type) {
|
||||
case E_SYMBOL:
|
||||
sym_calc_value(e->left.sym);
|
||||
return S_TRI(e->left.sym->curr);
|
||||
return e->left.sym->curr.tri;
|
||||
case E_AND:
|
||||
val1 = expr_calc_value(e->left.expr);
|
||||
val2 = expr_calc_value(e->right.expr);
|
||||
@ -1017,11 +1039,18 @@ void expr_print(struct expr *e, void (*fn)(void *, const char *), void *data, in
|
||||
expr_print(e->right.expr, fn, data, E_AND);
|
||||
break;
|
||||
case E_CHOICE:
|
||||
if (e->left.expr) {
|
||||
expr_print(e->left.expr, fn, data, E_CHOICE);
|
||||
fn(data, " ^ ");
|
||||
}
|
||||
fn(data, e->right.sym->name);
|
||||
if (e->left.expr) {
|
||||
fn(data, " ^ ");
|
||||
expr_print(e->left.expr, fn, data, E_CHOICE);
|
||||
}
|
||||
break;
|
||||
case E_RANGE:
|
||||
fn(data, "[");
|
||||
fn(data, e->left.sym->name);
|
||||
fn(data, " ");
|
||||
fn(data, e->right.sym->name);
|
||||
fn(data, "]");
|
||||
break;
|
||||
default:
|
||||
{
|
||||
|
Reference in New Issue
Block a user