|
@@ -146,11 +146,24 @@ struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *e
|
|
|
struct menu *menu = current_entry;
|
|
|
|
|
|
while ((menu = menu->parent) != NULL) {
|
|
|
+ struct expr *dup_expr;
|
|
|
+
|
|
|
if (!menu->visibility)
|
|
|
continue;
|
|
|
+ /*
|
|
|
+ * Do not add a reference to the
|
|
|
+ * menu's visibility expression but
|
|
|
+ * use a copy of it. Otherwise the
|
|
|
+ * expression reduction functions
|
|
|
+ * will modify expressions that have
|
|
|
+ * multiple references which can
|
|
|
+ * cause unwanted side effects.
|
|
|
+ */
|
|
|
+ dup_expr = expr_copy(menu->visibility);
|
|
|
+
|
|
|
prop->visible.expr
|
|
|
= expr_alloc_and(prop->visible.expr,
|
|
|
- menu->visibility);
|
|
|
+ dup_expr);
|
|
|
}
|
|
|
}
|
|
|
|