History

kconfig: explicitly introduce expression list

Rename E_CHOICE to E_LIST to explicitly add support for expression lists. Add a helper macro expr_list_for_each_sym to more easily iterate over the list.

Roman Zippel committed 18 years ago

Commit 7a962921 parent 0ffce8d5 files · +24 −20Browse files

Unified · Split

5 files
  1. scripts/kconfig/confdata.c +4 −4
  2. scripts/kconfig/expr.c +8 −8
  3. scripts/kconfig/expr.h +4 −1
  4. scripts/kconfig/menu.c +1 −1
  5. scripts/kconfig/symbol.c +7 −6
scripts/kconfig/confdata.c+4−4
@@ -312,7 +312,7 @@ load: · 311 unmodified lines
312312
313313 int conf_read(const char *name)
314314 {
315− struct symbol *sym;
315+ struct symbol *sym, *choice_sym;
316316 struct property *prop;
317317 struct expr *e;
318318 int i, flags;
@@ -353,9 +353,9 @@ int conf_read(const char *name) · 34 unmodified lines
353353 */
354354 prop = sym_get_choice_prop(sym);
355355 flags = sym->flags;
356− for (e = prop->expr; e; e = e->left.expr)
357− if (e->right.sym->visible != no)
358− flags &= e->right.sym->flags;
356+ expr_list_for_each_sym(prop->expr, e, choice_sym)
357+ if (choice_sym->visible != no)
358+ flags &= choice_sym->flags;
359359 sym->flags &= flags | ~SYMBOL_DEF_USER;
360360 }
361361
scripts/kconfig/expr.c+8−8
@@ -87,7 +87,7 @@ struct expr *expr_copy(struct expr *org) · 86 unmodified lines
8787 break;
8888 case E_AND:
8989 case E_OR:
90− case E_CHOICE:
90+ case E_LIST:
9191 e->left.expr = expr_copy(org->left.expr);
9292 e->right.expr = expr_copy(org->right.expr);
9393 break;
@@ -217,7 +217,7 @@ int expr_eq(struct expr *e1, struct expr *e2) · 123 unmodified lines
217217 expr_free(e2);
218218 trans_count = old_count;
219219 return res;
220− case E_CHOICE:
220+ case E_LIST:
221221 case E_RANGE:
222222 case E_NONE:
223223 /* panic */;
@@ -648,7 +648,7 @@ struct expr *expr_transform(struct expr *e) · 424 unmodified lines
648648 case E_EQUAL:
649649 case E_UNEQUAL:
650650 case E_SYMBOL:
651− case E_CHOICE:
651+ case E_LIST:
652652 break;
653653 default:
654654 e->left.expr = expr_transform(e->left.expr);
@@ -932,7 +932,7 @@ struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symb · 277 unmodified lines
932932 break;
933933 case E_SYMBOL:
934934 return expr_alloc_comp(type, e->left.sym, sym);
935− case E_CHOICE:
935+ case E_LIST:
936936 case E_RANGE:
937937 case E_NONE:
938938 /* panic */;
@@ -1000,9 +1000,9 @@ int expr_compare_type(enum expr_type t1, enum expr_type t2) · 61 unmodified lines
10001000 if (t2 == E_OR)
10011001 return 1;
10021002 case E_OR:
1003− if (t2 == E_CHOICE)
1003+ if (t2 == E_LIST)
10041004 return 1;
1005− case E_CHOICE:
1005+ case E_LIST:
10061006 if (t2 == 0)
10071007 return 1;
10081008 default:
@@ -1053,11 +1053,11 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char * · 44 unmodified lines
10531053 fn(data, NULL, " && ");
10541054 expr_print(e->right.expr, fn, data, E_AND);
10551055 break;
1056− case E_CHOICE:
1056+ case E_LIST:
10571057 fn(data, e->right.sym, e->right.sym->name);
10581058 if (e->left.expr) {
10591059 fn(data, NULL, " ^ ");
1060− expr_print(e->left.expr, fn, data, E_CHOICE);
1060+ expr_print(e->left.expr, fn, data, E_LIST);
10611061 }
10621062 break;
10631063 case E_RANGE:
scripts/kconfig/expr.h+4−1
@@ -31,7 +31,7 @@ typedef enum tristate { · 30 unmodified lines
3131 } tristate;
3232
3333 enum expr_type {
34− E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_CHOICE, E_SYMBOL, E_RANGE
34+ E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_LIST, E_SYMBOL, E_RANGE
3535 };
3636
3737 union expr_data {
@@ -48,6 +48,9 @@ struct expr { · 10 unmodified lines
4848 #define EXPR_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2))
4949 #define EXPR_NOT(dep) (2-(dep))
5050
51+#define expr_list_for_each_sym(l, e, s) \
52+ for (e = (l); e && (s = e->right.sym); e = e->left.expr)
53+
5154 struct expr_value {
5255 struct expr *expr;
5356 tristate tri;
scripts/kconfig/menu.c+1−1
@@ -331,7 +331,7 @@ void menu_finalize(struct menu *parent) · 330 unmodified lines
331331 prop = sym_get_choice_prop(sym);
332332 for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
333333 ;
334− *ep = expr_alloc_one(E_CHOICE, NULL);
334+ *ep = expr_alloc_one(E_LIST, NULL);
335335 (*ep)->right.sym = menu->sym;
336336 }
337337 if (menu->list && (!menu->prompt || !menu->prompt->text)) {
scripts/kconfig/symbol.c+7−6
@@ -247,8 +247,7 @@ static struct symbol *sym_calc_choice(struct symbol *sym) · 246 unmodified lines
247247
248248 /* just get the first visible value */
249249 prop = sym_get_choice_prop(sym);
250− for (e = prop->expr; e; e = e->left.expr) {
251− def_sym = e->right.sym;
250+ expr_list_for_each_sym(prop->expr, e, def_sym) {
252251 sym_calc_visibility(def_sym);
253252 if (def_sym->visible != no)
254253 return def_sym;
@@ -361,12 +360,14 @@ void sym_calc_value(struct symbol *sym) · 106 unmodified lines
361360 }
362361
363362 if (sym_is_choice(sym)) {
363+ struct symbol *choice_sym;
364364 int flags = sym->flags & (SYMBOL_CHANGED | SYMBOL_WRITE);
365+
365366 prop = sym_get_choice_prop(sym);
366− for (e = prop->expr; e; e = e->left.expr) {
367− e->right.sym->flags |= flags;
367+ expr_list_for_each_sym(prop->expr, e, choice_sym) {
368+ choice_sym->flags |= flags;
368369 if (flags & SYMBOL_CHANGED)
369− sym_set_changed(e->right.sym);
370+ sym_set_changed(choice_sym);
370371 }
371372 }
372373 }
@@ -849,7 +850,7 @@ struct property *prop_alloc(enum prop_type type, struct symbol *sym) · 476 unmodified lines
849850 struct symbol *prop_get_symbol(struct property *prop)
850851 {
851852 if (prop->expr && (prop->expr->type == E_SYMBOL ||
852− prop->expr->type == E_CHOICE))
853+ prop->expr->type == E_LIST))
853854 return prop->expr->left.sym;
854855 return NULL;
855856 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t