|
@@ -79,19 +79,23 @@ void menu_end_menu(void)
|
|
|
current_menu = current_menu->parent;
|
|
|
}
|
|
|
|
|
|
-static struct expr *menu_check_dep(struct expr *e)
|
|
|
+/*
|
|
|
+ * Rewrites 'm' to 'm' && MODULES, so that it evaluates to 'n' when running
|
|
|
+ * without modules
|
|
|
+ */
|
|
|
+static struct expr *rewrite_m(struct expr *e)
|
|
|
{
|
|
|
if (!e)
|
|
|
return e;
|
|
|
|
|
|
switch (e->type) {
|
|
|
case E_NOT:
|
|
|
- e->left.expr = menu_check_dep(e->left.expr);
|
|
|
+ e->left.expr = rewrite_m(e->left.expr);
|
|
|
break;
|
|
|
case E_OR:
|
|
|
case E_AND:
|
|
|
- e->left.expr = menu_check_dep(e->left.expr);
|
|
|
- e->right.expr = menu_check_dep(e->right.expr);
|
|
|
+ e->left.expr = rewrite_m(e->left.expr);
|
|
|
+ e->right.expr = rewrite_m(e->right.expr);
|
|
|
break;
|
|
|
case E_SYMBOL:
|
|
|
/* change 'm' into 'm' && MODULES */
|
|
@@ -106,7 +110,7 @@ static struct expr *menu_check_dep(struct expr *e)
|
|
|
|
|
|
void menu_add_dep(struct expr *dep)
|
|
|
{
|
|
|
- current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
|
|
|
+ current_entry->dep = expr_alloc_and(current_entry->dep, rewrite_m(dep));
|
|
|
}
|
|
|
|
|
|
void menu_set_type(int type)
|
|
@@ -131,7 +135,7 @@ static struct property *menu_add_prop(enum prop_type type, char *prompt, struct
|
|
|
|
|
|
prop->menu = current_entry;
|
|
|
prop->expr = expr;
|
|
|
- prop->visible.expr = menu_check_dep(dep);
|
|
|
+ prop->visible.expr = rewrite_m(dep);
|
|
|
|
|
|
if (prompt) {
|
|
|
if (isspace(*prompt)) {
|