author | kergoth <kergoth> | 2003-06-17 17:03:49 (UTC) |
---|---|---|
committer | kergoth <kergoth> | 2003-06-17 17:03:49 (UTC) |
commit | 16e53b2a2e94742f3b55ee73700bb264e36638d4 (patch) (side-by-side diff) | |
tree | 4f2b65a635d25c1ce0cfeea7953623c2bf7d9534 /scripts/kconfig/expr.c | |
parent | 384b7f1a42f9f2f101dc8fe11c3625055d96f672 (diff) | |
download | opie-16e53b2a2e94742f3b55ee73700bb264e36638d4.zip opie-16e53b2a2e94742f3b55ee73700bb264e36638d4.tar.gz opie-16e53b2a2e94742f3b55ee73700bb264e36638d4.tar.bz2 |
Update LinuxKernelConf version to 1.4.
-rw-r--r-- | scripts/kconfig/expr.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c index d1af2a5..3f15ae8 100644 --- a/scripts/kconfig/expr.c +++ b/scripts/kconfig/expr.c @@ -56,4 +56,11 @@ struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) } +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) { @@ -159,7 +166,20 @@ 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); @@ -196,4 +216,5 @@ int expr_eq(struct expr *e1, struct expr *e2) return res; case E_CHOICE: + case E_RANGE: case E_NONE: /* panic */; @@ -898,4 +919,5 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symb return expr_alloc_comp(type, e->left.sym, sym); case E_CHOICE: + case E_RANGE: case E_NONE: /* panic */; @@ -915,5 +937,5 @@ tristate expr_calc_value(struct expr *e) 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); @@ -1018,9 +1040,16 @@ void expr_print(struct expr *e, void (*fn)(void *, const char *), void *data, in break; case E_CHOICE: + fn(data, e->right.sym->name); if (e->left.expr) { - expr_print(e->left.expr, fn, data, E_CHOICE); 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: |